3、Prompt 进阶技巧:Chain-of-Thought(思维链)、Few-Shot与Zero-Shot、温度参数与Top-P采样

好,咱们继续深入。上一章聊了基础 Prompt 怎么写,说白了就是「把话说清楚」。但到了真实项目里,你会发现光说清楚还不够——模型有时候就是「脑子转不过弯来」。这时候,就需要上点进阶技巧了。

我个人习惯把 Prompt 工程分成两个维度:一个是「怎么问」,另一个是「怎么控」。思维链、Few-Shot 这些属于前者,温度参数、Top-P 属于后者。咱们一个一个来。

3.1 Chain-of-Thought(思维链):让模型「把步骤写出来」

先问个问题:你让模型算「23 × 47 = ?」,它直接给你个答案。你敢信吗?反正我不敢。

模型本质上是个「下一个词预测器」,它没有真正的计算能力。你让它直接输出结果,它大概率是在「猜」——从训练数据里回忆一个相近的答案。这跟人类心算一样,容易出错。

思维链的核心思想很简单:让模型把推理步骤写出来。

我在项目中遇到过这样一个场景:需要模型分析一段用户评论的情感倾向,同时还要给出理由。一开始我用普通 Prompt,结果模型经常给出「正面」但理由驴唇不对马嘴。后来改成思维链,让模型先提取关键句,再判断情感,准确率直接提升了 15%。

普通 Prompt:

Q: 23 × 47 = ?
A: 1081

思维链 Prompt:

Q: 23 × 47 = ?
A: 先算 20 × 47 = 940,再算 3 × 47 = 141,最后 940 + 141 = 1081

看到了吗?后者把计算过程拆开了。模型在生成「940 + 141 = 1081」的时候,其实是在做「文本补全」,而不是真的在算数。但效果就是好——因为中间步骤给了它「思考的锚点」。

我的经验:思维链最适合数学推理、逻辑判断、多步骤分析这类任务。如果是简单的分类或提取,反而没必要,因为会增加 Token 消耗。

3.2 Few-Shot 与 Zero-Shot:给不给例子,差别很大

这两个概念其实很好理解。Zero-Shot 就是「不给例子,直接问」。Few-Shot 就是「先给几个例子,再问」。嗯,就这么简单。

但实际用起来,门道不少。

Zero-Shot 适合什么? 通用知识问答、简单分类。比如「把这句话翻译成英文」,模型天生就会,不需要例子。

Few-Shot 适合什么? 格式要求严格、输出结构固定、或者模型不太熟悉的任务。比如让模型输出 JSON 格式的数据,你不给个例子,它可能给你输出 Markdown 表格。

Zero-Shot 示例:

请将以下句子分类为「正面」或「负面」:
「这家餐厅的服务太差了。」
输出:负面

Few-Shot 示例:

请将以下句子分类为「正面」或「负面」:
例子1:「菜品味道很好,环境也不错。」 -> 正面
例子2:「上菜太慢了,服务员态度也不好。」 -> 负面
例子3:「价格合理,但分量太少。」 -> 负面

现在请分类:
「这家餐厅的服务太差了。」
输出:

我曾经踩过一个坑:给 Few-Shot 例子的时候,给了 5 个正面例子、1 个负面例子。结果模型疯狂输出正面,因为「样本不平衡」。你想想看,模型其实是在「模仿」你给的例子分布。所以 Few-Shot 的样本要均衡,最好正反各一半。

避坑指南:我曾经在做一个客服意图识别项目时,给了 3 个「退货」的例子、1 个「咨询」的例子。结果模型把大部分请求都识别成「退货」。后来我把例子改成各 2 个,准确率才恢复正常。Few-Shot 的样本数量和比例,直接影响模型的行为。

3.3 温度参数与 Top-P 采样:控制模型的「创造力」

这部分属于「控」的维度。说白了,就是调节模型「敢不敢冒险」。

温度参数(Temperature):值越低,模型越「保守」,总是选概率最高的词。值越高,模型越「发散」,会选一些概率低的词。

  • Temperature = 0:每次都选最确定的词,输出几乎固定。适合事实性问答、代码生成。
  • Temperature = 0.7~1.0:有一定随机性,输出多样化。适合创意写作、对话。
  • Temperature > 1.0:非常随机,容易跑偏。我基本不用,除非在做头脑风暴。

Top-P 采样(Nucleus Sampling):这个参数控制「候选词的范围」。Top-P = 0.9 表示只从概率总和占 90% 的那些词里选。值越小,候选词越少,输出越确定。

实际项目中的搭配建议:

任务类型 Temperature Top-P 说明
代码生成 0 ~ 0.2 0.1 ~ 0.3 要精确,不要创意
事实问答 0 ~ 0.3 0.3 ~ 0.5 稳定输出,避免幻觉
创意写作 0.7 ~ 0.9 0.8 ~ 0.95 需要多样性
对话系统 0.5 ~ 0.7 0.7 ~ 0.9 平衡稳定与自然

我建议你记住一个原则:先调 Temperature,再调 Top-P。Temperature 控制「整体冒险程度」,Top-P 控制「候选范围」。两者配合使用,效果比单独调一个要好。

一个小技巧:如果你发现模型输出「太死板」,先试着把 Temperature 从 0 调到 0.3。如果还是不够多样,再调 Top-P。不要一上来就 Temperature 拉到 0.9,那样输出会变得「疯疯癫癫」的。

3.4 把这些技巧组合起来

实际项目中,很少只用单一技巧。我常用的组合套路是这样的:

  1. 先用 Zero-Shot 试水:看看模型能不能直接理解任务。
  2. 如果效果不好,加 Few-Shot 例子:2~3 个高质量例子就够了。
  3. 如果任务需要推理,加思维链:让模型输出中间步骤。
  4. 最后调温度和 Top-P:根据任务类型选择合适的参数。

一个完整的例子:

任务:分析用户反馈,提取问题类别和严重程度

Prompt:
你是一个客服质量分析助手。请分析以下用户反馈,先列出关键问题点,再给出类别和严重程度(高/中/低)。

例子:
反馈:「我昨天下的订单,今天还没发货,客服电话也打不通。」
关键问题点:1. 订单未发货 2. 客服无法联系
类别:物流问题
严重程度:高

反馈:「App 偶尔会闪退,但重启后就好了。」
关键问题点:1. App 闪退
类别:技术问题
严重程度:中

现在请分析:
反馈:「你们的产品质量太差了,用了三天就坏了,而且售后说要我自己出运费。」
关键问题点:
类别:
严重程度:

参数设置:Temperature=0.2, Top-P=0.3

你看,这个 Prompt 同时用了 Few-Shot(给了两个例子)、思维链(先列关键问题点再分类),还配合了低温度和低 Top-P(确保输出稳定)。这就是一个典型的「进阶组合拳」。

最后提醒一句:这些参数不是万能的。我曾经在一个项目里调了半天的参数,结果发现是 Prompt 本身写错了。先确保 Prompt 质量,再调参数——这个顺序别搞反了。

好,这一章的内容就到这儿。下一章咱们聊聊「Prompt 的工程化落地」,怎么把 Prompt 管理起来、怎么测试、怎么迭代。到时候见。