В этой статье я расскажу, как начал разрабатывать персонального ИИ-ассистента задолго до бума OpenClaw, с какими фундаментальными проблемами столкнулся и почему в итоге решил написать свой фреймворк. Вы узнаете, какие принципы работы ИИ-агента, как мне кажется, наиболее важны в современных агентских системах, как он обеспечивает безопасность и почему Python все-таки лучший выбор для подобных проектов. Если вы тоже пробовали подружиться с LLM-агентами, но сталкивались с перерасходом токенов, утечкой данных или проблемами их запуска, интеграции и модификации — возможно, этот проект окажется полезным.
Как все начиналось
С момента появления GPT-3 я стараюсь следить за развитием LLM. Когда в ИИ-моделях появилась поддержка function calling — примерно два года назад — я загорелся идеей создать виртуального ассистента. Он должен был стать личным секретарём: напоминать о важных событиях, помогать решать задачи на работе и дома, оповещать о таких вещах, как просроченная страховка и другие бытовые дела.
Function calling — это концепция, которая позволяет LLM использовать внешние инструменты.
Идея казалась простой: есть LLM, есть tools — соединяем и получаем ассистента. Но 1,5 года назад я потерпел фиаско: локальные LLM были настолько слабы, что даже с поддержкой tools часто не могли корректно их вызывать. А полноценных облачных решений в российском сегменте тогда ещё почти не было.
Первые попытки и разочарования
Недавно рынок взорвался выходом OpenClaw, вызвав настоящий дефицит MacMini. Я снова решил вернуться к идее персонального ИИ-ассистента и запустить его на базе OpenClaw. Но уже на старте столкнулся с рядом проблем:
- Огромные требования к количеству токенов — каждый запрос сжигал десятки тысяч токенов из-за гигантской базы навыков. Модель терялась в выборе и начинала перебирать инструменты, пока не находила нужный.
- Полный контроль над системой — по умолчанию действует принцип «разрешено всё, что не запрещено». Это создаёт риски: легко что-то забыть запретить.
- Куча непроверенного функционала — в GitHub лежат репозитории с тысячами навыков для OpenClaw, почти все они сгенерированы ИИ. Никто толком не знает, что они делают и работают ли вообще.
- Способность агента модифицировать себя и свои навыки — звучит как эволюция, но нет гарантии, что она пойдёт вам на пользу. Плюс — это сотни миллионов лишних токенов.
- Утечка авторизационных данных в модель — не просто баг, а критическая дыра в безопасности. Уязвимости OpenClaw подробно разбирали в Лаборатории Касперского.
С одной стороны, «развязанные руки» у агента — именно то, что сделало OpenClaw популярным и открыло новый этап в развитии ИИ-агентов. С другой — такой агент становится опасным инструментом, причём не для окружающих, а для самого пользователя.
Повозившись с OpenClaw, я начал искать альтернативы: Nanobot, NanoClaw, Moltis, SafeClaw, ZeroClaw. Попробовал все, но ближе всего к моему идеалу оказались Moltis и ZeroClaw. Расскажу только о них — остальные заслуживают отдельной статьи.
ZeroClaw — сильный проект. Написан на Rust, работает только с tools (без системы навыков), что экономит токены, делает диалоги чище и повышает точность вызовов. Но есть проблема: tools нужно писать на Rust, а добавить их в работающий контейнер крайне сложно — приходится пересобирать образ с нуля. Поэтому я перешёл к Moltis.
Последняя капля
В Moltis я столкнулся с финальной проблемой, которая и подтолкнула меня к созданию собственного решения — система tools и skills работает плохо.
Например: у агента есть навык CalDAV для работы с календарём и tool для запуска команд в терминале. Вместо прямого вызова CalDAV, агент сначала читает файл навыка, пытается его запустить, получает ошибку доступа (нет данных), начинает искать логины и пароли в памяти — и, естественно, отправляет их в модель. Или спрашивает у пользователя. Потом снова запускает — и может снова ошибиться, например, из-за некорректных аргументов. Вместо исправления он может начать редактировать сам навык. И так — цикл за циклом.
Это не только огромный перерасход токенов и забитый контекст, но и полная небезопасность, мусор в чате и куча ошибок в логах — что вызывает раздражение у любого разработчика.
Почему я сделал MicroClaw и что это такое
Я решил написать свой фреймворк, который решал бы эти проблемы. Основные принципы:
Безопасность — модель не должна иметь доступ к данным авторизации и к системе.
Эффективность — минимум лишних вызовов модели.
Простота — код должен быть понятным и легко расширяемым.
Python — популярный, доступный язык, мой основной стек.
Архитектура MicroClaw
MicroClaw построен как каркас с чётким разделением ответственности. В основе — агент, который общается с LLM и вызывает инструменты. Инструменты сгруппированы в тулкиты — логические наборы связанных функций.
Channels — интерфейсы общения
Channels — это то, через что я общаюсь с агентом. Сейчас доступны:
- CLI — для локального общения в терминале,
- Telegram — для общения через бота (поддерживает polling и webhook).
Интерфейс каналов унифицирован, поэтому добавить Slack или Discord займёт пару часов.
Agent Core — мозг агента
Agent Core связывает LLM с инструментами. Использует LangChain для создания и управления агентом. Важно: агент не имеет прямого доступа к системе — может вызывать только те инструменты, которые ему явно разрешены.
Toolkits — инструменты
Ключевая особенность MicroClaw. Вместо набора разрозненных инструментов — логические группы (тулкиты), например:
- CalDAV — работа с календарём: создание, чтение, поиск событий,
- CardDAV — управление контактами,
- Email — отправка и чтение почты (IMAP/SMTP),
- WebDAV — работа с файлами на серверах.
Каждый тулкит — отдельный класс с методами, помеченными декоратором @tool. Они автоматически становятся доступными агенту. Данные для авторизации хранятся в настройках тулкита и никогда не передаются модели.
Session Storage — хранилище диалогов
Отвечает за хранение истории. Доступны два варианта:
- Memory — в оперативной памяти (быстро, но не персистентно),
- Filesystem — в JSON-файлах (медленнее, но персистентно).
Безопасность
MicroClaw работает по принципу «запрещено всё, что не разрешено». Модель может использовать только те инструменты, которые вы ей явно дали. Нет инструмента для выполнения команд в терминале — агент ничего не выполнит, даже если захочет.
Авторизационные данные изолированы. Логины и пароли хранятся в настройках тулкитов и не попадают в модель. Агент видит только результат выполнения инструмента, но не знает, как он был инициализирован. Даже если модель попытается «вспомнить» доступы — у неё не будет такой возможности.
Ещё один плюс — явное подключение тулкитов. Если вы не подключили CalDAV, агент не сможет работать с календарём. Это повышает безопасность и снижает расход токенов: модель видит только нужные инструменты, а не сотню ненужных.
Возможности из коробки
MicroClaw поставляется с готовыми тулкитами:
Работа с почтой (IMAP/SMTP):
- чтение папок и писем,
- отправка писем с вложениями,
- поиск по критериям,
- управление папками.
Работа с календарём (CalDAV):
- создание событий,
- чтение событий,
- поиск по датам.
Управление контактами (CardDAV):
- создание контактов,
- чтение контактов,
- поиск по имени или email.
Работа с файлами (WebDAV):
- загрузка файлов,
- скачивание файлов,
- управление директориями.
Написание своих тулкитов
Создать свой тулкит просто. Пример:
Методы с декоратором @tool автоматически становятся доступными агенту. Данные из MyToolkitSettings не попадают в модель.
Почему Python
Почему не Rust, как у ZeroClaw? Потому что для такого проекта скорость не критична. Важнее:
- понятность кода — Python проще и популярнее,
- простота разработки — новый тулкит можно написать за 10 минут,
- экосистема — огромное количество готовых библиотек для интеграций.
Код MicroClaw написан человеком. Я делал ставку на читаемость, структурированность и поддерживаемость. Я не гонюсь за минимальным количеством строк — важнее архитектура и чистота кода.
Планы на будущее
Мультиагентность
Сейчас в MicroClaw один агент с доступом ко всем тулкитам. В будущем планирую реализовать систему мультиагентности: отдельные агенты с разными задачами и инструментами.
Например:
- личный секретарь — с доступом к календарю и почте,
- разработчик — с доступом к git,
- исследователь — для поиска статей.
Агенты смогут общаться между собой. Это уменьшит расход токенов, повысит точность и улучшит разделение ответственности.
Постоянная память
Сейчас агент помнит данные только в рамках сессии. Планирую добавить постоянную память для хранения:
- личных данных: день рождения, адрес, телефон,
- предпочтений: любимые рестораны, музыка, фильмы,
- важных дат: дни рождения близких,
- контекста из прошлых диалогов.
Это сделает взаимодействие более персонализированным и естественным.
Изолированный запуск инструментов
Сейчас инструменты запускаются в основном процессе. При росте их количества важно будет гарантировать безопасность. Планирую добавить запуск в изолированном окружении — например, в Docker-контейнере или виртуальной машине. Пока необходимости в этом нет, но функционал в планах.