如果把编写 System Prompt 比作编写“职位描述”,那么 Few-Shot Prompting (少样本提示) 就是在进行“岗前培训”。
通过向 Claude 展示几个“完美案例”,无需费力解释抽象规则,就能让模型迅速领悟意图。这被称为 In-Context Learning (上下文学习)。
2.4.1 原理:从模仿到泛化
LLM 是强大的模式识别引擎。当提供示例(Shots)时,Claude 实际上在做两件事:
格式模仿:识别输入和输出的结构(JSON, Markdown, XML)。
逻辑泛化:分析从 Input 变到 Output 的潜在逻辑规则。
复杂任务,边缘情况多,需要很难用语言描述清楚的逻辑
极高难度的分类任务、微调级别的风格模仿(Feature available in Claude 2/3)
推荐使用 XML 标签 <examples> 包裹示例。
<system_prompt>
...
</system_prompt>
<examples>
<example>
<input>苹果</input>
<output>红色,圆形,水果</output>
</example>
<example>
<input>天空</input>
<output>蓝色,广阔,自然现象</output>
</example>
</examples>
<user_input>
消防车
</user_input>
示例集必须覆盖任务的边界情况 (Corner Cases)。
Good Set:
Ex 4: 干扰情况(输入包含无关信息,输出需忽略)。
有时即使写了 "Output valid JSON",模型还是会啰嗦 "Here is the JSON..."。 通过 Few-Shot,直接展示 JSON Only 的输出,Claude 就会乖乖闭嘴。
如果希望 Claude 在推理时必须展示步骤,不要只在 System Prompt 里说。在示例里直接写出来。
告诉 Claude “不要做什么”往往很难,不如直接演示“错误的做法”以及“如何修正”。
(注:这种写法需要配合说明,明确告诉模型哪个是错的。)
2.4.4 Many-Shot Prompting
这是 Claude 长上下文能力的特有玩法。 如果你的任务很难(例如:将自然语言转为一种极其晦涩的内部 DSL 查询语言),提供 3 个例子根本不够。 可以利用 Claude 的 200k 窗口,一次性塞入 50-100 个 高质量的 Input-Output 对。
效果惊人:根据 Anthropic 的研究,Many-Shot 在某些复杂任务上的表现可以媲美经过 Fine-tuning(微调)的模型,但无需任何训练成本。
在生产环境中,可能有 1000 个完美的示例,但不能每次都全部发给模型(Token太贵)。 最佳实践是建立一个动态示例库:
Embed: 将 1000 个示例的 input 转化为向量并存入向量数据库。
Retrieve: 当用户发来新问题 Q 时,先去库里搜最相似的 5 个示例。
Construct: 将这 Top-5 示例动态插入 System Prompt 的 <examples> 插槽中。
这种方法大大提升了针对特定问题的回复准确率。
掌握了 Few-Shot,已经能够解决 90% 的格式和风格问题。但面对复杂的逻辑推理难题,还需要一把更锋利的武器 —— 让 AI “慢下来思考”。
➡️ 链式思维 (Chain of Thought)