Chapter 07

高级技巧

Self-Consistency、Tree-of-Thought、ReAct——超越单次回答的高级推理框架

Tree-of-Thought(ToT)

探索多条推理路径

Chain-of-Thought 是线性推理(一条路走到底),而 Tree-of-Thought(树状思维,ToT)允许模型在每个推理步骤探索多个分支,评估每个分支的前景,然后选择最有希望的路径继续深入——类似于国际象棋程序的搜索树。

ToT 特别适合需要规划、创意探索、多步问题分解的任务,如:写作规划、代码架构设计、商业策略制定。

# ToT 提示词模板
想象三位不同的专家在一起解决这个问题。
每位专家将分享自己的思考步骤,
然后相互讨论并可以修正自己的想法。

问题:我们公司有一款 B2B SaaS 产品,
月活跃用户 5000,但续约率只有 60%,
请提出改善策略。

专家A(产品角度)的思考:
专家B(运营角度)的思考:
专家C(客户成功角度)的思考:

三位专家讨论后得出的共同建议:

ToT 的程序化实现

def tree_of_thought_solve(problem: str, breadth: int = 3, depth: int = 2) -> str:
    """
    ToT 实现:
    breadth = 每步探索的分支数
    depth = 思考深度(层数)
    """
    # 步骤1:生成初始候选方案
    propose_prompt = f"""对于问题:{problem}

请提出 {breadth} 种完全不同的解决思路,
每种思路用一段话描述(不要评价优劣):

思路1:
思路2:
思路3:"""

    # 步骤2:评估每个候选方案
    evaluate_prompt = """对于以上每种思路,从以下维度打分(1-10):
- 可行性:实施难度
- 影响力:预期效果
- 资源需求:所需资源
- 风险:潜在风险

给出每种思路的综合评分,选出最优思路。"""

    # 步骤3:对最优思路深化展开
    elaborate_prompt = """对最高分的思路,提供详细的实施计划:
1. 具体步骤(时间线)
2. 所需资源
3. 成功指标
4. 风险缓解措施"""

    # 实际调用 LLM(此处省略 API 调用代码)
    return "[ToT 推理结果]"

ReAct 框架

推理与行动的结合

ReAct(Reasoning + Acting)框架由 Google 和普林斯顿大学提出,让 LLM 交替进行推理(Thought)行动(Action),通过观察行动结果来调整后续推理。这是现代 AI Agent 系统的核心模式。

# ReAct 格式示例
你是一个能使用工具的研究助手。
每次回应按以下格式:

Thought: 分析当前情况,决定下一步
Action: 工具名称[参数]
Observation: [工具返回的结果]
... (重复 Thought/Action/Observation)
Final Answer: 最终答案

可用工具:
- search[查询]:搜索互联网
- calculate[表达式]:计算数学表达式
- read_file[路径]:读取文件内容

问题:特斯拉 2024 年 Q3 的交付量是多少?
与 Q2 相比增长了多少百分比?

Thought: 我需要查找特斯拉 2024 年 Q3 和 Q2 的交付数据。
Action: search[特斯拉 2024 Q3 交付量]
Observation: 特斯拉 2024 Q3 交付量为 462,890 辆
Thought: 现在需要 Q2 数据。
Action: search[特斯拉 2024 Q2 交付量]
Observation: 特斯拉 2024 Q2 交付量为 443,956 辆
Thought: 现在计算增长率
Action: calculate[(462890 - 443956) / 443956 * 100]
Observation: 4.26
Final Answer: 特斯拉 2024 Q3 交付量为 462,890 辆,
较 Q2 的 443,956 辆增长约 4.26%。

元认知提示(Metacognitive Prompting)

让 AI 检查自己的答案

元认知提示要求模型在给出答案后,主动反思和评估自己的回答质量,类似于人类的"检查作业"。

请回答以下问题,然后按照下方格式进行自我评估:

问题:量子计算机能用来破解 RSA-2048 加密吗?

回答:[你的回答]

自我评估:
1. 确定性:我对这个回答有多确定?(0-100%)
2. 知识边界:有哪些我不确定或知识可能过时的地方?
3. 潜在错误:如果我的回答有误,最可能错在哪里?
4. 建议验证方式:用户应该怎么验证这个回答的准确性?
什么时候使用高级技巧?

Prompt Chaining:任务分解

将复杂任务分解为链式步骤

对于超出单次上下文能力的复杂任务,可以将其分解为多个链式步骤,每步的输出作为下一步的输入:

