Prompt Engineering 高级技巧:CoT/ToT/ReAct 等进阶方法论实战

前言

💡 痛点:写的 Prompt 效果不稳定?复杂任务 AI 总是在"胡说八道"?如何让 AI 的推理更准确、输出更可控?

🎯 解决方案 :掌握 Prompt Engineering 进阶方法论,从基础的 Few-shot 到高级的 CoT、ToT、ReAct,让 AI 输出质量提升 50%+。

Prompt Engineering(提示词工程)是与大模型交互的核心技能。本文将系统讲解从基础到高级的提示词技巧:
#mermaid-svg-hb6gNkAt5oAeo014{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hb6gNkAt5oAeo014 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hb6gNkAt5oAeo014 .error-icon{fill:#552222;}#mermaid-svg-hb6gNkAt5oAeo014 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hb6gNkAt5oAeo014 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hb6gNkAt5oAeo014 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hb6gNkAt5oAeo014 .marker.cross{stroke:#333333;}#mermaid-svg-hb6gNkAt5oAeo014 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hb6gNkAt5oAeo014 p{margin:0;}#mermaid-svg-hb6gNkAt5oAeo014 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hb6gNkAt5oAeo014 .cluster-label text{fill:#333;}#mermaid-svg-hb6gNkAt5oAeo014 .cluster-label span{color:#333;}#mermaid-svg-hb6gNkAt5oAeo014 .cluster-label span p{background-color:transparent;}#mermaid-svg-hb6gNkAt5oAeo014 .label text,#mermaid-svg-hb6gNkAt5oAeo014 span{fill:#333;color:#333;}#mermaid-svg-hb6gNkAt5oAeo014 .node rect,#mermaid-svg-hb6gNkAt5oAeo014 .node circle,#mermaid-svg-hb6gNkAt5oAeo014 .node ellipse,#mermaid-svg-hb6gNkAt5oAeo014 .node polygon,#mermaid-svg-hb6gNkAt5oAeo014 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hb6gNkAt5oAeo014 .rough-node .label text,#mermaid-svg-hb6gNkAt5oAeo014 .node .label text,#mermaid-svg-hb6gNkAt5oAeo014 .image-shape .label,#mermaid-svg-hb6gNkAt5oAeo014 .icon-shape .label{text-anchor:middle;}#mermaid-svg-hb6gNkAt5oAeo014 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hb6gNkAt5oAeo014 .rough-node .label,#mermaid-svg-hb6gNkAt5oAeo014 .node .label,#mermaid-svg-hb6gNkAt5oAeo014 .image-shape .label,#mermaid-svg-hb6gNkAt5oAeo014 .icon-shape .label{text-align:center;}#mermaid-svg-hb6gNkAt5oAeo014 .node.clickable{cursor:pointer;}#mermaid-svg-hb6gNkAt5oAeo014 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hb6gNkAt5oAeo014 .arrowheadPath{fill:#333333;}#mermaid-svg-hb6gNkAt5oAeo014 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hb6gNkAt5oAeo014 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hb6gNkAt5oAeo014 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hb6gNkAt5oAeo014 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hb6gNkAt5oAeo014 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hb6gNkAt5oAeo014 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hb6gNkAt5oAeo014 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hb6gNkAt5oAeo014 .cluster text{fill:#333;}#mermaid-svg-hb6gNkAt5oAeo014 .cluster span{color:#333;}#mermaid-svg-hb6gNkAt5oAeo014 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hb6gNkAt5oAeo014 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hb6gNkAt5oAeo014 rect.text{fill:none;stroke-width:0;}#mermaid-svg-hb6gNkAt5oAeo014 .icon-shape,#mermaid-svg-hb6gNkAt5oAeo014 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hb6gNkAt5oAeo014 .icon-shape p,#mermaid-svg-hb6gNkAt5oAeo014 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hb6gNkAt5oAeo014 .icon-shape .label rect,#mermaid-svg-hb6gNkAt5oAeo014 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hb6gNkAt5oAeo014 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hb6gNkAt5oAeo014 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hb6gNkAt5oAeo014 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 📝 Prompt Engineering
基础技巧

角色/格式/示例
进阶技巧

CoT/ToT/ReAct
高级技巧

Agent/Chain/Generation
工程实践

优化/调试/评估
Few-shot
格式约束
角色扮演
Chain of Thought
Tree of Thought
ReAct
Prompt Chaining
Generation
Self-Consistency
迭代优化
A/B 测试
质量评估


一、基础技巧回顾

1.1 Prompt 的核心要素

#mermaid-svg-O7DStmZgk4yuYhd9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-O7DStmZgk4yuYhd9 .error-icon{fill:#552222;}#mermaid-svg-O7DStmZgk4yuYhd9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O7DStmZgk4yuYhd9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O7DStmZgk4yuYhd9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O7DStmZgk4yuYhd9 .marker.cross{stroke:#333333;}#mermaid-svg-O7DStmZgk4yuYhd9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O7DStmZgk4yuYhd9 p{margin:0;}#mermaid-svg-O7DStmZgk4yuYhd9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster-label text{fill:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster-label span{color:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster-label span p{background-color:transparent;}#mermaid-svg-O7DStmZgk4yuYhd9 .label text,#mermaid-svg-O7DStmZgk4yuYhd9 span{fill:#333;color:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 .node rect,#mermaid-svg-O7DStmZgk4yuYhd9 .node circle,#mermaid-svg-O7DStmZgk4yuYhd9 .node ellipse,#mermaid-svg-O7DStmZgk4yuYhd9 .node polygon,#mermaid-svg-O7DStmZgk4yuYhd9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-O7DStmZgk4yuYhd9 .rough-node .label text,#mermaid-svg-O7DStmZgk4yuYhd9 .node .label text,#mermaid-svg-O7DStmZgk4yuYhd9 .image-shape .label,#mermaid-svg-O7DStmZgk4yuYhd9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-O7DStmZgk4yuYhd9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-O7DStmZgk4yuYhd9 .rough-node .label,#mermaid-svg-O7DStmZgk4yuYhd9 .node .label,#mermaid-svg-O7DStmZgk4yuYhd9 .image-shape .label,#mermaid-svg-O7DStmZgk4yuYhd9 .icon-shape .label{text-align:center;}#mermaid-svg-O7DStmZgk4yuYhd9 .node.clickable{cursor:pointer;}#mermaid-svg-O7DStmZgk4yuYhd9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-O7DStmZgk4yuYhd9 .arrowheadPath{fill:#333333;}#mermaid-svg-O7DStmZgk4yuYhd9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-O7DStmZgk4yuYhd9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-O7DStmZgk4yuYhd9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O7DStmZgk4yuYhd9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-O7DStmZgk4yuYhd9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O7DStmZgk4yuYhd9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster text{fill:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 .cluster span{color:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-O7DStmZgk4yuYhd9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-O7DStmZgk4yuYhd9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-O7DStmZgk4yuYhd9 .icon-shape,#mermaid-svg-O7DStmZgk4yuYhd9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O7DStmZgk4yuYhd9 .icon-shape p,#mermaid-svg-O7DStmZgk4yuYhd9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-O7DStmZgk4yuYhd9 .icon-shape .label rect,#mermaid-svg-O7DStmZgk4yuYhd9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O7DStmZgk4yuYhd9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-O7DStmZgk4yuYhd9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-O7DStmZgk4yuYhd9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 完整 Prompt
🎭 角色设定
📋 任务描述
📏 格式要求
🔒 约束条件
例 示例
💡 上下文

Prompt 核心要素:

要素 说明 示例
角色 指定 AI 的身份 "你是一位资深 Python 开发者"
任务 明确要做什么 "请帮我审查这段代码"
格式 输出结构要求 "请用 JSON 格式返回"
约束 边界和限制 "不要输出任何代码"
示例 Few-shot 示例 提供 3 个输入-输出对
上下文 额外信息 相关背景知识

1.2 基础 Prompt 模板

python 复制代码
"""
基础 Prompt 模板
"""
BASIC_PROMPT = """
🎭 角色:{role}

📋 任务:{task}

📏 格式要求:
{format_requirements}

🔒 约束条件:
{constraints}

📌 示例:
{examples}

💡 上下文:
{context}

开始执行任务。
"""

# 使用示例
prompt = BASIC_PROMPT.format(
    role="资深数据分析师",
    task="分析以下销售数据,找出增长趋势",
    format_requirements="1. 用表格展示数据\n2. 给出关键发现\n3. 提供建议",
    constraints="只分析提供的范围内的数据",
    examples="Q1: 100万 → Q2: 120万 → 增长20%",
    context="这是我们公司2024年的季度销售数据"
)

二、Few-shot Learning(少样本学习)

2.1 核心思想

