Разработчик и автор канала Hugging Face Алехандро АО (Alejandro AO) представил детальный технический разбор архитектуры Hermes — ИИ-агента, предназначенного для непрерывной работы. В материале рассматривается жизненный цикл агента, механизмы формирования контекста, интеграция с внешними мессенджерами и система долгосрочной памяти.
🏗️ Общая архитектура системы: взгляд с высоты птичьего полёта 0:57
Архитектура Hermes отличается модульностью и простотой компонентов, что делает её доступной для изучения и воспроизведения . В центре системы находится «ядро» агента (AI Agent Core), реализующее основной агентский цикл.
Взаимодействие с ядром осуществляется через три основных интерфейса:
- CLI (Command Line Interface): классический терминальный доступ.
- Gateway (Шлюз): система, обеспечивающая подключение к внешним мессенджерам (Telegram, Slack, Discord, электронная почта) .
- API: программный интерфейс для интеграции с другими сервисами.
Из коробки Hermes оснащён набором инструментов (Tools) и навыков (Skills), а также системой памяти . По словам Алехандро АО (Alejandro AO), память в Hermes разделена на два типа:
- Внутренняя память: включает в себя историю текущих сессий и специальные файлы конфигурации, такие как
soul.md(описание личности агента) иuser.md(информация о пользователе) . - Внешняя память: поддержка интеграций с такими сервисами, как Mem0 или SuperMemory .
🔄 Агентский цикл: как Hermes обрабатывает сообщения 3:49
Цикл работы Hermes активируется при каждом входящем сообщении пользователя и состоит из строго последовательных этапов :
- Сбор контекста: Агент объединяет системные промпты, файлы личности, информацию о пользователе и историю переписки.
- Обращение к LLM: Сформированный контекст отправляется в большую языковую модель.
- Вызов инструментов: Если модель решает, что для ответа ей нужны внешние данные (например, поиск в интернете или запись файла), она инициирует вызов соответствующего инструмента . Результат выполнения возвращается в модель для формирования финального ответа.
- Финальный ответ: Пользователь получает результат работы.
- Обновление памяти (Memory Update): Это критически важный этап, на котором агент анализирует прошедшее взаимодействие . Если в ходе беседы появилась важная информация, она записывается в память, чтобы агент мог «учиться» и совершенствоваться при каждом использовании .
🧠 Формирование контекста и «душа» агента 7:31
Контекст в Hermes строится на основе простых текстовых файлов в формате Markdown, что упрощает их редактирование человеком.
Основные файлы контекста:
- soul.md: Описывает характер, тон общения и цели агента . Если файл пуст, Hermes использует стандартный системный промпт, представляющий его как виртуального помощника .
- user.md: Файл, который Hermes обновляет автоматически. В него заносится всё, что агент узнаёт о пользователе (профессия, предпочтения, текущие задачи) .
- memory.md: Сюда записываются произвольные факты, рабочие процессы и полезные сведения, извлечённые из диалогов .
Помимо этих файлов, в контекст включаются описания доступных навыков и инструментов, а также история сообщений . Если настроена внешняя память, в контекст добавляются выжимки из прошлых сессий, релевантные текущей теме .
📉 Сжатие контекста: борьба с ограничениями токенов 13:28
Поскольку окна контекста LLM ограничены, в Hermes реализован механизм автоматического сжатия истории сообщений. По умолчанию сжатие срабатывает, когда занято 50% доступного окна контекста (это значение можно настроить до 70–80% для моделей с малым объёмом памяти) .
Проверка необходимости сжатия происходит в два момента:
Интересна методика оценки объёма данных: для первого сообщения агент использует упрощённую формулу (количество символов, делённое на 4), а для последующих — точные данные об использовании токенов (usage parameters), возвращаемые API модели .
При сжатии используется специальный промпт, который заставляет LLM структурировать итог беседы по разделам: глобальная цель, ограничения, выполненные действия, текущее состояние и ключевые решения . Алехандро АО (Alejandro AO) отмечает, что этот подход гораздо богаче и эффективнее, чем в более минималистичных агентах .
🌐 Шлюз (Gateway): связь с внешним миром 19:59
Шлюз — это асинхронная система на базе asyncio, которая позволяет Hermes взаимодействовать с Telegram, Discord, Slack и другими сервисами .
Особенности работы шлюза:
- Независимая конфигурация: Каждая интеграция настраивается отдельно (например, через команду
hermes setup gateway telegram) . - Использование SQLite: Поскольку мессенджеры часто присылают только одно последнее сообщение, шлюз обращается к локальной базе данных SQLite для восстановления истории всей переписки по ID сессии .
- Менеджер сессий: Управляет приоритетами сообщений. Если пользователь пишет новое сообщение, когда агент ещё занят предыдущим, система решает, нужно ли прервать работу, поставить сообщение в очередь или изменить направление мыслей (steer) .
💾 Три уровня памяти Hermes 28:00
Алехандро АО (Alejandro AO) выделяет три уровня хранения информации в системе:
- Markdown-файлы: Статичные данные о личности и пользователе .
- База SQLite: Хранит полные транскрипты всех сессий. В базе также есть отдельная таблица с чистым текстом (bare text) для быстрого поиска по сходству .
- Внешние провайдеры: Поддержка специализированных сервисов (Mem0, Honcho, SuperMemory), которые используют векторный поиск или LLM для извлечения нужных воспоминаний .
Важный нюанс работы с внешней памятью: запрос к ней происходит не перед первым сообщением, а сразу после него . Агент сначала анализирует текущий вопрос пользователя, а затем «вспоминает» релевантные детали из прошлого для использования в последующих ответах. Это имитирует человеческое поведение, когда мы сначала реагируем на вопрос, а потом начинаем глубже копаться в памяти .
⏰ Cron-задачи: автоматизация по расписанию 34:37
Hermes поддерживает выполнение периодических задач (Cron jobs), таких как рассылка ежедневных новостей или еженедельных отчётов .
Техническая реализация:
- Это не системный процесс ОС, а внутренний цикл Hermes, который «тикает» (функция
tick) каждую минуту . - Задачи хранятся в файле
jobs.jsonв директории.hermes/cron/. - Результаты каждого запуска сохраняются в формате Markdown в папке
output. - Уведомления о выполнении задач приходят на «домашний» шлюз пользователя (например, в его личный Telegram-аккаунт), указанный при настройке .
В завершение Алехандро АО (Alejandro AO) подчеркнул, что Hermes — это пример того, как сочетание простых текстовых файлов и продуманного цикла обработки сообщений позволяет создать мощного и обучаемого ИИ-ассистента .