步骤1:提取关键信息(文档摘要) ↓ 输出:结构化摘要 步骤2:深度分析(基于摘要) ↓ 输出:分析报告草稿 步骤3:验证与优化(审查草稿) ↓ 输出:最终报告
def prompt_chain(document: str) -> str:
    """多步骤提示链示例"""

    # 步骤1:提取关键信息
    extract_prompt = f"""从以下文档中提取关键数据点,
以 JSON 格式返回(字段:主题、关键数据、时间范围、结论):

{document}"""
    key_info = llm_call(extract_prompt)

    # 步骤2:基于提取信息生成分析
    analyze_prompt = f"""基于以下关键信息,生成深度分析报告:

{key_info}

重点分析:趋势、风险、机会"""
    analysis = llm_call(analyze_prompt)

    # 步骤3:生成执行摘要
    summary_prompt = f"""将以下分析压缩为 3 个要点的执行摘要,
每点不超过 30 字,适合高管快速阅读:

{analysis}"""
    return llm_call(summary_prompt)

各高级技巧的核心原理对比

CoT vs ToT:线性 vs 树状搜索
CoT 是一条确定的推理线(深度优先的单路径),ToT 是宽度优先+剪枝的树状搜索。CoT 成本低、速度快,适合答案路径相对清晰的推理任务;ToT 成本高(N个分支×M层深度次调用),适合探索空间大、创意性强的开放问题。在实践中,"3位专家讨论"的单轮 ToT 是最常用的轻量变体。
ReAct 的 Thought/Action/Observation 循环
Thought 是模型对当前状态的分析和下一步决策;Action 是调用外部工具(搜索、计算、API);Observation 是工具返回结果,成为下一轮 Thought 的上下文。这个循环使模型能够利用实时外部信息,弥补参数知识的截止日期限制。现代 AI Agent 框架(LangChain、LlamaIndex)本质上都是 ReAct 循环的工程化实现。
元认知提示的价值
要求模型明确表达不确定性,而非总是给出自信答案。这在医疗、法律、金融等高风险场景中至关重要——用户需要知道模型在哪些地方"知道自己不知道"。元认知提示还能防止模型"幻觉":当被要求说明验证方式时,模型需要意识到答案是否有明确来源。
Prompt Chaining 与 Agent 的区别
Prompt Chaining 是预先设计的固定流程:每步的提示词由开发者写死,步骤顺序不变。Agent 是动态决策:模型自己决定下一步调用哪个工具、以什么参数调用,循环次数不固定。Chaining 更可预测和安全;Agent 更灵活但更难调试和控制。生产环境中,能用 Chaining 解决的问题尽量不要用 Agent。

ReAct 实现的关键工程细节

最大迭代次数(max_iterations)
ReAct 循环没有自然终止点,必须在代码层面设置上限(通常 5-15 次)。超过上限时强制终止并返回当前最优答案。如果不设置上限,模型可能陷入"工具调用风暴"——每次调用都得到新信息,触发新的工具调用,永远无法输出 Final Answer。生产环境建议:max_iterations=10 + 费用限制双保险。
工具调用的输出截断
工具返回的 Observation 可能非常长(如搜索结果、文件内容)。原始 Observation 直接放入上下文会迅速耗尽 token 限制,且大量无关信息会干扰模型推理。最佳实践:对 Observation 设置 max_tokens(如 500 token 上限),超出时截断并加 "[已截断,如需更多请再次查询]" 提示,让模型主动决定是否需要更细粒度的查询。
工具错误处理
当工具调用失败(网络错误、API 限频、参数错误),不应直接让整个 ReAct 循环崩溃。标准做法:将错误信息作为 Observation 返回给模型("Error: 搜索 API 返回 429,请稍后重试"),让模型自行决定是重试、换用其他工具还是基于已知信息给出答案。模型的自我纠错能力使 ReAct 在工具不稳定时仍能工作。
Thought 的调试价值
ReAct 的 Thought 字段记录了模型的内部推理过程,是 Agent 调试最重要的信息来源。生产日志中应当保存完整的 Thought/Action/Observation 序列(而非只记录 Final Answer),以便分析模型在哪一步决策出错。工具调用日志 + Thought 链是 Agent 系统故障排查的核心依据。

高级技巧的成本评估

# 不同高级技巧的成本对比(以 GPT-4o 为例)
# 假设单次基础调用 = 1 个单位

cost_comparison = {
    "基础提示词": 1,
    "CoT(单次)": 1.5,          # 输出 token 更多
    "Self-Consistency N=5": 7.5,   # 5次 × 1.5倍
    "Self-Consistency N=10": 15,   # 用于高精度场景
    "ToT(3分支×2层)": 10,       # 需要多轮调用
    "ReAct(平均5次工具调用)": 8, # 每次循环一次 API 调用
    "Prompt Chain(3步)": 4,     # 3次独立调用
}

# 建议:根据任务价值选择成本匹配的技巧
# 日常文本生成 → 基础提示词
# 有标准答案的推理 → CoT 或 Self-Consistency
# 创意规划 → ToT(轻量版:单轮3专家)
# 需要实时数据/工具 → ReAct/Agent
# 长文档多步处理 → Prompt Chaining
高级技巧的常见误用

本章小结

本章核心要点