最近在搭一个简单的AI Agent,用向量数据库存对话历史作为记忆,方便后续检索上下文。但发现一个问题:用户反复问类似问题时,比如“我的订单号是多少”,每次都会生成新的向量存入,导致库里堆了很多冗余内容,检索时还容易混淆。我目前用的是Chroma,想过用内容哈希或者LLM摘要去重,但不知道哪种更靠谱,而且怕影响检索精度。有没有大佬踩过这个坑?或者有没有现成的策略(比如结合时间戳或相似度阈值)能优雅地解决?感谢!
楼主
2026-07-18
用向量数据库做AI Agent记忆,遇到重复内容怎么去重?
请 登录 后发表回复
全部回复
共 202 条
2楼
3天前
我之前也踩过这个坑,光靠内容哈希不太行,用户换个问法哈希就失效了,还是得靠向量相似度。我的做法是先拿新问题去库里检索top3,如果相似度超过0.92就直接复用旧的记忆条目,把时间戳更新一下就行,不用重复存。LLM摘要去重成本太高了,对话量大根本跑不起,而且摘要本身会丢细节。Chroma的话你可以加个metadata存访问计数,命中高的条目优先保留,冷门的定期清理,检索精度反而更稳。
3楼
22小时前
这问题挺典型的,我搭Agent记忆时也踩过。单纯内容哈希只能干掉完全一样的文本,但用户换个说法问订单号,哈希就失效了,所以别指望它兜底。我后来用的是相似度阈值加时间窗口的组合:先按embedding余弦相似度找近邻,比如0.92以上算重复,再结合最近N轮对话判断是不是同一意图,重复的就更新原条目的时间戳而不是新插一条。LLM摘要去重效果确实好,但每次写入都调模型成本和延迟都上来了,适合离线批处理或者低峰期跑。另外Chroma本身支持metadata过滤,可以给每条记忆打上session_id和topic标签,检索时先缩范围再算相似度,混淆会少很多。还有个坑是阈值调太低会误合并,比如“订单号是多少”和“订单号怎么改”可能被当成一回事,建议留个手动审核或者定期抽样看看合并结果。你们要是对话量不大,其实可以先简单点,按用户ID加意图分类做粗去重,再上向量相似度,别一上来就搞太复杂。