你的智能体讨厌遍历知识图谱?那就别让它走了。
摘要
作者讨论了代理遍历知识图谱进行记忆存储的低效问题,并提出了IWE,一个将图遍历整合为单次确定性调用的工具,以提高速度和可靠性。
现在有一种观点批评知识图谱作为代理的内存不够高效,这是正确的。代理读取页面时,会根据链接标题猜测哪些链接重要,然后读取这些链接,如此往复。一个需要三跳的事实可能需要四次工具调用,每次几秒钟,而其中一半的读取内容都是噪音。图的连接性越强,问题越严重。这些都是事实。我开发了一个Markdown知识图谱工具,对此我完全认同。代理在遍历图方面表现糟糕。通常的结论是放弃图结构:将所有内容扁平化为一堆文件,添加嵌入索引,让语义搜索直接跳转到相关页面。这通过丢弃结构来降低遍历成本。但链接本身是信息:一个决策链接到它影响的组件,一个注意事项链接到它发布的版本。语义搜索能找到与问题相关的页面,但无法处理“并带来那些页面依赖的内容”这种情况。代理找到了决策,却忽略了背后的约束,只能基于片面信息自信地工作。我的解决方案更简单:保留图结构,但不再让代理自己遍历。遍历过程由工具处理。只需一次调用:iwe squash decisions/drop-the-cache-layer -d 2,引擎会深入跟踪链接两层,返回一个整合后的文档,包含页面及其所有依赖内容,内联显示。原本需要五六次串行调用并猜测链接标题的过程,现在只需一次调用,毫秒级完成,无需猜测,因为引擎无需预测链接背后的内容,直接读取即可。而且这是确定性的:相同的存储、相同的查询、相同的结果,我还可以在终端中运行相同命令来查看代理看到的内容。当检索结果有问题时,我调试的是查询,而不是相似性分数。如果你的想法是“直接用grep”,那我们立场基本一致。因为这是文件系统,是纯Markdown,grep仍然适用于所有内容。引擎只在grep无能为力时介入:grep找到匹配的行,但你还需要手动遍历链接来收集依赖内容。squash就是当你厌倦了这种手动操作时会构建的工具。诚实的局限:这里完全没有用到嵌入。词法搜索加上图扩展在处理“关于规范范围的笔记”这类查询时表现出色,但在处理“那件事情,用完全不同方式表述”的查询时则较弱。如果你的记忆是成千上万个没有值得保留结构的松散片段,那么扁平化加语义搜索可能更适合你。声明:这个工具是IWE,一个我维护的开源Markdown知识图谱CLI/LSP(使用Rust编写,MIT许可证,本地优先)。好奇大家的看法:如果你使用图状记忆,你的代理是自己遍历它,还是有其他工具为其组装?如果你采用扁平文件加嵌入,你真的会怀念图结构吗?
相似文章
@pauliusztin_: 我花了几个月优化GraphRAG检索。但结果发现我优化错了方向……最大的知识…
一份关于为AI智能体优化知识图谱摄入的详细指南,提出了一个五步流水线(提取、解析、嵌入、去重、路由),以防止图谱损坏并提高检索质量。
我的代理悄悄地损坏了它自己的记忆图谱,而我正在尝试一些方法。
作者描述了一个问题:LLM 代理的记忆图谱因错误的边而损坏,并提议使用声明的本体来验证写入和遍历。对 120 条故意破坏的遍历进行的测试捕获了所有错误。
我用一年时间在知识图谱上构建智能体记忆。以下是让我耗费数月的5个错误
作者分享了在使用知识图谱和本体论为AI智能体构建统一记忆层时犯下的五个错误,强调智能体记忆是数据建模问题而非检索问题。
我构建了一个比GraphRAG便宜1000倍的知识图谱,你可以用智能体查询它
作者构建了一个比GraphRAG便宜得多的替代方案,用于使用智能体查询知识图谱,使其更易于各种应用访问。
@akshay_pachaar: 你的智能体记性很好,但理解力为零。大多数智能体记忆系统都在优化回忆能力。但更难的问题是……
一则关于智能体记忆中模式(Schema)约束重要性的讨论,介绍了 Zep AI 的开源 Graphiti 库,该库用于构建受约束实体和关系类型的时序知识图谱。