#mermaid-svg-ntplcPt81zyrsPAF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ntplcPt81zyrsPAF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ntplcPt81zyrsPAF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ntplcPt81zyrsPAF .error-icon{fill:#552222;}#mermaid-svg-ntplcPt81zyrsPAF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ntplcPt81zyrsPAF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ntplcPt81zyrsPAF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ntplcPt81zyrsPAF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ntplcPt81zyrsPAF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ntplcPt81zyrsPAF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ntplcPt81zyrsPAF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ntplcPt81zyrsPAF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ntplcPt81zyrsPAF .marker.cross{stroke:#333333;}#mermaid-svg-ntplcPt81zyrsPAF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ntplcPt81zyrsPAF p{margin:0;}#mermaid-svg-ntplcPt81zyrsPAF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ntplcPt81zyrsPAF .cluster-label text{fill:#333;}#mermaid-svg-ntplcPt81zyrsPAF .cluster-label span{color:#333;}#mermaid-svg-ntplcPt81zyrsPAF .cluster-label span p{background-color:transparent;}#mermaid-svg-ntplcPt81zyrsPAF .label text,#mermaid-svg-ntplcPt81zyrsPAF span{fill:#333;color:#333;}#mermaid-svg-ntplcPt81zyrsPAF .node rect,#mermaid-svg-ntplcPt81zyrsPAF .node circle,#mermaid-svg-ntplcPt81zyrsPAF .node ellipse,#mermaid-svg-ntplcPt81zyrsPAF .node polygon,#mermaid-svg-ntplcPt81zyrsPAF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ntplcPt81zyrsPAF .rough-node .label text,#mermaid-svg-ntplcPt81zyrsPAF .node .label text,#mermaid-svg-ntplcPt81zyrsPAF .image-shape .label,#mermaid-svg-ntplcPt81zyrsPAF .icon-shape .label{text-anchor:middle;}#mermaid-svg-ntplcPt81zyrsPAF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ntplcPt81zyrsPAF .rough-node .label,#mermaid-svg-ntplcPt81zyrsPAF .node .label,#mermaid-svg-ntplcPt81zyrsPAF .image-shape .label,#mermaid-svg-ntplcPt81zyrsPAF .icon-shape .label{text-align:center;}#mermaid-svg-ntplcPt81zyrsPAF .node.clickable{cursor:pointer;}#mermaid-svg-ntplcPt81zyrsPAF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ntplcPt81zyrsPAF .arrowheadPath{fill:#333333;}#mermaid-svg-ntplcPt81zyrsPAF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ntplcPt81zyrsPAF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ntplcPt81zyrsPAF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ntplcPt81zyrsPAF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ntplcPt81zyrsPAF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ntplcPt81zyrsPAF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ntplcPt81zyrsPAF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ntplcPt81zyrsPAF .cluster text{fill:#333;}#mermaid-svg-ntplcPt81zyrsPAF .cluster span{color:#333;}#mermaid-svg-ntplcPt81zyrsPAF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ntplcPt81zyrsPAF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ntplcPt81zyrsPAF rect.text{fill:none;stroke-width:0;}#mermaid-svg-ntplcPt81zyrsPAF .icon-shape,#mermaid-svg-ntplcPt81zyrsPAF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ntplcPt81zyrsPAF .icon-shape p,#mermaid-svg-ntplcPt81zyrsPAF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ntplcPt81zyrsPAF .icon-shape .label rect,#mermaid-svg-ntplcPt81zyrsPAF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ntplcPt81zyrsPAF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ntplcPt81zyrsPAF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ntplcPt81zyrsPAF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 无示例
3-5个示例
1个示例
Zero-shot
直接回答
Few-shot
学习模式
One-shot
模式匹配

为什么 Few-shot 有效?

  • 让模型从示例中学习"模式"
  • 减少歧义,明确期望的输出格式
  • 引导模型理解任务的细微差别

2.2 示例选择策略

#mermaid-svg-CpDodUiQWd9kHwSz{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CpDodUiQWd9kHwSz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CpDodUiQWd9kHwSz .error-icon{fill:#552222;}#mermaid-svg-CpDodUiQWd9kHwSz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CpDodUiQWd9kHwSz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CpDodUiQWd9kHwSz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CpDodUiQWd9kHwSz .marker.cross{stroke:#333333;}#mermaid-svg-CpDodUiQWd9kHwSz svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CpDodUiQWd9kHwSz p{margin:0;}#mermaid-svg-CpDodUiQWd9kHwSz .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CpDodUiQWd9kHwSz .cluster-label text{fill:#333;}#mermaid-svg-CpDodUiQWd9kHwSz .cluster-label span{color:#333;}#mermaid-svg-CpDodUiQWd9kHwSz .cluster-label span p{background-color:transparent;}#mermaid-svg-CpDodUiQWd9kHwSz .label text,#mermaid-svg-CpDodUiQWd9kHwSz span{fill:#333;color:#333;}#mermaid-svg-CpDodUiQWd9kHwSz .node rect,#mermaid-svg-CpDodUiQWd9kHwSz .node circle,#mermaid-svg-CpDodUiQWd9kHwSz .node ellipse,#mermaid-svg-CpDodUiQWd9kHwSz .node polygon,#mermaid-svg-CpDodUiQWd9kHwSz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CpDodUiQWd9kHwSz .rough-node .label text,#mermaid-svg-CpDodUiQWd9kHwSz .node .label text,#mermaid-svg-CpDodUiQWd9kHwSz .image-shape .label,#mermaid-svg-CpDodUiQWd9kHwSz .icon-shape .label{text-anchor:middle;}#mermaid-svg-CpDodUiQWd9kHwSz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CpDodUiQWd9kHwSz .rough-node .label,#mermaid-svg-CpDodUiQWd9kHwSz .node .label,#mermaid-svg-CpDodUiQWd9kHwSz .image-shape .label,#mermaid-svg-CpDodUiQWd9kHwSz .icon-shape .label{text-align:center;}#mermaid-svg-CpDodUiQWd9kHwSz .node.clickable{cursor:pointer;}#mermaid-svg-CpDodUiQWd9kHwSz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CpDodUiQWd9kHwSz .arrowheadPath{fill:#333333;}#mermaid-svg-CpDodUiQWd9kHwSz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CpDodUiQWd9kHwSz .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CpDodUiQWd9kHwSz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CpDodUiQWd9kHwSz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CpDodUiQWd9kHwSz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CpDodUiQWd9kHwSz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CpDodUiQWd9kHwSz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CpDodUiQWd9kHwSz .cluster text{fill:#333;}#mermaid-svg-CpDodUiQWd9kHwSz .cluster span{color:#333;}#mermaid-svg-CpDodUiQWd9kHwSz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CpDodUiQWd9kHwSz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CpDodUiQWd9kHwSz rect.text{fill:none;stroke-width:0;}#mermaid-svg-CpDodUiQWd9kHwSz .icon-shape,#mermaid-svg-CpDodUiQWd9kHwSz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CpDodUiQWd9kHwSz .icon-shape p,#mermaid-svg-CpDodUiQWd9kHwSz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CpDodUiQWd9kHwSz .icon-shape .label rect,#mermaid-svg-CpDodUiQWd9kHwSz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CpDodUiQWd9kHwSz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CpDodUiQWd9kHwSz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CpDodUiQWd9kHwSz :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 示例选择策略
多样化
代表性
难度递进
覆盖不同场景
选择典型案例
简单→复杂

策略 说明 效果
多样化 覆盖不同类型/场景 泛化能力强
代表性 选择典型案例 模式清晰
难度递进 从简单到复杂 理解更深入

2.3 实战代码

python 复制代码
"""
Few-shot Prompt 示例
"""
def create_few_shot_prompt(task_description, examples, query):
    """创建 Few-shot Prompt"""
    
    # 构建示例部分
    example_section = ""
    for ex in examples:
        example_section += f"""
输入:{ex['input']}

输出:{ex['output']}

---
"""
    
    prompt = f"""📋 任务:{task_description}

📌 示例:

{example_section}

🎯 现在请处理以下输入:

输入:{query}

输出:"""
    
    return prompt

# 示例:情感分析 Few-shot
examples = [
    {
        "input": "这部电影太棒了!剧情紧凑,演技精湛。",
        "output": '{"sentiment": "positive", "emotion": "happy", "confidence": 0.95}'
    },
    {
        "input": "服务态度很差,等了两个小时才上菜。",
        "output": '{"sentiment": "negative", "emotion": "angry", "confidence": 0.92}'
    },
    {
        "input": "一般般吧,没有什么特别的。",
        "output": '{"sentiment": "neutral", "emotion": "indifferent", "confidence": 0.78}'
    }
]

prompt = create_few_shot_prompt(
    task_description="情感分析,返回 JSON 格式",
    examples=examples,
    query="产品非常好用,解决了我的大问题!"
)

print(prompt)

2.4 自动生成示例

python 复制代码
"""
使用 LLM 自动生成 Few-shot 示例
"""
from openai import OpenAI

client = OpenAI(api_key="your-api-key")

def generate_few_shot_examples(
    task: str,
    n_examples: int = 5,
    model: str = "gpt-4"
) -> list:
    """自动生成 Few-shot 示例"""
    
    prompt = f"""为以下任务生成 {n_examples} 个高质量的输入-输出示例对。

任务:{task}

要求:
1. 示例应该多样化,覆盖不同场景
2. 输入要具体、清晰
3. 输出要符合任务的格式要求
4. 标注每个示例的难度(简单/中等/困难)

请以 JSON 格式返回:
[
  {{"input": "...", "output": "...", "difficulty": "..."}},
  ...
]
"""
    
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7
    )
    
    import json
    examples = json.loads(response.choices[0].message.content)
    return examples

# 使用
examples = generate_few_shot_examples(
    task="代码审查:检查 Python 代码中的 bug"
)
print(f"生成了 {len(examples)} 个示例")

三、Chain of Thought (CoT) 思维链

3.1 核心思想

#mermaid-svg-26221QwE0srab9ha{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-26221QwE0srab9ha .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-26221QwE0srab9ha .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-26221QwE0srab9ha .error-icon{fill:#552222;}#mermaid-svg-26221QwE0srab9ha .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-26221QwE0srab9ha .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-26221QwE0srab9ha .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-26221QwE0srab9ha .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-26221QwE0srab9ha .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-26221QwE0srab9ha .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-26221QwE0srab9ha .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-26221QwE0srab9ha .marker{fill:#333333;stroke:#333333;}#mermaid-svg-26221QwE0srab9ha .marker.cross{stroke:#333333;}#mermaid-svg-26221QwE0srab9ha svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-26221QwE0srab9ha p{margin:0;}#mermaid-svg-26221QwE0srab9ha .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-26221QwE0srab9ha .cluster-label text{fill:#333;}#mermaid-svg-26221QwE0srab9ha .cluster-label span{color:#333;}#mermaid-svg-26221QwE0srab9ha .cluster-label span p{background-color:transparent;}#mermaid-svg-26221QwE0srab9ha .label text,#mermaid-svg-26221QwE0srab9ha span{fill:#333;color:#333;}#mermaid-svg-26221QwE0srab9ha .node rect,#mermaid-svg-26221QwE0srab9ha .node circle,#mermaid-svg-26221QwE0srab9ha .node ellipse,#mermaid-svg-26221QwE0srab9ha .node polygon,#mermaid-svg-26221QwE0srab9ha .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-26221QwE0srab9ha .rough-node .label text,#mermaid-svg-26221QwE0srab9ha .node .label text,#mermaid-svg-26221QwE0srab9ha .image-shape .label,#mermaid-svg-26221QwE0srab9ha .icon-shape .label{text-anchor:middle;}#mermaid-svg-26221QwE0srab9ha .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-26221QwE0srab9ha .rough-node .label,#mermaid-svg-26221QwE0srab9ha .node .label,#mermaid-svg-26221QwE0srab9ha .image-shape .label,#mermaid-svg-26221QwE0srab9ha .icon-shape .label{text-align:center;}#mermaid-svg-26221QwE0srab9ha .node.clickable{cursor:pointer;}#mermaid-svg-26221QwE0srab9ha .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-26221QwE0srab9ha .arrowheadPath{fill:#333333;}#mermaid-svg-26221QwE0srab9ha .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-26221QwE0srab9ha .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-26221QwE0srab9ha .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-26221QwE0srab9ha .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-26221QwE0srab9ha .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-26221QwE0srab9ha .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-26221QwE0srab9ha .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-26221QwE0srab9ha .cluster text{fill:#333;}#mermaid-svg-26221QwE0srab9ha .cluster span{color:#333;}#mermaid-svg-26221QwE0srab9ha div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-26221QwE0srab9ha .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-26221QwE0srab9ha rect.text{fill:none;stroke-width:0;}#mermaid-svg-26221QwE0srab9ha .icon-shape,#mermaid-svg-26221QwE0srab9ha .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-26221QwE0srab9ha .icon-shape p,#mermaid-svg-26221QwE0srab9ha .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-26221QwE0srab9ha .icon-shape .label rect,#mermaid-svg-26221QwE0srab9ha .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-26221QwE0srab9ha .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-26221QwE0srab9ha .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-26221QwE0srab9ha :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 问题
直接回答
问题
🧠 思考步骤
📝 中间推理
✅ 最终答案

