Appearance
Few-shot 与思维链
看在前面
提示词三板斧的第二板(第一板"系统提示词"见系统提示词工程-从财务诊断说起)。few-shot 用示例教格式与行为,思维链(CoT)用"想一步再答"教推理路径。
这篇按四块写:
- few-shot 的选择策略(示例从哪来、放几个)
- CoT 三代形态(标准 CoT / zero-shot CoT / self-consistency)
- 结构与格式锚定技巧
- 何时失效——面试里"知道边界"比"会用"更加分
示例的 token 预算问题关联 [上下文工程](../llm基础/上下文工程-Context Engineering.md) 的配比纪律。
一、Few-shot:示例是最强的格式锚,也是最贵的
1.1 它到底教会了模型什么
few-shot 示例同时教三层。格式(输出长什么样,一个例子几乎 100% 对齐)。行为(什么输入给什么反应,两三个例子定性)。边界(异常输入怎么处理——示例里没有的边界,模型自由发挥)。三层对示例数量的需求完全不同,这是"放几个"问题的正解框架。
1.2 示例选择策略
text
候选示例池(人工精标)
│
├─ 相似度检索:当前问题 → 嵌入 → 取最相近的 K 个示例(动态 few-shot)
│ 优点:示例与问题同分布,信号最强;缺点:检索错 = 教错
│
├─ 多样性配额:按输入类型/难度/边界情形分层,每层保底 1 个
│ 覆盖正常 case、边界 case(空输入/看不清→null/超长)、反例(不该做什么)
│
└─ 数量的边际:格式对齐 1 个够;行为对齐 2~3 个收益最大;
再往上边际递减 + 挤占预算 + 引入噪声(弱示例拉低整体水平——
few-shot 是平均不是最值,一个坏示例污染整个分布)三条实战纪律:
- 示例质量 > 数量(3 个精标 > 10 个随手)。
- 边界示例必放(ai-service report_ocr 的 few-shot 里"看不清的字段填 null"就是边界教学。没有它模型在边界上编造,详见结构化输出篇的 null 出口设计)。
- 示例与指令不能打架(指令说不超过 300 字,示例却 500 字——模型跟示例不跟指令。指令与约束一致性是提示词篇反模式四的镜像)。
二、思维链三代:从手写到自动到投票
text
标准 CoT(2022 Wei et al.)
few-shot 示例里手写推理过程:
Q: 张三月入2万,房贷8千,问月供收入比?
A: 月供收入比 = 房贷 / 月收入 = 8000 / 20000 = 0.4。占比40%,偏高。 ← 示例带推理
Zero-shot CoT(2022 Kojima et al.)
无示例,只加一句咒语:"让我们一步一步思考"(Let's think step by step)
训练充分的模型上激活推理路径,零示例成本
Self-Consistency(2022 Wang et al.)
同一问题采样 N 条推理链(temperature > 0)
链1 ──► 答案 0.4 ┐
链2 ──► 答案 0.4 ├─ 多数投票 ──► 0.4(修正单链的路径性错误)
链3 ──► 答案 0.5 ┘
本质:答案比推理路径稳定,用集成换鲁棒;代价 = N 倍推理成本机制层一句话(面试的区分度所在):CoT 不是玄学,是给模型分配了"中间 token 位"。生成每个 token 时只有前面的 token 可用。推理步骤先写出来,后续计算就能"看到"中间结果再往下算(类似给纸笔做多位数乘法)。这同时解释了它为何对多步推理有效、以及为何推理模型(o1/R1 类)把它内化成了训练目标。
四代形态横向对比(面试可整段引用):
| 形态 | 需要 few-shot 吗 | 成本 | 精度贡献 | 适用 |
|---|---|---|---|---|
| 直答(无 CoT) | 否 | 1× | 基线 | 单步任务:抽取/分类/改写 |
| 标准 CoT | 要(示例带手写链) | 1× + 示例 token | 多步任务显著提升 | 数学/逻辑/多约束权衡 |
| zero-shot CoT | 不要 | 1× + 几个 token | 有提升但弱于标准 CoT | 快速验证、无精标示例时 |
| self-consistency | 不要 | N×(采样 N 链) | 再加一截(修正路径错误) | 高价值单题、成本不敏感 |
选型顺口溜:先直答,不达标再 CoT。有精标示例上标准 CoT,没有先 zero-shot 顶。答案客观且贵(金融/医疗)再上 self-consistency。成本意识是这题的隐藏考点,多数候选人只答得出"CoT 能提升推理"。
三、结构与格式锚定:让输出可解析
推理之外,few-shot + CoT 的另一半工作是把输出钉进可解析的轨道:
text
1. 格式骨架示例 > 格式文字描述
"输出 JSON" 不如直接给一个填好的 JSON 示例(描述是概率的,示例是锚定的)
2. 推理与答案分离
"先在 <think>...</think> 里推理,再在 <answer>...</answer> 里给结论"
—— CoT 的中间 token 对下游是噪声,标签分离让解析器只取 <answer>
3. 结构化容器锁住自由发挥
Few-Shot 示例:
输入:收缩压 138mmHg(参考 90~140)
输出:{"item":"收缩压","abnormal":false,"advice":"正常高值,建议复测"}
模型模仿的是"字段名 + 值类型 + 判断风格"三件套,比自然语言输出稳定一个量级
4. 与确定性计算分工
138 对 90~140 意味着什么,能算就别让模型推 —— ai-service 的 abnormalFlag
在渲染进提示词前就算好【偏高】【偏低】,CoT 只负责组织解释语言第 4 条是提示词篇"确定性计算写进指令是反模式"的正面版。CoT 的推理预算花在模型不可替代的部分(组织、解释、权衡),可程序计算的部分预先算好。省 token、降幻觉、提速三收。
四、示例的顺序效应与标签设计
两个容易被忽略的微操,效果立竿见影:
- 顺序:示例离生成位置越近影响越大——最想让模型模仿的样板放最后一个。recency 优势,位置效应的 few-shot 版本,机制见 [上下文工程](../llm基础/上下文工程-Context Engineering.md) 第三节。多个示例间按"由一般到边界"排,边界示例收尾等于"最后一课讲异常处理"。
- 伪标签(标签词计算):不是所有 few-shot 都要完整问答对——分类任务上把示例写成"输入 → 标签词"。例如
低血压 → 风险:低。生成时模型在标签词上的 logits 就是免费分类器(early stopping 在标签词处),比生成整句回答更稳更省。这一招把 few-shot 从"教输出"细化到"教决策点"。
配套的评测纪律(没有评测的 few-shot 是玄学):约束遵守率可程序检测。示例教的是格式就跑 schema 校验通过率。教的是行为就抽检规则命中(比如"每个风险必须引用数据"用正则核)。对照组用"删除示例"的裸指令版本。两者差值就是这个示例集的真实贡献,也是后续增删示例的依据。评测方法与提示词篇 A/B 纪律同源。
五、何时失效:三类不该用的场景
- 强约束任务:抽取、分类、格式转换——答案一步可得。CoT 反而引入"推理跑偏带偏答案"的新失败面,且多花成倍 token。经验规则:任务的正确答案若不依赖中间步骤,就不要中间步骤。
- 小模型 + 复杂模板:弱模型模仿长推理链时格式先崩(think 标签不闭合、答案写两遍)。few-shot 越复杂崩得越快——先验证模型能力再上重提示。
- 答案有客观校验的:数学/代码生成类,用 self-consistency 或工具调用(让计算器/解释器算)优于裸 CoT。能确定性求解的交给确定性工具,CoT 是没有工具时的替代品。
三条失效场景的公共判断式:先问"这任务的中间步骤与最终答案是否强耦合"。耦合(多步推理)CoT 有收益,解耦(一步映射)CoT 是纯成本。判断式比记场景更抗追问,场景清单会漏,判断式不会。
追问链
面试官:few-shot 示例越多越好吗?
三层需求三层答案:格式 1 个、行为 2~3 个、边界按情形配额。超过后边际递减并开始付反账——token 预算被挤占、弱示例拉低分布(few-shot 是平均效应)。模型可能过拟合示例风格(输出和示例越长越像)。答"数量边际 + 质量优先 + 边界覆盖"三个词就到位。
面试官:动态 few-shot(按相似度检索示例)和固定 few-shot 怎么选?
固定:任务分布窄且稳定(输入形态就那几种),简单可控可回归。动态:输入分布宽(客服、开放问答),示例池大时检索出来的示例与当前问题同分布,信号更强。代价是引入检索这个新失败面(示例检索错,模型被带偏)+ 评测复杂度上升。默认固定,扛不住再动态——和 RAG 的取舍是同构的。
面试官:CoT 什么时候反而降低准确率?
三个典型:一步可答的任务(强约束类,推理给了模型"推翻直觉答案"的空间)。示例与任务不匹配(长链条污染短任务)。self-consistency 在"答案本身多解合理"的开放任务上投票无意义。核心认知:CoT 提升的是"中间步骤与答案耦合"的任务,对解耦任务是纯成本。
面试官:思维链会不会把中间推理泄漏给用户?
会——所以推理与答案必须标签分离(<think> 不透出),或用支持 reasoning 隐藏的 API(推理模型的原生隔离)。工程上还要防中间推理里夹带敏感数据(提示词里的数据被复述进 think 再进日志)。上下文工程篇"工具返回值是已消费输入"的压缩纪律同样适用于 think 段。
面试官:few-shot 示例的输入要不要脱敏?
要,而且是被问得越来越多的合规考点。示例里带真实用户数据(姓名/手机号/病情)等于把个人信息复制进提示词。这些数据随日志、评测集、厂商请求三方扩散。
做法:精标示例一律用脱敏/合成数据,金标准集同规则。ai-service 的示例输入就是"收缩压 138"这类无主体医学数值形态。真数据只在生产推理时出现且不落提示词日志。示例教学的信号在"形态与逻辑",不在真实主体——脱敏不掉教学价值。
面试官:现在都有推理模型了,CoT 还有用吗?
分层答:推理模型把 CoT 内化为训练目标(RL 学出来的长思考)。提示词层的"一步一步思考"边际收益归零甚至干扰。但非推理模型仍是主流生产选择(成本/延迟),提示词 CoT 依旧有效。且推理模型的可控版需求("先检查单位再计算"这类领域步骤注入)本质仍是 CoT 工程。结论:概念不会过时,载体在迁移。
面试官视角小结
- few-shot 三层教学:格式(1 例近 100% 对齐)、行为(2~3 例定性)。边界(必放,异常输入示例防编造)。质量优先、数量边际递减、坏示例污染分布。
- 选择策略:相似度检索(动态)vs 多样性配额(分层覆盖)vs 固定。按输入分布宽度选,动态要认检索新失败面。
- CoT 三代:手写链(few-shot 教路径)→ zero-shot 咒语(激活)→ self-consistency(N 链投票,答案比路径稳)。机制 = 中间 token 位让后续生成"看到"中间结果。
- 格式锚定:示例优于描述、推理/答案标签分离。结构化容器、确定性计算不进 CoT。abnormalFlag 前置渲染是现成范式。
- 失效边界:强约束任务、小模型重模板、有客观校验(该用工具)。答得出"何时不用"才是真会用。
- 微操与评测:最想被模仿的示例放最后(recency)、标签词 few-shot 把教学细化到决策点。约束遵守率可程序检测 + 对照组差值 = 示例集的真实贡献。
- 合规:示例与金标准集一律脱敏/合成数据。教学价值在形态与逻辑,不在真实主体。
- 四代选型顺口溜:先直答,不达标再 CoT。有精标上标准 CoT,没有先 zero-shot 顶。答案客观且贵再 self-consistency。成本意识是隐藏考点。
2026-10 新增(Round1 补缺)。