实际RAG流程中用户追加要点问询的处理方案探讨
RAG落地中多轮对话场景的处理方案
针对你遇到的用户后续提问“再给我5个要点”的场景,结合实际落地经验,有以下几种可行的处理方式:
一、复用原始检索结果+对话历史补全
第一次调用Azure AI Search获取的5篇相关文档不要直接丢弃,而是缓存下来。当用户提出后续请求时,将以下内容一起传入大模型:
- 完整对话历史(原问题、AI第一次输出的Top5要点)
- 用户新提问“再给我5个要点”
- 缓存的5篇原始文档
同时在提示词中明确约束:从提供的文档中提取未在之前回复中提及的Top5要点,禁止重复已输出的内容。这种方式的优势是无需重复调用搜索服务,节省成本,且能保证要点始终围绕原主题的文档内容,避免检索偏差。
二、基于上下文重构检索Query后重新检索
如果判断原始文档的内容已经无法提取更多有效要点,或者用户的追问隐含了拓展维度的需求,可以先让大模型基于对话历史重构检索Query,再调用Azure AI Search获取新文档。
比如针对原问题“MS keynote的Top5要点”和新提问“再给我5个要点”,重构后的Query可以是:MS keynote的额外关键要点(不包含之前提到的[已输出要点列表])。
拿到新的检索文档后,结合对话历史和新文档,让大模型生成新的Top5要点。这种方式适合需要拓展内容范围的场景,但要注意Query重构的准确性,避免检索偏离主题。
三、混合策略(推荐落地)
实际落地中可以结合前两种方式:
- 优先尝试第一种方案,让大模型从缓存的原始文档中提取新要点;
- 在提示词中要求大模型判断是否还有未提取的有效内容,如果原始文档已无新信息,返回特定标识;
- 后台捕获该标识后,触发第二种方案,重构Query并重新检索,再生成回复。
落地注意事项
- 做好对话上下文的管理:需要存储原问题、每轮AI回复、检索到的文档内容或唯一标识,确保多轮对话的连贯性;
- 优化提示词约束:明确要求大模型避免重复内容,且要点必须来自提供的文档,减少幻觉;
- 合理缓存检索结果:针对同一用户的同一主题请求,缓存检索结果的有效期可以设置为会话内有效,降低搜索服务的调用频次。
内容的提问来源于stack exchange,提问作者JamesP




