第二十四章:提示工程
提示工程(Prompt Engineering)是指通过设计合适的输入提示来引导大语言模型产生期望输出的技术。它是使用 LLM 的核心技能。
什么是提示?
提示(Prompt)是输入给 LLM 的文本,用于引导模型生成特定的输出。
提示:"请将以下英文翻译成中文:I love NLP"
输出:"我喜欢自然语言处理"提示的基本要素
1. 指令(Instruction)
告诉模型要做什么:
"请总结以下文章的要点:"
"请将这段代码转换为 Python:"
"请分析以下句子的情感:"2. 上下文(Context)
提供相关的背景信息:
"根据以下参考资料回答问题:
参考资料:[相关内容]
问题:什么是 Transformer?"3. 输入(Input)
需要处理的数据:
"请翻译以下句子:
输入:I love natural language processing"4. 输出格式(Output Format)
指定输出的格式:
"请以 JSON 格式输出:
{"sentiment": "正面/负面", "confidence": 0.95}"提示策略
零样本提示(Zero-shot Prompting)
不提供任何示例,直接给出指令:
"请判断以下句子的情感是正面还是负面:
'这家餐厅的菜太好吃了!'
情感:"少样本提示(Few-shot Prompting)
提供几个示例来引导模型:
"请判断句子的情感:
句子:'电影很好看' → 正面
句子:'服务态度差' → 负面
句子:'环境优美,菜品精致' →"示例的数量和质量对结果影响很大。
思维链提示(Chain-of-Thought Prompting)
引导模型逐步推理:
"问题:一个商店有 15 个苹果,卖出了 8 个,又进了 12 个,现在有几个?
让我一步一步思考:
1. 初始数量:15 个
2. 卖出 8 个:15 - 8 = 7 个
3. 进了 12 个:7 + 12 = 19 个
答:现在有 19 个苹果。"自洽性(Self-Consistency)
多次采样,取多数投票的结果:
采样1:答案是 19
采样2:答案是 19
采样3:答案是 21(错误)
→ 最终答案:19(2/3 投票)高级提示技巧
角色提示(Role Prompting)
给模型指定一个角色:
"你是一位资深的 Python 开发工程师。请审查以下代码并提供改进建议:"
"你是一位专业的翻译人员,请将以下中文翻译成英文,要求信达雅:"结构化输出
要求模型输出特定格式:
"请分析以下文本,按以下格式输出:
## 摘要
[一句话概括]
## 关键点
- 要点 1
- 要点 2
- 要点 3
## 情感
[正面/负面/中性]"约束条件
添加约束来控制输出:
"请用不超过 100 字总结以下文章。
要求:
1. 必须包含主要观点
2. 使用简单易懂的语言
3. 不要使用专业术语"多步提示
将复杂任务分解为多个步骤:
步骤1:"请分析以下代码的功能"
步骤2:"请找出代码中的潜在问题"
步骤3:"请提供改进后的代码"常见应用场景
文本分类
"请判断以下评论的情感类别:
类别:正面/负面/中性
评论:'这个手机的拍照效果非常出色,但电池续航太差了。'
类别:"信息抽取
"请从以下文本中提取人名、地点和组织:
文本:'张三在北京大学的人工智能研究院工作。'
输出格式:
人名:[人名]
地点:[地点]
组织:[组织]"文本生成
"请根据以下大纲写一篇短文:
主题:人工智能的未来
大纲:
1. AI 的发展现状
2. AI 的应用领域
3. AI 面临的挑战
4. 展望未来"代码生成
"请用 Python 实现一个函数,功能如下:
- 输入:一个整数列表
- 输出:列表中所有偶数的平方和
- 要求:使用列表推导式"提示优化技巧
1. 明确具体
差: "帮我写一篇文章"
好: "请写一篇 500 字左右的科普文章,主题是'量子计算的基本原理',面向高中生读者"2. 提供示例
差: "请分类文本"
好: "请将文本分类为体育/科技/娱乐:
示例:'湖人队赢得总冠军' → 体育
请分类:'苹果发布新 iPhone'"3. 使用分隔符
"请翻译以下文本(用 === 包裹的部分):
===
I love natural language processing.
===
翻译:"4. 指定输出长度
"请用 2-3 句话总结以下文章:"
"请写一段 100 字左右的描述:"5. 否定指令
"请回答以下问题,不要编造信息,如果不确定请说'我不确定':"提示工程的局限性
| 局限 | 说明 |
|---|---|
| 不确定性 | 同样的提示可能产生不同的输出 |
| 敏感性 | 微小的措辞变化可能导致结果大不相同 |
| 幻觉 | 模型可能生成看似正确但实际错误的内容 |
| 上下文长度 | 提示过长可能超出模型的上下文窗口 |
小结
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 零样本 | 不给示例 | 简单任务 |
| 少样本 | 给几个示例 | 复杂任务 |
| 思维链 | 逐步推理 | 推理任务 |
| 角色提示 | 指定角色 | 专业任务 |
| 结构化输出 | 指定格式 | 需要特定格式 |
提示工程是使用 LLM 的核心技能。好的提示可以显著提升模型的输出质量。