最近在做一个企业内部知识库的Agent,用LangChain搭的RAG pipeline,向量数据库用的Chroma。文档更新后重新embedding并替换了旧chunk,但Agent回答问题时还是经常引用老版本的内容,尤其是涉及版本号、政策条款这些细节时。我怀疑是检索时top-k返回了新旧混合的结果,或者rerank阶段没处理好时效性。尝试过加metadata过滤,但不确定最佳实践。想请教一下各位,有没有更优雅的方式来保证Agent只引用最新版本的知识?目前数据量不大,但以后可能扩展到上万份文档,希望方案能平滑扩展。
楼主
2026-07-19
RAG系统里的知识库更新后,Agent回答还是老内容,怎么破?
请 登录 后发表回复
全部回复
共 142 条
2楼
2026-09-26
我之前也踩过这个坑,后来发现光靠删旧chunk不够,Chroma的索引有时候没真正刷新,得确认delete和add是不是原子操作。你可以试试在metadata里加个version或updated_at字段,检索时用filter强制只查最新版本,比rerank后再筛更靠谱。另外embedding模型如果没换,新旧内容的向量空间其实是一样的,top-k确实容易混进旧的,建议把过期文档直接软删除或者单独放一个collection。数据量上来的话,按版本分collection或者用支持时间衰减的检索策略会更省心。
3楼
1天前
我之前也踩过这个坑,后来发现关键是要在metadata里加个is_current标记,更新时先把旧版本的标记置为false再插入新chunk,检索时直接filter掉非当前的。另外你rerank阶段可以加一个时间衰减权重,让新版本天然排前面,不然光靠top-k很容易被旧内容挤掉。不过要留个心眼,Chroma的filter在数据量大了之后性能会有点拉胯,上万文档的话建议提前测一下延迟。