CoT 的核心价值:

  • 让模型展示推理过程
  • 减少"幻觉"和逻辑错误
  • 适用于复杂推理任务

3.2 Zero-shot CoT

#mermaid-svg-mJfpBxuY3MJfKs2A{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mJfpBxuY3MJfKs2A .error-icon{fill:#552222;}#mermaid-svg-mJfpBxuY3MJfKs2A .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mJfpBxuY3MJfKs2A .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mJfpBxuY3MJfKs2A .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mJfpBxuY3MJfKs2A .marker.cross{stroke:#333333;}#mermaid-svg-mJfpBxuY3MJfKs2A svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mJfpBxuY3MJfKs2A p{margin:0;}#mermaid-svg-mJfpBxuY3MJfKs2A .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster-label text{fill:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster-label span{color:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster-label span p{background-color:transparent;}#mermaid-svg-mJfpBxuY3MJfKs2A .label text,#mermaid-svg-mJfpBxuY3MJfKs2A span{fill:#333;color:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A .node rect,#mermaid-svg-mJfpBxuY3MJfKs2A .node circle,#mermaid-svg-mJfpBxuY3MJfKs2A .node ellipse,#mermaid-svg-mJfpBxuY3MJfKs2A .node polygon,#mermaid-svg-mJfpBxuY3MJfKs2A .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mJfpBxuY3MJfKs2A .rough-node .label text,#mermaid-svg-mJfpBxuY3MJfKs2A .node .label text,#mermaid-svg-mJfpBxuY3MJfKs2A .image-shape .label,#mermaid-svg-mJfpBxuY3MJfKs2A .icon-shape .label{text-anchor:middle;}#mermaid-svg-mJfpBxuY3MJfKs2A .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mJfpBxuY3MJfKs2A .rough-node .label,#mermaid-svg-mJfpBxuY3MJfKs2A .node .label,#mermaid-svg-mJfpBxuY3MJfKs2A .image-shape .label,#mermaid-svg-mJfpBxuY3MJfKs2A .icon-shape .label{text-align:center;}#mermaid-svg-mJfpBxuY3MJfKs2A .node.clickable{cursor:pointer;}#mermaid-svg-mJfpBxuY3MJfKs2A .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mJfpBxuY3MJfKs2A .arrowheadPath{fill:#333333;}#mermaid-svg-mJfpBxuY3MJfKs2A .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mJfpBxuY3MJfKs2A .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mJfpBxuY3MJfKs2A .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mJfpBxuY3MJfKs2A .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mJfpBxuY3MJfKs2A .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mJfpBxuY3MJfKs2A .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster text{fill:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A .cluster span{color:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mJfpBxuY3MJfKs2A .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mJfpBxuY3MJfKs2A rect.text{fill:none;stroke-width:0;}#mermaid-svg-mJfpBxuY3MJfKs2A .icon-shape,#mermaid-svg-mJfpBxuY3MJfKs2A .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mJfpBxuY3MJfKs2A .icon-shape p,#mermaid-svg-mJfpBxuY3MJfKs2A .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mJfpBxuY3MJfKs2A .icon-shape .label rect,#mermaid-svg-mJfpBxuY3MJfKs2A .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mJfpBxuY3MJfKs2A .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mJfpBxuY3MJfKs2A .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mJfpBxuY3MJfKs2A :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Zero-shot CoT
在问题后添加:
'Let\'s think step by step.'

python 复制代码
"""
Zero-shot CoT 示例
"""
def zero_shot_cot(question: str) -> str:
    """Zero-shot CoT:直接要求模型思考"""
    
    prompt = f"""{question}

请一步一步地思考,并给出最终答案。"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=0
    )
    
    return response.choices[0].message.content

# 示例
question = "小明有5个苹果,小红给了他3个,小明吃掉了2个,请问小明现在有几个苹果?"
answer = zero_shot_cot(question)
print(answer)

3.3 Few-shot CoT

python 复制代码
"""
Few-shot CoT 示例
"""
def few_shot_cot(task: str, examples: list, query: str) -> str:
    """Few-shot CoT:提供思考过程示例"""
    
    # 构建带推理过程的示例
    example_section = ""
    for ex in examples:
        example_section += f"""
问题:{ex['question']}
思考过程:{ex['reasoning']}
答案:{ex['answer']}

---
"""
    
    prompt = f"""{task}

示例:

{example_section}

现在请解决以下问题:

问题:{query}
思考过程:"""
    
    return prompt

# 示例:数学问题
examples = [
    {
        "question": "小明有10元,买了3支笔,每支2元,还剩多少?",
        "reasoning": "1. 先算买了3支笔花了多少钱:3 × 2 = 6元\n2. 再算还剩多少:10 - 6 = 4元",
        "answer": "4元"
    },
    {
        "question": "一列火车长100米,通过一座500米的桥,需要走多少米?",
        "reasoning": "1. 火车要完全通过桥,需要走:桥长 + 车长\n2. 500 + 100 = 600米",
        "answer": "600米"
    }
]

prompt = few_shot_cot(
    task="请在思考过程中逐步分析问题,最后给出答案。",
    examples=examples,
    query="一个水池有100升水,先放入20升,又放出15升,现在有多少升?"
)

3.4 CoT 适用场景

场景 适用性 原因
数学计算 ✅ 非常适合 需要推理步骤
逻辑推理 ✅ 非常适合 展示推导过程
代码生成 ✅ 适合 需要解释思路
常识问答 ⚠️ 部分适合 简单问题反而多余
创意写作 ❌ 不适合 限制创意发挥
事实查询 ❌ 不适合 直接回答更高效

四、Tree of Thought (ToT) 思维树

4.1 核心思想

#mermaid-svg-RLeewalLspPLbwGS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RLeewalLspPLbwGS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RLeewalLspPLbwGS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RLeewalLspPLbwGS .error-icon{fill:#552222;}#mermaid-svg-RLeewalLspPLbwGS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RLeewalLspPLbwGS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RLeewalLspPLbwGS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RLeewalLspPLbwGS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RLeewalLspPLbwGS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RLeewalLspPLbwGS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RLeewalLspPLbwGS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RLeewalLspPLbwGS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RLeewalLspPLbwGS .marker.cross{stroke:#333333;}#mermaid-svg-RLeewalLspPLbwGS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RLeewalLspPLbwGS p{margin:0;}#mermaid-svg-RLeewalLspPLbwGS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RLeewalLspPLbwGS .cluster-label text{fill:#333;}#mermaid-svg-RLeewalLspPLbwGS .cluster-label span{color:#333;}#mermaid-svg-RLeewalLspPLbwGS .cluster-label span p{background-color:transparent;}#mermaid-svg-RLeewalLspPLbwGS .label text,#mermaid-svg-RLeewalLspPLbwGS span{fill:#333;color:#333;}#mermaid-svg-RLeewalLspPLbwGS .node rect,#mermaid-svg-RLeewalLspPLbwGS .node circle,#mermaid-svg-RLeewalLspPLbwGS .node ellipse,#mermaid-svg-RLeewalLspPLbwGS .node polygon,#mermaid-svg-RLeewalLspPLbwGS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RLeewalLspPLbwGS .rough-node .label text,#mermaid-svg-RLeewalLspPLbwGS .node .label text,#mermaid-svg-RLeewalLspPLbwGS .image-shape .label,#mermaid-svg-RLeewalLspPLbwGS .icon-shape .label{text-anchor:middle;}#mermaid-svg-RLeewalLspPLbwGS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RLeewalLspPLbwGS .rough-node .label,#mermaid-svg-RLeewalLspPLbwGS .node .label,#mermaid-svg-RLeewalLspPLbwGS .image-shape .label,#mermaid-svg-RLeewalLspPLbwGS .icon-shape .label{text-align:center;}#mermaid-svg-RLeewalLspPLbwGS .node.clickable{cursor:pointer;}#mermaid-svg-RLeewalLspPLbwGS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RLeewalLspPLbwGS .arrowheadPath{fill:#333333;}#mermaid-svg-RLeewalLspPLbwGS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RLeewalLspPLbwGS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RLeewalLspPLbwGS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RLeewalLspPLbwGS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RLeewalLspPLbwGS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RLeewalLspPLbwGS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RLeewalLspPLbwGS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RLeewalLspPLbwGS .cluster text{fill:#333;}#mermaid-svg-RLeewalLspPLbwGS .cluster span{color:#333;}#mermaid-svg-RLeewalLspPLbwGS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RLeewalLspPLbwGS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RLeewalLspPLbwGS rect.text{fill:none;stroke-width:0;}#mermaid-svg-RLeewalLspPLbwGS .icon-shape,#mermaid-svg-RLeewalLspPLbwGS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RLeewalLspPLbwGS .icon-shape p,#mermaid-svg-RLeewalLspPLbwGS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RLeewalLspPLbwGS .icon-shape .label rect,#mermaid-svg-RLeewalLspPLbwGS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RLeewalLspPLbwGS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RLeewalLspPLbwGS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RLeewalLspPLbwGS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 评估
评估
评估
问题
分支 1
分支 2
分支 3
结果 1.1
结果 1.2
结果 2.1
结果 2.2
结果 3.1
结果 3.2
✓ 保留
✗ 剪枝
✓ 保留

ToT vs CoT:

维度 CoT ToT
结构 线性 树状
探索 单路径 多路径
回溯
适用 简单推理 复杂决策

4.2 ToT 实现框架

python 复制代码
"""
Tree of Thought 实现
"""
from typing import List, Callable
from dataclasses import dataclass

@dataclass
class Thought:
    """思考节点"""
    content: str
    value: float
    children: List['Thought']

class TreeOfThought:
    """ToT 推理引擎"""
    
    def __init__(
        self,
        generate_fn: Callable,  # 生成函数
        evaluate_fn: Callable, # 评估函数
        max_depth: int = 3,
        num_branches: int = 3
    ):
        self.generate = generate_fn
        self.evaluate = evaluate_fn
        self.max_depth = max_depth
        self.num_branches = num_branches
    
    def think(self, initial_prompt: str) -> Thought:
        """执行 ToT 推理"""
        
        # 创建根节点
        root = Thought(
            content=initial_prompt,
            value=0.0,
            children=[]
        )
        
        # 递归生成和评估
        self._expand(root, depth=0)
        
        return root
    
    def _expand(self, node: Thought, depth: int):
        """展开节点"""
        
        if depth >= self.max_depth:
            return
        
        # 生成多个分支
        branches = self.generate(
            node.content,
            num=self.num_branches
        )
        
        for branch in branches:
            child = Thought(
                content=branch,
                value=0.0,
                children=[]
            )
            
            # 评估分支
            child.value = self.evaluate(branch)
            
            # 剪枝:如果价值太低,不继续展开
            if child.value > 0.3:
                self._expand(child, depth + 1)
            
            node.children.append(child)
    
    def get_best_path(self, root: Thought) -> List[Thought]:
        """获取最优路径"""
        
        if not root.children:
            return [root]
        
        # 选择价值最高的子节点
        best_child = max(root.children, key=lambda x: x.value)
        
        return [root] + self.get_best_path(best_child)


# 使用示例
def generate_branches(prompt: str, num: int = 3) -> List[str]:
    """生成多个思考分支"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{
            "role": "user",
            "content": f"针对'{prompt}',给出 {num} 种不同的思考方向或解决方案"
        }],
        n=num
    )
    
    return [choice.message.content for choice in response.choices]

