一句话摘要
通过图工程给 AI Agent 构建可复利增长的记忆系统,附配置。
The Graph Engineering Setup Guide: How to Give Your Agents Memory That Compounds (Exact Config) July 23, 2026 · 6 min read · View source ↗ Claude MCP AI
向量检索检索的是文本。它无法告诉你,你即将编辑的那个函数,归一个上个月已经将其弃用的团队所有。
本文内含:双时态模型、给 Claude 持久图记忆的 MCP 配置,以及图 vs 向量的路由规则。
Gartner 预计,到 2028 年,一半的智能体系统将建立在图上下文之上。
下面是完整配置 👇
在我们深入之前,我在我的 Telegram 频道里每天分享 AI 与 vibe coding 的笔记:https://t.me/zodchixquant 🧠
什么是图工程(graph engineering)真正的含义
向量 RAG 把你的知识存成孤立的片段,靠相似度来检索。图工程把它存成实体和关系,这样智能体可以遍历,而不是猜测。
区别会体现在需要不止一跳的问题上:
向量搜索:"找到与 auth service 相似的文本",然后指望正确的片段排在第一位
图遍历:"如果这张表被弃用,哪些仪表盘会崩"——沿表 → 血缘 → 每一个依赖的指标走一遍,然后返回真实的清单
实测差距:生产部署报告显示,多跳任务的准确率提升 36-46%,相对纯向量基线,幻觉减少 40% 以上。
Gartner 预计,到 2028 年,包含图 grounding 在内的上下文工程改进,将把智能体准确率提升至少 30%。
这套工具在 2025-2026 年不再是学术玩具:Graphiti、Cognee、KARMA,再加上 MCP 作为把图接入任意智能体的标准方式。
杀手级特性是时间,不是结构
大多数人以为知识图谱是一种更花哨的数据库。真正对智能体有意义的部分,是双时态建模(bi-temporal modeling)。
Graphiti 里的每条边都带两个时间戳:事件发生的时间,以及你的系统得知这件事的时间。事实拥有显式的有效窗口。当某件事发生变化时,旧边被作废,而不是被删除。
这给了你的智能体三样扁平记忆永远无法拥有的东西:
时间点查询。"我们六月份对这套 API 是怎么理解的"返回的是六月份的答案,而不是今天的
矛盾处理。新信息不会静默覆盖旧信息,而是带着时间戳轨迹将其取代
审计轨迹。每一条断言都能追溯到它是在何时、从哪里进入图的
你的上下文窗口在压缩(compaction)时会遗忘。向量存储什么都记得,却什么都不理解。而时态图记得什么变了、什么时候变的。
配置:Claude Code 中的图记忆(直接复制这个)
Graphiti 自带一个 MCP server,所以 Claude Code、Claude Desktop 和 Cursor 无需任何集成代码就能读写图。
在你的 .mcp.json 里:
{
"mcpServers": {
"graphiti": {
"command": "uvx",
"args": ["graphiti-mcp"],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASSWORD": "${NEO4J_PASSWORD}",
"MODEL_NAME": "claude-sonnet-5"
}
}
}
}
有两个细节决定了这套东西能否奏效:
用便宜模型做抽取。实体和边的抽取会在每一段被摄入的内容(episode)上运行。这里用 Sonnet 5 或 Haiku,而不是你的 frontier 模型——这是整套配置里最大的成本杠杆
Neo4j 在 Docker 里本地运行,作为开发图。一个容器,你的智能体就有了能扛过每一次重启、每一次压缩、每一个新会话的记忆
路由规则(这才是真正的技能)
图不是向量搜索或你上下文窗口的替代品。混合路由在基准测试中胜过任何单一后端配置,而工程活就藏在路由逻辑里。
把下面这段放进 CLAUDE.md:
## Memory routing
在回答之前,先对问题分类:
- 关系型或多跳("谁拥有"、"如果……会坏什么"、
"自……以来发生了什么变化")→ 通过 MCP 查询图
- 宽泛的语义("找关于 X 的文档"、"相似的例子")
→ 向量搜索
- 本会话里已经有的任何内容 → 从上下文回答,
不要碰任何一个后端
写入图时:
- 在做任何决策之后,写一条 episode:决定了什么、
为什么、它触及哪些文件/人
- 永远不要写推测。只写有来源的事实
- 矛盾写成新边,绝不编辑
这条同时省下钱和准确率的规则:当智能体有图可走时,它就不再蛮力搜索。现成配置要额外烧掉大约 30% 的 token,去做一次遍历就能直接回答的事。
喂图而不烧穿预算
摄入是朴素配置变贵的地方:每一次实体解析、每一次去重,过去都意味着又一次模型调用。
from graphiti_core import Graphiti
graphiti = Graphiti(NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD)
await graphiti.add_episode(
name="deprecate_legacy_auth",
episode_body=(
"Team Platform deprecated legacy_auth on 2026-07-14. "
"Replacement is auth_v3. Owner: Marina. "
"Blocked services: billing-api, notifications."
),
source_description="engineering decision log",
reference_time=datetime(2026, 7, 14),
)
三个让摄入保持便宜的习惯:
写 episode,而不是文档。每个决策一条 episode,带命名实体,胜过倒进一个 wiki 页面然后指望抽取自己搞定
始终设置 reference_time。没有它,你就丢掉了整个双时态优势,得到的只是一张普通图
批量回填,其余流式写入。历史数据一次性加载,之后在决策发生时增量写入。Graphiti 更新时无需重算整张图
常见错误
把图当成第二个向量存储。如果你在用它查"相似文本",那你就搭错了东西。图回答的是关系问题
在 frontier 模型上跑抽取。摄入是高频、机械化的。在这里用 frontier 的费率,会产生一张还没证明价值就先杀死项目的账单
什么都往里倒。一张塞满推测和重复事实的图,比没有图更糟,因为智能体现在会自信地遍历到垃圾里去
跳过 reference_time。时态层正是你选它而不是 embeddings 的全部理由。没有时间戳,你得到的只是一个会腐烂的静态本体
没有写入纪律。随意写入的智能体会制造几周都没人察觉的矛盾。一条规则(只写有来源的事实)就能挡住大部分问题
20 分钟配置
用一条命令在 Docker 里跑 Neo4j,开发用凭证(4 分钟)
把 Graphiti MCP 配置块加进 .mcp.json,把抽取指向一个便宜模型(4 分钟)
手写 5 条真实 episode:近期的决策、负责人、弃用项(6 分钟)
把路由规则粘贴进 CLAUDE.md(2 分钟)
问一个你知道答案的多跳问题,检查遍历结果(4 分钟)
上下文窗口变大了,所有人都以为记忆问题解决了。其实没有。一个大窗口记得住本次会话。一张图记得住你的项目,而且你每喂它一周,它就变得更值钱。
感谢阅读!
我在我的 Telegram 频道里每天分享 AI 与 vibe coding 的笔记:https://t.me/zodchixquant 🧠
Tags: # X # Claude # MCP # AI # Guide # Sonnet Related articles Grok just became dangerous: 18 Repos that prove it. Most people still think Grok is a chatbot bolted onto X. AI Claude MCP
原文参考:https://maxed.wiki/posts/the-graph-engineering-setup-guide-how-to-give-your-agents-memory-that-compounds-exact-config/ (Maxed.wiki,本页为站内中文整理)