Claude学院

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-keyanthropic-version)。还没跑通第一个请求的话,可以照着 Claude API Python 示例代码:10 分钟跑通第一个程序 操作;想了解全部请求参数则看 Claude Messages API 全部参数说明(含代码示例)

进阶:用「预填充」锁死输出格式

如果你要的输出是严格 JSON,除了给示例,还可以在 messages 末尾追加一条 assistant 消息做预填充(prefill),比如把 content 设为 {,模型就会从这个左花括号继续写,几乎不会再蹦出多余的客套话。这一招和 Few-shot 配合使用,是把格式稳定到生产可用的关键技巧。

模型与场景对照

任务类型推荐示例数建议模型关键参数
固定标签分类3-5 组Claude Haiku 4.5temperature=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 多轮对话怎么实现?上下文管理详解

提示词工程