前言
💡 痛点:写的 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 的核心循环:
- Thought(思考) - 分析当前情况
- Action(行动) - 执行工具/操作
- Observation(观察) - 获取结果
- 重复 - 直到任务完成
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}
请逐步分析:
-
代码逻辑是否有问题
-
是否有潜在 Bug
-
性能是否可以优化
-
是否有安全问题
-
代码风格是否符合规范"""
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 技巧的敏感度不同,建议读者根据实际使用情况进行调整。如有问题欢迎评论区讨论!