从入门到精通:大模型提示词工程完全指南(附实战案例)
摘要:本文系统梳理提示词工程(Prompt Engineering)的完整知识体系,从基础概念到高阶技巧,结合大量代码示例与实战案例,助你掌握与大模型高效对话的核心能力。无论你是AI新手还是进阶开发者,都能从中获得系统性提升。
一、什么是提示词与提示工程
1.1 提示词(Prompt)的定义
md
┌─────────────────────────────────────────┐
│ 用户输入 │
│ "请用Python写一个冒泡排序" │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 提示词(Prompt) │
│ 提供给模型的文本片段,用于指导模型 │
│ 生成特定输出或回答 │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 大语言模型(LLM) │
│ GPT-4 / Claude / Kimi / 文心一言 │
└──────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 模型输出 │
│ ```python │
│ def bubble_sort(arr): │
│ ... │
│ ``` │
└─────────────────────────────────────────┘
核心作用:为模型提供任务上下文,使其准确理解用户意图并生成相关回应。
1.2 提示工程(Prompt Engineering)
提示工程是通过精心设计的提示,显著提高模型性能和输出质量的技术。
md
┌────────────────────────────────────────────┐
│ AGI时代的"编程语言" │
│ │
│ 传统编程 Prompt工程 │
│ ━━━━━━━━ ━━━━━━━━━━ │
│ Python/Java → 自然语言提示 │
│ 程序员 → 提示工程师 │
│ 编译器 → 大语言模型 │
└────────────────────────────────────────────┘
关键认知:Prompt是AGI时代的编程语言,提示工程师是AGI时代的程序员。
二、模型选择与提示策略差异
2.1 推理模型 vs 通用模型
md
┌─────────────────────────────────────────────────────────┐
│ 模型类型对比 │
├─────────────────────┬───────────────────────────────────┤
│ 推理模型 │ 通用模型 │
│ (o1/DeepSeek-R1) │ (GPT-4/Claude/Kimi) │
├─────────────────────┼───────────────────────────────────┤
│ • 内化推理逻辑 │ • 需显式引导推理步骤 │
│ • 提示语更简洁 │ • 依赖提示语补偿能力短板 │
│ • 直接明确任务目标 │ • 需要CoT提示引导 │
│ • 避免逐步指导 │ • 需要分步验证结果 │
└─────────────────────┴───────────────────────────────────┘
2.2 关键原则与误区
md
┌────────────────────────────────────────┐
│ 提示语设计原则 │
├────────────────────────────────────────┤
│ 推理模型:简洁指令,聚焦目标 │
│ "要什么直接说" │
├────────────────────────────────────────┤
│ 通用模型:结构化、补偿性引导 │
│ "缺什么补什么" │
└────────────────────────────────────────┘
⚠️ 常见误区:
┌────────────────────────────────────────┐
│ ❌ 对推理模型使用启发式提示(角色扮演) │
│ → 可能干扰其逻辑主线 │
├────────────────────────────────────────┤
│ ❌ 对通用模型"过度信任" │
│ → 复杂推理问题需分步验证 │
└────────────────────────────────────────┘
三、基础技巧:6大核心策略
根据OpenAI官方指南,获得更好结果的6大策略:
md
┌─────────────────────────────────────────────┐
│ 获得更好结果的6大策略 │
├─────────────────────────────────────────────┤
│ 1. 编写清晰的说明 (Write clear instructions)│
│ 2. 提供参考文本 (Provide reference text) │
│ 3. 拆分复杂任务 (Split complex tasks) │
│ 4. 给模型时间思考 (Give time to think) │
│ 5. 使用外部工具 (Use external tools) │
│ 6. 系统测试更改 (Test changes systematically)│
└─────────────────────────────────────────────┘
3.1 技巧详解与对比
| 技巧 | 普通写法 | 优化写法 | 效果提升 |
|---|---|---|---|
| 清晰明确 | "写首诗" | "用中文写一首四句诗,模仿李白《望庐山瀑布》风格" | ⭐⭐⭐⭐⭐ |
| 角色扮演 | "给我减肥计划" | "扮演专业健身教练,利用运动科学和营养学知识定制计划" | ⭐⭐⭐⭐ |
| 指定角色 | "怎么提高英语" | "我是5岁幼儿园小朋友,不会写字,怎么提高英语" | ⭐⭐⭐⭐ |
| 指定格式 | "翻译这段话" | "翻译为JSON格式:{'原文':'...','译文':'...'}" | ⭐⭐⭐⭐⭐ |
| 少样本提示 | "分类这段文本" | "参考以下3个示例...[示例1]...[示例2]...现在分类:" | ⭐⭐⭐⭐⭐ |
3.2 少样本提示(Few-shot)实战
python
# 零样本提示(Zero-shot)- 直接指令
prompt_zero = """
将文本分类为中性、负面或正面。
文本:我认为这次假期一般。
情感:
"""
# 少样本提示(Few-shot)- 提供示例
prompt_few = """
"whatpu"是坦桑尼亚的一种小型毛茸茸的动物。
一个使用whatpu这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的whatpus。
"farduddle"是指快速跳上跳下。
一个使用farduddle这个词的句子的例子是:
"""
# 运行代码
from openai import OpenAI
client = OpenAI()
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0 # 随机性最小,保证结果稳定
)
return response.choices[0].message.content
print(get_completion(prompt_few))
四、进阶技巧:思维链与推理优化
4.1 提示技术演进路线图
md
┌─────────────────────────────────────────────────────────────┐
│ 提示技术演进路线 │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Standard │ → │ Few-shot│ → │ CoT │ → │ ToT │ │
│ │Prompting│ │Prompting│ │Prompting│ │Prompting│ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ 直接提问 给示例学习 显式推理过程 多路径探索 │
│ 简单任务 模式识别 复杂逻辑计算 策略决策 │
└─────────────────────────────────────────────────────────────┘
4.2 链式思考(Chain-of-Thought, CoT)
核心思想:通过中间推理步骤实现复杂推理能力。
md
┌─────────────────────────────────────────────────────────┐
│ 标准提示 vs CoT提示 对比 │
├─────────────────────────────────────────────────────────┤
│ 标准提示(错误结果) │
│ Q: 罗杰有5个网球,又买了2罐,每罐3个,现在有几个? │
│ A: 答案是27 ❌ │
├─────────────────────────────────────────────────────────┤
│ CoT提示(正确结果) │
│ Q: 罗杰有5个网球,又买了2罐,每罐3个,现在有几个? │
│ A: 罗杰一开始有5个球。2罐3个网球等于6个。5+6=11。 │
│ 答案是11。 ✅ │
└─────────────────────────────────────────────────────────┘
实战代码:数学推理优化
python
# 标准少样本提示 - 可能失败
prompt_standard = """
这组数字中的奇数加起来是偶数:4、8、9、15、12、2、1。
A:答案是False。
这组数字中的奇数加起来是偶数:17、10、19、4、8、12、24。
A:答案是True。
这组数字中的奇数加起来是偶数:15、32、5、13、82、7、1。
A:
"""
# CoT提示 - 显式推理步骤
prompt_cot = """
这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。
A:将所有奇数相加(9、15、1)得到25。答案为False。
这组数中的奇数加起来是偶数:17、10、19、4、8、12、24。
A:将所有奇数相加(17、19)得到36。答案为True。
这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。
A:
"""
print(get_completion(prompt_cot))
4.3 零样本CoT(Zero-shot CoT)
无需示例,仅通过触发词引导推理:
python
prompt_zero_cot = """
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。
然后我吃了1个又再去买了5个苹果。我还剩下多少苹果?
让我们逐步思考。
"""
# 关键技巧:添加"让我们逐步思考"触发推理
4.4 自我一致性(Self-Consistency)
对抗"幻觉"的有效手段:
md
┌─────────────────────────────────────────────────────────┐
│ 自我一致性流程 │
│ │
│ 输入问题 ──┬──► 采样推理路径1 ──┐ │
│ ├──► 采样推理路径2 ──┼──► 投票选出最优答案 │
│ ├──► 采样推理路径3 ──┘ │
│ └──► 采样推理路径N ... │
│ │
│ 原理:多次运行相同prompt,通过投票聚合最终结果 │
└─────────────────────────────────────────────────────────┘
python
# 运行多次并收集结果
results = []
for i in range(5): # 采样5次
result = get_completion(prompt_cot, temperature=0.7) # 提高温度增加多样性
results.append(result)
# 简单投票机制(实际应用中需解析答案部分)
from collections import Counter
final_answer = Counter(results).most_common(1)[0][0]
五、高阶应用:思维树与实战案例
5.1 思维树(Tree of Thoughts, ToT)
适用于需要探索或预判战略的复杂任务:
md
┌─────────────────────────────────────────────────────────┐
│ 思维树结构 │
│ │
│ [Input] │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ ▼ ▼ ▼ │
│ [Thought1] [Thought2] [Thought3] │
│ / \ │ / \ │
│ [T1.1] [T1.2] [T2.1] [T3.1] [T3.2] │
│ │ │ │ │ │ │
│ └────┬────┘ └────┬────┘ └────┐ │
│ ▼ ▼ ▼ │
│ [评估] [评估] [评估] │
│ 可行性 可行性 可行性 │
│ │ │ │ │
│ └──────────────┬───┴──────────────────┘ │
│ ▼ │
│ [最优路径选择] │
│ │ │
│ [Output] │
└─────────────────────────────────────────────────────────┘
ToT核心步骤:
- 在思维链每一步采样多个分支
- 拓扑展开成一棵思维树
- 判断每个分支的任务完成度
- 进行启发式搜索
- 验证叶子节点的正确性
5.2 实战案例:晚餐盲盒文案生成
这是一个经典的少样本+CoT综合应用案例:
md
## 完整Prompt设计(5步构建法)
**第一步:需求背景**
对于独居者或小情侣,"今晚吃什么"是巨大选择困难症。我想开发"晚餐盲盒"产品,抽到什么吃什么。
**第二步:角色设定**
你作为一名优秀的美食作家,协助编写俏皮灵动、趣味盎然的美食短句子。
**第三步:约束条件**
1. 每个句子不超过36个字
2. 符合中国人晚餐场景,不要甜点、饮料、水果
3. 有生活感和浪漫感,文笔优美,比喻恰当
4. 引起用户食欲
5. 比喻句用"是"代替"好像、宛如"
6. 避免平庸比喻,找出奇妙联想
**第四步:少样本示例**
示例1:"罗勒叶缠绕着小牛排,交织摩擦,情欲荡漾。"
→ 巧妙比喻食材形态联想到情感关系
示例2:"张牙舞爪的小龙虾与没能力的领导莫名契合,清蒸还是麻辣?"
→ 把张牙舞爪和职场角色联想,提出"泄愤"方式
示例3:"串串锅里选择今日运势。"
→ 精炼句子,食材形态(多食材似运势签)契合生活选择
**第五步:CoT思考步骤**
请按以下步骤思考:
1. 食物叫什么,包含哪些食材
2. 食物名称或食材有哪些美妙联想
3. 有哪些优美词汇可以搭配
4. 有哪些比喻可形容文化、形态、隐喻、色彩、口感
5. 组合成精炼、优美、巧妙的美食句子
请根据范例,撰写20条符合需求的句子。
六、Prompt的典型构成框架
md
┌─────────────────────────────────────────────────────────┐
│ Prompt标准结构(6要素) │
├─────────────────────────────────────────────────────────┤
│ 1. 角色(Role) │
│ 给AI定义最匹配任务的角色 │
│ "你是一位软件工程师" / "你是一位小学老师" │
├─────────────────────────────────────────────────────────┤
│ 2. 指示(Instruction) │
│ 对任务进行描述 │
│ "你的任务是识别信息中的时间、地点、人物" │
├─────────────────────────────────────────────────────────┤
│ 3. 上下文(Context) │
│ 与任务相关的背景信息(多轮交互中尤为重要) │
├─────────────────────────────────────────────────────────┤
│ 4. 例子(Examples) │
│ One-shot / Few-shot / In-context Learning │
│ 实践证明对输出正确性有显著帮助 │
├─────────────────────────────────────────────────────────┤
│ 5. 输入(Input) │
│ 明确标识用户输入信息 │
├─────────────────────────────────────────────────────────┤
│ 6. 输出(Output) │
│ 输出格式描述,便于后续模块自动解析 │
│ JSON / XML / Markdown / 特定分隔符 │
└─────────────────────────────────────────────────────────┘
6.1 完整代码示例:信息提取
python
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI()
# 1. 角色与指示
instruction = """
你的任务是识别用户输入的信息,提取出对应的时间(time)、地点(location)、人物(character)。
"""
# 2. 输出格式定义
output = """
并以JSON格式输出,格式如下:
{
"time": "提取的时间",
"location": "提取的地点",
"character": ["人物1", "人物2"]
}
"""
# 3. 少样本示例
examples = """
在本周末,我将和我的同事王五一起去海洋公园玩耍。:
{"time": "本周末", "location": "海洋公园", "character": ["我", "我的同事王五"]}
昨天晚上,张三和李四在会议室讨论项目方案。:
{"time": "昨天晚上", "location": "会议室", "character": ["张三", "李四"]}
"""
# 4. 用户输入
input_text = "今天晚上我会和我的闺蜜小美一起去酒馆喝酒"
# 5. 组装Prompt
prompt = f"""
{instruction}
{output}
参考示例:
{examples}
用户输入:
{input_text}
"""
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0
)
return response.choices[0].message.content
print(get_completion(prompt))
七、实用工具与资源
7.1 Prompt调试建议
md
┌─────────────────────────────────────────────────────────┐
│ 网页端调试最佳实践 │
├─────────────────────────────────────────────────────────┤
│ ✅ 将System Prompt和User Prompt组合写到界面Prompt里 │
│ ✅ 利用自动引用最近对话内容,避免重复粘贴 │
│ ✅ 找到好的Prompt后,开新Chat再测试,避免历史干扰 │
│ ✅ 使用temperature=0确保结果可复现 │
│ ✅ 复杂任务先用Prompt解决,四两拨千斤 │
│ ❌ 不要迷信Prompt,合理组合传统方法提升确定性 │
└─────────────────────────────────────────────────────────┘
7.2 优质Prompt资源站
| 网站 | 链接 | 特点 |
|---|---|---|
| PromptBase | https://promptbase.com | 商业化Prompt交易平台 |
| Awesome ChatGPT Prompts | https://github.com/f/awesome-chatgpt-prompts | GitHub开源集合 |
| LangChain Hub | https://smith.langchain.com/hub | 结构化Prompt库 |
| Prompt Genius | https://www.promptgenius.site | 中文优质Prompt |
| OpenAI官方课程 | 见参考资料 | 系统性学习资料 |
八、经验总结与核心要点
md
┌─────────────────────────────────────────────────────────┐
│ 提示工程核心要点 │
├─────────────────────────────────────────────────────────┤
│ 1. 具体、丰富、少歧义 │
│ - 具体:避免抽象,确保问题明确 │
│ - 详细上下文:提供足够背景信息 │
│ - 避免歧义:明确多义词含义或重新表述 │
│ - 逻辑清晰:问题逻辑连贯,避免矛盾 │
├─────────────────────────────────────────────────────────┤
│ 2. 角色定义是关键 │
│ 想让AI做什么,先给它定义最擅长此事的角色 │
├─────────────────────────────────────────────────────────┤
│ 3. 思维链提升复杂任务准确率 │
│ 数学计算、逻辑推理类问题必用CoT │
├─────────────────────────────────────────────────────────┤
│ 4. 防御Prompt攻击 │
│ 注意安全性,防止提示注入攻击 │
├─────────────────────────────────────────────────────────┤
│ 5. 持续迭代优化 │
│ 找到好的Prompt是持续迭代过程,需不断调优 │
└─────────────────────────────────────────────────────────┘