Привет, Хабр!
Так уж вышло, что майские праздники я провёл дома — залечиваю травму после катания на длинной доске с колёсиками. Развлечений в такой ситуации не очень много, а одно из немногих, которое всегда со мной, — разработка программных проектов.
Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек.
И вот появилась возможность спокойно заняться старыми пет-проектами и наконец реализовать давнюю идею: написать простую базу для создания AI-агента, максимально упростив архитектуру и сделав её удобной для быстрого расширения под собственные задачи.
Если коротко — хочу сделать не “революционный AGI”, а понятный конструктор, на основе которого любой разработчик сможет собрать своего личного ассистента.
Зачем нужен ещё один AI-агент?
Сразу обозначу, у меня есть некоторый опыт разработки коммерческих агентов, и я совершенно не верю в концепцию универсального “сверхагента”, который умеет всё подряд.
По моему убеждению, хороший агент:
узкоспециализирован;
решает большую часть задач обычными алгоритмами;
использует LLM только там, где это действительно оправдано.
применяет модели вариативно.
Например:
дешёвая компактная модель может быстро проверять релевантность данных;
а флагманская модель — принимать сложные решения или выполнять глубокий анализ.
LLM — это не замена инженерии, а только инструмент внутри инженерной системы.
Но при всём этом мне хотелось сделать именно универсальную базу, на которой можно быстро собирать специализированных агентов под свои нужды:
добавлять навыки;
менять память;
подключать новые инструменты;
экспериментировать с архитектурой.
Без многослойного оверинжира, гигантских фреймворков и вот этого всего.
Почему open source
Меня давно смущает, что вокруг AI-агентов появилось большое количество переусложнения.
Когда новичок открывает репозиторий очередного “автономного суперагента”, он видит:
десятки абстракций;
сотни файлов;
бесконечные orchestration-слои;
и архитектуру, в которую страшно заходить без боевой подготовки.
Это и меня печалит, а новичков вообще расстраивает.
Существуют интересные проекты вроде OpenClaw, где тоже есть система навыков и расширений. Но и там структура не отвечает озвученным требованиям. Знакомый фронтендер хотел было переработать его под собственные нужды, но в итоге сдался. Сложно.
А мне хочется противоположного подхода: минимального порога входа.
Основная цель проекта "Агент Ануфрий" — не создать “убийцу” существующих решений, а сделать тему AI-агентов более доступной для русскоязычного сообщества.
Чтобы даже разработчик с небольшим опытом смог:
быстро понять, как всё устроено;
изменить поведение агента;
добавить собственные инструменты;
и начать экспериментировать самостоятельно.
И чем больше людей начнёт заниматься агентостроением, тем больше изящных инженерных решений мы увидим.
К какой архитектуре я пришёл
В итоге архитектура получилась максимально прямолинейной:
одна точка входа с основным циклом агента, системным промптом, и встроенными инструментами;
конфигурационный файл;
и несколько модулей с говорящими названиями.
AgentAnufry/ ├── main.py # Gateway + Agent Loop ├── config.py # Конфигурация ├── requirements.txt # Зависимости Python ├── tools/ │ ├── shell.py # Выполнение команд │ ├── filesystem.py # Работа с файлами │ ├── browser.py # Управление браузером через CDP │ ├── memory_tools.py # Инструменты памяти │ ├── task_tools.py # Инструменты трекера задач │ ├── result_tools.py # Инструменты работы с результатами │ └── skills_runner.py # Запуск навыков ├── memory/ │ ├── manager.py # Менеджер долговременной памяти │ ├── task_tracker.py # Трекер задач │ ├── task_results.py # Менеджер результатов задач │ ├── agent_memory.db # SQLite база данных │ └── README.md # Документация памяти ├── skills/ │ ├── loader.py # Загрузчик навыков │ ├── README.md # Документация навыков │ └── mongo-compass/ # Пример навыка │ ├── SKILL.md # Описание навыка │ ├── scripts/ # Скрипты навыка │ └── references/ # Справочные материалы ├── docs/ │ ├── MEMORY_QUICKSTART.md # Документация памяти │ ├── TASK_TRACKING.md # Документация трекера задач │ ├── RESULTS_SYSTEM.md # Система сохранения результатов │ ├── SKILLS_ARCHITECTURE.md # Архитектура навыков │ └── GOOGLE_SEARCH_FIX.md # Исправления поиска ├── llm/ │ ├── factory.py # Фабрика для создания LLM провайдеров │ └── provider.py # Базовый класс для LLM провайдеров └── ...
Что умеет агент уже сейчас
В базовый функционал вошли:
Работа с файловой системой
Агент создаёт директорию agent-workspace/ и может:
создавать файлы;
редактировать их;
удалять;
читать содержимое.
Это уже позволяет автоматизировать какое-то количество рутинных сценариев.
Долговременная память
Память реализована на базенке SQLite.
Есть:
хранение важной информации;
ранжирование информации по важности;
очистка мусора;
семантический поиск через embeddings.
Агент, в лучших традициях, может не просто “держать контекст”, а накапливать опыт взаимодействия.
Работа с браузером
Добавил управление браузером через CDP/Playwright:
открытие страниц;
взаимодействие с сайтами;
извлечение контента;
работу с поисковиками.
Агент умеет самостоятельно искать информацию в интернете и взаимодействовать с веб-интерфейсами.
Трекер задач
Сохраняет контекст сложных задач
Фиксирует все попытки выполнения
Запоминает причины неудач
Сохраняет только важную информацию (не засоряет память)
Позволяет продолжить с того места, где остановились
Система навыков (skills)
Тоже важная часть проекта. Новые возможности подключаются через модульные навыки, которые можно быстро писать и изменять.
Например, я уже добавил:
работу с MongoDB;
инструмент для более глубокого анализа поисковой выдачи.
Это те же .md файлы, которые легко пищутся и редактируются. Но в некоторых случаях скилы требуют референс и/или скрипты.
Поддержка локальных LLM
Агент работает через OpenAI-совместимый API, поэтому можно использовать обычные и локальные модели. Будет полезно для удешевления работы. На компактных моделях агент вполне справляется с некоторым типом задач.
И кажется, мне удалось добиться главной цели — сделать базу, которую легко модифицировать.
Любой разработчик за короткое время может:
заменить БД;
изменить правила работы с памятью;
переписать встроенные навыки;
добавить новые инструменты;
улучшить обработку skills;
оптимизировать взаимодействие с LLM.
А дальше всё уже зависит только от фантазии.
Можно сделать:
персонального ассистента;
исследовательского агента;
автоматизатор рутины;
web-agent;
DevOps-ассистента;
AI-помощника для работы с документами;
да что угодно.
Как запустить
Чтобы попробовать агента, достаточно:
Клонировать репозиторий проекта.
Установить зависимости.
Создать
.envпо примеруenv.example.Запустить
main.py.
На старте память агента пустая, поэтому с ним лучше немного “познакомиться”:
рассказать о себе;
описать задачи;
обозначить предпочтения.
Он это запомнит и начнёт использовать в дальнейшей работе.
Небольшой лайфхак
Если агент с трудом решил сложную задачу, похвалите его в конце, тогда он сохранит оптимальный алгоритм действий и ответит что-то в этом духе:
🤖 Агент: Супер, Артём! Я сохранил оптимальный алгоритм выполнения этой задачи в долговременную память. В следующий раз смогу повторить процесс быстрее и без лишних действий.
Вместо вывода
Мне понравился и процесс разработки Ануфрия, и даже опыт взаимодействия, но я уверен, что где-то мог ошибиться или что-то не учесть. Поэтому буду рад любым замечаниям, идеям и критике.
Ну и, конечно, буду рад форкам и pull request’ам.
Хочется, чтобы тема AI-агентов перестала казаться чем-то сложным и стала обычной инженерной областью, в которую можно войти без страха и сожалений.
Надеюсь, после этой статьи кто-то тоже попробует собрать своего первого агента.
Удачи всем, кто решил заняться агентостроением.
