Добавить в корзинуПозвонить
Найти в Дзене
Bednyakov

AI-агент своими руками: память, браузер, задачи и навыки — без боли

Так уж вышло, что майские праздники я провёл дома — залечиваю травму после катания на длинной доске с колёсиками. Развлечений в такой ситуации не очень много, а одно из немногих, которое всегда со мной, — разработка программных проектов. Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек. И вот появилась возможность спокойно заняться старыми пет-проектами и наконец реализовать давнюю идею: написать простую базу для создания AI-агента, максимально упростив архитектуру и сделав её удобной для быстрого расширения под собственные задачи. Если коротко — хочу сделать не “революционный AGI”, а понятный конструктор, на основе которого любой разработчик сможет собрать своего личного ассистента. Сразу обозначу, у меня есть некоторый опыт разработки коммерческих агентов, и я совершенно не верю в концепцию универсального “сверхагента”, который умеет всё подряд. По моему убеждению, хороший агент: Например: LLM — это не замена инженерии, а только инструмент внутри инженерной систе
Оглавление

Так уж вышло, что майские праздники я провёл дома — залечиваю травму после катания на длинной доске с колёсиками. Развлечений в такой ситуации не очень много, а одно из немногих, которое всегда со мной, — разработка программных проектов.

Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек.

И вот появилась возможность спокойно заняться старыми пет-проектами и наконец реализовать давнюю идею: написать простую базу для создания AI-агента, максимально упростив архитектуру и сделав её удобной для быстрого расширения под собственные задачи.

Если коротко — хочу сделать не “революционный AGI”, а понятный конструктор, на основе которого любой разработчик сможет собрать своего личного ассистента.

Зачем нужен ещё один AI-агент?

Сразу обозначу, у меня есть некоторый опыт разработки коммерческих агентов, и я совершенно не верю в концепцию универсального “сверхагента”, который умеет всё подряд.

По моему убеждению, хороший агент:

  • узкоспециализирован;
  • решает большую часть задач обычными алгоритмами;
  • использует LLM только там, где это действительно оправдано.
  • применяет модели вариативно.

Например:

  • дешёвая компактная модель может быстро проверять релевантность данных;
  • а флагманская модель — принимать сложные решения или выполнять глубокий анализ.

LLM — это не замена инженерии, а только инструмент внутри инженерной системы.

Но при всём этом мне хотелось сделать именно универсальную базу, на которой можно быстро собирать специализированных агентов под свои нужды:

  • добавлять навыки;
  • менять память;
  • подключать новые инструменты;
  • экспериментировать с архитектурой.

Без многослойного оверинжира, гигантских фреймворков и вот этого всего.

Почему open source

Меня давно смущает, что вокруг AI-агентов появилось большое количество переусложнения.

Когда новичок открывает репозиторий очередного “автономного суперагента”, он видит:

  • десятки абстракций;
  • сотни файлов;
  • бесконечные orchestration-слои;
  • и архитектуру, в которую страшно заходить без боевой подготовки.

Это и меня печалит, а новичков вообще расстраивает.

Существуют интересные проекты вроде OpenClaw, где тоже есть система навыков и расширений. Но и там структура не отвечает озвученным требованиям. Знакомый фронтендер хотел было переработать его под собственные нужды, но в итоге сдался. Сложно.

А мне хочется противоположного подхода: минимального порога входа.

Основная цель проекта "Агент Ануфрий" — не создать “убийцу” существующих решений, а сделать тему AI-агентов более доступной для русскоязычного сообщества.

Чтобы даже разработчик с небольшим опытом смог:

  • быстро понять, как всё устроено;
  • изменить поведение агента;
  • добавить собственные инструменты;
  • и начать экспериментировать самостоятельно.

И чем больше людей начнёт заниматься агентостроением, тем больше изящных инженерных решений мы увидим.

К какой архитектуре я пришёл

