Prompt Engineering 技术体系全解析:从 Zero-shot 到 ToT 的完整指南(含大量示例)

发表信息: by

Prompt Engineering 技术体系全解析:从 Zero-shot 到 ToT 的完整指南

随着大语言模型(LLM)的快速发展,Prompt Engineering(提示工程)已经从简单的"问问题"演变成一套完整的技术体系。本文将通过大量实际可用的 Prompt 示例,帮助你真正理解和掌握这些技术。

一、Prompt 格式标准

1.1 XML 标签格式(Claude 推荐)

<context>
  你是一位资深的Python开发工程师,擅长代码审查和优化。
</context>

<task>
  请审查以下代码并提出改进建议。
</task>

<code>
def calc(x,y):
    return x+y
</code>

<requirements>
  1. 检查代码规范性
  2. 提出性能优化建议
  3. 使用中文回复
</requirements>

1.2 Markdown 格式(GPT 推荐)

## 角色
你是一位资深的Python开发工程师

## 任务
请审查以下代码并提出改进建议

## 代码
\`\`\`python
def calc(x,y):
    return x+y
\`\`\`

## 要求
- 检查代码规范性
- 提出性能优化建议

二、Shot 系列:示例驱动的基础技术

2.1 Zero-shot(零样本)

不给任何示例,直接让模型执行任务。

Prompt: 
将以下中文翻译成英文:今天天气很好

Output: 
The weather is nice today.
Prompt:
判断以下评论的情感是正面、负面还是中性:
"这个产品质量不错,但价格有点贵"

Output:
中性(产品有优点但也有不满)

2.2 One-shot(单样本)

提供1个示例来帮助模型理解任务格式。

Prompt:
将产品评论转换为结构化数据。

示例:
输入:"手机很好用,电池耐用,就是有点重"
输出:{"优点": ["好用", "电池耐用"], "缺点": ["有点重"], "评分": 4}

现在处理:
输入:"屏幕清晰,拍照效果一般,价格实惠"
输出:

Output:
{"优点": ["屏幕清晰", "价格实惠"], "缺点": ["拍照效果一般"], "评分": 3.5}

2.3 Few-shot(少样本)

提供2-5个示例,让模型学习模式。

Prompt:
请根据示例,为新的编程概念生成通俗解释:

概念:变量
解释:变量就像一个贴了标签的盒子,你可以把东西(数据)放进去,之后用标签名字找到它。

概念:函数
解释:函数就像一台咖啡机,你放入咖啡豆和水(输入参数),它给你一杯咖啡(返回值)。

概念:循环
解释:循环就像跑步机,让你一直重复同样的动作,直到达到设定的条件才停下来。

概念:递归
解释:

Output:
递归就像俄罗斯套娃,打开一个娃娃里面还有个小一号的娃娃,
一直打开到最小的那个(基准条件)才停下来,然后再一层层合上。

三、推理增强技术(重点!大量示例)

3.1 Chain of Thought (CoT) - 链式思维

核心思想:让模型"思考出声",展示推理过程,而不是直接给答案。

💡 示例1:数学应用题

❌ 普通问法(经常出错):

Q: 我去市场买了10个苹果。给了邻居2个,给了修理工2个。
   然后又买了5个苹果,吃了1个。我还剩多少个苹果?

A: 9个  ← 这是错的!

✅ CoT 问法(准确率大幅提升):

Q: 我去市场买了10个苹果。给了邻居2个,给了修理工2个。
   然后又买了5个苹果,吃了1个。我还剩多少个苹果?
   
   请一步一步思考。

A: 让我一步步计算:
   第1步:开始买了 10 个苹果
   第2步:给邻居 2 个:10 - 2 = 8 个
   第3步:给修理工 2 个:8 - 2 = 6 个
   第4步:又买了 5 个:6 + 5 = 11 个
   第5步:吃了 1 个:11 - 1 = 10 个
   
   答案:我还剩 10 个苹果。 ✓

💡 示例2:逻辑推理

❌ 普通问法:

Q: 这组数字中的奇数加起来是偶数吗?4, 8, 9, 15, 12, 2, 1

A: 是的  ← 错误!

✅ CoT 问法:

Q: 这组数字中的奇数加起来是偶数吗?4, 8, 9, 15, 12, 2, 1

   请按以下步骤分析:
   1. 首先找出所有奇数
   2. 计算这些奇数的和
   3. 判断结果是奇数还是偶数

A: 让我按步骤分析:
   
   第1步 - 找出奇数:
   4(偶), 8(偶), 9(奇), 15(奇), 12(偶), 2(偶), 1(奇)
   奇数有:9, 15, 1
   
   第2步 - 计算和:
   9 + 15 + 1 = 25
   
   第3步 - 判断结果:
   25 ÷ 2 = 12余1,所以25是奇数
   
   答案:不是偶数,这些奇数的和是25,是奇数。 ✓

💡 示例3:Few-shot CoT(最强用法!)

给模型展示"推理长什么样":

Prompt:

Q: 小明有5本书,借给小红2本后,又从图书馆借了3本。小明现在有几本书?
A: 我来一步步算。
   开始:5本
   借出后:5 - 2 = 3本  
   借入后:3 + 3 = 6本
   答案是6本。

Q: 停车场有7辆车,开走了4辆,又开来了2辆。停车场现在有几辆车?
A: 我来一步步算。
   开始:7辆
   开走后:7 - 4 = 3辆
   开来后:3 + 2 = 5辆
   答案是5辆。

Q: 小华有12支铅笔,送给同学5支,妈妈又给他买了8支。小华现在有几支铅笔?
A:

Output:
我来一步步算。
开始:12支
送出后:12 - 5 = 7支
买入后:7 + 8 = 15支
答案是15支。

💡 示例4:代码调试场景

Prompt:
请帮我找出这段代码的bug,一步步分析:

def find_max(numbers):
    max_num = 0
    for num in numbers:
        if num > max_num:
            max_num = num
    return max_num

print(find_max([-1, -5, -3]))  # 期望输出 -1

请按以下步骤分析:
1. 理解代码意图
2. 追踪代码执行过程
3. 找出问题所在
4. 提供修复方案

Output:
让我一步步分析:

**第1步 - 理解代码意图:**
这个函数想要找出列表中的最大值。

**第2步 - 追踪执行过程:**
- 输入:[-1, -5, -3]
- max_num 初始化为 0
- 循环检查:
  - -1 > 0? 否,max_num 保持 0
  - -5 > 0? 否,max_num 保持 0
  - -3 > 0? 否,max_num 保持 0
- 返回 0

**第3步 - 问题所在:**
max_num 初始化为 0,当所有数字都是负数时,没有任何数字能大于0,
所以会错误地返回0。

**第4步 - 修复方案:**
def find_max(numbers):
    if not numbers:
        return None
    max_num = numbers[0]  # 用第一个元素初始化
    for num in numbers[1:]:
        if num > max_num:
            max_num = num
    return max_num

💡 示例5:复杂业务决策

Prompt:
我在考虑是否应该接受一个新的工作offer,请帮我分析:

当前工作:
- 月薪 2万
- 通勤 30分钟
- 工作内容熟悉
- 团队关系好

新offer:
- 月薪 2.6万
- 通勤 1.5小时
- 需要学习新技术
- 是知名大厂

请从多个维度一步步分析这个决策。

Output:
让我从多个维度逐一分析:

**1. 财务维度分析:**
- 薪资涨幅:(2.6-2)/2 = 30%,这是显著的提升
- 年收入增加:0.6万 × 12 = 7.2万/年
- 结论:财务上有明显收益 ✓

**2. 时间成本分析:**
- 通勤增加:(1.5-0.5) × 2 = 2小时/天(往返)
- 每月额外通勤:2 × 22 = 44小时
- 如果按时薪计算:6000/44 ≈ 136元/小时
- 结论:时间成本需要认真考虑 ⚠️

**3. 职业发展分析:**
- 大厂背书:对简历有加成
- 新技术栈:扩展能力边界
- 但有学习曲线压力
- 结论:长期有利,短期有压力 ✓⚠️

**4. 生活质量分析:**
- 通勤增加影响生活时间
- 离开熟悉的团队有适应期
- 但薪资提升可改善生活质量
- 结论:需要权衡取舍

**综合建议:**
如果你是职业上升期(30岁以下),建议接受。大厂经验+薪资提升的
长期收益大于短期的通勤成本。如果已经35+或家庭责任重,建议慎重。

3.2 Zero-shot CoT

最简单的 CoT 触发方式!只需在问题后面加一句魔法咒语:

魔法触发词(选一个加在问题后面)

✨ "Let's think step by step"
✨ "请一步步思考"
✨ "让我们逐步分析"
✨ "请详细说明你的推理过程"
✨ "Think carefully and show your reasoning"

💡 完整示例1

Q: 一家书店上午卖出45本书,下午卖出的比上午多18本。这一天共卖出多少本书?

Let's think step by step.

A: 让我一步步思考:
   
   1. 上午卖出:45本
   2. 下午比上午多18本,所以下午卖出:45 + 18 = 63本
   3. 一天总共卖出:45 + 63 = 108本
   
   答案:这一天共卖出108本书。

💡 完整示例2:经典河渡谜题

Q: 一个农民要带着一只狼、一只羊和一棵白菜过河。
   船很小,每次只能带一样东西。
   如果农民不在,狼会吃羊,羊会吃白菜。
   农民如何安全地把它们都带过河?

Let's think step by step.

A: 让我一步步思考这个经典谜题:

   **分析约束条件:**
   - 狼+羊单独 = 羊被吃
   - 羊+白菜单独 = 白菜被吃
   - 狼+白菜单独 = 安全(狼不吃白菜)

   **解决步骤:**
   
   第1步:农民带羊过河 → 
          左岸:狼、白菜 | 右岸:农民、羊
          (狼和白菜可以单独在一起)
   
   第2步:农民独自返回 → 
          左岸:狼、白菜、农民 | 右岸:羊
   
   第3步:农民带狼过河 → 
          左岸:白菜 | 右岸:农民、狼、羊
          ⚠️ 但狼和羊在一起!
   
   第4步:农民带羊返回 → 
          左岸:白菜、农民、羊 | 右岸:狼
          (关键步骤:把羊带回来!)
   
   第5步:农民带白菜过河 → 
          左岸:羊 | 右岸:农民、狼、白菜
   
   第6步:农民独自返回 → 
          左岸:农民、羊 | 右岸:狼、白菜
   
   第7步:农民带羊过河 → 
          左岸:空 | 右岸:农民、狼、羊、白菜 ✓

   答案:共需要7次渡河,关键是第4步要把羊带回来。

3.3 Self-Consistency(自洽性)

核心思想:同一个问题问多次,让答案"投票"选出最靠谱的!

💡 图解原理

                    ┌─→ 推理路径1 → 答案: 76岁 ✓
                    │
同一个问题 ────────┼─→ 推理路径2 → 答案: 76岁 ✓
  (temperature=0.7) │
                    ├─→ 推理路径3 → 答案: 140岁 ✗ (推理出错)
                    │
                    ├─→ 推理路径4 → 答案: 76岁 ✓
                    │
                    └─→ 推理路径5 → 答案: 76岁 ✓

投票统计:76岁=4票,140岁=1票
最终答案:76岁 ✓(多数获胜)

💡 完整示例

问题: 小明6岁时,他姐姐的年龄是他的2倍。现在小明70岁了,他姐姐多少岁?

第1次调用(temperature=0.7):

让我想想...
小明6岁时,姐姐是6×2=12岁
姐姐比小明大:12-6=6岁
现在小明70岁,姐姐:70+6=76岁
答案:76岁

第2次调用:

计算一下。
当年姐姐是小明的2倍,即12岁。
年龄差永远是6岁。
现在姐姐是70+6=76岁。
答案:76岁

第3次调用:

小明6岁→姐姐12岁
差值=6
现在=70+6=76
答案:76岁

第4次调用(出错了!):

姐姐是小明的2倍。
现在小明70岁,姐姐70×2=140岁
答案:140岁  ← 推理错误!

第5次调用:

6岁时差6岁(12-6)
这个差距不会变
所以现在姐姐70+6=76岁
答案:76岁

投票结果: | 答案 | 票数 | |——|——| | 76岁 | 4票 ✓ | | 140岁 | 1票 |

最终输出:76岁

💡 Python 实现代码

import openai
from collections import Counter

def self_consistency(question, num_samples=5):
    """使用自洽性方法获得更准确的答案"""
    
    answers = []
    
    for i in range(num_samples):
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[{
                "role": "user",
                "content": f"{question}\n\nLet's think step by step."
            }],
            temperature=0.7  # 需要一定随机性来获得多样的推理路径
        )
        
        # 提取最终答案(需要根据实际情况解析)
        full_response = response.choices[0].message.content
        answer = extract_final_answer(full_response)  # 自定义函数
        answers.append(answer)
        print(f"第{i+1}次推理结果: {answer}")
    
    # 多数投票
    vote = Counter(answers)
    final_answer, count = vote.most_common(1)[0]
    
    print(f"\n投票结果: {dict(vote)}")
    print(f"最终答案: {final_answer} (获得{count}票)")
    
    return final_answer

# 使用示例
result = self_consistency(
    "小明6岁时姐姐是他年龄的2倍,现在小明70岁,姐姐多少岁?",
    num_samples=5
)

四、Tree of Thoughts (ToT) - 思维树

核心思想:不只走一条路,而是同时探索多条路,选最好的那条!

4.1 CoT vs ToT 对比

CoT(链式思维):
问题 → 步骤1 → 步骤2 → 步骤3 → 答案
     (只有一条路,走错了就全错)

ToT(思维树):
问题 → ┌─ 思路A → 评估:不太对 → 放弃
      ├─ 思路B → 评估:看起来对 → 继续 → 答案 ✓
      └─ 思路C → 评估:完全错误 → 放弃
     (多条路同时探索,可以回溯)

4.2 💡 完整示例:24点游戏

问题:用 4, 5, 6, 10 四个数字,通过加减乘除得到24

ToT 解题过程:

Prompt:

你需要用 4, 5, 6, 10 这四个数字,每个只能用一次,
通过加减乘除运算得到24。

请像三位专家一样思考:
- 每位专家提出一个初步思路
- 评估每个思路的可行性
- 选择最有希望的思路继续
- 如果走不通就回溯尝试其他思路

Output:

**专家A的思路:**
初步想法:先找能凑成简单数的组合
- 观察:6 × 4 = 24,那只需要让 5 和 10 "消失"
- 尝试:5 - 10 = -5...这没法用
- 尝试:10 / 5 = 2,但 6 × 4 × 2 = 48,不对
- 评估:❌ 这个方向不太对,放弃

**专家B的思路:**
初步想法:24 = 20 + 4,能凑20吗?
- 观察:10 × 2 = 20,那需要凑出2
- 尝试:6 - 4 = 2,那 10 × 2 = 20,但5还没用
- 这个方向也不太对
- 评估:❌ 放弃

**专家C的思路:**
初步想法:24可以分解为哪些乘法?
- 24 = 8 × 3
- 24 = 6 × 4 ✓(6和4都在!)
- 24 = 12 × 2
- 如果用 6 × 4 = 24,那5和10需要组合成"乘1"或"加0"
- 10 / 5 = 2...不行
- 5 - 5 = 0...没有两个5
- 10 - 10 = 0...没有两个10
- 等等!换个角度:(10 - 6) = 4 或者 (10 - 4) = 6
- 如果 (10 - 6) × ... 
- 评估:⚠️ 有希望,继续深入

**深入专家C的思路:**
- (10 - 6) = 4
- 4 × ? = 24,需要 ? = 6
- 现在有数字 4, 5 可用,能凑6吗?
- 4 + 5 = 9...不行
- 5 - 4 = 1...不行
- 换个方向:4 × (10 - 6) = 16,还差8
- 16 + 8 = 24,5能变成8吗?不能
- 再换:让我试试 (6 - 4) × (10 + 5) = 2 × 15 = 30...不对
- 试试:4 × (6 - (10 / 5)) = 4 × (6 - 2) = 4 × 4 = 16...不对
- 试试:4 × 6 × (10 / 5) = 24 × 2 = 48...不对
- 试试:4 × (6 + 10 / 5) = 4 × (6 + 2) = 4 × 8 = 32...不对
- 试试:4 × (6 - 10 / 5) = 4 × (6 - 2) = 4 × 4 = 16...不对
- 试试:(4 + 6) × 10 / 5 = 10 × 2 = 20...不对
- 试试:(6 + 10 / 5) × 4 = 8 × 4 = 32...不对
- 试试:6 / (1 - 5/10) 看看能不能凑...
- 试试:(10 - 4) × (6 - 5) = 6 × 1 = 6...不对
- 试试:10 × 6 / (4 - 5) = 60 / (-1) = -60...不对
- 试试:(10 - 6) × 5 + 4 = 4 × 5 + 4 = 24 ✓✓✓

**答案:(10 - 6) × 5 + 4 = 24**

验证:
- 10 - 6 = 4
- 4 × 5 = 20
- 20 + 4 = 24 ✓

4.3 💡 简化版 ToT Prompt(可直接使用)

Prompt:

想象有三位不同领域的专家正在解决这个问题。
每位专家会:
1. 写下他们思考的第一步
2. 与其他专家分享
3. 评估所有思路,指出哪些有希望、哪些应该放弃
4. 继续最有希望的思路
5. 如果某位专家意识到自己的思路有问题,就退出

重复这个过程直到得出答案。

问题:[你的问题]

4.4 💡 ToT 解决复杂规划问题

Prompt:

问题:规划一次从北京到拉萨的自驾游,时间10天,预算2万。

请用思维树方法分析:

**第一轮探索 - 路线选择:**

思路A(川藏线):
- 优点:风景最美,318国道
- 缺点:路况复杂,耗时长
- 评估:风险中等,体验最佳
- 决定:✓ 保留

思路B(青藏线):
- 优点:路况好,海拔适应快
- 缺点:风景相对单一
- 评估:适合赶时间
- 决定:✓ 保留作为返程

思路C(新藏线):
- 优点:最原始
- 缺点:路况极差,10天不够
- 评估:时间不允许
- 决定:❌ 放弃

**第二轮深入 - 去程规划(川藏线):**
Day1-2:北京→西安(高速,约1200km)
Day3:西安→成都(高速,约700km)
Day4:成都→康定(开始318)
Day5:康定→理塘
Day6:理塘→芒康
Day7:芒康→波密
Day8:波密→拉萨

**评估这个方案:**
- 时间:8天到拉萨 ✓
- 剩余2天可在拉萨游玩
- 但返程怎么办?时间不够!

**回溯调整:**
重新规划:单程飞回,车托运
- 托运费用约3000
- 预算:油费5000 + 住宿4000 + 餐饮2000 + 门票2000 + 托运3000 = 16000
- 预算可行 ✓

**最终方案:**
去程走川藏线自驾,返程飞机+车辆托运。

五、ReAct - 推理与行动的协同

核心思想:让AI不只是"想",还能"做"——查资料、调API、执行代码!

5.1 ReAct 循环

用户问题
    ↓
┌─────────────────────────────────────┐
│  Thought: 我需要先查一下...          │
│      ↓                              │
│  Action: 搜索/调用API/执行代码        │
│      ↓                              │
│  Observation: 得到结果...            │
│      ↓                              │
│  Thought: 根据结果,我还需要...       │
│      ↓                              │
│  (循环继续,直到得出答案)             │
└─────────────────────────────────────┘
    ↓
最终答案

5.2 💡 完整示例1:查询实时信息

用户问题:苹果公司现在的股价是多少?市值超过微软了吗?

---

Thought 1: 我需要查询苹果公司的当前股价。

Action 1: search("AAPL stock price today")

Observation 1: Apple Inc. (AAPL) 当前股价 $178.52,
              涨幅 +1.2%,市值 2.79万亿美元。

---

Thought 2: 好的,我知道苹果的市值了。现在需要查微软的市值来比较。

Action 2: search("Microsoft MSFT market cap today")

Observation 2: Microsoft Corp. (MSFT) 当前股价 $378.91,
              市值 2.81万亿美元。

---

Thought 3: 现在我有了两个公司的数据:
          - 苹果市值:2.79万亿美元
          - 微软市值:2.81万亿美元
          微软略高于苹果。

Action 3: finish("苹果当前股价是$178.52。
                 苹果市值2.79万亿美元,
                 微软市值2.81万亿美元,
                 所以苹果市值目前没有超过微软。")

---

最终答案:苹果当前股价是$178.52。苹果市值约2.79万亿美元,
        微软市值约2.81万亿美元,所以苹果市值目前没有超过微软。

5.3 💡 完整示例2:多跳推理问答

用户问题:《哈利波特》作者的出生地现在属于哪个国家?

---

Thought 1: 我需要先找出《哈利波特》的作者是谁。

Action 1: search("Harry Potter author")

Observation 1: 《哈利波特》系列的作者是 J.K. Rowling(J.K.罗琳)

---

Thought 2: 好,作者是J.K.罗琳。现在我需要找她的出生地。

Action 2: search("J.K. Rowling birthplace")

Observation 2: J.K. Rowling 出生于英国英格兰格洛斯特郡的 Yate(耶特)。

---

Thought 3: 她出生在英格兰的Yate。英格兰是英国的一部分,
          这个地方现在仍然属于英国。我可以给出答案了。

Action 3: finish("《哈利波特》的作者J.K.罗琳出生于英格兰的Yate,
                 该地现在属于英国(大不列颠及北爱尔兰联合王国)。")

---

最终答案:《哈利波特》的作者J.K.罗琳出生于英格兰的Yate,
        该地现在属于英国。

5.4 💡 完整示例3:代码执行任务

用户问题:帮我计算一下,如果我每月存5000元,年利率4%,复利计算,10年后能有多少钱?

---

Thought 1: 这是一个复利计算问题,我需要写代码来精确计算。
          公式是定期定额复利:FV = PMT × ((1+r)^n - 1) / r
          但每月存款需要考虑月利率。

Action 1: execute_python("""
# 每月定额存款复利计算
monthly_deposit = 5000  # 每月存款
annual_rate = 0.04      # 年利率
years = 10              # 投资年限

monthly_rate = annual_rate / 12  # 月利率
months = years * 12              # 总月数

# 定期定额复利公式
# FV = PMT × ((1 + r)^n - 1) / r
fv = monthly_deposit * ((1 + monthly_rate) ** months - 1) / monthly_rate

print(f"10年后总金额: ¥{fv:,.2f}")
print(f"本金总投入: ¥{monthly_deposit * months:,}")
print(f"利息收益: ¥{fv - monthly_deposit * months:,.2f}")
""")

Observation 1: 
10年后总金额: ¥736,579.66
本金总投入: ¥600,000
利息收益: ¥136,579.66

---

Thought 2: 计算完成,我现在可以给出完整的答案。

Action 2: finish("如果每月存5000元,年利率4%复利计算:
                 - 10年后总金额:约73.66万元
                 - 本金投入:60万元(5000×12×10)
                 - 利息收益:约13.66万元")

---

最终答案:如果每月存5000元,年利率4%复利计算,10年后能有约73.66万元。
        其中本金60万,利息收益约13.66万。

5.5 ReAct vs 纯 CoT 对比

场景 CoT 表现 ReAct 表现
数学推理 ✅ 很好 ✅ 很好
实时信息查询 ❌ 会编造 ✅ 可查询
复杂计算 ⚠️ 可能出错 ✅ 可执行代码
多跳推理 ⚠️ 容易断链 ✅ 可验证每步
需要API ❌ 无法访问 ✅ 可调用

六、RAG - 检索增强生成

核心思想:让AI先"查资料",再回答问题,大幅减少胡说八道!

6.1 RAG 工作流程

用户问题:"公司的年假政策是什么?"
                ↓
        ┌───────────────────┐
        │  1. 问题向量化     │
        │  (转为数字表示)    │
        └───────────────────┘
                ↓
        ┌───────────────────┐
        │  2. 向量数据库检索  │
        │  (找相似文档)      │
        │                   │
        │  📄 员工手册.pdf   │
        │  📄 休假制度.doc   │
        │  📄 HR问答.txt    │
        └───────────────────┘
                ↓
        ┌───────────────────┐
        │  3. 构建增强Prompt │
        │                   │
        │  Context: [检索到  │
        │  的相关文档内容]   │
        │                   │
        │  Question: 公司的  │
        │  年假政策是什么?  │
        └───────────────────┘
                ↓
        ┌───────────────────┐
        │  4. LLM生成回答    │
        │  (基于检索到的内容) │
        └───────────────────┘
                ↓
        "根据公司员工手册,年假政策如下:
         工作满1年可享5天年假..."

6.2 💡 RAG Prompt 模板

你是一个专业的问答助手。请根据提供的上下文信息回答用户的问题。

<context>
{检索到的相关文档内容}
</context>

<rules>
1. 只根据上下文中的信息回答问题
2. 如果上下文中没有相关信息,请明确说"根据现有资料无法回答"
3. 不要编造或猜测信息
4. 如果可能,请引用具体的来源
</rules>

<question>
{用户的问题}
</question>

请回答上述问题:

6.3 💡 完整示例

假设检索到的文档内容:

[文档1: 员工手册-休假制度.pdf]
第五章 休假制度
5.1 年休假
- 工作满1年不满10年的,年休假5天
- 工作满10年不满20年的,年休假10天
- 工作满20年的,年休假15天

5.2 年假使用规则
- 年假应在当年使用完毕
- 经批准可延期至次年3月底
- 未使用的年假不予补偿

构建的完整 Prompt:

你是一个专业的HR助手。请根据提供的公司制度文档回答员工的问题。

<context>
[文档1: 员工手册-休假制度.pdf]
第五章 休假制度
5.1 年休假
- 工作满1年不满10年的,年休假5天
- 工作满10年不满20年的,年休假10天
- 工作满20年的,年休假15天

5.2 年假使用规则
- 年假应在当年使用完毕
- 经批准可延期至次年3月底
- 未使用的年假不予补偿
</context>

<question>
我在公司工作了8年,今年还有2天年假没用完,能结转到明年吗?
</question>

请回答:

LLM 输出:

根据公司员工手册的规定,我来回答您的问题:

1. **年假天数**:您工作满8年(属于"满1年不满10年"),
   每年享有5天年假。

2. **关于结转**:根据规定,年假原则上应在当年使用完毕。
   但是,经批准后可以延期至次年3月底前使用。

3. **建议**:
   - 您剩余的2天年假,建议尽快向主管申请延期使用
   - 如获批准,需在明年3月底前使用完毕
   - 请注意:如果过期未使用,不予补偿

建议您尽早与HR或直属领导沟通,申请年假延期。

七、技术选择决策树

你的任务是什么?
│
├─ 简单问答(翻译、分类)
│  └─ → Zero-shot(不需要示例)
│     └─ 效果不好 → Few-shot(加几个示例)
│
├─ 数学/逻辑推理
│  └─ → 先试 Zero-shot CoT(加"请一步步思考")
│     └─ 需要更准 → Self-Consistency(多次推理投票)
│        └─ 特别复杂 → Few-shot CoT(给带推理的示例)
│
├─ 需要探索多种方案的决策问题
│  └─ → Tree of Thoughts(思维树)
│
├─ 需要实时信息/调用工具
│  └─ → ReAct(推理+行动循环)
│
├─ 需要基于特定文档/知识库回答
│  └─ → RAG(检索增强生成)
│
└─ 复杂的多步骤任务
   └─ → Prompt Chaining(任务分解+链接)

八、速查表:各技术的触发 Prompt

技术 触发方式
Zero-shot CoT 在问题后加 Let's think step by step
Few-shot CoT 提供2-3个带推理过程的示例
Self-Consistency 调用5次(temperature=0.7),取多数答案
ToT 想象三位专家在讨论这个问题...
ReAct 使用 Thought/Action/Observation 格式
RAG 基于以下上下文回答:<context>...</context>

九、完整实战:组合使用多种技术

任务:帮用户规划一次日本旅行

# 第一步:用 RAG 获取最新信息
检索:日本签证政策2024、日本旅游攻略、日元汇率

# 第二步:用 CoT 分析用户需求
用户说想去日本玩7天,预算2万,喜欢动漫和美食。
让我一步步分析:
1. 时间:7天适合关东或关西单线
2. 预算:2万中等水平,可以舒适游
3. 兴趣:动漫→秋叶原/池袋,美食→大阪/京都
4. 建议路线:东京进大阪出,或反过来

# 第三步:用 ToT 探索多个方案
方案A(纯东京):7天深度游东京
方案B(东京+大阪):各3天+1天交通
方案C(大阪+京都+奈良):关西深度游
评估后选择方案B最符合需求

# 第四步:用 Self-Consistency 验证预算
多次计算确保预算估算准确
机票+住宿+交通+餐饮+门票 = 约18000,在预算内

# 最终输出
整合所有分析,输出完整的旅行规划

参考资料

  1. Wei et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
  2. Yao et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models
  3. Yao et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models
  4. Lewis et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
  5. Wang et al. (2023). Self-Consistency Improves Chain of Thought Reasoning
  6. Kojima et al. (2022). Large Language Models are Zero-Shot Reasoners

希望这篇文章能帮你真正理解这些 Prompt 技术!记住:没有最好的技术,只有最适合你任务的技术。多尝试,多组合,找到最适合你的方案。