给模型举例子:few-shot 的几个反直觉
示例比一堆形容词管用,但选错示例比不给更糟——模型会把你没注意到的特征一起学走。
先说结论
想让模型稳定输出某种东西,给两三个好例子,胜过写一段"请务必……"的叮嘱。 但 few-shot 有几个反直觉的地方,踩中了反而更糟。
反直觉一:例子不是越多越好
塞十个雷同的例子,不如两三个覆盖了不同情况的。多而重复的示例只是浪费上下文,还会让模型过度锚定在那一种模式上。
挑例子的标准不是"多",是"撑开边界":最典型的一个、最容易出错的一个、一个该返回空或拒答的。
反直觉二:模型会模仿你没想让它学的东西
这是最隐蔽的坑。模型不只学示例的"内容",它把示例的所有特征一起学走——包括你自己都没意识到的:
- 示例答案恰好都很短 → 它学会"要短",遇到该展开的也敷衍
- 示例输入恰好都是某一类 → 换一类输入它就泛化得很差
- 示例里有个无关的口头禅 → 它给你每条都带上
输出跑偏时,先别急着改指令,回去看你的例子里藏了什么共性。
反直觉三:反例比叮嘱有用
"注意处理特殊情况"是句废话,模型不知道特殊在哪。
给它一个具体的反例——“输入是这样时,正确做法是返回空”——比十句提醒都顶用。模型擅长模仿,不擅长揣摩你嘴里的"注意"。
反直觉四:格式用例子教,别用话描述
想要固定格式,与其描述"用两个换行分隔、标题加粗",不如直接给一个排好版的例子。让它看,别让它听。(结构化输出同理:schema 加示例,永远比文字说明稳。)
收个尾
few-shot 的本质是"用样本定义你要什么",而样本会忠实地把好的坏的一起传下去。所以真正该花时间的地方不是写提示,是挑例子——挑的时候多问自己一句:这几个例子凑在一起,到底在教模型什么?
这篇对你有用吗?