Agent Memory

Модуль 09 · Урок 9.4

Урок 9.4. Zep и Graphiti: временные графы знаний для памяти агента

На этой странице
  1. Цель лекции
  2. Ожидаемый результат
  3. Зачем это нужно
  4. Основная идея
  5. Ключевые термины
  6. Почему temporal graph отличается от обычного graph
  7. Архитектурная схема
  8. Graphiti как open-source ядро
  9. Zep как managed memory layer
  10. Временная логика на примере
  11. Где Zep особенно силен
  12. Инфраструктурная цена
  13. Security и compliance
  14. Сравнение Graphiti и Zep
  15. Как читать benchmark claims
  16. Типичные ошибки
  17. Источники для дальнейшего чтения
  18. Краткое резюме
  19. Вопросы для самопроверки
  20. Что дальше

Цель лекции

Разобрать Zep и Graphiti как graph-first подход к агентской памяти: как temporal knowledge graph помогает хранить меняющиеся факты, отношения, provenance и контекст во времени.

Ожидаемый результат

Читатель понимает, когда графовая память оправдана, почему temporal reasoning важен для enterprise agents и чем open-source Graphiti отличается от managed Zep.

Зачем это нужно

Многие memory bugs появляются не потому, что агент ничего не помнит, а потому что он помнит факт без времени.

Пример:

text
Alice lives in Berlin.
Alice moved to Lisbon in 2025.

Если система хранит оба факта как равноправные текстовые chunks, retrieval может вернуть неправильный. Для пользователя вопрос "где Alice живет сейчас?" и вопрос "где Alice жила в 2024?" требуют разной памяти.

Temporal graph memory пытается моделировать это явно:

  • сущности;
  • отношения;
  • факты;
  • время действия факта;
  • источник;
  • invalidation;
  • связь с episodes.

Основная идея

Graphiti - open-source framework для построения temporal knowledge graphs. Zep - managed agent memory platform, которая использует Graphiti-подобную graph model и добавляет operational слой: managed users, threads, retrieval, governance, audit, compliance и масштабирование.

Упрощенно:

text
Graphiti builds the graph.
Zep operates graph-based memory at enterprise scale.

Это не просто vector DB с дополнительными metadata. Центр модели - Context Graph: граф сущностей и фактов, который меняется во времени.

Ключевые термины

Термин Короткое определение
Temporal knowledge graph Граф сущностей и отношений, где факты имеют временные атрибуты.
Context Graph Граф контекста вокруг субъекта: user, customer, team, account или topic.
Episode Событие ingestion: сообщение, JSON record, business event или документ.
Entity node Узел графа: человек, компания, продукт, проект, контракт, тикет.
Edge fact Отношение между сущностями, часто с fact text и temporal metadata.
Valid time Период, когда факт считается истинным в предметной области.
Ingestion time Время, когда система узнала или записала факт.
Fact invalidation Пометка старого факта как больше не актуального без потери истории.
Hybrid graph retrieval Сочетание vector, keyword/full-text и graph traversal.

Почему temporal graph отличается от обычного graph

Обычный graph может сказать:

text
Alice -- lives_in --> Berlin
Alice -- lives_in --> Lisbon

Temporal graph должен сказать больше:

text
Alice -- lived_in --> Berlin
valid_until: 2025-03
source: relocation email

Alice -- lives_in --> Lisbon
valid_from: 2025-03
source: HR profile update

Разница критична для:

  • legal;
  • finance;
  • healthcare;
  • enterprise support;
  • HR;
  • customer success;
  • account intelligence;
  • compliance workflows.

Архитектурная схема

flowchart TD A["Chat message or business record"] --> E["Episode"] E --> X["Entity and relation extraction"] X --> N["Entity nodes"] X --> F["Fact edges with temporal metadata"] F --> G["Context Graph"] N --> G E --> G Q["Agent query"] --> R["Hybrid retrieval"] R --> V["Vector or semantic signal"] R --> K["Keyword or full-text signal"] R --> T["Temporal filters"] R --> H["Graph traversal"] V --> C["Relevant context"] K --> C T --> C H --> C C --> L["Agent answer with grounded context"]

Эта модель полезна, когда память должна отвечать не только "что похоже?", но и:

  • "что было актуально тогда?";
  • "что изменилось?";
  • "какой факт заменил старый?";
  • "откуда система это знает?";
  • "какие связанные сущности важны?";
  • "можно ли этому пользователю видеть соседние узлы?".

Graphiti как open-source ядро

Graphiti полезен, если команда хочет самостоятельно строить temporal graph memory.

Он обычно закрывает:

  • ingestion episodes;
  • extraction entities and relationships;
  • graph construction;
  • temporal metadata;
  • fact invalidation;
  • hybrid search;
  • pluggable graph backends;
  • custom entity types.

Но при self-hosting команда сама отвечает за:

  • deployment;
  • graph database;
  • LLM and embedding providers;
  • tenancy;
  • access control;
  • retention;
  • audit;
  • monitoring;
  • migrations;
  • evaluation.

Graphiti - мощное ядро, но не вся enterprise platform.

Zep как managed memory layer

Zep добавляет вокруг graph memory operational layer:

  • managed users and threads;
  • managed graph storage;
  • context retrieval API;
  • dashboard and debugging tools;
  • governance;
  • multi-tenant isolation;
  • audit logging;
  • compliance-oriented controls;
  • SDKs and integrations.

Поэтому Zep логичнее рассматривать не как "еще одну graph library", а как managed memory infrastructure для production agents.

