Gemini 是粗心学生
9 个示例 + 量化指标
一、原理:Few-shot 与 zero-shot 的本质差别
如果说 Claude 的病是"价值观偏差"、GPT 的病是"行为习惯",Gemini 的病更像"学习方式不同"。
Gemini 在很多评测里表现都不错——它的"硬实力"(推理、知识、长上下文)在 Google 持续迭代下不输 Claude 和 GPT。但 Gemini 在 Agent 场景里有一种特殊的"粗心"——它经常在细节上出错,不是因为不会,是因为"没真的看"。
具体表现:
- 你说"用 absolute path",Gemini 第一次用相对路径
- 你说"按 5 步流程",Gemini 经常跳过第 3 步
- 你说"先 read 再 edit",Gemini 经常直接 edit
- 你说"输出 JSON",Gemini 给的 JSON 有时少个引号
这些都不是 Gemini 的能力问题——给它讲一遍它都懂。但它的执行经常"抄近路"——按它对你意图的猜测来做,而不是按你的字面指令做。这是个 SFT 数据问题:Gemini 的训练数据里可能大量"灵活理解用户意图"的样本,导致它学会了"猜意图比按字面执行更受奖励"。
但这个学习方式在 Agent 场景里是灾难。Agent 的工具调用是精确的——参数错了工具就 fail。"灵活理解"等于"经常出错"。
那怎么治这种病?这就引出了 prompt engineering 里一个根本性的话题:few-shot 和 zero-shot 的差别。
Zero-shot——你直接告诉模型规则,让它按规则执行。"输出 JSON、用 absolute path、5 步流程"。规则是抽象的,模型需要"理解 + 执行"两步。
Few-shot——你给模型几个具体例子,让它从例子里学规则。"看,这种问题应该这样回答(例 1)、这种应该这样(例 2)……" 模型只需要"模仿",不需要"理解抽象"。
这两种方式哪个效果好?取决于模型。对于擅长抽象推理的模型(Claude),zero-shot 通常够用——它能从规则推到执行。对于"擅长模仿但不擅长抽象"的模型(早期 GPT-3、Gemini),few-shot 显著优于 zero-shot——给例子能让它知道"具体应该长什么样"。
Gemini 是 few-shot 学习者。它能模仿例子里的行为,但单看抽象规则就经常"放松要求"。这是为什么 opencode 的 gemini.txt 是 5 张脸里唯一一份大量用 in-context examples 的 prompt。
二、案例:gemini.txt 的 9 个示例 + 量化指标
打开 packages/opencode/src/session/prompt/gemini.txt,扫一遍你会注意到一个特别的现象——它有 9 个完整的对话示例。
其他几张脸的示例数量:
- anthropic.txt:2 个(嵌在 TodoWrite 段落里)
- gpt.txt:0 个独立示例
- beast.txt:0 个独立示例
- default.txt:4 个简短示例("what is 2+2"→"4" 这种)
只有 gemini.txt 有 9 个明确的、完整的示例。每个示例长这样:
<example>
user: 1 + 2
model: 3
</example>
<example>
user: How do I read a file in Python?
model: Use open() with a context manager:
```python
with open('file.txt', 'r') as f:
content = f.read()
</example>
<example>
user: list files in current directory
model: ls
</example>
```
9 个示例覆盖:简单算术、代码片段问答、CLI 命令、工具调用、错误处理、多步骤任务、长上下文、格式遵守、拒绝执行——基本覆盖了 Gemini 在 Agent 场景里会遇到的所有情形。
这种"9 个示例"的策略本质上是用模仿替代规则。Gemini 不再需要"理解我们说的 concise",它看到示例就知道"哦 concise 就是这种样子的"。
gemini.txt 还有第二个特征——量化指标比其他脸更密。
对比同一件事在三张脸里的表述:
gpt.txt 关于简洁:
Keep responses to the minimum length needed to convey the answer. Brevity is professional.
anthropic.txt 关于简洁:
Be direct and concise.
gemini.txt 关于简洁:
Aim for fewer than 3 lines of text output. Reserve longer responses for genuinely complex topics.
注意区别——gpt 和 anthropic 用形容词("minimum", "professional", "direct", "concise"),gemini 用具体数字("fewer than 3 lines")。
为什么 gemini.txt 要量化?因为形容词是抽象的,Gemini 对抽象遵守度低。"3 行"是具体的,没解释空间——少于 3 行就是少于 3 行,多了就是违反指令。
gemini.txt 里这种量化指标到处都是:
- "fewer than 3 lines of text output"
- "use at most 5 lines for complex explanations"
- "complete the task in fewer than 10 steps when possible"
- "respond within 200 tokens for simple questions"
这种量化是给 Gemini 的"标尺"。它有了具体的数字,遵守起来比"应该简洁"容易得多。
gemini.txt 还有第三个特征——5 步工作流的强制结构。
For tasks involving code modification, follow this 5-step workflow:
1. Understand - Read the relevant files
2. Plan - Outline the changes
3. Implement - Make the modifications
4. Verify (Tests) - Run tests if applicable
5. Verify (Standards) - Check lint, format, type-check
这个 5 步流程是给 Gemini 的"步骤刻度尺"。没有这个流程,Gemini 经常会跳过其中某些步骤(比如不 verify 直接结束)。有了明确的编号步骤,它会按顺序走。
这种强制结构对 Claude 可能反而限制——Claude 自己能判断什么时候跳过哪步。但对 Gemini 是必要的——它不会主动按合理顺序做事,需要明确的步骤指引。
把这三个特征合起来——9 个示例 + 量化指标 + 5 步工作流——gemini.txt 形成一种独特的"教科书"风格。它不像 anthropic.txt 那么"姿态化",也不像 gpt.txt 那么"压迫式",它更像一份新员工培训手册:先看例子、再按数字、再按流程。
这正是 Gemini 需要的——一个粗心的学生需要的不是哲学说教(anthropic),不是禁令清单(gpt),是清晰的范例 + 可执行的步骤。
三、设计启示:什么时候用示例胜过规则
这一章的核心论点:模型的"学习方式"决定了 prompt 的策略——规则型 vs 示例型不能互换。
如果你做 AI 产品,下面的判断框架有用:
判断 1:这个模型对抽象规则的遵守度高吗?给它 5 条抽象规则,它能不能正确执行?如果失败率 < 10%,它是规则型学习者(Claude 倾向)。如果失败率 > 20%,它是示例型学习者(Gemini 倾向、早期 GPT 倾向)。
判断 2:你的指令本身是抽象的吗?"输出 JSON" 是抽象(什么算 JSON?严格语法?带注释的?)。"输出符合 schema X 的 JSON,例如 {a: 1, b: 'hello'}" 是具体。如果指令本身能写得具体,规则型也能用;如果指令本身就抽象,示例型几乎必需。
判断 3:你的产品是长上下文还是短上下文?示例占 token。9 个示例可能占 1K-2K tokens。在短上下文场景这不算什么,在长上下文场景每 1K token 都很贵。如果是 cost-sensitive 的产品,用规则;不 cost-sensitive 的用示例。
判断 4:你的产品要求严格遵守还是创造性输出?严格遵守的场景示例更有效——示例给了"标杆"。创造性场景示例反而有害——它会限制模型的发挥。
把这些判断用到不同场景:
写代码场景——通常要严格遵守格式和约定,所以示例有效。但如果场景是"按用户需求自由发挥",示例反而限制创意。
问答场景——通常需要根据问题灵活回答,规则更合适。但如果是"按特定格式问答"(比如客服),示例更合适。
多步骤 Agent 场景——通常需要严格按工作流执行,所以"5 步工作流"+ 示例都有效。
翻译场景——通常需要保持原文语义、调整目标语言风格,示例(特别是"原文 → 译文"对照)效果远好于规则。
最后一个观察。Gemini 对示例的依赖在某些场景下是优势。一个产品如果能给 Gemini 提供清晰的示例库,Gemini 的"模仿质量"可以非常高——比 Claude 在同样示例下的输出更稳定(因为 Claude 会"创造性发挥",不严格模仿)。
这意味着模型选择不是简单的"谁更好",是"谁适合你的场景":
- 需要稳定输出 → Gemini + 示例
- 需要创造性 + 自主判断 → Claude
- 需要快速 + 简洁 → 配 prompt 紧的 GPT
- 需要持续探索 → Beast Mode(详见 1.3 章已讲过)
每个模型都有自己的"最佳搭配 prompt 类型"。理解这一点,你才能把多模型 AI 产品做到位。
下一章 1.7 我们看 default.txt——没有特定模型适配时的兜底,背后藏着的是"最小特化集合"的产品哲学。