3.3.1 Zero-shot Prompting:直接提问的艺术
经过本节学习,你将掌握
- Zero-shot 的定义和工作原理
- 适合使用 Zero-shot 的场景
- 如何写出高质量的 Zero-shot 提示词
- Zero-shot 的局限性及应对方法
什么是 Zero-shot Prompting
Zero-shot(零样本)的意思是:不给任何示例,直接让 AI 执行任务。
这是最直接的提问方式。你描述任务,AI 根据它在训练中学到的知识直接给出答案。
将以下 Python 2 代码转换为 Python 3 语法:
print "Hello, World!"AI 不需要你演示「怎么转换」,它已经「知道」Python 2 和 Python 3 的区别。这就是 Zero-shot 的核心:利用 AI 已有的知识完成任务。
为什么 Zero-shot 有效
现代 AI 模型在训练时已经「见过」海量数据:代码、文档、教程、问答。对于常见任务,它已经具备执行能力,只需要你清晰地描述任务即可。
就像请一位经验丰富的同事帮忙——你不需要教他怎么写代码,只需要说清楚你要什么。
适用场景
| 场景 | 示例 | 为什么适合 |
|---|---|---|
| 代码转换 | Python 2 → Python 3 | AI 熟悉两种语法 |
| 文本分类 | 判断评论情感 | 常见 NLP 任务 |
| 格式转换 | JSON → YAML | 标准格式,规则明确 |
| 内容生成 | 写一段产品描述 | 创意任务,无需示例 |
| 代码解释 | 解释这段代码做了什么 | AI 理解代码能力强 |
一句话判断:如果这个任务「AI 应该会」,就用 Zero-shot。
差提示词 vs 好提示词
❌ 差提示词
帮我处理一下这个数据问题:任务不明确。处理是什么意思?清洗?转换?分析?
✅ 好提示词
将以下 CSV 数据转换为 JSON 格式,每行作为一个对象:
name,age,city
张三,25,北京
李四,30,上海改进点:
- 明确任务:CSV → JSON
- 明确格式:每行一个对象
- 提供输入数据
输出对比
差提示词可能得到:「请提供具体数据和处理需求」(AI 无法执行)
好提示词得到:
json
[
{"name": "张三", "age": 25, "city": "北京"},
{"name": "李四", "age": 30, "city": "上海"}
]写好 Zero-shot 的四个要素
1. 明确的任务动词
| 模糊 | 清晰 |
|---|---|
| 处理这段代码 | 重构这段代码,提取重复逻辑为函数 |
| 看看这个数据 | 分析这个数据的异常值 |
| 弄一下格式 | 转换为 Markdown 表格格式 |
2. 具体的输出要求
❌ "给我一个函数"
✅ "给我一个 JavaScript 函数,接收数组参数,返回去重后的数组"3. 必要的约束条件
❌ "写一个排序算法"
✅ "写一个排序算法,要求:时间复杂度 O(n log n),不使用内置排序方法"4. 清晰的输入数据
如果任务需要处理数据,直接在提示词中提供。
进阶技巧:增强 Zero-shot 效果
角色设定(Role Prompting)
给 AI 一个角色,可以让它从特定视角回答问题。
你是一位有 10 年经验的前端工程师。
请审查以下 React 代码,指出潜在的性能问题:
[代码]输出格式指定
明确告诉 AI 你想要的格式。
分析以下用户反馈,提取关键问题。
输出格式:
- 问题1:[描述]
- 问题2:[描述]
...实战示例:待办清单项目
小李想让 AI 帮他写一个日期格式化函数。
Zero-shot 提示词
写一个 JavaScript 函数 formatDate,功能如下:
- 输入:Date 对象
- 输出:格式化的字符串,格式为 "YYYY年MM月DD日"
- 示例:输入 new Date('2024-03-15'),输出 "2024年03月15日"
- 要求:月份和日期不足两位时补零AI 输出
javascript
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}年${month}月${day}日`;
}Zero-shot 的局限性
| 局限 | 表现 | 解决方案 |
|---|---|---|
| 格式不稳定 | 每次输出格式不一致 | 用 Few-shot 提供示例 |
| 复杂推理出错 | 多步骤逻辑容易跳步 | 用 Chain of Thought |
| 不理解特定需求 | 输出不符合项目规范 | 在提示词中补充上下文 |
判断标准:如果 Zero-shot 连续两次输出不满意,考虑换用其他技巧。
可复制模板
代码转换模板
markdown
将以下 [源语言/版本] 代码转换为 [目标语言/版本]:
[代码内容]
要求:
- 保持功能一致
- 遵循 [目标语言] 的最佳实践内容生成模板
markdown
你是 [角色定位]。
任务:[具体任务描述]
要求:
- [要求1]
- [要求2]
输出格式:[格式说明]代码审查模板
markdown
审查以下代码,从 [审查维度] 角度指出问题:
[代码内容]
输出格式:
1. 问题:[描述] | 位置:[行号] | 建议:[修改方案]本节要点
✓ Zero-shot 的本质:利用 AI 已有知识,直接执行任务
✓ 适用场景:AI「应该会」的任务——转换、分类、生成
✓ 写好 Zero-shot 的关键:明确动词 + 具体输出 + 必要约束
✓ 局限性:格式不稳定、复杂推理容易出错
✓ 增强技巧:角色设定、输出格式指定
下一节,我们学习如何用示例「教会」AI——Few-shot Prompting。
