查询分解是什么
复合问题(两个产品谁更快、某项规定的三个条件分别是什么)用一句话向量化后,语义会被平均掉,检索出来的文档往往只覆盖其中一半。查询分解先把原问题拆成若干可以独立检索的子问题,分别取回证据再汇总生成。拆法有两类:一次性把问题拆完并行检索,适合子问题彼此独立的比较型问题;逐步推理、每走一步检索一次,适合下一问依赖上一问答案的链式问题,IRCoT 就是后者的代表做法。
基本信息
| 触发条件 | 多实体比较、多条件并列、需要链式推理的问题 |
|---|---|
| 子问题数量 | 通常 2~4 个,过多会让延迟与成本失控 |
| 实现方式 | 主模型一次性分解,或用小模型配合规则 |
| 证据汇总 | 各子问题分别检索后合并去重,再统一重排与生成 |
| 代表做法 | IRCoT:推理与检索交替进行 |
典型使用场景
- 对比型问题:先分别取 A、B 两方的指标再对比,避免只召回其中一方
- 多条件合规问答:把条件逐条检索,防止漏掉某个分句对应的条款
- 链式推理:第一步结果决定第二步的检索词,如先查版本再查该版本的参数
- 长文档里的组合问题:同一份文档不同章节的内容需要拼合回答
- 失败归因:把分解出的子问题写进日志,能看出是拆错还是检索错
分解示例
分解示例
原问题:A 产品的检索速度和 B 产品相比差别在哪?
子问题 1:A 产品检索的延迟表现如何?
子问题 2:B 产品检索的延迟表现如何?
→ 分别检索 → 去重合并 → 对比生成分解策略对比
| 策略 | 适合 | 代价与风险 |
|---|---|---|
| 一次性并行分解 | 子问题相互独立 | 分解错误会同时污染所有子问题 |
| 逐步推理分解 | 后一问依赖前一问答案 | 轮次增加,延迟不可控 |
| IRCoT 交替检索 | 多跳推理 | 每步都要检索,成本最高 |
| 不分解直接检索 | 简单事实型问题 | 复合问题召回严重不足 |
分解后的子问题要保留原始实体限定(产品线、版本、时间范围),否则每个子问题都变成泛化提问,检索回来的材料互相矛盾。