Временная логика на примере

Пусть enterprise assistant помогает account manager.

События:

text
2024-11-01: Contoso uses Plan A.
2025-02-10: Contoso negotiates migration to Plan B.
2025-03-01: Contract signed for Plan B.
2025-03-15: User asks: "What plan does Contoso currently have?"

Плохая память:

text
Contoso uses Plan A.
Contoso uses Plan B.

Хорошая temporal memory:

text
Contoso -- used_plan --> Plan A
valid_until: 2025-03-01

Contoso -- uses_plan --> Plan B
valid_from: 2025-03-01
source: signed contract

Агент должен ответить:

text
Сейчас Contoso на Plan B. До 1 марта 2025 использовался Plan A.

Где Zep особенно силен

Zep/Graphiti-style memory хорошо подходит, когда:

  • факты часто меняются;
  • связи между сущностями важнее отдельных chunks;
  • нужны historical queries;
  • нужен provenance;
  • есть enterprise governance;
  • важны permissions;
  • память строится вокруг customer/account/user graph;
  • требуется audit;
  • retrieval должен быть compact and token-efficient.

Примеры:

  • enterprise knowledge agent;
  • customer support copilot;
  • sales/account intelligence agent;
  • legal assistant;
  • financial analyst assistant;
  • healthcare navigation assistant;
  • compliance review agent.

Инфраструктурная цена

Graph-first memory не бесплатна.

Она добавляет:

  • graph modeling;
  • entity extraction quality issues;
  • graph database operations;
  • schema evolution;
  • access control на уровне узлов и ребер;
  • temporal invalidation logic;
  • graph-specific monitoring;
  • сложнее debugging, чем у простой profile table.

Если ваш продукт хранит только несколько preferences:

text
User prefers Russian.
User likes concise answers.
User studies in the evening.

Temporal graph может быть overkill.

Security и compliance

Graph memory особенно чувствительна к leakage.

Даже если пользователь не видит приватный документ, граф может раскрыть скрытую связь:

text
Person A -- works_on --> Confidential Project X
Person B -- reports_to --> Person A

Поэтому permission-aware graph traversal обязателен.

Нужно проверять:

  • можно ли видеть node;
  • можно ли видеть edge;
  • можно ли видеть fact text;
  • можно ли видеть соседние сущности;
  • можно ли раскрывать existence of relationship;
  • какие данные попадают в audit logs;
  • как работает deletion.

Сравнение Graphiti и Zep

Критерий Graphiti Zep
Тип Open-source temporal graph framework Managed agent memory platform
Основная роль Build and query Context Graph Operate governed memory at scale
Storage Вы выбираете backend Managed/proprietary runtime
Governance Self-managed Platform capabilities
Подходит для Команды, которые хотят control и готовы строить окружение Enterprise teams, которым нужен managed слой
Риск Operational burden Vendor dependency and platform fit

Как читать benchmark claims

Graphiti/Zep материалы подчеркивают temporal awareness, hybrid retrieval и низкую retrieval latency. Это полезные сигналы, но они не заменяют вашу проверку.

Публичные benchmark results отвечают на вопрос:

text
Как система ведет себя на выбранном benchmark и выбранной методике?

Ваш вопрос другой:

text
Как система работает на наших данных, policy, latency, tenants и failure modes?

Для Zep-style memory важно отдельно тестировать:

  • temporal reasoning;
  • stale fact invalidation;
  • permission-aware graph traversal;
  • entity resolution;
  • conflict handling;
  • deletion completeness;
  • latency under load;
  • audit explainability.

Типичные ошибки

Ошибка 1: строить graph без graph-shaped problem.

Если нет устойчивых сущностей и отношений, graph будет дорогой декорацией.

Ошибка 2: не моделировать время.

Graph без temporal metadata может уверенно возвращать устаревшие связи.

Ошибка 3: считать extraction идеальным.

LLM может неправильно выделить сущность, relation или validity window.

Ошибка 4: забывать permissions на ребрах.

Иногда сам факт связи является чувствительным.

Ошибка 5: не иметь graph observability.

Нужно видеть, какие episodes породили какие nodes and edges.

Ошибка 6: смешивать Graphiti и Zep как одно и то же.

Graphiti - framework. Zep - managed platform вокруг memory at scale.

Источники для дальнейшего чтения

  • Graphiti overview: https://help.getzep.com/graphiti/getting-started/overview
  • Zep vs Graphiti: https://help.getzep.com/zep-vs-graphiti
  • Zep graph overview: https://help.getzep.com/graph-overview
  • LongMemEval: https://github.com/xiaowu0162/longmemeval
  • LongMemEval-V2: https://xiaowu0162.github.io/longmemeval-v2/

Краткое резюме

Zep и Graphiti показывают graph-first подход к agent memory. Он особенно полезен, когда память должна понимать сущности, отношения, изменения во времени, provenance и permissions.

Главный trade-off: temporal graph memory дает точность и выразительность, но требует более зрелой инфраструктуры, data modeling, governance и evals.

Вопросы для самопроверки

  1. Почему факт без validity period может быть опасен?
  2. Чем Context Graph отличается от набора vector chunks?
  3. Какие задачи лучше решает temporal graph memory?
  4. Почему graph traversal должен быть permission-aware?
  5. Когда Graphiti лучше Zep, а когда наоборот?

Что дальше

В следующей лекции мы перейдем к Letta: подходу, где агент сам управляет своим контекстом через memory blocks, archival memory и tool-calling.

Обновлено 08.08.2026