第二章:提示词工程实战(10个高效的Prompt技巧)
⚙️
提示词工程(Prompt Engineering)是与大语言模型(LLM)高效交互的核心技能。随着ChatGPT、Claude、GPT-4等AI模型的普及,掌握提示词设计已成为开发者、产品经理和内容创作者的必备能力。本文将系统讲解提示词工程的核心原理、主流技术和实战最佳实践。
核心要点
•
提示词工程:通过设计优化的输入文本,引导LLM生成高质量、准确的输出
•
Zero-shot:无需示例,直接描述任务让模型完成
•
Few-shot:提供少量示例,帮助模型理解任务模式
•
Chain-of-Thought:引导模型逐步推理,提升复杂问题解决能力
•
ReAct:结合推理与行动,实现工具调用和多步骤任务
•
结构化提示词:使用角色、任务、格式、约束等元素构建高效提示词

什么是提示词工程
提示词工程是设计和优化输入文本(Prompt)的过程,目的是引导大语言模型生成期望的输出。它不仅仅是"问问题",而是一门结合语言学、认知科学和AI技术的实践艺术。
为什么提示词工程重要
#nSLFkvaRrxkB text { white-space: pre; }#nSLFkvaRrxkB .fb0 { stroke: var(--N900-FG, 0.15); }#nSLFkvaRrxkB .fb0 {stroke: rgba(31,35,41, 0.15)}#nSLFkvaRrxkB .fx0 { stroke-miterlimit: 10; }#nSLFkvaRrxkB .fx0 {stroke-miterlimit: 10}#nSLFkvaRrxkB .fa1 { fill: rgb(187, 191, 196); }#nSLFkvaRrxkB .fa1 {fill: rgb(187, 191, 196)}#nSLFkvaRrxkB .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx1 {font-style: normal}#nSLFkvaRrxkB .fx2 { text-anchor: middle; }#nSLFkvaRrxkB .fx2 {text-anchor: middle}#nSLFkvaRrxkB .fx3 { dominant-baseline: central; }#nSLFkvaRrxkB .fx3 {dominant-baseline: central}#nSLFkvaRrxkB .fx4 { stroke: none; }#nSLFkvaRrxkB .fx4 {stroke: none}#nSLFkvaRrxkB .fc0 { fill: var(--text-caption); }#nSLFkvaRrxkB .fc0 {fill: #646a73}#nSLFkvaRrxkB .fa2 { fill: var(--text-link-disabled); }#nSLFkvaRrxkB .fa2 {fill: rgb(187, 191, 196)}#nSLFkvaRrxkB .fa3 { fill: rgb(31, 35, 41); }#nSLFkvaRrxkB .fa3 {fill: rgb(31, 35, 41)}#nSLFkvaRrxkB .fx5 { font: 400 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx5 {font-style: normal}#nSLFkvaRrxkB .fx6 { text-anchor: start; }#nSLFkvaRrxkB .fx6 {text-anchor: start}#nSLFkvaRrxkB .fx7 { dominant-baseline: alphabetic; }#nSLFkvaRrxkB .fx7 {dominant-baseline: alphabetic}#nSLFkvaRrxkB .fc1 { fill: rgb(255, 255, 255); }#nSLFkvaRrxkB .fc1 {fill: rgb(255, 255, 255)}#nSLFkvaRrxkB .fx8 { font: 700 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx8 {font-style: normal}#nSLFkvaRrxkB .fc2 { fill: rgb(51, 51, 51); }#nSLFkvaRrxkB .fc2 {fill: rgb(51, 51, 51)}#nSLFkvaRrxkB .fb1 { fill: var(--N900-FG, 0.15); }#nSLFkvaRrxkB .fb1 {fill: rgba(31,35,41, 0.15)}#nSLFkvaRrxkB .fb2 { fill: rgb(225, 228, 232); }#nSLFkvaRrxkB .fb2 {fill: rgb(225, 228, 232)}#nSLFkvaRrxkB .fa4 { fill: var(--bg-body); }#nSLFkvaRrxkB .fa4 {fill: #fff}ABC12345维度差的提示词好的提示词准确性效率成本可控性模糊、偏离主题需要多次迭代Token消耗高输出格式不稳定精准、切中要点一次获得满意结果优化Token使用格式一致可预测
提示词的基本组成
代码块
Plain Text
主流提示词技术详解
Zero-shot Prompting
Zero-shot是最基础的提示词技术,直接描述任务,不提供任何示例。适用于简单、明确的任务。
示例:
代码块
Plain Text
将以下英文翻译成中文:
"The quick brown fox jumps over the lazy dog."
适用场景:
•
简单的分类任务
•
直接的翻译需求
•
基础的文本生成
优点: 简洁高效,Token消耗低 缺点: 复杂任务效果不稳定
Few-shot Prompting
Few-shot通过提供少量示例(通常2-5个),帮助模型理解任务模式和期望的输出格式。
示例:
代码块
Plain Text
请根据示例进行情感分类:
示例1:
文本:"这家餐厅的服务太棒了!"
情感:正面
示例2:
文本:"等了一个小时才上菜,体验很差。"
情感:负面
示例3:
文本:"价格还行,味道一般。"
情感:中性
现在请分类:
Few-shot最佳实践:
Chain-of-Thought (CoT)
思维链提示词引导模型展示推理过程,显著提升数学、逻辑和复杂问题的解决能力。
基础CoT示例:
代码块
Plain Text
问题:一个书店有3个书架,每个书架有4层,每层可以放25本书。
书店目前已经放了210本书,还能再放多少本?
让我们一步步思考:
1. 首先计算总容量:3个书架 × 4层 × 25本 = 300本
2. 然后计算剩余空间:300本 - 210本 = 90本
答案:还能再放90本书。
Zero-shot CoT(魔法提示词):
只需在问题后添加"让我们一步步思考"(Let's think step by step),即可激活模型的推理能力:
代码块
Plain Text
问题:如果一辆车以60km/h的速度行驶,需要多长时间才能行驶150公里?
让我们一步步思考:
ReAct框架
ReAct(Reasoning + Acting)结合推理和行动,让模型能够使用工具、搜索信息并执行多步骤任务。
ReAct模式:
代码块
Plain Text
问题:北京今天的天气如何?适合户外运动吗?
Self-Consistency
自洽性方法通过多次采样并选择最一致的答案,提高输出的可靠性。
代码块
Python
responses = []
for i in range(5):
response = llm.generate(prompt, temperature=0.7)
提示词结构化设计
CRISPE框架
表格加载中...
完整示例:
代码块
Plain Text
## 角色
你是一位有10年经验的全栈工程师,担任代码审查专家。
## 背景
我们的项目使用React 18 + Node.js 20技术栈,遵循Airbnb代码规范。
## 任务
请审查以下Pull Request代码,识别潜在问题。
## 要求
- 以专业但友好的语气
- 按严重程度(高/中/低)分类问题
- 提供具体的修改建议
## 代码
```javascript
// 待审查的代码
输出格式
🔴 高优先级问题
🔘 中优先级问题
🔵 低优先级建议
代码块
Plain Text
### 负面提示词技巧
明确告诉模型"不要做什么",可以有效避免常见错误:
请撰写一篇关于机器学习的技术博客。
要求:
•
面向初学者
•
包含实际代码示例
•
长度约1000字
请不要:
•
使用过于专业的术语而不解释
•
只讲理论不给实例
•
使用过时的库版本
代码块
Plain Text
## 场景优化策略
### 代码生成场景
任务
实现一个Python函数,用于验证邮箱地址格式。
技术要求
•
Python 3.10+
•
使用正则表达式
•
包含类型注解
•
添加docstring
测试用例
•
有效: "user@example.com", "test.name@domain.co.uk"
•
无效: "invalid", "@nodomain.com", "spaces in@email.com"
输出
只输出代码,不需要解释。
代码块
Plain Text
### 数据分析场景
角色
你是一位数据分析师。
数据
任务
分析销售趋势
计算用户平均贡献值
预测下月销售额
输出格式
使用Markdown表格和要点列表。
代码块
Plain Text
### 文案创作场景
产品
智能手表 - FitPro X1
目标受众
25-35岁,注重健康的都市白领
任务
撰写一条朋友圈推广文案
要求
•
突出健康监测功能
•
语气轻松活泼
•
包含行动号召
•
长度:50-80字
•
可以使用emoji
禁止
•
夸大宣传
•
使用"最好"、"第一"等绝对词汇
代码块
Plain Text
## 实战代码示例
### Python调用OpenAI API
```python
from openai import OpenAI
client = OpenAI()
def structured_prompt(role, task, context, format_spec):
"""构建结构化提示词"""
prompt = f"""## 角色
{role}
## 任务
{task}
Few-shot模板生成器
代码块
Python
def create_few_shot_prompt(task_description, examples, query):
"""创建Few-shot提示词"""
prompt = f"{task_description}\n\n"for i, (input_text, output_text) in enumerate(examples, 1):
常见问题解答
提示词越长越好吗?
不一定。提示词应该足够详细以明确任务,但过长会增加Token成本和处理时间。关键是精准而非冗长。建议先用简洁提示词测试,根据输出质量逐步优化。
如何处理模型"幻觉"问题?
几种有效策略:
•
要求模型引用来源
•
使用"如果不确定,请说明"的约束
•
提供参考资料作为上下文
•
使用Self-Consistency多次验证
Few-shot示例应该放在提示词的什么位置?
研究表明,将最相关的示例放在最后(靠近实际问题)效果最好。这是因为LLM对最近的上下文有更强的注意力。
不同模型需要不同的提示词吗?
是的,不同模型有不同的特性:
•
GPT-4:理解能力强,可使用复杂提示词
•
Claude:擅长长文本,适合详细指令
•
开源模型:可能需要更明确、简单的指令
如何评估提示词的效果?
建立评估体系:
•
准确性:输出是否正确
•
相关性:是否切题
•
格式:是否符合要求
•
一致性:多次运行结果是否稳定
总结与资源
提示词工程是一门需要不断实践和迭代的技能。掌握核心技术后,关键是在实际场景中持续优化。
关键技术回顾
最佳实践清单
✅ 明确定义角色和任务
✅ 提供足够的上下文信息
✅ 指定期望的输出格式
✅ 使用负面提示词避免常见错误
✅ 复杂任务使用思维链
✅ 持续测试和迭代优化