Постоянная память для агента: как сохранить контекст между запусками
В большинстве проектов агент «забывает» всё, что вы ему сказали, после завершения сессии. Это раздражает, особенно если пользователь явно указал предпочтения: метрическая система, лаконичные ответы и т.д. Решение простое — хранить важные заметки в файле MEMORY.md и подгружать их в системный промпт при каждом новом запуске.
- Запись: во время первой сессии агент использует инструмент
rememberи сохраняет строку «User prefers metric units and concise answers» вMEMORY.md. - Чтение: при старте второй сессии файл читается, а его содержимое вставляется в системный промпт. Агент уже «знает» предпочтения без дополнительных запросов.
Таким способом любой «долгоживущий» state сохраняется на диск и повторно используется.
Автоматическое сжатие контекста: как не «переполнить» окно модели
Контекстное окно современных LLM ограничено (обычно 4‑8 к токенов). При длительных диалогах количество сообщений быстро превышает лимит. Автокомпрессия решает проблему: старые сообщения свёртываются в один‑единственный сводный summary, а последние реплики остаются нетронутыми.
- Что сохраняется? – цель задачи, ключевые выводы и любые важные параметры.
- Что отбрасывается? – детали промежуточных шагов, которые уже учтены в сводке.
- Порог задаётся в токенах; в примерах мы принудительно ставим небольшое значение, чтобы увидеть работу механизма.
В результате общий объём диалога уменьшается на 30‑70 %, а агент продолжает работать, не теряя контекста.
Координация нескольких агентов: параллельные подзадачи и сбор результатов
Сложные задачи часто требуют разбиения на подзадачи, которые могут решаться независимо. В OpenHarness это реализовано через «spawn‑agent» – инструмент, который запускает полностью изолированный подагент (со своим мозгом, инструментами и памятью).
- Lead‑агент разбивает запрос на две исследовательские ветки и одну задачу по синтезу.
- Исследователи работают параллельно (внутри
asyncio.gather), каждый использует свой набор инструментов (например, веб‑поиск). - Писатель получает готовые заметки и формирует короткий итог.
Все подзадачи записываются в общий реестр, что позволяет отследить, кто что делал, и легко отладить процесс.
Переключение на реальную модель: от mock‑движка к Anthropic/ OpenAI
В демо все действия выполняются на детерминированном мок‑мозге, что экономит токены и не требует API‑ключей. Как только понадобится реальная генерация, достаточно задать несколько переменных окружения и воспользоваться функцией make_real_brain.
- Для Anthropic:
ANTHROPIC_API_KEYиMODEL=claude-sonnet-4-6. - Для OpenAI‑совместимых (включая Ollama):
OPENAI_API_KEY,OPENAI_BASE_URLиMODEL=llama-3.3-70b. - После установки переменных среда автоматически подменит мозг в
QueryEngine.
Все остальные компоненты (инструменты, память, правила доступа) остаются без изменений – это и есть главное преимущество «harness»: вы меняете лишь модель, а вся инфраструктура сохраняется.
Практический чек‑лист для внедрения
- Настройте MemoryStore – укажите путь к
MEMORY.md, вызовитеmemory.reset()при начале новой сессии. - Внедрите автокомпрессию – используйте
maybe_compact(messages, max_tokens, keep_last)перед каждой отправкой запросов в модель. - Определите инструменты «spawn_agent» – опишите роль и скрипт подагента, передайте функции в контекст
ToolContext(spawn=spawn). - Подготовьте переменные окружения для реального провайдера и проверьте, что
make_real_brain()возвращает объект. - Отслеживайте затраты – объект
CostMeterсобирает статистику по использованным токенам и стоимости.
Где посмотреть исходный код
Полный проект доступен на GitHub: github.com/HKUDS/OpenHarness. Там вы найдёте более 40 готовых инструментов, плагин‑экосистему, клиент MCP, TUI‑интерфейс и CLI oh, а также персонального агента ohmo.





















