Claude Few-shot 示例怎么用?3 步提升回答准确率
Few-shot(少样本)的用法很简单:在提示词里给 Claude 提供几组「示范输入 → 期望输出」的例子,模型会照着这些例子的格式、口径和风格来回答你真正的问题。对于分类、信息抽取、固定格式改写这类任务,加上 3-5 组好示例,往往比反复修改文字描述更能稳定提升准确率。下面按「准备示例 → 规范结构 → 调用验证」三步走,并给出可直接运行的代码。
第一步:准备 2-5 组高质量示例
Few-shot 的效果几乎全部取决于示例质量,而不是数量。一般 2-5 组就够,盲目堆到十几组只会拉高 Token 成本、稀释重点。挑选示例时把握三个原则:
- 覆盖典型与边界:既要有最常见的情况,也要放 1-2 个容易出错的边界样本(比如「中性情绪」「信息缺失」这类容易被误判的输入)。
- 输出格式完全一致:如果你要 JSON,每个示例的输出都必须是合法且字段顺序相同的 JSON;模型会严格模仿你示例里的格式细节,包括键名、引号、是否有多余文字。
- 正确且无歧义:示例里出现一次错误标注,模型就可能把这个错误当成规则学走。
举个情感分类的例子,准备三组示例:「这家店服务太差了→负面」「物流很快,包装也好→正面」「就是个普通的杯子→中性」。这三组同时教会了模型标签集合、判断口径和输出粒度。如果你刚接触提示词,建议先读 Claude 提示词怎么写?2026 最新新手到进阶完整教程 打好基础。
第二步:用 XML 标签规范示例结构
Claude 对 XML 标签的边界识别非常敏感,把每组示例用统一的标签包起来,能让模型清楚区分「这是示范」和「这是真正的问题」,避免把示例内容当成要处理的数据。推荐的结构是用一个外层标签包裹所有示例,内部每组示例再用输入/输出标签分隔:
<examples>
<example>
<input>这家店服务太差了</input>
<output>负面</output>
</example>
<example>
<input>物流很快,包装也好</input>
<output>正面</output>
</example>
<example>
<input>就是个普通的杯子</input>
<output>中性</output>
</example>
</examples>
请仿照上面的示例,对下面这条评论给出标签(只输出标签词,不要解释):
<input>价格偏高,但质量确实不错</input>
这里有两个细节:一是标签命名要前后一致,不要一会儿写 <input> 一会儿写 <query>;二是真正的问题最好也复用相同的标签,让模型「接着写 output」即可。XML 标签的更多用法见 Claude 提示词 XML 标签用法详解:5 个实战示例。如果你想要现成可改的模板,可以参考 20 个高质量 Claude 提示词模板(可直接复制使用)。
第三步:通过 Messages API 调用并验证
把示例放进提示词后,要么作为 system 系统提示词的一部分,要么直接写在 messages 数组的 user 消息里。下面是 Python(anthropic 官方 SDK)的完整可运行示例:
from anthropic import Anthropic
client = Anthropic() # 自动读取环境变量 ANTHROPIC_API_KEY
prompt = """<examples>
<example><input>这家店服务太差了</input><output>负面</output></example>
<example><input>物流很快,包装也好</input><output>正面</output></example>
<example><input>就是个普通的杯子</input><output>中性</output></example>
</examples>
请仿照示例,对下面评论只输出标签词:
<input>价格偏高,但质量确实不错</input>"""
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16,
temperature=0,
messages=[{"role": "user", "content": prompt}],
)
print(resp.content[0].text) # 期望输出:正面 或 中性
分类、抽取这类追求稳定的任务,把 temperature 设为 0,让输出尽量确定;max_tokens 按输出长度设小一点(标签任务给 16 就够),既省钱又能防止模型啰嗦。Node.js(@anthropic-ai/sdk)写法等价:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const resp = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 16,
temperature: 0,
messages: [{ role: "user", content: prompt }],
});
console.log(resp.content[0].text);
调用接口是 Messages API(POST /v1/messages,鉴权头为 x-api-key 加 anthropic-version)。还没跑通第一个请求的话,可以照着 Claude API Python 示例代码:10 分钟跑通第一个程序 操作;想了解全部请求参数则看 Claude Messages API 全部参数说明(含代码示例)。
进阶:用「预填充」锁死输出格式
如果你要的输出是严格 JSON,除了给示例,还可以在 messages 末尾追加一条 assistant 消息做预填充(prefill),比如把 content 设为 {,模型就会从这个左花括号继续写,几乎不会再蹦出多余的客套话。这一招和 Few-shot 配合使用,是把格式稳定到生产可用的关键技巧。
模型与场景对照
| 任务类型 | 推荐示例数 | 建议模型 | 关键参数 |
|---|---|---|---|
| 固定标签分类 | 3-5 组 | Claude Haiku 4.5 | temperature=0,max_tokens 小 |
| 结构化抽取(JSON) | 2-4 组 | Claude Sonnet 4.6 | 配合 assistant 预填充 |
| 复杂改写/风格迁移 | 2-3 组 | Claude Opus 4.8 | 示例需体现风格细节 |
简单高频的分类任务用 Haiku 4.5 性价比最高,需要更强理解力的复杂改写再上 Opus 4.8。具体怎么权衡可参考 Claude 模型怎么选?Opus / Sonnet / Haiku 选型指南。示例会占用输入 Token,量大时建议结合 Claude API 怎么省钱?5 个降低 Token 成本的方法 里的 Prompt Caching 把固定示例缓存起来。
常见问题
Few-shot 和思维链(CoT)能一起用吗?
可以,而且对推理类任务效果更好。做法是在每个示例的 output 里不仅给最终答案,还把推理步骤写出来,模型就会模仿「先推理、再给结论」的模式。具体写法见 Claude 思维链(CoT)提示词写法:让推理更准确。
加了示例还是不按格式输出怎么办?
先检查三点:示例输出格式是否完全统一、真正的问题是否复用了相同标签、是否被 max_tokens 截断。再不行就加 assistant 预填充强制开头。更系统的排查思路见 Claude 提示词不生效?8 个常见原因和修复方法。
示例放 system 里还是 user 里更好?
两种都行。如果示例是这个任务的固定规则、每次请求都一样,放 system 更清晰,也更容易配合缓存;如果示例需要随输入动态变化,放在 user 消息里更灵活。多轮对话场景下要注意上下文管理,可参考 Claude API 多轮对话怎么实现?上下文管理详解。