在复杂的文档问答中,Agent 如何处理多跳(Multi-hop)推理问题?
在复杂的文档问答(Document Q&A)场景中,多跳推理(Multi-hop Reasoning) 指的是系统无法直接从单个文本片段中找到答案,而是需要跨越多个段落、多个文档,甚至结合不同的信息源,经过逻辑推导才能得出结论的过程。
传统的简单 RAG(检索增强生成)通常只进行一次检索(Retrieve)然后生成(Generate),这在面对多跳问题时往往会失败,因为答案的线索分散在不同位置。
Agent 通过引入规划(Planning)、工具使用(Tool Use)和记忆(Memory)机制来解决这个问题。以下是 Agent 处理多跳推理的核心策略和架构:
1. 问题分解(Query Decomposition / Sub-questioning)
这是最基础也是最有效的策略。Agent 不直接回答复杂问题,而是将其拆解为一系列简单的子问题。
- 工作原理:
- Agent 接收复杂查询(例如:“对比 A 公司和 B 公司在 2023 年的营收增长率,并说明谁更高”)。
- LLM 分析问题,生成子问题列表:
- 子问题 1:A 公司 2022 和 2023 年的营收是多少?
- 子问题 2:B 公司 2022 和 2023 年的营收是多少?
- Agent 分别针对子问题进行检索。
- 汇总检索到的信息,计算增长率,最后进行比较。
- 技术实现: 使用
Least-to-Most Prompting或 LangChain 中的MultiQueryRetriever/SubQuestionQueryEngine(LlamaIndex)。
2. 迭代式检索与推理(Iterative Retrieval / ReAct 框架)
这种方法让 Agent 像侦探一样,根据每一步发现的线索决定下一步的行动。通常基于 ReAct (Reason + Act) 模式。
- 工作流程:
- 思考 (Thought): Agent 分析当前问题,决定需要查找什么信息。
- 行动 (Action): Agent 生成检索词并调用检索工具。
- 观察 (Observation): Agent 阅读检索回来的片段(Chunk)。
- 判断: Agent 判断当前信息是否足够回答原问题?
- 如果不够(例如只查到了 A 公司的信息),它会利用当前上下文生成新的检索词(Context-aware Query Generation),进行下一轮检索(Next Hop)。
- 如果足够,则生成最终答案。
- 优势: 能够处理依赖关系。例如:“收购了 GitHub 的那家公司的 CEO 是谁?” Agent 必须先查“谁收购了 GitHub”(得到 Microsoft),然后利用“Microsoft”作为关键词去查“CEO 是谁”。
3. 引入知识图谱(GraphRAG)
对于实体关系复杂的多跳问题,纯向量检索(Vector Search)往往精度不足,因为向量相似度难以捕捉精确的逻辑关系。知识图谱(Knowledge Graph, KG)将文档转化为实体和关系的结构化网络。
- 如何解决多跳:
- 显式路径: 如果文档中提到 “Steve Jobs -> 创立 -> Apple” 和 “Apple -> 发布 -> iPhone”,图谱中这就形成了一条连通路径。
- 图遍历: Agent 可以直接在图谱上进行多跳遍历(Graph Traversal),从实体 A 沿着边走到实体 B,再走到实体 C,从而精准获取多跳答案。
- 结合方式: 现代架构通常采用 Hybrid RAG,即同时使用向量检索(寻找语义相关)和图谱检索(寻找逻辑相关)。
4. 树状/层级索引(Hierarchical Indexing)
为了处理跨越长距离上下文的推理,Agent 可以利用文档的层级结构。
- 父子块(Parent-Child Chunks): 检索时先匹配细粒度的“子块”(Child Chunk),如果匹配度高,则将该子块所属的更大的“父块”(Parent Chunk)或整段窗口调取出来给 LLM。
- 摘要索引: 先对每个文档生成摘要。Agent 先在摘要层级进行检索(第一跳),定位到相关文档后,再深入该文档内部进行详细检索(第二跳)。这有助于在海量文档中快速定位相关群组。
5. 记忆与暂存区(Memory & Scratchpad)
在多跳过程中,Agent 需要“记住”之前的推理结果,不能查了第二步忘了第一步。
- Scratchpad(草稿本): Agent 维护一个上下文窗口,记录中间步骤的推理结果(Intermediate Reasoning Steps)。
- Step 1 Result: GitHub was acquired by Microsoft.
- Step 2 Result: Microsoft CEO is Satya Nadella.
- Final Answer: Satya Nadella.
- 这种机制确保了信息在不同检索步骤之间的传递。
6. 自我反思与修正(Self-Reflection / Self-Correction)
在复杂的推理链中,某一步检索可能会出错或检索到无关信息(噪声)。
- 机制: Agent 在生成答案前,会启动一个“评估者(Evaluator)”角色。
- 流程:
- 检查检索到的文档是否真的包含答案?
- 检查推理逻辑是否闭环?
- 如果发现缺失,Agent 会主动触发回退(Backtracking)或重新制定检索计划,而不是强行生成幻觉(Hallucination)。
举例说明
用户提问: “对比特斯拉 Model 3 和比亚迪海豹的电池续航,哪款车更适合长途旅行?”
Agent 的处理流程(多跳推理):
- 规划 (Plan): 识别出需要两个关键数据点:Model 3 续航、海豹续航。
- 第一跳 (Hop 1):
- Action: 搜索 "特斯拉 Model 3 续航里程"。
- Observation: 检索到文档 A,显示 "Model 3 长续航版 CLTC 续航为 713km"。
- Memory: 记录 {Model 3: 713km}。
- 第二跳 (Hop 2):
- Action: 搜索 "比亚迪海豹 续航里程"。
- Observation: 检索到文档 B,显示 "海豹 700km 长续航版"。
- Memory: 记录 {BYD Seal: 700km}。
- 推理与比较 (Reasoning):
- 比较 713km 和 700km。虽然 Model 3 略高,但两者接近。
- Agent 可能会触发第三跳 (Hop 3)(高级 Agent):搜索 "Model 3 vs 海豹 充电速度" 或 "实际高速续航折扣率",以提供更准确的 "长途旅行" 建议。
- 生成 (Generation): 综合以上所有检索到的片段和推理过程,生成最终建议。
总结
Agent 处理多跳推理的核心在于打破“一次检索定终身”的限制,将其转化为“规划 -> 检索 -> 阅读 -> 再检索 -> 综合”的动态循环过程。通过结合CoT(思维链)、工具调用和结构化索引(如知识图谱),Agent 能够模拟人类专家的查阅和思考方式。