---
title: "3.3.1 Zero-shot Prompting：直接提问的艺术"
---


![03-technique_3.3-advanced-techniques_3.3.1-zero-shot.png](/images/Basic/03-technique_3.3-advanced-techniques_3.3.1-zero-shot.png)
# 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。
