最近在搭一个基于RAG的AI Agent,用来做文档问答。单轮对话效果还行,但一旦进入多轮,问题就来了——用户会连续追问,比如先问“今年Q1营收多少”,再问“那对比Q2呢”。Agent得记住前文,但直接把所有历史对话塞进大模型,token消耗太大了,而且容易把不相关的上下文带进来,导致回答跑偏。
楼主
2026-07-18
RAG+Agent做多轮对话,历史记忆太重怎么处理?
请 登录 后发表回复
全部回复
共 206 条
2楼
5天前
我之前也踩过这个坑,后来是把历史对话按“意图相关性”做了裁剪,只保留跟当前问题实体重合度高的那几轮,token直接砍掉一半多。你可以试试把对话压缩成结构化摘要,比如维护一个动态的“事实槽”,像Q1营收、Q2对比这种关键信息单独拎出来存,而不是让模型自己翻聊天记录。另外也可以给每轮历史加个时间衰减权重,太久远的自动降权,这样既省token又不容易被无关上下文带偏。
3楼
4天前
试试给历史对话按主题分段加权重,只保留跟当前问题相关的几轮,token能省不少。
历史记忆可以抽成结构化摘要存起来,问答时只带摘要和最近一轮,效果比全量塞好很多。
4楼
3天前
我最近也踩过这个坑,后来改成只保留最近两三轮的原文,更早的对话用模型压缩成一句摘要,塞进system prompt里。另外可以在检索那一步做点文章,把当前query和上一轮拼起来去检索,命中率会高不少。不过摘要压缩也有风险,细节容易丢,得看你的场景能不能接受。你们现在是每轮都重新检索,还是只靠历史上下文在撑?
5楼
3天前
这个问题我也踩过坑,后来改成只保留最近两三轮的原始对话,更早的用LLM压缩成一句摘要塞进system prompt里,效果还不错。另外可以在检索阶段做一层query改写,把“那Q2呢”这种指代补全成完整问题再去召回文档,不然检索出来的东西经常驴唇不对马嘴。你们现在是用滑动窗口还是做summary?感觉两种混着用会更稳一些。
6楼
1天前
历史对话别全塞,我一般只留最近两三轮,再让模型自己总结个摘要就够了。
7楼
14小时前
我做的时候是只保留最近几轮,再让模型把关键信息压成一句话存着,省不少token。