全书阅读:https://github.com/xiaer-ai42/infinite_archives/blob/main/books/Advanced_Prompting.md
提示工程进阶:思维链与结构化提示
书籍大纲
第一章:提示工程基础与演进
- 1.1 从命令到对话:交互范式的转变
- 1.2 提示工程的核心原则
- 1.3 Zero-shot与Few-shot学习
- 1.4 提示模板设计模式
- 1.5 常见陷阱与避坑指南
- 1.6 提示工程的理论基础
第二章:思维链推理(Chain-of-Thought)
- 2.1 思维链的发现与原理
- 2.2 标准思维链与自洽性思维链
- 2.3 零样本思维链(Zero-shot CoT)
- 2.4 思维链的适用场景与局限
- 2.5 思维链的变体:Least-to-Most、Decomposed
- 2.6 思维链的数学基础与理论解释
第三章:高级推理技术
- 3.1 思维树(Tree of Thoughts)
- 3.2 思维图(Graph of Thoughts)
- 3.3 自我反思与自评估
- 3.4 ReAct:推理与行动的结合
- 3.5 自我一致性(Self-Consistency)
- 3.6 多路径推理与集成
第四章:结构化提示设计
- 4.1 结构化提示的优势
- 4.2 角色设定与人设提示
- 4.3 任务分解与步骤化
- 4.4 输出格式控制
- 4.5 上下文窗口优化
- 4.6 模板化与参数化提示
第五章:多轮对话与上下文管理
- 5.1 对话历史管理策略
- 5.2 长对话的压缩与摘要
- 5.3 动态上下文选择
- 5.4 对话状态追踪
- 5.5 多任务对话架构
- 5.6 实战:构建智能对话系统
第六章:工具调用与外部知识
- 6.1 Function Calling原理
- 6.2 工具描述与接口设计
- 6.3 多工具编排策略
- 6.4 检索增强生成(RAG)
- 6.5 知识注入与提示融合
- 6.6 实战:构建工具使用型Agent
第七章:提示优化与自动化
- 7.1 自动提示优化(APO)
- 7.2 基于梯度的提示优化
- 7.3 提示压缩与蒸馏
- 7.4 A/B测试与迭代优化
- 7.5 提示版本管理
- 7.6 提示评估框架
第八章:行业应用与最佳实践
- 8.1 代码生成与编程辅助
- 8.2 数据分析与洞察提取
- 8.3 内容创作与营销文案
- 8.4 教育与个性化学习
- 8.5 企业知识管理与问答
- 8.6 提示工程的未来趋势

