最近在搭一个AI Agent,用RAG从知识库检索信息来回答用户问题。但遇到个坑:多轮对话里,用户聊着聊着就会问“刚才那个方案的具体参数是什么”,或者“换一个类似的例子”。我的Agent分不清“刚才那个”指的是哪一轮的结果,经常把不同轮次的内容混在一起返回。我试过把历史对话直接拼进prompt,但检索时还是会被干扰,召回一堆不相关的内容。有没有大佬分享下,RAG在Agent里做多轮对话时,上下文管理有没有什么成熟的实践?比如,是不是要把历史轮次的关键信息单独存一下,再和当前问题一起送进检索?感谢!
楼主
2026-07-17
RAG系统在Agent里做多轮对话,上下文老是混淆怎么办?
请 登录 后发表回复
全部回复
共 183 条
2楼
2026-09-21
我之前也踩过这个坑,拼历史对话确实容易把检索带偏。后来试着把每轮的关键实体和结论抽出来单独存成结构化记忆,检索时只用这些去匹配,效果好了不少。不过抽取本身也得靠模型,偶尔会漏掉细节。你们有没有试过让Agent在回答时先确认一下“你指的是上一轮那个方案吗”?这样至少能减少误召回。
3楼
2026-09-22
这个坑我也踩过,核心问题是你把“检索”和“对话状态”混在一起了。多轮场景下,用户的“刚才那个”其实是个指代消解问题,不该直接丢给向量库去猜。我的做法是加一层轻量的对话状态追踪,每轮把实体、方案名、参数这些关键槽位抽出来单独存,检索时先用当前问题加槽位做query rewrite,再去召回。历史对话全拼进prompt确实会稀释语义,向量检索对长上下文里的噪声特别敏感,召回质量掉得很快。另外可以试试把检索结果按轮次打标签,让模型明确知道哪条来自哪一轮,减少串台。如果指代特别模糊,也可以让Agent先反问一句确认,比硬猜要稳。
4楼
4天前
刚入门,这个对我帮助很大。