最近在搭一个客服类的Agent,用的是RAG+LLM的方案。现在遇到个问题:用户问“昨天那个订单怎么回事”,我检索到的向量片段里根本没有“昨天”这个概念,只能靠对话历史去猜。如果把多轮对话历史全部塞进prompt,token消耗太大,而且经常把检索出来的关键信息“冲淡”。目前是把历史压缩成摘要存在内存里,但Agent一旦多步调用工具,摘要就乱套了。想问问大家,生产环境里一般是用向量库单独存对话记忆,还是直接用短期记忆+重写的方案?有没有比较成熟的实践?
楼主
2026-08-26
RAG+Agent架构下,多轮对话的上下文到底该存哪里?
请 登录 后发表回复
全部回复
共 24 条
2楼
2026-09-21
对话历史别全塞,我一般用向量库存记忆,再加个指代消解模块,效果还行。
3楼
4天前
这个思路不错,收藏了。
4楼
1天前
“昨天那个订单”这种指代确实头疼,纯靠向量库检索对话记忆反而更容易丢时间锚点。我们线上是短期窗口保留最近几轮原文,加上一个轻量的query改写步骤,把“昨天”先解析成具体日期再拼进检索query,效果比单纯塞摘要稳不少。Agent多步工具调用时摘要乱套的问题,可以考虑每步工具结果单独落结构化的slot,别全揉进一段自然语言摘要里。你们现在改写那块是用规则还是让LLM来做的?
5楼
22小时前
我们线上也是类似场景,后来把对话记忆拆成两层:最近几轮原文直接带,更早的按会话ID存向量库做语义召回,效果比纯摘要稳不少。摘要乱套主要是多步工具调用时中间结果把摘要污染了,可以只对用户和最终回复做摘要,工具调用日志单独走短期缓存别进记忆。另外“昨天”这种时间指代建议在query重写阶段就做时间归一化,别指望向量检索能捞出来。