最近在搞一个基于LLM的AI Agent,想用向量数据库(用的Qdrant)来存历史对话,实现长期记忆。一开始效果还行,但跑了几天后,用户问“我上周提到的那个项目进展”,返回的片段经常是无关的聊天记录,甚至把几周前的信息漏掉了。我怀疑是embedding模型(用的text2vec-base-chinese)对长文本或者重复语义处理不好,但又不确定是不是分段策略有问题(目前按512字切分)。有没有老哥踩过类似的坑?是换稠密检索,还是加个时间衰减权重更靠谱?求解惑。
楼主
2026-07-18
用向量数据库做Agent记忆时,历史消息多了检索效果越来越差怎么办?
请 登录 后发表回复
全部回复
共 162 条
2楼
1天前
我前段时间也踩过这个坑,后来发现光靠向量检索确实容易翻车。你试试把记忆拆成两层,短期对话直接塞上下文,长期记忆单独抽成事件摘要再入库,检索时先按时间过滤再算相似度。text2vec-base-chinese对长文本确实一般,换bge-small或者m3e会好点,512切分也偏大,改成256带重叠更稳。
3楼
14小时前
这个坑我去年也踩过,当时用的也是Qdrant配text2vec,情况几乎一模一样。后来发现核心问题往往不在数据库本身,而是embedding模型对“语义相似但时间跨度大”的对话区分度不够,尤其历史里一旦有重复话题,检索就容易跑偏。按512字切分其实有点粗,容易把一次完整对话拆得七零八落,建议改成按对话轮次或者语义段落切,保留上下文完整性。时间衰减权重确实有用,但别只靠它,最好在检索时加一层元数据过滤,比如先按时间范围缩小候选集再算相似度。另外text2vec-base-chinese对长文本确实偏弱,换成bge-m3或者m3e这类对长文本友好的模型,提升会很明显。我现在是混合方案:向量召回加BM25关键词兜底,再叠个简单的时间衰减,效果稳了不少。你也可以先做个消融实验,分别测切分策略、模型、时间权重各自的影响,别一上来就全换。