def evaluate_thought(thought: str) -> float:
    """评估思考的价值(0-1)"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{
            "role": "user",
            "content": f"评估以下方案的质量(0-1分):\n{thought}"
        }]
    )
    
    # 解析分数
    score_text = response.choices[0].message.content
    # ... 解析分数逻辑 ...
    return 0.8

# 执行 ToT
tot = TreeOfThought(
    generate_fn=generate_branches,
    evaluate_fn=evaluate_thought,
    max_depth=3,
    num_branches=3
)

result = tot.think("如何提升产品的用户留存率?")
best_path = tot.get_best_path(result)

print("最优思考路径:")
for i, node in enumerate(best_path):
    print(f"  {i+1}. {node.content[:50]}... (价值: {node.value:.2f})")

4.3 ToT 实战:商业决策

python 复制代码
"""
ToT 实战:产品策略决策
"""
def product_strategy_tot(problem: str) -> dict:
    """产品策略 ToT 决策"""
    
    prompt = f"""问题:{problem}

请用思维树方法分析:

1. 第一层:识别关键因素(用户、竞品、技术、成本)
2. 第二层:每个因素的可能的解决方案
3. 第三层:每个方案的优缺点
4. 评估:综合考虑,选择最优方案

请详细展开每一步的思考。"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3
    )
    
    return {
        "analysis": response.choices[0].message.content,
        "method": "Tree of Thought"
    }

# 示例
result = product_strategy_tot(
    "我们的 SaaS 产品用户增长停滞,应该如何突破?"
)
print(result["analysis"])

五、ReAct (Reasoning + Acting)

5.1 核心思想

#mermaid-svg-5mpl2ZixEEWolj7t{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5mpl2ZixEEWolj7t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5mpl2ZixEEWolj7t .error-icon{fill:#552222;}#mermaid-svg-5mpl2ZixEEWolj7t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5mpl2ZixEEWolj7t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5mpl2ZixEEWolj7t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5mpl2ZixEEWolj7t .marker.cross{stroke:#333333;}#mermaid-svg-5mpl2ZixEEWolj7t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5mpl2ZixEEWolj7t p{margin:0;}#mermaid-svg-5mpl2ZixEEWolj7t .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5mpl2ZixEEWolj7t .cluster-label text{fill:#333;}#mermaid-svg-5mpl2ZixEEWolj7t .cluster-label span{color:#333;}#mermaid-svg-5mpl2ZixEEWolj7t .cluster-label span p{background-color:transparent;}#mermaid-svg-5mpl2ZixEEWolj7t .label text,#mermaid-svg-5mpl2ZixEEWolj7t span{fill:#333;color:#333;}#mermaid-svg-5mpl2ZixEEWolj7t .node rect,#mermaid-svg-5mpl2ZixEEWolj7t .node circle,#mermaid-svg-5mpl2ZixEEWolj7t .node ellipse,#mermaid-svg-5mpl2ZixEEWolj7t .node polygon,#mermaid-svg-5mpl2ZixEEWolj7t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5mpl2ZixEEWolj7t .rough-node .label text,#mermaid-svg-5mpl2ZixEEWolj7t .node .label text,#mermaid-svg-5mpl2ZixEEWolj7t .image-shape .label,#mermaid-svg-5mpl2ZixEEWolj7t .icon-shape .label{text-anchor:middle;}#mermaid-svg-5mpl2ZixEEWolj7t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5mpl2ZixEEWolj7t .rough-node .label,#mermaid-svg-5mpl2ZixEEWolj7t .node .label,#mermaid-svg-5mpl2ZixEEWolj7t .image-shape .label,#mermaid-svg-5mpl2ZixEEWolj7t .icon-shape .label{text-align:center;}#mermaid-svg-5mpl2ZixEEWolj7t .node.clickable{cursor:pointer;}#mermaid-svg-5mpl2ZixEEWolj7t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5mpl2ZixEEWolj7t .arrowheadPath{fill:#333333;}#mermaid-svg-5mpl2ZixEEWolj7t .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5mpl2ZixEEWolj7t .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5mpl2ZixEEWolj7t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5mpl2ZixEEWolj7t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5mpl2ZixEEWolj7t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5mpl2ZixEEWolj7t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5mpl2ZixEEWolj7t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5mpl2ZixEEWolj7t .cluster text{fill:#333;}#mermaid-svg-5mpl2ZixEEWolj7t .cluster span{color:#333;}#mermaid-svg-5mpl2ZixEEWolj7t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5mpl2ZixEEWolj7t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5mpl2ZixEEWolj7t rect.text{fill:none;stroke-width:0;}#mermaid-svg-5mpl2ZixEEWolj7t .icon-shape,#mermaid-svg-5mpl2ZixEEWolj7t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5mpl2ZixEEWolj7t .icon-shape p,#mermaid-svg-5mpl2ZixEEWolj7t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5mpl2ZixEEWolj7t .icon-shape .label rect,#mermaid-svg-5mpl2ZixEEWolj7t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5mpl2ZixEEWolj7t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5mpl2ZixEEWolj7t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5mpl2ZixEEWolj7t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 循环
🧠 推理
📝 思考
🔧 行动
👁️ 观察

ReAct 的核心循环:

  1. Thought(思考) - 分析当前情况
  2. Action(行动) - 执行工具/操作
  3. Observation(观察) - 获取结果
  4. 重复 - 直到任务完成

5.2 ReAct 实现

python 复制代码
"""
ReAct Agent 实现
"""
from typing import List, Dict, Callable
from dataclasses import dataclass
import json

@dataclass
class ReActStep:
    """ReAct 单步"""
    thought: str
    action: str
    observation: str

class ReActAgent:
    """ReAct 推理 Agent"""
    
    def __init__(self, tools: Dict[str, Callable]):
        self.tools = tools
    
    def think_and_act(self, question: str, max_iterations: int = 10) -> str:
        """ReAct 推理循环"""
        
        history = []
        context = ""
        
        for i in range(max_iterations):
            # 1. 思考:分析当前状态,决定下一步行动
            thought = self._think(question, context, history)
            
            # 2. 行动:解析并执行动作
            action, action_input = self._parse_action(thought)
            
            # 3. 观察:获取行动结果
            if action == "finish":
                return action_input
            
            observation = self._execute_action(action, action_input)
            
            # 4. 记录历史
            history.append(ReActStep(
                thought=thought,
                action=f"{action}({action_input})",
                observation=observation
            ))
            
            context += f"\n行动:{action}({action_input})\n结果:{observation}"
        
        return "达到最大迭代次数"
    
    def _think(self, question: str, context: str, history: List[ReActStep]) -> str:
        """思考下一步"""
        
        history_text = ""
        if history:
            history_text = "\n".join([
                f"步骤{i+1}:思考:{h.thought}\n  行动:{h.action}\n  结果:{h.observation}"
                for i, h in enumerate(history)
            ])
        
        prompt = f"""问题:{question}

当前上下文:
{context}

历史步骤:
{history_text if history_text else "无"}

请思考:
1. 当前情况是什么?
2. 下一步应该做什么?
3. 使用什么工具?

可用的工具:
{list(self.tools.keys())}

请以以下格式回答:
思考:[你的思考]
行动:[工具名称]
输入:[工具输入参数]
"""
        
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0
        )
        
        return response.choices[0].message.content
    
    def _parse_action(self, thought: str) -> tuple:
        """解析动作"""
        # 简单解析,实际应该用正则
        lines = thought.split('\n')
        action, action_input = "", ""
        
        for line in lines:
            if line.startswith("行动:"):
                action = line.replace("行动:", "").strip()
            elif line.startswith("输入:"):
                action_input = line.replace("输入:", "").strip()
        
        return action, action_input
    
    def _execute_action(self, action: str, action_input: str) -> str:
        """执行动作"""
        if action in self.tools:
            return self.tools[action](action_input)
        return f"未知工具:{action}"


# 定义工具
def search(query: str) -> str:
    """搜索工具"""
    return f"搜索结果:找到 10 条关于 '{query}' 的结果..."

def calculator(expr: str) -> str:
    """计算工具"""
    try:
        result = eval(expr)
        return f"计算结果:{result}"
    except:
        return "计算错误"

def lookup(keyword: str) -> str:
    """查找工具"""
    # 模拟数据库查询
    return f"查询结果:{keyword} 相关数据..."

