0Pricing
AI Agents · 课时

子问题分解策略

对于复杂的多跳问题,将其拆分为子问题,分别回答后再合成为最终答案。

子问题分解策略 是 CoddyKit 上的免费 AI Agents 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。

单跳检索失败时

有些问题需要多次查找:

“比较 Apple 在 2022 年的收入与 Microsoft 在 2023 年的收入。”

一次相似度搜索无法检索到这两个事实;您需要 TWO 个子查询。

子问题分解

LlamaIndex SubQuestionQueryEngine 会将一个问题拆分为多个子问题,分别回答,然后进行合成:

from llama_index.core.query_engine import SubQuestionQueryEngine
from llama_index.core.tools import QueryEngineTool, ToolMetadata

query_engine_tools = [
    QueryEngineTool(
        query_engine=apple_index.as_query_engine(),
        metadata=ToolMetadata(name='apple', description='Financial data for Apple Inc.')
    ),
    QueryEngineTool(
        query_engine=msft_index.as_query_engine(),
        metadata=ToolMetadata(name='microsoft', description='Financial data for Microsoft Corp.')
    )
]

engine = SubQuestionQueryEngine.from_defaults(query_engine_tools=query_engine_tools)
response = engine.query('Compare 2022 revenue of Apple vs 2023 revenue of Microsoft')

工作原理

  1. LLM 分析问题
  2. LLM 生成子问题,并将每个子问题分配给一个工具
  3. 并行运行每个子问题
  4. LLM 根据各个子问题的答案合成最终答案

查看子问题

您可以查看引擎生成的子问题:

response = engine.query('Compare X and Y')
for sq in response.metadata.get('sub_qa', []):
    print(sq.sub_q.sub_question, '->', sq.answer)

何时使用子问题

  • 比较类查询(X 与 Y)
  • 多来源聚合
  • 包含多个不同事实的问题

何时不应使用

  • 简单问答——会增加延迟和成本
  • 单文档上下文
  • 无法从分解中获益的任务

使用 LLM 进行路由

子问题引擎可以与 RouterQueryEngine 配合,先决定究竟要查询哪些索引集合:

from llama_index.core.query_engine import RouterQueryEngine

router = RouterQueryEngine.from_defaults(query_engine_tools=query_engine_tools)
# Routes 'apple revenue' to apple index, 'msft margins' to msft, etc.

编程代理中的子问题

对于编写代码的代理,子问题是一种规划步骤的方法:

“构建 REST API” → 子任务:设计模型;子任务:编写增删改查处理器;子任务:添加身份验证。

成本影响

子问题会生成 N 个子查询,而不是 1 个。每个子查询都需要一次 LLM 调用和检索。请相应地安排预算——成本约为单跳查询的 3 到 4 倍。

与 ReAct 的比较

子问题强调事先规划,而 ReAct(下一门课程)强调逐步执行。对于已知可以分解的查询,子问题速度更快;对于探索性任务,ReAct 的适应性更好。

组合使用:ReAct + 子问题工具

最灵活的方式是使用 ReAct 代理,并将子问题引擎作为工具——每次“工具调用”本身都可以进一步分解为多个子查询。

评估子问题质量

跟踪 LLM 生成的子问题是否合理。如果不检查追踪记录,调试糟糕的分解结果会很困难。

分解使用场景

对于哪类问题,子问题分解最有用?

回顾

子问题分解会将一个复杂查询转换为多个简单查询——成本更高,但在比较类问题和多来源问题上能显著提高准确率。

常见问题解答

「子问题分解策略」课时是免费的吗?

是的 — 「子问题分解策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。

「子问题分解策略」这节课中我会学到什么?

对于复杂的多跳问题,将其拆分为子问题,分别回答后再合成为最终答案。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Agents 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「子问题分解策略」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Agents 课中编写并运行代码吗?

能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 文档加载器与解析器
  2. 索引层级:向量、树、关键词
  3. 查询引擎与响应合成
  4. 子问题分解策略
← 返回 AI Agents