В итоге архитектура получилась максимально прямолинейной:

  • одна точка входа с основным циклом агента, системным промптом, и встроенными инструментами;
  • конфигурационный файл;
  • и несколько модулей с говорящими названиями.
Структура проекта
Структура проекта

Что умеет агент уже сейчас

В базовый функционал вошли:

Работа с файловой системой

Агент создаёт директорию agent-workspace/ и может:

  • создавать файлы;
  • редактировать их;
  • удалять;
  • читать содержимое.

Это уже позволяет автоматизировать какое-то количество рутинных сценариев.

Долговременная память

Память реализована на базенке SQLite.

Есть:

  • хранение важной информации;
  • ранжирование информации по важности;
  • очистка мусора;
  • семантический поиск через embeddings.

Агент, в лучших традициях, может не просто “держать контекст”, а накапливать опыт взаимодействия.

Работа с браузером

Добавил управление браузером через CDP/Playwright:

  • открытие страниц;
  • взаимодействие с сайтами;
  • извлечение контента;
  • работу с поисковиками.

Агент умеет самостоятельно искать информацию в интернете и взаимодействовать с веб-интерфейсами.

Трекер задач

  • Сохраняет контекст сложных задач
  • Фиксирует все попытки выполнения
  • Запоминает причины неудач
  • Сохраняет только важную информацию (не засоряет память)
  • Позволяет продолжить с того места, где остановились

Система навыков (skills)

Тоже важная часть проекта. Новые возможности подключаются через модульные навыки, которые можно быстро писать и изменять.

Например, я уже добавил:

  • работу с MongoDB;
  • инструмент для более глубокого анализа поисковой выдачи.

Это те же .md файлы, которые легко пищутся и редактируются. Но в некоторых случаях скилы требуют референс и/или скрипты.

Поддержка локальных LLM

Агент работает через OpenAI-совместимый API, поэтому можно использовать обычные и локальные модели. Будет полезно для удешевления работы. На компактных моделях агент вполне справляется с некоторым типом задач.

И кажется, мне удалось добиться главной цели — сделать базу, которую легко модифицировать.

Любой разработчик за короткое время может:

  • заменить БД;
  • изменить правила работы с памятью;
  • переписать встроенные навыки;
  • добавить новые инструменты;
  • улучшить обработку skills;
  • оптимизировать взаимодействие с LLM.

А дальше всё уже зависит только от фантазии.

Можно сделать:

  • персонального ассистента;
  • исследовательского агента;
  • автоматизатор рутины;
  • web-agent;
  • DevOps-ассистента;
  • AI-помощника для работы с документами;
  • да что угодно.

Как запустить

Чтобы попробовать агента, достаточно:

  1. Установить зависимости.
  2. Создать .env по примеру env.example.
  3. Запустить main.py.

На старте память агента пустая, поэтому с ним лучше немного “познакомиться”:

  • рассказать о себе;
  • описать задачи;
  • обозначить предпочтения.

Он это запомнит и начнёт использовать в дальнейшей работе.

Небольшой лайфхак

Если агент с трудом решил сложную задачу, похвалите его в конце, тогда он сохранит оптимальный алгоритм действий и ответит что-то в этом духе:

🤖 Агент: Супер, Артём! Я сохранил оптимальный алгоритм выполнения этой задачи в долговременную память. В следующий раз смогу повторить процесс быстрее и без лишних действий.

Вместо вывода

Мне понравился и процесс разработки Ануфрия, и даже опыт взаимодействия, но я уверен, что где-то мог ошибиться или что-то не учесть. Поэтому буду рад любым замечаниям, идеям и критике.

Ну и, конечно, буду рад форкам и pull request’ам.

Хочется, чтобы тема AI-агентов перестала казаться чем-то сложным и стала обычной инженерной областью, в которую можно войти без страха и сожалений.

Надеюсь, после этой статьи кто-то тоже попробует собрать своего первого агента.

Удачи всем, кто решил заняться агентостроением.