TencentDB Agent Memory — многослойная память для AI-агентов с символической компрессией
📂 Исходный код на GitHubМногослойная память для AI-агентов от Tencent Cloud. Символическая краткосрочная память выгружает тяжёлые логи инструментов в компактные Mermaid-символы, экономит токены и повышает успешность задач; слоистая долгосрочная память собирает разговоры в персоны и сцены (L0→L3), а не сваливает всё в плоские вектора. С памятью OpenClaw тратит до 61% меньше токенов, точность персон растёт с 48% до 76%. MIT.
TencentDB Agent Memory — это открытая система памяти для AI-агентов, построенная на двух принципах: символическая краткосрочная память и слоистая долгосрочная память. Авторы проекта отвергают как «слепое» накопление истории, так и необратимую lossy-компрессию, и вместо этого предлагают архитектуру, где память не просто «запоминает больше», а помогает агенту «рассуждать лучше».
Философия проекта сформулирована прямо в README: память — это не про то, чтобы запихать всё в ИИ, а про то, чтобы избавить людей от необходимости повторяться. Мы постоянно переобъясняем агенту свои рабочие инструкции, контекст проекта, конвенции и форматы вывода. Такая информация не должна требовать повторения — и не должна бездумно копиться в контексте. TencentDB Agent Memory помогает агенту выучить рабочие процессы, удержать контекст задачи и переиспользовать прошлый опыт.
С памятью OpenClaw тратит до 61,38% меньше токенов на коротких задачах, прохождение реальных бенчмарков (pass rate) вырастает на 51,52% (относительно), а точность построения персон (PersonaMem) поднимается с 48% до 76%. Проект распространяется под лицензией MIT.
Две опоры архитектуры: слоистость и символизация
Слоистость памяти: прогрессивное раскрытие при гетерогенном хранении
Классические системы памяти шинкуют данные на фрагменты и сваливают их в плоское векторное хранилище. Извлечение вырождается в слепой поиск по разрозненным кускам без макро-ориентира. TencentDB Agent Memory берёт слоистость как единый архитектурный принцип, и это видно на трёх уровнях:
- Слои краткосрочного контекста. Нижний слой архивирует сырые результаты инструментов (
refs/*.md); средний слой собирает пошаговые суммаризмы (JSONL); верхний слой конденсирует состояние в лёгкий Mermaid-канвас. Агенту в контексте нужен только верхний слой, а ниже он спускается поnode_idпри ошибке. - Слои долгосрочной персонализации. Вместо плоских логов строится семантическая пирамида: L0 Conversation (сырой диалог) → L1 Atom (атомарные факты) → L2 Scenario (сценарные блоки) → L3 Persona (профиль пользователя). На слое Persona лежат повседневные предпочтения; когда важны детали, система спускается к атомам.
- Слои генерации навыков. Слоистость работает и с действиями. Из нижних трасс исполнения (Conversation) средний слой выводит типовые паттерны решений (Scenario), а верхний собирает переиспользуемые Skills или стандартные SOP (Persona).
В основе — двухслойная стратегия хранения. Нижний слой (факты, логи, трассы) лежит в базах данных для надёжного полнотекстового поиска; верхний слой (персоны, сцены, канвасы) хранится в человекочитаемых Markdown-файлах с высокой информационной плотностью. Нижние слои сохраняют доказательства, верхние — структуру.
И это обеспечивает полную прослеживаемость и безвозвратное восстановление. Компрессия почти всегда жертвует восстанавливаемостью — здесь этого избегают, сохраняя детерминированный путь от высокоуровневых абстракций к первичным доказательствам. Гарантируется полная цепочка спуска: «символ верхнего слоя (Persona / канвас) → индекс среднего слоя (Scenario / jsonl) → сырой текст нижнего слоя (L0 Conversation / refs)».
Символическая память: максимум смысла в минимуме символов
В длинных задачах самые расточительные потребители токенов — это многословные промежуточные логи: результаты поиска, код, трассы ошибок. Система решает это комбинацией выгрузки контекста и символьной памяти:
- Mermaid-символьный граф. Состояние задачи кодируется в плотном Mermaid-синтаксисе — достаточно точном, чтобы LLM его парсил, и достаточно лаконичном, чтобы его читал человек.
- Выгрузка истории. Полные инструментальные логи уходят во внешние файлы; в контексте остаётся только лёгкая карта задач.
- Трассировка по
node_id. Агент рассуждает над символьным графом; чтобы проверить деталь, он грепаетnode_idи мгновенно достаёт полный исходный текст.
Поток выглядит так: сотни тысяч токенов многословных логов → выгрузка полного текста во внешнюю ФС (refs/*.md) → извлечение связей в Mermaid-канвас с node_id → в контекст агента попадает лишь несколько сотен токенов. Любая деталь при необходимости достаётся обратно через node_id.
Бенчмарки: реальный эффект на долгих сессиях
Показатели замерены на непрерывных длинногоризонтных сессиях, а не на изолированных ходах. Например, SWE-bench гоняет по 50 последовательных задач на сессию, имитируя давление накопления контекста реальных длинногоризонтных агентов.
| Возможность памяти | Бенчмарк | OpenClaw | С плагином | Δ (отн.) | Токены OpenClaw | С плагином | Δ (отн.) |
|---|---|---|---|---|---|---|---|
| Краткосрочная | WideSearch | 33% | 50% | +51,52% | 221,31M | 85,64M | −61,38% |
| Краткосрочная | SWE-bench | 58,4% | 64,2% | +9,93% | 3474,1M | 2375,4M | −33,09% |
| Краткосрочная | AA-LCR | 44,0% | 47,5% | +7,95% | 112,0M | 77,3M | −30,98% |
| Долгосрочная | PersonaMem | 48% | 76% | +59% | — | — | — |
Фичи, которые выделяют проект
1. Макро-персоны + микро-факты: единый механизм спуска
Главный риск компрессии — сэкономить токены, потеряв доказательства. TencentDB Agent Memory не сворачивает историю в необратимую выжимку, а сохраняет чистый путь от абстракции верхнего уровня к первичным данным. Для разных типов вопросов — разные маршруты:
| Тип вопроса | Сначала смотрим | Углубляемся |
|---|---|---|
| Повседневные предпочтения, голос, долгосрочные цели | L3 Persona / L2 Scenario | L1 Atom / L0 Conversation |
| Конкретные факты, даты, детали проекта | L1 Atom / L0 Conversation | Ширим окно времени, запасной — семантический поиск |
| Продолжение длинной задачи | Активный Mermaid-канвас | JSONL при нехватке деталей, затем refs/*.md |
| Продолжение исторической задачи | Запись метаданных задачи | Канвас → node_id → result_ref |
2. Отладка без чёрного ящика
Большинство систем памяти проваливаются здесь: когда поиск неверен, видно лишь список векторных скорегов, и непонятно, где ошибилась. TencentDB Agent Memory хранит ключевые промежуточные этапы в читаемых файлах: сценарные блоки L2 — это обычный Markdown; L3 Persona живёт в persona.md и ссылается на породившие её сценарии; канвасы задач — это Mermaid, который ещё и человек, и агент читают одинаково легко; сырьё, суммаризации и ноды сшиты result_ref и node_id.
Отладка превращается в детерминированный проход по цепочке «Persona → Scenario → Atom → Conversation» до тех пор, пока корневая причина не выйдет на поверхность. Все слоистые артефакты лежат под ~/.openclaw/memory-tdai/ — можно просто открыть папку и посмотреть каждый слой.
3. Продакшен-зрелость: не просто демо
| Возможность | Описание |
|---|---|
| Плагин OpenClaw | Автозахват, извлечение и поиск памяти после установки |
| Адаптер Hermes Gateway | TdaiCore + HostAdapter, не привязан к ведущей платформе |
| Локальный бэкенд | SQLite + sqlite-vec, работает из коробки |
| Гибридный поиск | BM25 + вектор + RRF — и ключевой, и семантический поиск |
| Инструменты агента | tdai_memory_search / tdai_conversation_search |
Установка и интеграция
Поддерживаются два популярных агента: OpenClaw и Hermes.
OpenClaw
Установка плагина и перезапуск шлюза:
openclaw plugins install @tencentdb-agent-memory/memory-tencentdb
openclaw gateway restart
Включение — одна настройка, сразу с локальным бэкендом SQLite + sqlite-vec:
{
"memory-tencentdb": {
"enabled": true
}
}
После включения система автоматически занимается захватом разговора, извлечением памяти, агрегацией сцен, генерацией персон и поиском перед следующей репликой. Краткосрочная компрессия подключается опционально (версия ≥ 0.3.4): в настройку плагина добавляется config.offload.enabled, в конфиге регистрируется слот plugins.slots.contextEngine = "memory-tencentdb", после чего один раз применяется патч-скрипт scripts/openclaw-after-tool-call-messages.patch.sh, который подключает выгрузку и восстановление сообщений после вызова инструментов.
Hermes
Помимо OpenClaw плагин поддерживает агента Hermes. Есть два пути: Docker-контейнер, чтобы поднять Hermes с памятью с нуля одной командой, либо подключение памяти к уже существующей установке (не нужна сборка образа). Docker-образ собирает hermes-agent и провайдер memory_tencentdb; шлюз слушается на порт :8420, а память сохраняется в именованный том hermes_data, который переживает перезапуски. По умолчанию образ несёт с собой Tencent Cloud DeepSeek-V3.2.
При ручном подключении к готовому Hermes пакет линкуется в каталог плагинов, в config.yaml объявляется memory.provider: memory_tencentdb, настраиваются переменные окружения шлюза и (по желанию) LLM-креденшелы шлюза. Шлюз можно запускать вручную или дать провайдеру автозапуск при первом разговоре. Обязательно: каталог провайдера должны носить имя memory_tencentdb (с подчёркиванием) — Hermes использует его как ключ провайдера. Для Windows-нативных установок есть готовый batch-скрипт.
Безопасность шлюза (по желанию)
Шлюз на :8420 по умолчанию работает как локальный sidecar. Два опциональных параметра превращают его в аутентифицированный сетевой сервис:
| Поле | env | По умолчанию | Смысл |
|---|---|---|---|
server.apiKey |
TDAI_GATEWAY_API_KEY |
не задано | Если задать, все маршруты кроме GET /health требуют Bearer-токен. |
server.corsOrigins |
TDAI_CORS_ORIGINS |
[] |
CORS-белый список. Пустой список не отдаёт Access-Control-Allow-*. |
GET /health остаётся открытым без токена, чтобы работали пробы оркестраторов (docker healthcheck, kubectl liveness).
Настраиваемые параметры
У каждого поля есть вменяемое значение по умолчанию — система работает без конфигурации. Для тонкой настройки параметры разбиты на три уровня глубины:
- Уровень 1, ежедневная настройка (90% сценариев): временная зона, бэкенд хранилища, стратегия поиска (
recall.strategy—keyword/embedding/hybrid, гибрид через RRF рекомендуется), лимиты вызова, интервалы pipeline, включение офлоада. - Уровень 2, продвинутая настройка (длинные задачи / длинные сессии): прогрев сессий, таймауты, дедупликация L1, исключение агентов, периоды удержания, пороги офлоада.
- Уровень 3, полный справочник (операции/кастомные модели/удалённые эмбеддинги): внешние embedding-сервисы, отдельный LLM-режим, ключи бэкенда офлоада, метрика.
Интересная деталь: у некоторых self-hosted или OSS-моделей эмбеддингов (например, BGE-M3) не поддерживаются собственные размерности векторов, и с ними нужно отключить embedding.sendDimensions, чтобы не получить HTTP 400.
Документация и роадмап
Дополнительно доступны: scripts/README.memory-tencentdb-ctl.md (инструменты обслуживания), CHANGELOG.md (история версий), openclaw.plugin.json (манифест плагина и схема конфигурации).
Уже реализовано: персонизированная память (L0 → L3), компрессия краткосрочного контекста (Context Offload + Mermaid-канвас), локальный SQLite и бэкенд Tencent Cloud Vector Database (TCVDB), плагин OpenClaw и интеграция Hermes Gateway. В планах — переносимая память (импорт/экспорт/живая миграция между агентами и устройствами), автоматическая генерация навыков, панель визуальной отладки и наблюдаемости.
Комьюнити приглашает к контрибуциям и обсуждению на GitHub Issues и в Discussions, потому что память агентов — пока далеко не решённая задача. Исходники, описание и лицензию MIT можно найти на странице проекта на GitHub.