# 创建 Agent
agent = ReActAgent(tools={
    "search": search,
    "calculator": calculator,
    "lookup": lookup,
    "finish": lambda x: x
})

# 运行
result = agent.think_and_act(
    "计算 (123 + 456) * 789 的结果,然后搜索相关信息"
)
print(result)

5.3 ReAct vs CoT vs ToT

#mermaid-svg-DQAKscp0M29E3htS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DQAKscp0M29E3htS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DQAKscp0M29E3htS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DQAKscp0M29E3htS .error-icon{fill:#552222;}#mermaid-svg-DQAKscp0M29E3htS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DQAKscp0M29E3htS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DQAKscp0M29E3htS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DQAKscp0M29E3htS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DQAKscp0M29E3htS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DQAKscp0M29E3htS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DQAKscp0M29E3htS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DQAKscp0M29E3htS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DQAKscp0M29E3htS .marker.cross{stroke:#333333;}#mermaid-svg-DQAKscp0M29E3htS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DQAKscp0M29E3htS p{margin:0;}#mermaid-svg-DQAKscp0M29E3htS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DQAKscp0M29E3htS .cluster-label text{fill:#333;}#mermaid-svg-DQAKscp0M29E3htS .cluster-label span{color:#333;}#mermaid-svg-DQAKscp0M29E3htS .cluster-label span p{background-color:transparent;}#mermaid-svg-DQAKscp0M29E3htS .label text,#mermaid-svg-DQAKscp0M29E3htS span{fill:#333;color:#333;}#mermaid-svg-DQAKscp0M29E3htS .node rect,#mermaid-svg-DQAKscp0M29E3htS .node circle,#mermaid-svg-DQAKscp0M29E3htS .node ellipse,#mermaid-svg-DQAKscp0M29E3htS .node polygon,#mermaid-svg-DQAKscp0M29E3htS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DQAKscp0M29E3htS .rough-node .label text,#mermaid-svg-DQAKscp0M29E3htS .node .label text,#mermaid-svg-DQAKscp0M29E3htS .image-shape .label,#mermaid-svg-DQAKscp0M29E3htS .icon-shape .label{text-anchor:middle;}#mermaid-svg-DQAKscp0M29E3htS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DQAKscp0M29E3htS .rough-node .label,#mermaid-svg-DQAKscp0M29E3htS .node .label,#mermaid-svg-DQAKscp0M29E3htS .image-shape .label,#mermaid-svg-DQAKscp0M29E3htS .icon-shape .label{text-align:center;}#mermaid-svg-DQAKscp0M29E3htS .node.clickable{cursor:pointer;}#mermaid-svg-DQAKscp0M29E3htS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DQAKscp0M29E3htS .arrowheadPath{fill:#333333;}#mermaid-svg-DQAKscp0M29E3htS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DQAKscp0M29E3htS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DQAKscp0M29E3htS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DQAKscp0M29E3htS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DQAKscp0M29E3htS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DQAKscp0M29E3htS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DQAKscp0M29E3htS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DQAKscp0M29E3htS .cluster text{fill:#333;}#mermaid-svg-DQAKscp0M29E3htS .cluster span{color:#333;}#mermaid-svg-DQAKscp0M29E3htS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DQAKscp0M29E3htS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DQAKscp0M29E3htS rect.text{fill:none;stroke-width:0;}#mermaid-svg-DQAKscp0M29E3htS .icon-shape,#mermaid-svg-DQAKscp0M29E3htS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DQAKscp0M29E3htS .icon-shape p,#mermaid-svg-DQAKscp0M29E3htS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DQAKscp0M29E3htS .icon-shape .label rect,#mermaid-svg-DQAKscp0M29E3htS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DQAKscp0M29E3htS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DQAKscp0M29E3htS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DQAKscp0M29E3htS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对比
CoT
ToT
ReAct
线性推理
无外部交互
快速
树状探索
可回溯
探索性强
循环推理
有外部交互
可工具调用

维度 CoT ToT ReAct
结构 线性 树状 循环
工具调用
回溯能力 ⚠️
计算成本
适用场景 推理任务 决策问题 复杂任务

六、Self-Consistency(自洽性)

6.1 核心思想

#mermaid-svg-reab6QlwEP3EXxYf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-reab6QlwEP3EXxYf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-reab6QlwEP3EXxYf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-reab6QlwEP3EXxYf .error-icon{fill:#552222;}#mermaid-svg-reab6QlwEP3EXxYf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-reab6QlwEP3EXxYf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-reab6QlwEP3EXxYf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-reab6QlwEP3EXxYf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-reab6QlwEP3EXxYf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-reab6QlwEP3EXxYf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-reab6QlwEP3EXxYf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-reab6QlwEP3EXxYf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-reab6QlwEP3EXxYf .marker.cross{stroke:#333333;}#mermaid-svg-reab6QlwEP3EXxYf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-reab6QlwEP3EXxYf p{margin:0;}#mermaid-svg-reab6QlwEP3EXxYf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-reab6QlwEP3EXxYf .cluster-label text{fill:#333;}#mermaid-svg-reab6QlwEP3EXxYf .cluster-label span{color:#333;}#mermaid-svg-reab6QlwEP3EXxYf .cluster-label span p{background-color:transparent;}#mermaid-svg-reab6QlwEP3EXxYf .label text,#mermaid-svg-reab6QlwEP3EXxYf span{fill:#333;color:#333;}#mermaid-svg-reab6QlwEP3EXxYf .node rect,#mermaid-svg-reab6QlwEP3EXxYf .node circle,#mermaid-svg-reab6QlwEP3EXxYf .node ellipse,#mermaid-svg-reab6QlwEP3EXxYf .node polygon,#mermaid-svg-reab6QlwEP3EXxYf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-reab6QlwEP3EXxYf .rough-node .label text,#mermaid-svg-reab6QlwEP3EXxYf .node .label text,#mermaid-svg-reab6QlwEP3EXxYf .image-shape .label,#mermaid-svg-reab6QlwEP3EXxYf .icon-shape .label{text-anchor:middle;}#mermaid-svg-reab6QlwEP3EXxYf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-reab6QlwEP3EXxYf .rough-node .label,#mermaid-svg-reab6QlwEP3EXxYf .node .label,#mermaid-svg-reab6QlwEP3EXxYf .image-shape .label,#mermaid-svg-reab6QlwEP3EXxYf .icon-shape .label{text-align:center;}#mermaid-svg-reab6QlwEP3EXxYf .node.clickable{cursor:pointer;}#mermaid-svg-reab6QlwEP3EXxYf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-reab6QlwEP3EXxYf .arrowheadPath{fill:#333333;}#mermaid-svg-reab6QlwEP3EXxYf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-reab6QlwEP3EXxYf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-reab6QlwEP3EXxYf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-reab6QlwEP3EXxYf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-reab6QlwEP3EXxYf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-reab6QlwEP3EXxYf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-reab6QlwEP3EXxYf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-reab6QlwEP3EXxYf .cluster text{fill:#333;}#mermaid-svg-reab6QlwEP3EXxYf .cluster span{color:#333;}#mermaid-svg-reab6QlwEP3EXxYf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-reab6QlwEP3EXxYf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-reab6QlwEP3EXxYf rect.text{fill:none;stroke-width:0;}#mermaid-svg-reab6QlwEP3EXxYf .icon-shape,#mermaid-svg-reab6QlwEP3EXxYf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-reab6QlwEP3EXxYf .icon-shape p,#mermaid-svg-reab6QlwEP3EXxYf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-reab6QlwEP3EXxYf .icon-shape .label rect,#mermaid-svg-reab6QlwEP3EXxYf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-reab6QlwEP3EXxYf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-reab6QlwEP3EXxYf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-reab6QlwEP3EXxYf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 问题
多次采样
CoT 1
CoT 2
CoT 3
答案 A
答案 B
答案 A
投票
最终答案

Self-Consistency 核心思想:

  • 对同一问题,采样多个不同的推理路径
  • 选择出现次数最多的答案
  • 提高推理的可靠性

6.2 实现代码

python 复制代码
"""
Self-Consistency 实现
"""
from collections import Counter
from typing import List

def self_consistency(
    question: str,
    n_samples: int = 5,
    temperature: float = 0.7
) -> dict:
    """Self-Consistency 推理"""
    
    # 多次采样不同推理路径
    responses = []
    for _ in range(n_samples):
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{
                "role": "user",
                "content": f"{question}\n\n请一步一步思考并给出答案。"
            }],
            temperature=temperature,  # 高温度增加多样性
            n=1
        )
        responses.append(response.choices[0].message.content)
    
    # 提取答案
    answers = [extract_answer(r) for r in responses]
    
    # 投票
    answer_counts = Counter(answers)
    most_common = answer_counts.most_common(1)[0]
    
    return {
        "final_answer": most_common[0],
        "confidence": most_common[1] / n_samples,
        "all_answers": dict(answer_counts),
        "reasoning_paths": responses
    }

def extract_answer(text: str) -> str:
    """提取答案"""
    # 简单实现,实际应该更复杂
    lines = text.strip().split('\n')
    for line in reversed(lines):
        if '答' in line or '答案' in line or 'result' in line.lower():
            return line
    return text.strip()[-50:]  # 返回最后一段

# 示例
result = self_consistency(
    "小明有17个苹果,小红给了他8个,小明吃掉了5个,还剩多少?",
    n_samples=5
)

print(f"最终答案:{result['final_answer']}")
print(f"置信度:{result['confidence']:.0%}")
print(f"各答案分布:{result['all_answers']}")

6.3 性能对比

#mermaid-svg-LHjJisP8wSKYWMR6{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LHjJisP8wSKYWMR6 .error-icon{fill:#552222;}#mermaid-svg-LHjJisP8wSKYWMR6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LHjJisP8wSKYWMR6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LHjJisP8wSKYWMR6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LHjJisP8wSKYWMR6 .marker.cross{stroke:#333333;}#mermaid-svg-LHjJisP8wSKYWMR6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LHjJisP8wSKYWMR6 p{margin:0;}#mermaid-svg-LHjJisP8wSKYWMR6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Self-Consistency 效果对比(GSM8K 数据集) CoT (单次)Self-C (3次)Self-C (5次)Self-C (10次) 1009080706050403020100 准确率 (%)

Self-Consistency 效果:

  • GSM8K 数学题:74.4% → 85.7%(提升 11.3%)
  • 推理可靠性显著提升
  • 代价:计算成本增加 n 倍