第三章:高级推理技术
3.1 思维树(Tree of Thoughts)
3.1.1 思维树的诞生背景
思维链(Chain-of-Thought)通过让模型逐步推理显著提升了复杂问题的解决能力。然而,思维链存在一个根本性局限:它是线性的。当面对需要探索多个可能性、回溯和比较的场景时,线性的推理路径往往会导致模型过早承诺于某个次优解。
思维树(Tree of Thoughts, ToT)正是为了解决这一局限而诞生。由Yao等人于2023年提出,ToT将问题求解过程建模为一棵搜索树,其中每个节点代表一个"思维状态"(thought state),每个分支代表一个可能的推理步骤。通过系统性地探索、评估和回溯,ToT能够在解空间中进行更有效的搜索。
3.1.2 思维树的核心架构
思维树的框架包含四个关键组件:
1. 思维分解(Thought Decomposition)
将复杂问题分解为中间思维步骤。每个思维应该是一个足够小的单元,既能被独立评估,又能与其他思维组合形成完整的解决方案。
问题:规划一次为期7天的日本旅行 思维分解示例: - 思维1:确定旅行主题(文化探索/美食之旅/自然风光) - 思维2:选择主要城市(东京/京都/大阪/北海道) - 思维3:安排交通方式(JR Pass/国内航班) - 思维4:预订住宿类型(酒店/民宿/胶囊旅馆) - 思维5:列出必看景点 - 思维6:预算分配2. 思维生成器(Thought Generator)
给定当前树状态,生成候选的下一个思维。生成策略可以分为两类:
# 采样策略示例 prompt = f""" 当前状态:{current_state} 问题:{problem} 请生成{k}个不同的下一步思维。 """ # 提议策略示例 prompt = f""" 当前状态:{current_state} 问题:{problem} 请提出{k}个可能的下一步思维,编号1-{k}。 每个思维应该是: - 具体的、可执行的 - 与之前思维不同的 - 有助于解决问题的 """3. 状态评估器(State Evaluator)
评估当前思维状态的价值,判断其是否有希望通向正确解。评估方法包括:
评估维度示例(1-10分): - 可行性:这个思维在现实中是否可行? - 连贯性:与之前思维的一致性如何? - 进展性:是否向目标迈进? - 创造性:是否提供了新的视角? 评估提示模板: "评估以下思维状态解决问题的前景: [思维状态] 从1-10评分,10分表示非常有望解决问题。 输出格式:分数:X,理由:..."4. 搜索算法(Search Algorithm)
在思维树上进行搜索的核心算法。两种主要策略:
广度优先搜索(BFS):
def tot_bfs(initial_state, problem, steps, breadth): states = [initial_state] for step in range(steps): new_states = [] for state in states: # 生成候选思维 thoughts = generate_thoughts(state, problem, breadth) # 评估每个思维 for thought in thoughts: new_state = state + [thought] score = evaluate_state(new_state, problem) new_states.append((new_state, score)) # 保留得分最高的b个状态 new_states.sort(key=lambda x: x[1], reverse=True) states = [s[0] for s in new_states[:breadth]] return states[0] # 返回最佳路径深度优先搜索(DFS):
def tot_dfs(state, problem, max_depth, threshold): if len(state) >= max_depth: return evaluate_solution(state, problem) thoughts = generate_thoughts(state, problem, k=5) for thought in sorted(thoughts, key=lambda t: evaluate(state + [t]), reverse=True): new_state = state + [thought] score = evaluate_state(new_state, problem) if score >= threshold: # 有希望则继续深入 result = tot_dfs(new_state, problem, max_depth, threshold) if result is not None: return result # 否则回溯,尝试下一个思维 return None # 当前路径无解3.1.3 思维树实战:24点游戏
24点游戏是展示思维树威力的经典案例。给定4个数字,使用加减乘除运算得到24。
问题:使用数字 [4, 5, 6, 10] 得到 24 思维树搜索过程: 根节点:[4, 5, 6, 10] 分支1(选择两个数运算): ├── 4+5=9 → [9, 6, 10] │ ├── 9+6=15 → [15, 10] → 15+10=25 ✗ │ ├── 9*6=54 → [54, 10] → 54-10=44 ✗ │ └── 9-6=3 → [3, 10] → 无法得到24 ├── 6*4=24 → [24, 5, 10] │ ├── 24+5=29 → [29, 10] ✗ │ └── 24-10=14 → [14, 5] ✗ ├── 10-4=6 → [6, 5, 6] │ ├── 6*5=30 → [30, 6] → 30-6=24 ✓ │ └── ... └── 10-6=4 → [4, 4, 5] └── 4*5=20 → [20, 4] → 20+4=24 ✓ 找到两个解: 1. (10-6)*5+4 = 24 2. (10-4)*5-6 = 243.1.4 思维树提示模板
以下是一个通用的思维树提示模板:
# 思维树推理框架 你是一个使用思维树方法的问题求解专家。 ## 问题 {problem} ## 当前状态 {current_state} ## 可用数字/资源 {available_resources} ## 任务 1. 生成3个不同的下一步思维 2. 每个思维评估其前景(1-10分) 3. 选择最有希望的思维继续 ## 输出格式 ### 思维1 - 操作:[具体操作] - 理由:[为什么这个操作有意义] - 前景评分:X/10 ### 思维2 ... ### 思维3 ... ### 最优选择 选择思维X,理由:...3.1.5 思维树的适用场景与局限
适用场景:
局限性:
3.2 思维图(Graph of Thoughts)
3.2.1 从树到图:推理的更一般形式
思维树假设思维之间是严格的层级关系——每个思维只有一个父节点。然而,真实的推理过程往往更加复杂:思维之间可能存在依赖、组合、反馈等非线性关系。
思维图(Graph of Thoughts, GoT)将推理过程建模为一个有向图,其中:
3.2.2 思维图的核心操作
GoT定义了一组基本图操作:
1. 分支(Branching)
从一个思维生成多个后继思维 A /|\ B C D2. 聚合(Aggregation)
将多个思维合并为一个综合思维 B C D \ | / \ | / E聚合是GoT相比ToT的关键优势,允许将不同推理路径的结果整合。
3. 改进(Refinement)
在现有思维基础上迭代改进 A → A' → A'' → A'''4. 回溯(Backtracking)
放弃当前路径,返回之前的思维状态 A → B → C ✗ ↓ 返回A → D → E ✓5. 循环(Looping)
思维之间形成反馈循环,持续改进 ┌──────┐ ↓ │ A → B → C ─┘3.2.3 思维图提示实现
class GraphOfThoughts: def __init__(self, problem): self.problem = problem self.graph = {} # adjacency list self.thoughts = {} # id -> thought content self.scores = {} # id -> evaluation score def add_thought(self, thought, parents=None): """添加新思维节点""" thought_id = generate_id() self.thoughts[thought_id] = thought self.graph[thought_id] = [] if parents: for parent in parents: self.graph[parent].append(thought_id) return thought_id def aggregate(self, thought_ids): """聚合多个思维""" combined_context = "\n".join([ self.thoughts[tid] for tid in thought_ids ]) aggregation_prompt = f""" 综合以下多个推理路径的结果: {combined_context} 请整合这些思路,形成一个统一、连贯的综合结论。 保留各路径的优点,消除矛盾。 """ aggregated = llm_generate(aggregation_prompt) return self.add_thought(aggregated, parents=thought_ids) def refine(self, thought_id, feedback=None): """改进现有思维""" thought = self.thoughts[thought_id] refinement_prompt = f""" 当前思维:{thought} {f"反馈意见:{feedback}" if feedback else ""} 请改进这个思维,使其更加: - 准确 - 完整 - 有见地 """ improved = llm_generate(refinement_prompt) new_id = self.add_thought(improved, parents=[thought_id]) return new_id3.2.4 思维图实战案例:文档写作
写作任务天然适合思维图建模,因为不同章节可以并行发展,最后聚合为完整文档。
写作任务:撰写一篇关于AI伦理的文章 思维图结构: [主题确定:AI伦理] | ┌────────────────┼────────────────┐ ↓ ↓ ↓ [隐私问题] [偏见与公平] [责任归属] | | | [数据收集] [训练数据偏见] [AI决策透明度] [数据使用] [算法公平性] [人类监督] | | | └────────────────┼────────────────┘ ↓ [章节聚合] | [综合讨论] | [结论与建议] 关键操作: 1. 三个主题并行探索(分支) 2. 各主题下深入展开(改进链) 3. 整合为完整文章(聚合)3.2.5 思维图与思维树的对比