Память и граф
Память воркера —
дальше одной сессии.
Долговечная семантическая база знаний на SQLite по мотивам подходов mem0 / Memora: гибридный поиск, append-only-версионирование, детекция секретов и граф сущностей рядом с фактами.
memoring · absorbing facts
Что хранится
Самодостаточные факты со scopes
Каждая запись — самодостаточный факт (50–500 символов) с изоляцией по scope: agent (общие знания), user (о клиенте), run (эпизод сессии). Плюс confidence, важность, теги, типизированные рёбра и полный журнал изменений.
| Field | Purpose |
|---|---|
| content | the fact text |
| scope | agent · user · run |
| confidence | 0.0–1.0 tie-breaker |
| importance | weight, grows via memory_boost |
| status | active · superseded · archived |
01Принципы
Паттерны долговечного контекста
Append-only
Факты никогда не перезаписываются. Новая версия — новая запись плюс ребро supersedes; противоречия видны через contradicts. Режимы чтения: active, latest, full_history.
Absorb, а не create
Секреты отклоняются → консолидация батча → дедуп по hash → cosine-кандидаты → классификация в один из 5 исходов: duplicate · supersede · contradict · related · new. Есть dry_run.
Гибридный поиск
score = 0.7·cosine + 0.3·BM25, затем линейный распад свежести — 1% в день. Медианная задержка ~2 мс в бенчмарках.
Дайджест перед стартом
Топ-агент получает детерминированный дайджест в system prompt: релевантные воспоминания + открытые TODO + недавние записи — с реальными id для проверки.
Опциональный реранк
[memory] rerank = true: второй LLM-проход переупорядочивает расширенную выдачу (top_k×3) по релевантности.
Эмбеддинги с fallback
Auto-режим: OpenAI-совместимый /embeddings при наличии ключа, иначе офлайн TF-IDF (512 мер, без сети). Векторы разных моделей не смешиваются.
02Три уровня
Профиль, навыки, архив
Стабильный профиль ~2 КБ, замороженный в system prompt для попаданий в prefix-cache. Малый, всегда присутствует.
Процедурные знания из опыта (create_from_experience), инжектируются по запросу через skill-инструмент.
Неограниченная база знаний SQLite с этой страницы — гибридный поиск, граф, версионирование.
Граф сущностей
человек ↔ компания ↔ локация
Параллельно с фактами хранилище ведёт граф сущностей реального мира: узлы (person, company, project, technology, role, location, event, product) дедуплицируются по имя+тип, типизированные рёбра (works_at, leads, founded…) и multi-hop BFS до 4 хопов — «кто руководит X», «кто работает в компаниях Казани».
memory_graph add · query · list

Fig 4.1 — Enterprise Entity Knowledge Graph: 3-hop relationship traversal across 5,420 interconnected entities in 1.62 ms with zero cloud Vector DB fees.
OSINT интеграция
Лид-разведка на основе памяти
Граф сущностей связывает людей с компаниями, компании с локациями, а локации с отраслями. Multi-hop BFS отвечает на вопросы вроде «кто руководит компаниями в Казани» или «какие CTO используют React». Поглощённые контакты становятся запросными знаниями для будущих сессий.
# After a lead-gen run, contacts are auto-absorbed
fathom memory search "CTO fintech Moscow"
# → Ivan Petrov, CTO, PayTech (conf 0.92)
# → Maria Kozlova, CTO, FinBox (conf 0.87)
# Entity graph queries are available to agents through memory_graph
# memory_graph(action="query", query="companies in Kazan")
# → Acme Corp → works_at → Ivan Petrov
# → leads → Engineering → located_in → Kazan03Инструменты агента
Шесть инструментов, одно хранилище
Записывает факты через пайплайн с 5 исходами; авто-сейв найденных контактов работает без модели.
Гибридный поиск (векторы + BM25) со scopes, фильтрами и распадом свежести.
Формирует дайджест перед запуском (релевантное + TODO + недавнее).
Повышает важность фактов, которые постоянно оказываются полезными.
Создаёт типизированные рёбра между записями.
Добавляет/запрашивает/выводит сущности и связи.
Обслуживание
Distill, GC — ничего не удаляется
CLI memory search / list / get / stats / rebuild / distill / nuke. Дистилляция сжимает run-факты в устойчивые знания; GC архивирует устаревшие факты и компактирует scope-группы — ничего не разрушается.
fathom memory search "fintech leads Kazan"
fathom memory stats
fathom memory distill
fathom memory gc --dry-run