七、Prompt Chaining(提示链)

7.1 核心思想

#mermaid-svg-3jOYN6ebMdNdI64B{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3jOYN6ebMdNdI64B .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3jOYN6ebMdNdI64B .error-icon{fill:#552222;}#mermaid-svg-3jOYN6ebMdNdI64B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3jOYN6ebMdNdI64B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3jOYN6ebMdNdI64B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3jOYN6ebMdNdI64B .marker.cross{stroke:#333333;}#mermaid-svg-3jOYN6ebMdNdI64B svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3jOYN6ebMdNdI64B p{margin:0;}#mermaid-svg-3jOYN6ebMdNdI64B .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3jOYN6ebMdNdI64B .cluster-label text{fill:#333;}#mermaid-svg-3jOYN6ebMdNdI64B .cluster-label span{color:#333;}#mermaid-svg-3jOYN6ebMdNdI64B .cluster-label span p{background-color:transparent;}#mermaid-svg-3jOYN6ebMdNdI64B .label text,#mermaid-svg-3jOYN6ebMdNdI64B span{fill:#333;color:#333;}#mermaid-svg-3jOYN6ebMdNdI64B .node rect,#mermaid-svg-3jOYN6ebMdNdI64B .node circle,#mermaid-svg-3jOYN6ebMdNdI64B .node ellipse,#mermaid-svg-3jOYN6ebMdNdI64B .node polygon,#mermaid-svg-3jOYN6ebMdNdI64B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3jOYN6ebMdNdI64B .rough-node .label text,#mermaid-svg-3jOYN6ebMdNdI64B .node .label text,#mermaid-svg-3jOYN6ebMdNdI64B .image-shape .label,#mermaid-svg-3jOYN6ebMdNdI64B .icon-shape .label{text-anchor:middle;}#mermaid-svg-3jOYN6ebMdNdI64B .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3jOYN6ebMdNdI64B .rough-node .label,#mermaid-svg-3jOYN6ebMdNdI64B .node .label,#mermaid-svg-3jOYN6ebMdNdI64B .image-shape .label,#mermaid-svg-3jOYN6ebMdNdI64B .icon-shape .label{text-align:center;}#mermaid-svg-3jOYN6ebMdNdI64B .node.clickable{cursor:pointer;}#mermaid-svg-3jOYN6ebMdNdI64B .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3jOYN6ebMdNdI64B .arrowheadPath{fill:#333333;}#mermaid-svg-3jOYN6ebMdNdI64B .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3jOYN6ebMdNdI64B .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3jOYN6ebMdNdI64B .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3jOYN6ebMdNdI64B .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3jOYN6ebMdNdI64B .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3jOYN6ebMdNdI64B .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3jOYN6ebMdNdI64B .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3jOYN6ebMdNdI64B .cluster text{fill:#333;}#mermaid-svg-3jOYN6ebMdNdI64B .cluster span{color:#333;}#mermaid-svg-3jOYN6ebMdNdI64B div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3jOYN6ebMdNdI64B .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3jOYN6ebMdNdI64B rect.text{fill:none;stroke-width:0;}#mermaid-svg-3jOYN6ebMdNdI64B .icon-shape,#mermaid-svg-3jOYN6ebMdNdI64B .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3jOYN6ebMdNdI64B .icon-shape p,#mermaid-svg-3jOYN6ebMdNdI64B .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3jOYN6ebMdNdI64B .icon-shape .label rect,#mermaid-svg-3jOYN6ebMdNdI64B .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3jOYN6ebMdNdI64B .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3jOYN6ebMdNdI64B .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3jOYN6ebMdNdI64B :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Prompt 1
输出 1
Prompt 2
输出 2
Prompt 3
最终输出

为什么需要 Prompt Chaining?

  • 复杂任务分解为简单子任务
  • 每一步更容易控制和优化
  • 支持人工介入和校验
  • 便于调试和迭代

7.2 实现代码

python 复制代码
"""
Prompt Chaining 实现
"""
from typing import List, Callable, Any

class PromptChain:
    """提示词链"""
    
    def __init__(self):
        self.steps: List[Callable] = []
        self.results: dict = {}
    
    def add_step(
        self,
        name: str,
        prompt_template: str,
        extract_fn: Callable = None
    ):
        """添加步骤"""
        self.steps.append({
            "name": name,
            "prompt": prompt_template,
            "extract": extract_fn or (lambda x: x)
        })
    
    def execute(self, initial_input: str, context: dict = None) -> dict:
        """执行链"""
        
        results = {}
        current_input = initial_input
        full_context = context or {}
        
        for i, step in enumerate(self.steps):
            # 渲染提示词
            prompt = step["prompt"].format(
                input=current_input,
                context=full_context,
                **results  # 前几步的结果
            )
            
            # 调用模型
            response = client.chat.completions.create(
                model="gpt-4",
                messages=[{"role": "user", "content": prompt}]
            )
            
            raw_output = response.choices[0].message.content
            
            # 提取结果
            extracted = step["extract"](raw_output)
            results[step["name"]] = extracted
            
            # 更新上下文
            full_context[step["name"]] = extracted
            current_input = extracted  # 传递给下一步
        
        return results


# 使用示例:文章分析链
chain = PromptChain()

# 步骤 1:提取关键信息
chain.add_step(
    name="key_points",
    prompt_template="""从以下文章中提取5个关键观点:

{input}

请用简洁的列表格式输出。""",
    extract_fn=lambda x: x
)

# 步骤 2:总结要点
chain.add_step(
    name="summary",
    prompt_template="""基于以下关键观点,写一段简洁的总结:

{context[key_points]}

总结要求:
1. 不超过100字
2. 突出核心价值
3. 语言通俗易懂""",
    extract_fn=lambda x: x
)

# 步骤 3:生成标签
chain.add_step(
    name="tags",
    prompt_template="""根据以下文章总结,生成5个标签:

{context[summary]}

要求:
1. 每个标签2-4个字
2. 标签要反映文章主题
3. 用逗号分隔""",
    extract_fn=lambda x: x
)

# 执行
article = """
人工智能(AI)技术正在快速发展,已经渗透到各行各业...
"""

results = chain.execute(article)
print(f"关键观点:{results['key_points']}")
print(f"总结:{results['summary']}")
print(f"标签:{results['tags']}")

7.3 条件分支链

python 复制代码
"""
带条件分支的 Prompt Chain
"""
def conditional_chain(query: str) -> str:
    """条件分支链"""
    
    # 步骤 1:判断问题类型
    classify_prompt = f"""判断以下问题的类型:

问题:{query}

类型选项:
1. 技术问题(编程、配置、调试)
2. 咨询问题(建议、分析、方案)
3. 操作问题(执行、命令、操作步骤)

请只输出类型编号(1/2/3)和简短理由。"""
    
    classify_response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": classify_prompt}]
    )
    
    # 步骤 2:根据类型选择不同的处理流程
    response_type = classify_response.choices[0].message.content
    
    if "1" in response_type:
        # 技术问题 → 提供代码示例
        return handle_technical(query)
    elif "2" in response_type:
        # 咨询问题 → 提供分析建议
        return handle_consulting(query)
    else:
        # 操作问题 → 提供步骤说明
        return handle_operational(query)

def handle_technical(query: str) -> str:
    """处理技术问题"""
    prompt = f"""请提供解决以下技术问题的代码示例:

{query}

要求:
1. 代码完整可运行
2. 包含注释说明
3. 提供测试用例"""
    # ...
    return response

def handle_consulting(query: str) -> str:
    """处理咨询问题"""
    prompt = f"""请分析并建议:

{query}

分析维度:
1. 背景和现状
2. 可能的方向
3. 推荐的方案"""
    # ...
    return response

def handle_operational(query: str) -> str:
    """处理操作问题"""
    prompt = f"""请提供操作步骤:

{query}

步骤要求:
1. 清晰序号
2. 每步说明
3. 注意事项"""
    # ...
    return response

八、结构化输出(Structured Output)

8.1 JSON Mode

python 复制代码
"""
结构化输出:JSON Mode
"""
def structured_output_json(question: str) -> dict:
    """使用 JSON Mode 输出"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{
            "role": "user",
            "content": f"""{question}

请以 JSON 格式返回,包含以下字段:
- answer: 主要答案
- confidence: 置信度 (0-1)
- reasoning: 简短推理过程
- sources: 参考来源列表"""
        }],
        response_format={"type": "json_object"}  # JSON Mode
    )
    
    return json.loads(response.choices[0].message.content)

# 示例
result = structured_output_json("什么是 RAG 技术?")
print(json.dumps(result, indent=2, ensure_ascii=False))

8.2 Pydantic 模式

python 复制代码
"""
使用 Pydantic 定义输出模式
"""
from pydantic import BaseModel, Field
from typing import List

class SentimentResult(BaseModel):
    """情感分析结果"""
    sentiment: str = Field(description="情感:positive/negative/neutral")
    confidence: float = Field(description="置信度 0-1")
    keywords: List[str] = Field(description="关键词列表")
    reasoning: str = Field(description="分析理由")

def pydantic_output(text: str) -> SentimentResult:
    """Pydantic 模式输出"""
    
    prompt = f"""分析以下文本的情感:

{text}

请严格按照 JSON 格式返回,不要包含其他内容。"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        response_format={"type": "json_object"}
    )
    
    return SentimentResult.model_validate_json(
        response.choices[0].message.content
    )

# 使用
result = pydantic_output("这个产品太棒了!完全超出了我的预期。")
print(f"情感:{result.sentiment}")
print(f"置信度:{result.confidence:.0%}")
print(f"关键词:{result.keywords}")

九、高级技巧组合

9.1 组合策略

