Привет, Хабр!
Так уж вышло, что майские праздники я провёл дома — залечиваю травму после катания на длинной доске с колёсиками. Развлечений в такой ситуации не очень много, а одно из немногих, которое всегда со мной, — разработка программных проектов.
Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек.
И вот появилась возможность спокойно заняться старыми пет-проектами и наконец реализовать давнюю идею: написать простую базу для создания 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-агентов перестала казаться чем-то сложным и стала обычной инженерной областью, в которую можно войти без страха и сожалений.
Надеюсь, после этой статьи кто-то тоже попробует собрать своего первого агента.
Удачи всем, кто решил заняться агентостроением.
ссылка на оригинал статьи https://habr.com/ru/articles/1043768/