Prompt Engineering 学习笔记 —— 从「会提问题」到「让 AI 真正听话」
KongHou

Prompt Engineering 学习笔记

—— 基于 DAIR.AI Prompt Engineering Guide 的系统性学习

在上一篇博客中,我记录了学习吴恩达 Agentic AI 课程的心得。在那篇文章里我提到一个核心观点:

Agentic AI 的核心不再是”写 Prompt”,而是”设计系统”。

但这句话有一个隐含的前提——你得先知道怎么写好 Prompt。

带着这个问题,我系统学习了 DAIR.AI 开源的 Prompt Engineering Guide。这个指南由 DAIR.AI 团队维护,是目前社区中最全面、最系统的 Prompt Engineering 教程之一,涵盖了从基础概念到前沿研究的大量内容。

这次学习的最大感受是:
Prompt Engineering 远不止”把问题描述清楚”这么简单。它是一套关于”如何与 LLM 有效沟通”的系统性方法,涉及推理引导、知识注入、工具调用、自我反思等多个层面。

本文将按照从基础到进阶的顺序,梳理我学到的核心内容。


一、什么是 Prompt Engineering

Prompt Engineering 是一门关于开发和优化提示词(prompts) 的学科,目标是高效地利用大语言模型(LLM)完成各种任务。

它不只是”写好一段话”,而是涵盖了一整套技能和方法论:

  • 理解 LLM 的能力和局限性
  • 设计 robust 的提示策略
  • 提升输出的可靠性和准确性
  • 接口化地与 LLM 和其他工具协作

本质上,Prompt Engineering 是人机交互的新形态——你写的不是自然语言,而是”给 AI 的指令”。


二、Prompt 的四个基本要素

在设计 Prompt 时,有四个核心要素需要考虑:

要素 说明 示例
Instruction(指令) 你想让模型做什么 “将以下文本翻译成西班牙语”
Context(上下文) 外部信息或额外背景 补充的领域知识、约束条件
Input Data(输入数据) 具体的输入内容 “hello!”
Output Indicator(输出指示) 你期望的输出格式 “Sentiment:”

一个完整的 Prompt 示例:

1
2
3
4
5
Classify the text into neutral, negative, or positive.

Text: I think the food was okay.

Sentiment:

这里:

  • Instruction: “Classify the text into neutral, negative, or positive”
  • Input Data: “I think the food was okay.”
  • Output Indicator: “Sentiment:”

并非每个 Prompt 都需要四个要素同时存在,但理解它们的角色有助于我们更好地组织 Prompt。


三、设计 Prompt 的通用原则

在深入各种技术之前,有几个通用的设计原则值得牢记:

1. 从简单开始,逐步迭代

Prompt 设计是一个迭代过程。从简单的 Prompt 开始,逐步添加更多元素和上下文。当一个复杂任务涉及多个子任务时,先拆解成简单的子任务,逐步构建。

2. 指令要清晰明确

