AI神功 KNOWLEDGE BASE
内功05 · RAG 检索增强生成·第 10 关 / 36 约 4 分钟

INNER 05 / RAG / 06 · ENGINE v1

多轮对话与查询改写(Module 4: ConvoRAG & Query Transformation)

本关练习:编写多轮对话指代消解与复杂对比问题拆解器。

约 4 分钟·免费阅读·整理自 AI 现代必修课 · 内功05·来源精读 ↓·直接做题 ↓

30 SECONDS / 30 秒看懂

这一关只解决一件事:StepByStep-RAG 的第四模块 ConvoRAG 解决了单轮 RAG 走向真实聊天应用的最大拦路虎——多轮对话中的指代消解(Coreference Resolution)。例如:第 1 轮用戶问“Grand Palace 酒店的豪华海景房多少钱一晚?

  • 设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子(
  • 5 分);
  • 针对“A 与 B 有什么区别”这类对比型问题,设计拆解为两条独立检索子查询(Sub-queries)的 JSON 输出格式,避免单次检索只召回 A 而漏掉 B;

3 MINUTES / 3 分钟拆解

先看来源里的例子:PDF 本关任务(来源)

输入
用戶在第 1 轮问了“Pro 版会员的年费是多少?”,第 2 轮追问:“那它跟企业旗舰版在 API 每分钟调用限额上有什么区别?”

发生了什么

来源要求:设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子( / 5 分); / 针对“A 与 B 有什么区别”这类对比型问题,设计拆解为两条独立检索子查询(Sub-queries)的 JSON 输出格式,避免单次检索只召回 A 而漏掉 B;

输出

参考答案:参考答案:ConvoRAG 多轮指代消解与对比子查询拆解器 【前置查询改写与拆解器 Prompt(Query Rewriter & Decomposer)】 请结合 <chat_history> 将用戶的 <latest_question> 转化为面向向量检索引擎的优化查询 JSON。 规则说明: 1. 闲聊豁免:若用戶最新输入仅为感谢、寒暄或确认(如“谢谢”、“明白了”),将 need_retrieval 设为 false,无需检索知

术语拆开

Query Rewriting
把口语追问改写成可检索的完整问题。
子查询
从复杂问题拆出的独立检索问题。

为什么有效

来源核心原理:StepByStep-RAG 的第四模块 ConvoRAG 解决了单轮 RAG 走向真实聊天应用的最大拦路虎——多轮对话中的指代消解(Coreference Resolution)。例如:第 1 轮用戶问“Grand Palace 酒店的豪华海景房多少钱一晚?”,第 2 轮用戶紧接着问“那它包含免费双人早餐和机场接送吗?”。如果直接拿第 2 轮原话“那它包含免费双人早餐和机场接送吗?”去向量库检索,由于丢失了主语“Grand Palace 酒店豪华海景房”,检索器会把全库所有提到早餐的无关文档搜出来 ! 因此 , 在检索之前必须增加一步独立查询改写器 (Contextual Query Rewriter),并可结合 RAG Zero to Hero Guide 中的 HyDE(假设性文档嵌入) 或 Sub-Query Decomposition(多子问题拆解)。

结构长什么样

设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子(
5 分);
针对“A 与 B 有什么区别”这类对比型问题,设计拆解为两条独立检索子查询(Sub-queries)的 JSON 输出格式,避免单次检索只召回 A 而漏掉 B;
说明若用戶第 2 轮只是说“谢谢,讲得很清楚”,系统应如何跳过向量库检索以节省延迟。 第四阶段:高阶生产篇(第 7‒8 关)——知识图谱 GraphRAG、流式应用与评估体系

用户只说“它”时,为什么不能直接拿原话检索?

SOURCE READING / 来源精读

StepByStep-RAG 的第四模块 ConvoRAG 解决了单轮 RAG 走向真实聊天应用的最大拦路虎——多轮对话中的指代消解(Coreference Resolution)。例如:第 1 轮用戶问“Grand Palace 酒店的豪华海景房多少钱一晚?

逐点读懂

  1. 设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子(
  2. 5 分);
  3. 针对“A 与 B 有什么区别”这类对比型问题,设计拆解为两条独立检索子查询(Sub-queries)的 JSON 输出格式,避免单次检索只召回 A 而漏掉 B;

怎么对应本关练习

先读 30 秒与 3 分钟拆解,再读本关原文与实验,最后做客观题和实操题;答案在下方。

例子在哪