#mermaid-svg-EsCojFenXuJzoWVg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EsCojFenXuJzoWVg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EsCojFenXuJzoWVg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EsCojFenXuJzoWVg .error-icon{fill:#552222;}#mermaid-svg-EsCojFenXuJzoWVg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EsCojFenXuJzoWVg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EsCojFenXuJzoWVg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EsCojFenXuJzoWVg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EsCojFenXuJzoWVg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EsCojFenXuJzoWVg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EsCojFenXuJzoWVg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EsCojFenXuJzoWVg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EsCojFenXuJzoWVg .marker.cross{stroke:#333333;}#mermaid-svg-EsCojFenXuJzoWVg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EsCojFenXuJzoWVg p{margin:0;}#mermaid-svg-EsCojFenXuJzoWVg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EsCojFenXuJzoWVg .cluster-label text{fill:#333;}#mermaid-svg-EsCojFenXuJzoWVg .cluster-label span{color:#333;}#mermaid-svg-EsCojFenXuJzoWVg .cluster-label span p{background-color:transparent;}#mermaid-svg-EsCojFenXuJzoWVg .label text,#mermaid-svg-EsCojFenXuJzoWVg span{fill:#333;color:#333;}#mermaid-svg-EsCojFenXuJzoWVg .node rect,#mermaid-svg-EsCojFenXuJzoWVg .node circle,#mermaid-svg-EsCojFenXuJzoWVg .node ellipse,#mermaid-svg-EsCojFenXuJzoWVg .node polygon,#mermaid-svg-EsCojFenXuJzoWVg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EsCojFenXuJzoWVg .rough-node .label text,#mermaid-svg-EsCojFenXuJzoWVg .node .label text,#mermaid-svg-EsCojFenXuJzoWVg .image-shape .label,#mermaid-svg-EsCojFenXuJzoWVg .icon-shape .label{text-anchor:middle;}#mermaid-svg-EsCojFenXuJzoWVg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EsCojFenXuJzoWVg .rough-node .label,#mermaid-svg-EsCojFenXuJzoWVg .node .label,#mermaid-svg-EsCojFenXuJzoWVg .image-shape .label,#mermaid-svg-EsCojFenXuJzoWVg .icon-shape .label{text-align:center;}#mermaid-svg-EsCojFenXuJzoWVg .node.clickable{cursor:pointer;}#mermaid-svg-EsCojFenXuJzoWVg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EsCojFenXuJzoWVg .arrowheadPath{fill:#333333;}#mermaid-svg-EsCojFenXuJzoWVg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EsCojFenXuJzoWVg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EsCojFenXuJzoWVg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EsCojFenXuJzoWVg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EsCojFenXuJzoWVg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EsCojFenXuJzoWVg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EsCojFenXuJzoWVg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EsCojFenXuJzoWVg .cluster text{fill:#333;}#mermaid-svg-EsCojFenXuJzoWVg .cluster span{color:#333;}#mermaid-svg-EsCojFenXuJzoWVg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EsCojFenXuJzoWVg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EsCojFenXuJzoWVg rect.text{fill:none;stroke-width:0;}#mermaid-svg-EsCojFenXuJzoWVg .icon-shape,#mermaid-svg-EsCojFenXuJzoWVg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EsCojFenXuJzoWVg .icon-shape p,#mermaid-svg-EsCojFenXuJzoWVg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EsCojFenXuJzoWVg .icon-shape .label rect,#mermaid-svg-EsCojFenXuJzoWVg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EsCojFenXuJzoWVg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EsCojFenXuJzoWVg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EsCojFenXuJzoWVg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 组合策略
CoT + Few-shot
ReAct + ToT
Self-C + CoT
Chain + Branch
复杂推理

  • 格式学习
    多路径探索

  • 工具调用
    多样化推理

  • 一致性投票
    任务分解

  • 条件分支

9.2 完整示例:代码审查 Agent

python 复制代码
"""
完整示例:代码审查 Agent
结合:角色 + CoT + 工具调用 + 结构化输出
"""
SYSTEM_PROMPT = """你是一位资深代码审查员,擅长发现代码中的:
1. Bug 和潜在问题
2. 性能问题
3. 安全漏洞
4. 代码风格问题
5. 最佳实践建议

请一步一步审查代码,给出详细的审查报告。"""

def code_review_agent(code: str, language: str = "python") -> dict:
    """代码审查 Agent"""
    
    # 步骤 1:初步审查(CoT)
    review_prompt = f"""请审查以下 {language} 代码:

```{language}
{code}

请逐步分析:

  1. 代码逻辑是否有问题

  2. 是否有潜在 Bug

  3. 性能是否可以优化

  4. 是否有安全问题

  5. 代码风格是否符合规范"""

    review_response = client.chat.completions.create(

    model="gpt-4",

    messages=[

    {"role": "system", "content": SYSTEM_PROMPT},

    {"role": "user", "content": review_prompt}

    ]

    )

    步骤 2:结构化输出

    structured_prompt = f"""将以下代码审查结果整理成 JSON 格式:

{review_response.choices0.message.content}

JSON 格式要求:

{{

"summary": "总体评价(1-2句)",

"severity": "高/中/低",

"issues": [

{{

"type": "bug/security/performance/style",

"location": "问题位置",

"description": "问题描述",

"suggestion": "修改建议"

}}

],

"score": "代码评分 1-10"

}}"""

复制代码
structured_response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": structured_prompt}],
    response_format={"type": "json_object"}
)

return json.loads(structured_response.choices[0].message.content)

使用

review = code_review_agent("""

def get_user(user_id):

query = f"SELECT * FROM users WHERE id = {user_id}"

return db.execute(query)

""")

print(json.dumps(review, indent=2, ensure_ascii=False))

复制代码
---

## 十、工程实践

### 10.1 Prompt 优化流程

