本以为我的Agent运行良好,直到发现它陷入了兔子洞——那是我们几周前改变的一个决策,它对那个决策充满自信地错了。所以我亲自构建了一个Memory,开源了,大家觉得怎么样?
摘要
作者构建了NodeDex,一个开源的本地图,能自动从智能体对话中捕捉项目的推理过程,通过追踪死胡同和被取代的决策,帮助智能体避免自信地重复过时的决策。
最终让我崩溃的,不是我的智能体忘记事情。忘记虽然烦人,但它会自我暴露——智能体再问一次,你叹口气,重新解释一遍。真正让我崩溃的是无声版本:我的智能体自信地重新提出了一个月前我们尝试过并放弃的方案。另一次,它针对我们两周前就已替换的决策做规划——旧的决策还躺在它的笔记里,看起来和新的决策一样权威。没有出现任何明显的失败。它只是悄无声息地再次消耗了数小时。通用记忆能解决"忘记"的问题。但我试了所有方法,都无法解决"自信地给出关于过去的错误信息"——因为这不是回忆问题,而是状态问题。"这个已被排除"、"这个已被替换"、"这个仍未验证"——这些都不是相似性搜索能返回的结果。
于是我花了3个月构建了另一半:**NodeDex**——一个基于你智能体对话自动构建的本地项目推理图(由后台流水线完成,智能体无需特意保存):
- **死胡同(已弃用方案)是头等公民**:一个可枚举的列表,记录了哪些方案被尝试并放弃了,并附有原因。智能体被教导在提出方案前先检查这个列表。
- **决策附带原因 + 落选方案**:每个决策都包含其依据,以及被它击败的替代方案。
- **当某样东西被替换时,不会删除任何内容**——一条 `supersedes`(替代)边从旧真相指向当前真相,这样智能体就不会误把旧的当成新的。
需要明确它**不是什么**:它不替代Claude的原生记忆或你的事实存储——那些专门记住备注和偏好,而且它们很擅长。这是另一个工作(项目的决策历史)。两者都运行即可。
你可以在60秒内体验它,无需API密钥:
```bash
npx nodedex demo
```
这会在MCP上提供一个小型示例项目图。将Claude(或任何MCP智能体)指向它,然后问:*"把计数器放在Redis里这个决策还是当前有效的吗?"* 然后观察它沿着替代边追踪,并用替代方案而不是过时的方案回答。那一刻就是整个产品的核心。
老实说它的局限——在你自己发现之前先告诉你:
- **已弃用方案的检查是一个强力提示**(服务器指令+技能),而不是硬性阻断。预生成钩子已在路线图上。
- **提取需要一个智能、大上下文的模型**(Gemini Flash-Lite 每次会话约0.5美分;我的12B本地测试模型能理解所有内容,但在严格的结构化通过测试中失败——本地运行至少需要~27-30B模型并有真正的16k+上下文)。
- **它还很早期,由一个人构建**(1196项测试通过,但它在npm上只发布了三天)。
本地SQLite,AGPL协议,图永远不会离开你的机器。仓库:[link]
我很希望大家能去"折磨"它——尤其是:在你的设置中,你的智能体是否会在无提示的情况下自动检查已弃用方案?还是需要那个强力提示?这是我急需从真实世界获得答案的问题。
相似文章
我曾以为智能体记忆只是存储问题。现在我不这么认为了。
一位开发者重新思考智能体记忆,认为它不仅仅是存储,而是提出了一个带有角色和激活场的活图,用以赋予过去信息适当的权威和上下文。
rohitg00/agentmemory
agentmemory 是一个开源的持久化记忆层,专为 AI 编程智能体(Claude Code、Cursor、Gemini CLI、Codex CLI 等)设计。它通过知识图谱、置信度评分和混合搜索技术,借助 MCP、Hooks 或 REST API,为智能体提供跨会话的长期记忆能力。该项目基于 iii 引擎构建,无需外部数据库,提供 51 个 MCP 工具。
@akshay_pachaar: 你的智能体记性很好,但理解力为零。大多数智能体记忆系统都在优化回忆能力。但更难的问题是……
一则关于智能体记忆中模式(Schema)约束重要性的讨论,介绍了 Zep AI 的开源 Graphiti 库,该库用于构建受约束实体和关系类型的时序知识图谱。
Agentic 项目存在记忆问题,所以我构建了一个小型技能来捕获决策上下文
作者构建了一个小型智能体技能,用于在 Agentic 开发过程中捕获决策上下文,解决了编码会话中上下文丢失的问题。该技能原始捕获与决策相关的数据,以保留决策背后的原因,并计划后续构建一个处理层。
@pauliusztin_: 我研究了Cognee、Graphiti和agent-memory(来自Neo4j)如何构建它们的智能体记忆解决方案,并将整个架构整理成了一篇文章。
关于Cognee、Graphiti和Neo4j的智能体记忆解决方案的研究总结,这些方案都使用知识图谱和向量搜索,并基于LLM进行数据提取。