使用明确的动词指令,如 “Write”、”Classify”、”Summarize”、”Translate”、”Order” 等。建议将指令放在 Prompt 开头,使用分隔符(如 ###)区分指令和上下文。

1
2
3
4
### Instruction ###
Translate the text below to Spanish:

Text: "hello!"

3. 越具体越好

描述性越强、细节越丰富,输出质量越好。特别是当你对输出有特定风格或格式要求时。

不好的 Prompt:

1
Explain the concept prompt engineering. Keep it short and don't be too descriptive.

好的 Prompt:

1
Use 2-3 sentences to explain the concept of prompt engineering to a high school student.

4. 说”做什么”,不说”不做什么”

避免告诉模型”不要做什么”,而是明确告诉它”应该做什么”。

不好的:

1
DO NOT ASK FOR INTERESTS. DO NOT ASK FOR PERSONAL INFORMATION.

好的:

1
Recommend a movie from the top global trending movies. Refrain from asking users for preferences and personal information.

四、基础 Prompting 技术(三大基石)

4.1 Zero-shot Prompting(零样本提示)

这是最基本的方式:直接给模型下达指令,不提供任何示例。

1
2
3
4
Classify the text into neutral, negative or positive.

Text: I think the vacation is okay.
Sentiment:

输出:Neutral

现代 LLM(如 GPT-4、Claude 3)经过 Instruction Tuning 和 RLHF 训练,已经具备很强的 zero-shot 能力。对于很多简单任务,直接指令就足够了。

4.2 Few-shot Prompting(少样本提示)

当 zero-shot 效果不够好时,可以在 Prompt 中提供几个示例来引导模型。这被称为 in-context learning

1
2
3
4
This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //

输出:Negative

一个有趣的发现: 即使示例中的标签是随机打乱的(比如把 Positive 和 Negative 随机分配),模型仍然能给出正确答案。这说明:

  • 标签的分布格式比标签本身的对错更重要
  • 保持格式一致性有助于模型理解任务结构

但 Few-shot 也有局限: 对于需要多步推理的复杂任务(如数学计算),Few-shot 仍然力不从心。比如:

1
2
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A:

即使用了多个示例,模型仍然可能出错。这就引出了下一个关键技术。

4.3 Chain-of-Thought Prompting(思维链提示)

CoT 的核心思想是:让模型展示中间推理步骤,而不仅仅是直接给出答案。

标准 CoT(配合 Few-shot):

1
2
3
4
5
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A:

输出:

1
Adding all the odd numbers (15, 5, 13, 7, 1) gives 41. The answer is False.

仅仅加了一行推理过程,答案就从错误变成了正确。

Zero-shot CoT(零样本思维链):

更神奇的是,有时候你甚至不需要提供推理示例,只需要在 Prompt 末尾加上一句:

1
Let's think step by step.

不加这句话:

1
I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. How many apples did I remain with?

输出:11 apples(错误!)

加上 “Let’s think step by step”:

1
2
3
...How many apples did I remain with?

Let's think step by step.

输出:

1
2
3
4
First, you started with 10 apples.
You gave away 2 apples to the neighbor and 2 to the repairman, so you had 6 apples left.
Then you bought 5 more apples, so now you had 11 apples.
Finally, you ate 1 apple, so you would remain with 10 apples.

这一句简单的”魔法咒语”,本质上是在唤醒模型的推理能力,让它不要跳过中间步骤。

Auto-CoT(自动思维链):

Zhang et al. (2022) 提出了 Auto-CoT,自动为不同的任务生成推理链示例,分两步:

  1. 问题聚类:将数据集的问题分成若干簇
  2. 示例采样:从每个簇中选代表性问题,用 Zero-shot CoT 生成推理链

五、提升推理可靠性的技术

5.1 Self-Consistency(自洽性)

Wang et al. (2022) 提出了一个直觉性的问题:既然 CoT 的推理路径可以有多条,那为什么只取一次答案?

Self-Consistency 的做法是:

  1. 对同一个问题,用 Few-shot CoT 进行多次采样
  2. 得到多条不同的推理路径和答案
  3. 通过多数投票(majority vote) 选择最终答案

比如经典的”年龄差”问题:

1
When I was 6 my sister was half my age. Now I'm 70 how old is my sister?

直接回答会得到 35(错误),因为模型直接算了 70/2。

使用 Self-Consistency 采样三次:

  • 输出 1:When I was 6 my sister was half my age, so she was 3. Now I am 70, so she is 70 - 3 = 67. The answer is 67.
  • 输出 2:When the narrator was 6, his sister was half his age, which is 3. Now that the narrator is 70, his sister would be 70 - 3 = 67 years old. The answer is 67.
  • 输出 3:When I was 6 my sister was half my age, so she was 3. Now I am 70, so she is 70/2 = 35. The answer is 35.

三次中有两次得到 67,最终答案取 67(正确)。

Self-Consistency 的本质是”用多次采样的多样性来对抗单次推理的不稳定性”。

5.2 Generate Knowledge Prompting(知识生成提示)

有时候模型回答错误不是因为不会推理,而是缺乏必要的背景知识

这种方法的核心是:先让模型生成相关知识,再基于这些知识进行推理。

比如这个问题:

1
Part of golf is trying to get a higher point total than others. Yes or No?

直接回答:Yes(错误)

先让模型生成知识:

1
2
Input: Part of golf is trying to get a higher point total than others.
Knowledge: Golf is a precision club-and-ball sport... The goal is to complete the course with the lowest score...

然后带着知识再回答:

1
No, the objective of golf is not to get a higher point total than others. Rather, the objective is to play a set of holes in the least number of strokes.

当模型缺乏特定领域的知识时,”先生成知识,再推理”是一种有效的策略。

5.3 Meta Prompting(元提示)

Meta Prompting 是一种更抽象的提示方式:关注问题的结构和模式,而非具体内容。

核心特点:

  • 结构导向:优先考虑问题和解决方案的格式和模式
  • 语法聚焦:使用语法作为响应模板
  • 抽象示例:使用抽象化示例作为框架
  • Token 高效:减少所需 token 数量
  • 通用性强:可跨领域应用

与 Few-shot 的区别:Few-shot 是内容驱动的(给你具体例子),Meta Prompting 是结构驱动的(给你解决问题的”模式”)。


六、从推理到行动:让 AI 使用工具

6.1 ReAct(Reasoning + Acting)

ReAct 是 Yao et al. (2022) 提出的框架,核心思想是让 LLM 交替进行推理和行动

工作流程:

1
2
3
4
5
6
7
8
9
10
Thought 1: 我需要搜索 Colorado orogeny...
Action 1: Search[Colorado orogeny]
Observation 1: The Colorado orogeny was an episode of mountain building...
Thought 2: 没提到东部区域,我需要查 eastern sector...
Action 2: Lookup[eastern sector]
Observation 2: The eastern sector extends into the High Plains...
Thought 3: 我需要搜索 High Plains 的海拔范围...
Action 3: Search[High Plains]
...
Action 5: Finish[1,800 to 7,000 ft]

每一步:

  1. Thought:思考下一步该做什么
  2. Action:执行一个操作(搜索、查找等)
  3. Observation:观察环境返回的结果

CoT 只能”想”,ReAct 能”想 + 做”。 推理帮助决定下一步该检索什么,检索到的信息又反过来支持推理。

6.2 PAL(程序辅助语言模型)

PAL 的思想是:让模型不输出自然语言推理过程,而是直接生成代码。

与 CoT 的区别:

  • CoT:输出自然语言的推理链
  • PAL:输出可执行的程序代码
1
2
3
4
5
6
7
# Q: Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born?
# If today is 27 February 2023 and I was born exactly 25 years ago...
today = datetime(2023, 2, 27)
# I was born 25 years before,
born = today - relativedelta(years=25)
# The answer formatted with %m/%d/%Y is
born.strftime('%m/%d/%Y')

执行这段代码:02/27/1998

PAL 的优势在于:计算准确性由程序保证,不受 LLM 数学能力的限制。 适合涉及复杂计算、日期处理等任务。

6.3 ART(自动推理和工具使用)

ART(Automatic Reasoning and Tool-use)是一个更自动化的框架:

  1. 给定新任务,从任务库中选择合适的多步推理和工具使用示例
  2. 测试时,当需要调用外部工具时暂停生成,集成工具输出后继续生成
  3. 支持人类修正推理步骤或添加新工具

ART 的核心优势是”可扩展”——不需要重新训练模型,只需更新任务库和工具库就能适应新任务。


七、从线性到树状:复杂问题求解

7.1 Tree of Thoughts(ToT,思维树)

CoT 的问题是:它是一条线性的推理路径,如果中间某一步走错了,就无法回溯。

ToT 将推理扩展为一棵

  • 每个节点代表一个”思维”(intermediate thought)
  • 可以进行分支探索(多种可能的推理方向)
  • 可以回溯(发现某条路走不通就回到之前的节点)
  • 使用 BFS 或 DFS 等搜索策略

实际使用中,一个简化的 ToT Prompt 可以这样写:

1
2
3
4
5
6
Imagine three different experts are answering this question.
All experts will write down 1 step of their thinking,
then share it with the group.
Then all experts will go on to the next step, etc.
If any expert realises they're wrong at any point then they leave.
The question is...

ToT 的本质是把”单线程推理”升级为”多线程探索 + 回溯”——更像人类的思维方式。

7.2 Prompt Chaining(提示链)

Prompt Chaining 是一种工程化技术:把复杂任务拆分成多个子任务,每个子任务用一个 Prompt 处理,前一个 Prompt 的输出作为下一个 Prompt 的输入。

典型流程:

1
2
3
4
5
Prompt 1: 从文档中提取与问题相关的引用

Prompt 2: 基于提取的引用和原始文档生成答案

Prompt 3: 格式化和优化最终输出

优势:

  • 提高可靠性:每个步骤更简单,更容易做好
  • 可调试:可以定位哪一步出了问题
  • 可控制:每个环节都可以单独优化

八、让 AI 学会自我反思

8.1 Reflexion

Reflexion 是 Shinn et al. (2023) 提出的框架,让 AI Agent 能够从自己的错误中学习

框架包含三个模型:

角色 职责
Actor 基于状态观察生成文本和行动(使用 CoT 或 ReAct)
Evaluator 对 Actor 的输出进行评分
Self-Reflection 生成语言反馈(verbal feedback),帮助 Actor 改进

工作流程:

  1. 定义任务
  2. 生成执行轨迹(trajectory)
  3. 评估结果
  4. 进行自我反思(哪里做错了?为什么?)
  5. 将反思存入记忆,用于下一次尝试

Reflexion 的核心是”试错学习”——不需要重新训练模型,通过语言反馈实现自我改进。

这让我联想到传统 RL 的 reward 是标量(一个数字),而 Reflexion 的反馈是语言(具体的、可理解的描述),这使得 AI 能更精确地理解自己的问题所在。

适用场景:

  • 需要从试错中学习的任务(决策、编程、推理)
  • 传统 RL 成本太高或不现实时
  • 需要可解释的学习过程时

九、RAG:检索增强生成

9.1 为什么需要 RAG?

LLM 的知识是静态的——它在训练数据截止日期之后就”冻结”了。而现实中:

  • 知识在持续更新
  • 企业有自己的私有数据
  • 需要引用可靠的外部来源

9.2 RAG 的工作原理

RAG(Retrieval Augmented Generation)的核心流程:

1
2
3
用户问题 → 检索器(从外部知识库中检索相关文档)
→ 将检索结果作为上下文注入 Prompt
→ LLM 基于上下文生成答案
  1. 用户提出问题
  2. 检索系统(如基于向量数据库)从知识源(如 Wikipedia、企业文档库)中检索相关文档
  3. 将检索到的文档与原始问题拼接成新的 Prompt
  4. LLM 基于这些上下文生成最终答案

9.3 RAG 的优势

优势 说明
事实一致性 基于外部知识源,减少幻觉
知识可更新 不需要重新训练模型
可追溯 可以引用信息来源
私有数据 可以接入企业内部知识库

RAG 解决的是 LLM 最大的痛点之一:幻觉(Hallucination)。 当模型”不确定”的时候,与其让它猜,不如让它去”查”。


十、个人思考与启发

经过这次系统学习,我对 Prompt Engineering 有了全新的认知。以下是我的一些核心思考:

1. 技术演进的一条主线

从技术的演进路径来看,Prompt Engineering 的发展遵循一条清晰的脉络:

1
2
3
Zero-shot → Few-shot → CoT → ReAct → Reflexion
↓ ↓ ↓ ↓ ↓
直接指令 示例引导 推理链 推理+行动 自我反思

每一步的演进都在解决前一步的不足:

  • Zero-shot 不够准确 → 加示例(Few-shot)
  • Few-shot 不会推理 → 加推理链(CoT)
  • CoT 缺乏外部信息 → 加工具调用(ReAct)
  • ReAct 不会自我改进 → 加自我反思(Reflexion)

2. Prompt Engineering 与 Agentic AI 的关系

结合上一篇 Agentic AI 的学习,我整理了一张对照表:

Prompt Engineering Agentic AI
设计 Prompt 设计系统
CoT 推理链 Agent 的规划能力
ReAct(推理+行动) Agent 的工具调用能力
Reflexion(自我反思) Agent 的自我修正能力
RAG(检索增强) Agent 的知识获取能力
Prompt Chaining Agentic Workflow
Few-shot / In-context Learning Agent 的记忆系统

Prompt Engineering 是 Agentic AI 的微观基础,Agentic AI 是 Prompt Engineering 的宏观升华。

3. 对实际开发的启示

  1. **不要满足于”能跑”**:简单的 zero-shot 可能对 80% 的场景够用,但剩下 20% 的复杂场景需要深入理解各种技术
  2. 推理能力可以通过 Prompt 激发:”Let’s think step by step” 的效果让我意识到,很多时候不是模型”不会”,而是我们”没有引导它去想”
  3. 工具 > 纯推理:让 LLM 去做它擅长的事(理解意图、规划),把精确计算和知识检索交给工具
  4. 多样性 > 单次最优:Self-Consistency 的成功告诉我,”多次尝试取最优”比”一次做到完美”更实用

结语

这次学习让我重新理解了 Prompt Engineering 的定位:

它不是”提示词技巧”,而是一门关于”人机协作接口设计”的工程学科。

从 Zero-shot 到 Reflexion,从简单的文本分类到多步推理、工具调用、自我反思——每一项技术的背后,都是对”如何让 AI 更可靠地完成复杂任务”这个核心问题的探索。

而这,也正是 Agentic AI 的基石。

参考资源:Prompt Engineering Guide by DAIR.AI