4、Prompt工程:Few-shot、Chain-of-Thought提示设计,以及如何构造指令微调数据
聊到Prompt工程,很多人第一反应是“不就是写提示词吗?”
嗯,对,也不全对。
我做了这么多年大模型微调,坦白讲,Prompt工程是连接人类意图和模型能力的桥梁。你喂进去的指令质量,直接决定了模型吐出来的东西是金玉良言还是废话连篇。
今天咱们就掰开揉碎,聊聊三个核心话题:Few-shot(少样本提示)、Chain-of-Thought(思维链),以及如何构造指令微调数据。
一、Few-shot:给模型打个样
Few-shot,说白了就是给模型看几个例子。
你想想看,如果你让一个新同事干活,光说“帮我写个报告”,他肯定一脸懵。但如果你甩给他三个写好的模板,他立马就知道格式、语气、长度了。
模型也一样。
Zero-shot 是直接问:“翻译成英文:今天天气真好。”
Few-shot 则是先给两个例子:
输入:今天天气真好。
输出:The weather is nice today.
输入:你吃饭了吗?
输出:Have you eaten?
输入:我想去公园散步。
输出:
模型看到前两个配对,自然就知道第三个该怎么接了。
关键点:Few-shot 不是越多越好。我试过给 10 个例子,效果反而不如 3 个。为什么?因为例子太多会引入噪声,模型反而抓不住重点。
我的习惯:一般先给 2-3 个高质量例子。如果任务复杂,最多 5 个。再多,就该考虑微调了。
二、Chain-of-Thought:让模型学会“想”
Few-shot 解决了“做什么”,但没解决“怎么做”。
这时候,Chain-of-Thought(CoT)就派上用场了。
CoT 的核心思想很简单:让模型把推理过程写出来。
我遇到过很多场景,直接问模型“3.5 和 3.11 哪个大”,它可能答错。但如果你让它“一步一步想”,它就能正确推理。
举个例子:
普通提示:
问:小明有 5 个苹果,小红有 3 个苹果,他们一共有几个苹果?
答:8 个。
CoT 提示:
问:小明有 5 个苹果,小红有 3 个苹果,他们一共有几个苹果?
答:小明有 5 个,小红有 3 个。5 + 3 = 8。所以一共有 8 个苹果。
你看,多了一步“5 + 3 = 8”,模型就稳了。
避坑指南:我曾经在数学推理任务上直接上 CoT,结果模型输出了一堆废话。后来发现,CoT 需要配合 格式约束。比如强制要求“先写公式,再写结果”。不然模型会编造推理过程。
CoT 还有一种变体叫 Zero-shot CoT,就是不加例子,只加一句“让我们一步一步思考”。
嗯,效果出奇的好。我试过在复杂逻辑推理任务上,准确率直接提升了 15%。
三、构造指令微调数据:从 Prompt 到训练数据
讲完 Prompt 工程,咱们聊聊更进阶的东西——如何把 Prompt 技巧迁移到指令微调数据构造中。
指令微调,说白了就是让模型学会“听懂人话”。
你给模型一堆 (指令, 回答) 对,它就能学会按指令办事。
那数据怎么构造?我总结了一套流程:
- 确定任务类型:分类、生成、抽取、推理……不同任务,数据格式不同。
- 设计指令模板:比如“请将以下文本分类为正面或负面:{文本}”。
- 注入 Few-shot 示例:在指令中嵌入 1-2 个例子,帮助模型理解。
- 加入 CoT 推理:对于复杂任务,让模型输出推理过程。
- 清洗与去重:重复数据会让模型学偏,我吃过这个亏。
来看一个实际的数据样例:
{
"instruction": "请判断以下评论的情感倾向,并给出理由。",
"input": "这家餐厅的服务太差了,等了一个小时才上菜。",
"output": "情感倾向:负面。理由:评论中提到“服务太差”、“等了一个小时”,都是负面词汇,所以判断为负面。"
}
这个例子中,我刻意让 output 包含了推理过程。这就是 CoT 在微调数据中的应用。
数据质量 > 数据数量。我见过有人用 10 万条自动生成的数据微调,效果不如 5000 条人工精标的数据。记住,垃圾进,垃圾出。
四、实战技巧:如何让数据更“像人”
构造指令微调数据时,有几个坑我踩过,分享给你:
- 指令要多样化:不要只用一种句式。比如“翻译成英文”、“请翻译”、“把下面的话变成英语”,都要有。
- 回答要自然:不要像机器人一样死板。适当加入语气词、口语化表达。
- 覆盖边界情况:比如输入为空、输入过长、输入包含特殊字符等。模型没见过这些,上线就会崩。
- 平衡正负样本:分类任务中,正负样本比例不要差太多。我曾经因为负样本太少,模型学成了“永远输出正面”。
我的小技巧:用大模型(比如 GPT-4)生成一批种子数据,然后人工修改。这样效率高,质量也有保障。但一定要人工过一遍,别全信模型。
五、总结一下
今天聊了三件事:
- Few-shot:给模型看例子,让它知道你要什么。
- Chain-of-Thought:让模型把推理过程写出来,提升复杂任务准确率。
- 指令微调数据构造:把 Prompt 技巧固化到训练数据中,让模型真正学会“听话”。
说实话,Prompt 工程和微调数据构造,本质上是同一件事——都是在教模型如何理解人类意图。
只不过一个是在推理时教,一个是在训练时教。
下一章,咱们聊聊如何评估微调效果。到时候我会分享一个我踩过的坑,保证让你少走弯路。
先消化这些,有问题随时交流。