本关任务与参考答案见页面下方;来源为本册 PDF 对应关卡。

本关先记住:设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子(

SOURCESStepByStep-RAG · ConvoRAG ↗PDF 第 6 关

核心原理

StepByStep-RAG 的第四模块 ConvoRAG 解决了单轮 RAG 走向真实聊天应用的最大拦路虎——多轮对话中的指代消解(Coreference Resolution)。

例如:第 1 轮用戶问“Grand Palace 酒店的豪华海景房多少钱一晚?”,第 2 轮用戶紧接着问“那它包含免费双人早餐和机场接送吗?”。如果直接拿第 2 轮原话“那它包含免费双人早餐和机场接送吗?

”去向量库检索,由于丢失了主语“Grand Palace 酒店豪华海景房”,检索器会把全库所有提到早餐的无关文档搜出来 !

因此 , 在检索之前必须增加一步独立查询改写器 (Contextual Query Rewriter),并可结合 RAG Zero to Hero Guide 中的 HyDE(假设性文档嵌入) 或 Sub-Query Decomposition(多子问题拆解)。

第 6 关实操练习题:编写多轮对话指代消解与复杂对比问题拆解器

任务背景

用戶在第 1 轮问了“Pro 版会员的年费是多少?”,第 2 轮追问:“那它跟企业旗舰版在 API 每分钟调用限额上有什么区别?”

通关硬性要求(满分 12.5 分)

1. 设计前置 Query Rewriter 提示词:结合历史对话 <chat_history> 与当前追问 <latest_question>,将含代词“它”的句子改写为主语完整、可独立检索的句子(

4.5 分);

2. 针对“A 与 B 有什么区别”这类对比型问题,设计拆解为两条独立检索子查询(Sub-queries)的 JSON 输出格式,避免单次检索只召回 A 而漏掉 B(5 分);

3. 说明若用戶第 2 轮只是说“谢谢,讲得很清楚”,系统应如何跳过向量库检索以节省延迟(3 分)。 第四阶段:高阶生产篇(第 7‒8 关)——知识图谱 GraphRAG、流式应用与评估体系

PRACTICE / 本关练习 · 本地规则 + 覆盖检查

编写多轮对话指代消解与复杂对比问题拆解器

本地检查在你的浏览器里完成,不上传。覆盖检查需要先登录(免费注册),并把这段答案发送到服务器计算一次,算完即弃、不存档,需你点同意;只核对本关评分项覆盖的方向,不在评分项里的题目不会被检查。

0 字未保存

评分项

评分项加载中…

结构分 — / 12.5 分

查看参考答案与得分点 先自己写,再打开+

参考答案与得分要点

参考答案:ConvoRAG 多轮指代消解与对比子查询拆解器

【前置查询改写与拆解器 Prompt(Query Rewriter & Decomposer)】

请结合 <chat_history> 将用戶的 <latest_question> 转化为面向向量检索引擎的优化查询 JSON。 规则说明:

1. 闲聊豁免:若用戶最新输入仅为感谢、寒暄或确认(如“谢谢”、“明白了”),将 need_retrieval 设为

false,无需检索知识库。

2. 指代消解:将“它、这个、上述方案”等代词替换为历史对话中的完整专有名称。

3. 对比拆解:若问题涉及两个或多个对象的对比(如“A 和 B 在某方面的区别”),必须拆分为多条独立的单实

体检索语句放入 sub_queries 数组,确保两边资料都能被召回。 <chat_history> User: Pro 版会员的年费是多少? Assistant: Pro 版会员标准年费为 1,999 元/年。 </chat_history> <latest_question>那它跟企业旗舰版在 API 每分钟调用限额上有什么区别?</latest_question>

【标准输出 JSON】

{ "need_retrieval": true, "standalone_query": "Pro 版会员与企业旗舰版会员在 API 每分钟调用限额(RPM)上有什么区别?", "sub_queries": [ "Pro 版会员 API 每分钟调用限额 RPM 配额规定", "企业旗舰版会员 API 每分钟调用限额 RPM 配额规定" ] } 得分要点拆解:准确将代词“它”还原为“Pro 版会员”(4.5 分);将对比问题拆解为两条独立单实体检索语句 `sub_queries`(5 分);设置 `need_retrieval` 布尔开关过滤纯闲聊轮次(3 分)。 第 7 关

网页永久免费。完整 PDF 会按顺序发给留邮箱的读者,不转售、不群发广告。

留邮箱,获取完整 PDF ↗
← 上一关 下一关 →