```mermaid
flowchart TD
    A[初始 Prompt] --> B[基线测试]
    B --> C{效果达标?}
    
    C -->|否| D[分析问题]
    D --> E[调整 Prompt]
    E --> B
    
    C -->|是| F[生成变体]
    F --> G[A/B 测试]
    G --> H{哪个更好?}
    
    H -->|A| I[选择 A]
    H -->|B| J[选择 B]
    
    I --> K[上线]
    J --> K
    
    style K fill:#e8f5e9

10.2 Prompt 版本管理

python 复制代码
"""
Prompt 版本管理
"""
from dataclasses import dataclass
from typing import Dict, Any
import json
from datetime import datetime

@dataclass
class PromptVersion:
    """Prompt 版本"""
    version: str
    prompt: str
    metrics: Dict[str, Any]
    created_at: str
    created_by: str

class PromptManager:
    """Prompt 版本管理器"""
    
    def __init__(self, storage_path: str = "prompts/"):
        self.storage_path = storage_path
        self.versions: Dict[str, list] = {}
    
    def save(self, name: str, prompt: str, metrics: Dict) -> str:
        """保存新版本"""
        
        version = f"v{datetime.now().strftime('%Y%m%d%H%M%S')}"
        
        record = PromptVersion(
            version=version,
            prompt=prompt,
            metrics=metrics,
            created_at=datetime.now().isoformat(),
            created_by="agent"
        )
        
        if name not in self.versions:
            self.versions[name] = []
        
        self.versions[name].append(record)
        
        # 持久化
        with open(f"{self.storage_path}{name}.json", 'w') as f:
            json.dump([vars(v) for v in self.versions[name]], f, indent=2)
        
        return version
    
    def get_latest(self, name: str) -> PromptVersion:
        """获取最新版本"""
        return self.versions[name][-1] if name in self.versions else None
    
    def compare(self, name: str, v1: str, v2: str) -> dict:
        """对比两个版本"""
        # ... 实现对比逻辑
        pass

# 使用
manager = PromptManager()

# 保存新版本
version = manager.save(
    name="code-review",
    prompt="你是一个代码审查员...",
    metrics={"accuracy": 0.85, "latency": 1.2}
)

print(f"保存版本:{version}")

10.3 A/B 测试框架

python 复制代码
"""
Prompt A/B 测试框架
"""
import random
from typing import Callable, Any

class PromptABTest:
    """Prompt A/B 测试"""
    
    def __init__(self, name: str):
        self.name = name
        self.results_a = []
        self.results_b = []
    
    def run(
        self,
        test_cases: list,
        prompt_a: str,
        prompt_b: str,
        evaluator: Callable[[str, Any], float]
    ) -> dict:
        """运行 A/B 测试"""
        
        for case in test_cases:
            # 随机分配
            if random.random() < 0.5:
                # 测试 A
                result_a = call_model(prompt_a, case)
                score = evaluator(result_a, case.get("expected"))
                self.results_a.append({"case": case, "score": score})
            else:
                # 测试 B
                result_b = call_model(prompt_b, case)
                score = evaluator(result_b, case.get("expected"))
                self.results_b.append({"case": case, "score": score})
        
        # 统计分析
        avg_a = sum(r["score"] for r in self.results_a) / len(self.results_a)
        avg_b = sum(r["score"] for r in self.results_b) / len(self.results_b)
        
        return {
            "name": self.name,
            "prompt_a_avg": avg_a,
            "prompt_b_avg": avg_b,
            "winner": "A" if avg_a > avg_b else "B",
            "improvement": abs(avg_a - avg_b) / max(avg_a, avg_b)
        }

def call_model(prompt: str, case: dict) -> str:
    """调用模型"""
    # ...
    pass

def evaluator(response: str, expected: Any) -> float:
    """评估响应质量"""
    # ... 实现评估逻辑
    return 0.8

十一、常见问题与解决

11.1 Prompt 工程避坑指南

#mermaid-svg-e6KfqIsi9a3Kei2m{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-e6KfqIsi9a3Kei2m .error-icon{fill:#552222;}#mermaid-svg-e6KfqIsi9a3Kei2m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-e6KfqIsi9a3Kei2m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-e6KfqIsi9a3Kei2m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-e6KfqIsi9a3Kei2m .marker.cross{stroke:#333333;}#mermaid-svg-e6KfqIsi9a3Kei2m svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-e6KfqIsi9a3Kei2m p{margin:0;}#mermaid-svg-e6KfqIsi9a3Kei2m .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster-label text{fill:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster-label span{color:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster-label span p{background-color:transparent;}#mermaid-svg-e6KfqIsi9a3Kei2m .label text,#mermaid-svg-e6KfqIsi9a3Kei2m span{fill:#333;color:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m .node rect,#mermaid-svg-e6KfqIsi9a3Kei2m .node circle,#mermaid-svg-e6KfqIsi9a3Kei2m .node ellipse,#mermaid-svg-e6KfqIsi9a3Kei2m .node polygon,#mermaid-svg-e6KfqIsi9a3Kei2m .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-e6KfqIsi9a3Kei2m .rough-node .label text,#mermaid-svg-e6KfqIsi9a3Kei2m .node .label text,#mermaid-svg-e6KfqIsi9a3Kei2m .image-shape .label,#mermaid-svg-e6KfqIsi9a3Kei2m .icon-shape .label{text-anchor:middle;}#mermaid-svg-e6KfqIsi9a3Kei2m .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-e6KfqIsi9a3Kei2m .rough-node .label,#mermaid-svg-e6KfqIsi9a3Kei2m .node .label,#mermaid-svg-e6KfqIsi9a3Kei2m .image-shape .label,#mermaid-svg-e6KfqIsi9a3Kei2m .icon-shape .label{text-align:center;}#mermaid-svg-e6KfqIsi9a3Kei2m .node.clickable{cursor:pointer;}#mermaid-svg-e6KfqIsi9a3Kei2m .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-e6KfqIsi9a3Kei2m .arrowheadPath{fill:#333333;}#mermaid-svg-e6KfqIsi9a3Kei2m .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-e6KfqIsi9a3Kei2m .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-e6KfqIsi9a3Kei2m .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-e6KfqIsi9a3Kei2m .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-e6KfqIsi9a3Kei2m .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-e6KfqIsi9a3Kei2m .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster text{fill:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m .cluster span{color:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-e6KfqIsi9a3Kei2m .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-e6KfqIsi9a3Kei2m rect.text{fill:none;stroke-width:0;}#mermaid-svg-e6KfqIsi9a3Kei2m .icon-shape,#mermaid-svg-e6KfqIsi9a3Kei2m .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-e6KfqIsi9a3Kei2m .icon-shape p,#mermaid-svg-e6KfqIsi9a3Kei2m .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-e6KfqIsi9a3Kei2m .icon-shape .label rect,#mermaid-svg-e6KfqIsi9a3Kei2m .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-e6KfqIsi9a3Kei2m .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-e6KfqIsi9a3Kei2m .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-e6KfqIsi9a3Kei2m :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 避坑指南
❌ 过度复杂
❌ 模糊指令
❌ 矛盾要求
❌ 示例过多
分解为多步
具体明确
统一目标
精选 3-5 个

问题 原因 解决方案
🚨 输出不稳定 温度太高 降低 temperature
🚨 格式错误 约束不清晰 使用 JSON Mode
🚨 上下文遗忘 输入太长 实施摘要策略
🚨 推理错误 任务太复杂 使用 CoT/ToT
🚨 重复输出 Prompt 有歧义 明确要求

11.2 温度参数指南

任务 建议温度 原因
代码生成 0.0 - 0.2 需要确定性
事实问答 0.0 - 0.1 准确性优先
翻译 0.0 - 0.3 保持准确性
摘要 0.3 - 0.5 平衡准确与流畅
创意写作 0.7 - 1.0 需要多样性
头脑风暴 0.8 - 1.0 发散性思维

十二、总结

#mermaid-svg-YzuoHZzPjlTvgFPo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YzuoHZzPjlTvgFPo .error-icon{fill:#552222;}#mermaid-svg-YzuoHZzPjlTvgFPo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YzuoHZzPjlTvgFPo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YzuoHZzPjlTvgFPo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YzuoHZzPjlTvgFPo .marker.cross{stroke:#333333;}#mermaid-svg-YzuoHZzPjlTvgFPo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YzuoHZzPjlTvgFPo p{margin:0;}#mermaid-svg-YzuoHZzPjlTvgFPo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster-label text{fill:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster-label span{color:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster-label span p{background-color:transparent;}#mermaid-svg-YzuoHZzPjlTvgFPo .label text,#mermaid-svg-YzuoHZzPjlTvgFPo span{fill:#333;color:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo .node rect,#mermaid-svg-YzuoHZzPjlTvgFPo .node circle,#mermaid-svg-YzuoHZzPjlTvgFPo .node ellipse,#mermaid-svg-YzuoHZzPjlTvgFPo .node polygon,#mermaid-svg-YzuoHZzPjlTvgFPo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YzuoHZzPjlTvgFPo .rough-node .label text,#mermaid-svg-YzuoHZzPjlTvgFPo .node .label text,#mermaid-svg-YzuoHZzPjlTvgFPo .image-shape .label,#mermaid-svg-YzuoHZzPjlTvgFPo .icon-shape .label{text-anchor:middle;}#mermaid-svg-YzuoHZzPjlTvgFPo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YzuoHZzPjlTvgFPo .rough-node .label,#mermaid-svg-YzuoHZzPjlTvgFPo .node .label,#mermaid-svg-YzuoHZzPjlTvgFPo .image-shape .label,#mermaid-svg-YzuoHZzPjlTvgFPo .icon-shape .label{text-align:center;}#mermaid-svg-YzuoHZzPjlTvgFPo .node.clickable{cursor:pointer;}#mermaid-svg-YzuoHZzPjlTvgFPo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YzuoHZzPjlTvgFPo .arrowheadPath{fill:#333333;}#mermaid-svg-YzuoHZzPjlTvgFPo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YzuoHZzPjlTvgFPo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YzuoHZzPjlTvgFPo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YzuoHZzPjlTvgFPo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YzuoHZzPjlTvgFPo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YzuoHZzPjlTvgFPo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster text{fill:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo .cluster span{color:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YzuoHZzPjlTvgFPo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YzuoHZzPjlTvgFPo rect.text{fill:none;stroke-width:0;}#mermaid-svg-YzuoHZzPjlTvgFPo .icon-shape,#mermaid-svg-YzuoHZzPjlTvgFPo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YzuoHZzPjlTvgFPo .icon-shape p,#mermaid-svg-YzuoHZzPjlTvgFPo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YzuoHZzPjlTvgFPo .icon-shape .label rect,#mermaid-svg-YzuoHZzPjlTvgFPo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YzuoHZzPjlTvgFPo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YzuoHZzPjlTvgFPo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YzuoHZzPjlTvgFPo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 📝 Prompt Engineering 总结
基础技巧
进阶技巧
高级技巧
工程实践
Few-shot

格式约束

角色扮演
CoT 思维链

ToT 思维树

ReAct 推理
Self-Consistency

Prompt Chaining

结构化输出
版本管理

A/B 测试

迭代优化

技巧选择指南

场景 推荐技巧
简单问答 Zero-shot + 角色设定
格式要求 Few-shot + JSON Mode
复杂推理 CoT + Few-shot CoT
多方案决策 ToT + 评估函数
工具调用 ReAct + 工具定义
可靠性要求高 Self-Consistency
长任务 Prompt Chaining
多格式输出 Pydantic Mode

学习路径

#mermaid-svg-oPYjIDJwg1RtyNDP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oPYjIDJwg1RtyNDP .error-icon{fill:#552222;}#mermaid-svg-oPYjIDJwg1RtyNDP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oPYjIDJwg1RtyNDP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oPYjIDJwg1RtyNDP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oPYjIDJwg1RtyNDP .marker.cross{stroke:#333333;}#mermaid-svg-oPYjIDJwg1RtyNDP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oPYjIDJwg1RtyNDP p{margin:0;}#mermaid-svg-oPYjIDJwg1RtyNDP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster-label text{fill:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster-label span{color:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster-label span p{background-color:transparent;}#mermaid-svg-oPYjIDJwg1RtyNDP .label text,#mermaid-svg-oPYjIDJwg1RtyNDP span{fill:#333;color:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP .node rect,#mermaid-svg-oPYjIDJwg1RtyNDP .node circle,#mermaid-svg-oPYjIDJwg1RtyNDP .node ellipse,#mermaid-svg-oPYjIDJwg1RtyNDP .node polygon,#mermaid-svg-oPYjIDJwg1RtyNDP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oPYjIDJwg1RtyNDP .rough-node .label text,#mermaid-svg-oPYjIDJwg1RtyNDP .node .label text,#mermaid-svg-oPYjIDJwg1RtyNDP .image-shape .label,#mermaid-svg-oPYjIDJwg1RtyNDP .icon-shape .label{text-anchor:middle;}#mermaid-svg-oPYjIDJwg1RtyNDP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oPYjIDJwg1RtyNDP .rough-node .label,#mermaid-svg-oPYjIDJwg1RtyNDP .node .label,#mermaid-svg-oPYjIDJwg1RtyNDP .image-shape .label,#mermaid-svg-oPYjIDJwg1RtyNDP .icon-shape .label{text-align:center;}#mermaid-svg-oPYjIDJwg1RtyNDP .node.clickable{cursor:pointer;}#mermaid-svg-oPYjIDJwg1RtyNDP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oPYjIDJwg1RtyNDP .arrowheadPath{fill:#333333;}#mermaid-svg-oPYjIDJwg1RtyNDP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oPYjIDJwg1RtyNDP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oPYjIDJwg1RtyNDP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oPYjIDJwg1RtyNDP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oPYjIDJwg1RtyNDP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oPYjIDJwg1RtyNDP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster text{fill:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP .cluster span{color:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oPYjIDJwg1RtyNDP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oPYjIDJwg1RtyNDP rect.text{fill:none;stroke-width:0;}#mermaid-svg-oPYjIDJwg1RtyNDP .icon-shape,#mermaid-svg-oPYjIDJwg1RtyNDP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oPYjIDJwg1RtyNDP .icon-shape p,#mermaid-svg-oPYjIDJwg1RtyNDP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oPYjIDJwg1RtyNDP .icon-shape .label rect,#mermaid-svg-oPYjIDJwg1RtyNDP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oPYjIDJwg1RtyNDP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oPYjIDJwg1RtyNDP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oPYjIDJwg1RtyNDP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 入门
基础 Prompt
Few-shot
CoT
ReAct
ToT
组合技巧
工程化


本文基于 GPT-4、Claude 3 等主流模型实践编写。不同模型对 Prompt 技巧的敏感度不同,建议读者根据实际使用情况进行调整。如有问题欢迎评论区讨论!

相关推荐
chancygcx_1 小时前
前端框架React day1--React入门
前端·react.js·前端框架
lhxcc_fly1 小时前
4.LangChain--Prompt提示词
langchain·llm·prompt
quan_泉1 小时前
DIDCTF 取证初学者
java·服务器·前端
程序猿乐锅1 小时前
吴恩达Prompt提示词课有感
人工智能·prompt
无风听海1 小时前
Promise 与 Async Await 深度解析
前端·javascript
牛奶1 小时前
AI 永远说好,于是我们只会说 yes
前端·aigc·ai编程
浩风祭月1 小时前
把前端项目的 CI 构建时间从 15 分钟压到了 2 分钟
前端·ai编程
牛奶1 小时前
黑客是怎么看到你数据的?
前端·安全·黑客
ihuyigui2 小时前
国际企业办公短信接口
前端·后端·架构