009、记忆模块(三):知识图谱的构建与检索增强
昨天深夜调一个对话Agent,遇到个典型问题:用户问“帮我推荐几个适合带孩子周末去的地方,要能学点知识”。系统检索了最近的几条对话记录,返回了“科技馆、自然博物馆”,看起来还行对吧?但用户紧接着补了一句“上次去过的那个恐龙展厅就别提了”。问题来了——系统完全没意识到,上周用户刚在聊天里提过“上周带孩子去了自然博物馆的恐龙展”。这种场景下,单纯的向量检索就像只记住了碎片化的对话快照,却理不清事件之间的关联。这时候,就该知识图谱上场了。为什么向量检索不够用很多刚做Agent的兄弟容易陷入一个误区:把所有记忆都塞进向量数据库,靠相似度搜索搞定一切。实际跑起来会发现,有些关系它根本抓不住。比如“用户上周去了自然博物馆”和“用户不想再去恐龙展”这两条信息,在向量空间里可能距离很远,但逻辑上紧密关联。纯向量检索容易漏掉这种跨句子的逻辑链条。更麻烦的是时间线和事件演进。用户三个月前说“孩子在学钢琴”,上周说“钢琴课停了”,今天问“有什么音乐类的活动推荐”——理想的回答应该避开钢琴推荐,但很多系统会把三个月前的“钢琴”记录也拉出来,导致推荐失效。这种时间衰减和状态变更,向量检索处理起来很吃力。知识图谱怎么在Agent里落地别被“知识图谱”这个词吓到,在Agent的上下文里,我们不需要搞成企业级那种庞然大物。核心就三块:实体、关系、属性。拿刚才的场景举例:# 简单示例,实际结构会更复杂些memory_graph