在 Agent 语境下,Zer-shot、One-shot 和 Few-shot Prompting 有什么区别?
在 AI Agent(智能体) 的语境下,Zero-shot、One-shot 和 Few-shot Prompting 的核心区别不仅仅在于“给了几个例子”,而在于模型是如何学习“思考路径(Reasoning)”和“工具使用(Tool Use)”的。
Agent 的核心通常涉及 感知 -> 规划 -> 行动(调用工具) -> 反馈 的循环。这三种提示策略决定了 Agent 如何理解这个流程。
我们可以用“教新员工做事”来类比这三者:
1. Zero-shot Prompting (零样本提示)
定义:
你不给模型任何具体的示例,只给出任务描述、可用工具的定义和系统指令(System Prompt)。模型完全依赖其预训练知识和指令遵循能力来推断该怎么做。
Agent 语境下的特点:
- 依靠通用逻辑: Agent 必须自己“悟”出如何将用户意图转化为工具调用。
- 测试泛化能力: 用于测试模型是否真正理解了工具的文档描述。
示例 (Prompt):
System: 你是一个天气助手。你可以使用
get_weather(city)工具。
User: 帮我查查北京的天气。
Agent 的内部反应:
(模型完全靠自己理解) -> “用户要天气,我有天气工具,所以我应该输出:Action: get_weather('Beijing')”
优缺点:
- 优点: 最节省 Token(成本低),响应速度快,最灵活(不受示例限制)。
- 缺点: 在复杂任务中容易“幻觉”(比如编造参数),或者输出格式不符合要求(比如忘记输出 JSON 格式)。
2. One-shot Prompting (单样本提示)
定义:
你在 Prompt 中提供一个完整的“输入 -> 思考 -> 行动 -> 输出”的示例。
Agent 语境下的特点:
- 规范格式: 主要用于告诉 Agent “输出长什么样”。
- 启动引导: 就像给新员工演示了一遍标准操作流程。
示例 (Prompt):
System: 你是一个助手。
Example:
User: 谁是埃隆·马斯克?
Thought: 用户在问名人信息,我需要搜索。
Action:search_wiki("Elon Musk")
Observation: 埃隆·马斯克是 SpaceX 的 CEO...
Final Answer: 埃隆·马斯克是知名企业家...User: 谁是奥巴马?
Agent 的内部反应:
(模型模仿示例的结构) -> “刚才那个例子是先思考再搜索,那我也照着做:Thought: 用户问名人... Action: search_wiki('Obama')”
优缺点:
- 优点: 能显著修正 Agent 的输出格式(比如强制要求输出 JSON 或特定的 ReAct 格式)。
- 缺点: 容易导致过拟合。例如,如果示例是“查天气”,当用户问“算加法”时,Agent 可能会错误地尝试去查天气,因为它以为所有任务都要像示例那样处理。
3. Few-shot Prompting (少样本提示)
定义:
你提供多个(通常 2-5 个)不同场景下的完整示例。这在学术上也被称为 In-Context Learning (上下文学习)。
Agent 语境下的特点:
- 教导复杂逻辑: 通过不同的例子,教会 Agent 如何处理分支情况、错误处理或多步推理。
- 工具选择能力: 可以展示一个例子用工具 A,另一个例子用工具 B,第三个例子拒绝回答,从而教会 Agent 决策边界。
示例 (Prompt):
System: 你是一个全能助手。
Example 1 (简单查询):
User: 你好。
Agent: 你好!有什么我可以帮你的吗?Example 2 (需要工具):
User: 234 乘以 89 等于多少?
Thought: 这是一个数学计算。
Action:calculator(234, 89, "*")Example 3 (多步任务):
User: 帮我定个明天去上海的闹钟。
Thought: 我无法直接定闹钟,但我可以查询去上海的航班,或者你需要提醒?
Final Answer: 对不起,我只能查询信息,无法设置手机闹钟。User: 现在的美元汇率是多少?
Agent 的内部反应:
(模型通过对比学习) -> “这既不是打招呼,也不是拒绝回答的任务,这像 Example 2 需要用工具。所以我应该调用汇率工具。”
优缺点:
- 优点: 极大提升 Agent 处理复杂任务的稳定性、准确率和推理能力;能有效减少幻觉。
- 缺点: 消耗大量 Token(成本高),增加延迟(Latency),且如果示例质量不高,会误导模型。
总结对比表
| 特性 | Zero-shot (零样本) | One-shot (单样本) | Few-shot (少样本) |
|---|---|---|---|
| 类比 | 直接下命令:“去干活” | 演示一次:“看我做一遍” | 培训课:“这是情况A的处理法,那是情况B的处理法...” |
| Agent 核心作用 | 依赖模型智商,测试泛化 | 规范输出格式 (Format Compliance) | 提升推理逻辑 (Reasoning) & 处理边缘情况 (Edge Cases) |
| Token 消耗 | 低 | 中 | 高 |
| 适用场景 | 简单对话、通用任务、模型能力极强时 (如 GPT-4) | 需要特定 JSON 结构、特定语气时 | 复杂的多步决策、需要使用生僻工具、容易出错的任务 |
| 常见风险 | 格式错误、胡乱调用工具 | 过度模仿 (Overfitting) | 上下文窗口溢出、成本昂贵 |
在 Agent 开发实战中的建议:
- 起步: 先用 Zero-shot 配合强大的模型(如 GPT-4o, Claude 3.5 Sonnet)测试 Prompt。
- 规范: 如果 Agent 总是忘记输出 JSON 或者忘记写
Thought:,加入 One-shot。 - 优化: 如果 Agent 在选择工具时经常选错,或者遇到困难问题就卡住,构建高质量的 Few-shot 示例集(包含正例和反例)。