问题分解与多跳检索
问题分解(Query Decomposition)将复杂问题拆成多个子问题,分别检索所需事实,再合成答案。拆分可以由预设模板完成,也可以由模型根据问题生成;执行器按照子问题之间的依赖安排检索、比较与计算。
当后一个子问题必须用到前一次检索发现的实体、编号或其他事实时,就需要多跳检索。独立子问题可以并行查询,有依赖的子问题则要等待上一跳结果。
“今年境内差旅报销的提交期限比去年缩短了多少?境内报销审批后多久付款?境外的提交期限也与境内一样吗?”这句话至少需要四项信息。把整句转成一个向量,可能只找到今年境内提交期限;模型随后顺着同一条证据回答其余部分,就会把未找到的事实补出来。
假设会话已确认“今年”指 2026 年,知识库包含 2026 年境内提交期限 30 个自然日、2025 年版 60 个自然日、审批后 5 个工作日支付,但没有境外提交期限。
先写出答案需要哪些事实
分解时先列出原问题要求回答的项目,并标出哪些是需要检索的事实、哪些是取得事实后才能完成的比较或计算:
| 任务 | 要取得的内容 | 依赖 |
|---|---|---|
| q1 | 2026 年境内差旅提交期限与计时起点 | 无 |
| q2 | 2025 年境内差旅提交期限与计时起点 | 无 |
| q3 | 2026 年制度中的境内报销审批后支付期限 | 无 |
| q4 | 2026 年境外提交期限及适用条款 | 无 |
| c1 | 比较 q1、q2 的单位和起点,再计算变化 | q1、q2 |
| c2 | 判断境外提交期限是否与境内相同 | q1、q4 |
q1 到 q4 可以并行。c1、c2 需要等待取证结果,计算器不能在缺少条款时替系统猜一个数。
任务中还需要包含“计时起点”。即使两份制度都给出天数,若一份从差旅结束算起,另一份从审批完成算起,也不能直接做差。自然日与工作日也不能直接相减。因此,检索结果除了数值,还应保留单位、起算事件和适用范围。
有些后续查询只能在检索之后形成
前面的版本比较可一次规划。另一类问题需要先发现中间实体。例如,用户问:“TRAVEL-2026-01 指定的海外补充办法,对境外报销提交有什么要求?”系统必须先找到主制度引用了哪一份补充办法,再按真实编号检索下一份文档。
在这个例子中,可以提前安排“先查主制度、再查补充办法”这两个步骤,但第二步的文档编号要等第一步执行后才能填写。
检索主制度
→ 读取实际引用的补充办法编号
→ 校验引用与版本
→ 用该编号检索补充办法
→ 查其中的境外提交条款不能提前生成一个貌似合理的补充办法名称。也不应把第一轮整段自由回答直接当第二轮查询,因为其中可能混有解释和猜测。后续任务只接收有来源的中间结果,例如 referenced_policy_id 及其引用位置。
IRCoT 原论文让逐句推理与检索交替进行,利用已有信息决定下一步查什么。上面的任务依赖表则把待检索事项与计算关系显式记录下来,两者的具体执行方式不同。
多跳检索也可以按预设流程运行。例如,程序固定读取主制度的引用字段,再查对应文档,无需模型每轮选择工具。如果下一步查什么也需要根据结果临时决定,就可以使用 Agentic RAG 来执行这些子任务。问题分解提供任务及依赖,Agent 则可以在执行期间调整后续动作。
从子问题生成检索请求
分解与 Multi-Query 的区别可以直接从任务看出来:q1 和 q2 需要不同版本的事实,必须分别回答;“提交期限”和“申报时限”则可能是同一事实的两种检索表达。每个子问题内部仍可使用多查询,但应继续遵守该子问题的过滤条件。
执行时,q1 可以转换成检索句“2026 年境内差旅结束后多久内提交报销”,并附上 policy_year=2026、travel_scope=domestic 两项过滤条件。q2 使用相同的检索意图,将年份限定为 2025。检索句负责匹配内容,过滤条件负责保留原问题中的版本与范围约束。
如果用模型生成任务计划,可以给每项任务记录 id、kind、question、constraints 和 depends_on。执行器先运行没有依赖的检索任务,再将结果传给比较或计算任务。ID 是否唯一、依赖是否存在、是否成环,需要在执行前校验;c1 只有在 q1、q2 都提供了可比较的期限后才能计算。
合成前检查每个结果的状态
本例执行后,可以得到如下记录:
q1:supported,30,自然日,差旅结束后,有条款引用
q2:supported,60,自然日,差旅结束后,有条款引用
q3:supported,5,工作日,审批后,有条款引用
q4:missing,未取得适用的境外条款
c1:supported,缩短 30 个自然日,依赖 q1、q2
c2:blocked,缺少 q4最终回答应分别给出境内期限变化与支付期限,并说明无法从现有资料确认境外是否相同。缺一项不必隐藏其余已验证的答案,也不能把境内数字填进缺口。
missing 与 error 也要区分。没有检索到适用条款,可能是语料缺失或检索失败;接口超时则是执行错误。二者可采用不同恢复动作,但都不能被当作“制度没有期限”的证据。达到预算后停止,并清楚说明尚未确认的事项。
排查错误时,可以对照用户需求与任务表,再查看每项证据和依赖,分别确认问题是否拆全、资料是否找到、比较条件是否一致。
如果问题需要补充适用原则,可以使用 Step-back Prompting 生成上位问题。例如,查询“行程取消后还要按普通差旅期限提交吗”时,额外检索期限规则的适用范围。它补充的是理解具体问题所需的背景,问题分解则要列出原问题必须分别取证的事项。
原始来源
- IRCoT: Interleaving Retrieval with Chain-of-Thought Reasoning:检索与中间推理交替进行的原始研究。