最近在折腾一个简单的AI Agent,想让它记住之前的对话内容,就试着用了向量数据库(Chroma)来存历史消息的embedding。但实际跑的时候发现,检索出来的结果经常和当前问题没啥关系,比如用户问“刚才推荐的餐厅叫什么”,它可能返回的是几轮前聊天气的内容,而不是餐厅名字。我用的模型是text-embedding-ada-002,分块策略就是按对话轮次每轮存一条,也没做啥特殊处理。想问问大家,是不是我索引方式有问题?还是说这种场景下单纯靠向量相似度不够,需要加点metadata过滤或者权重调整?求指点,有点懵。
楼主
1天前
做AI Agent时用向量数据库做记忆存储,检索结果老是不太对怎么办?
请 登录 后发表回复
全部回复
共 2 条
2楼
16小时前
这个情况我也遇到过,单纯靠向量相似度确实容易跑偏,特别是对话记忆这种对上下文依赖很强的场景。建议试试把对话轮次的时间戳或者角色信息加到metadata里,检索时先按时间范围过滤一轮,再算相似度,效果会好很多。另外分块策略也可以优化一下,比如把“用户问+助手答”整个作为一条记录,而不是每轮拆开,这样检索到的信息更完整。
3楼
15小时前
这种场景我踩过类似的坑,单靠向量相似度确实容易跑偏,尤其是历史对话里相似表述太多的时候。建议你先给每条记录加个时间戳或者轮次ID做metadata,检索时强制过滤掉当前轮之后的内容,这样至少能排除未来信息干扰。另外可以试试把query里带时间指向的词(比如“刚才”)单独抽出来做关键词匹配,跟向量结果做加权融合。你用的ada-002本身质量不错,但对话记忆这种强上下文依赖的任务,光靠embedding的全局语义匹配确实不够稳。