5.7 少样本学习与提示工程

1.不更新参数,也能学新任务

5.5 节讲的对齐,得靠微调去改模型的参数。可大模型还有一项让人啧啧称奇的本事,叫上下文学习(in-context learning),意思是不用动模型一个参数,光靠在提示里给它几个例子,它就能照葫芦画瓢地完成一件新任务。这种只用很少几个例子、甚至一个例子都不给就让模型干活的方式,分别叫少样本学习和零样本学习。

这种能力是怎么冒出来的,研究者们至今还在争论。一种直观的解释是,大模型在海量文本上预训练时,见过太多前面给例子、后面照着做的模式,于是在推理时,它把新提示里的几个例子当成上下文,自动推断出你想干什么,再接着往下生成。说起来,这有点像小张刚进公司,没人专门培训,他翻几个老同事写好的模板照着改,慢慢也就上手了,靠的就是看例子的本事。

要注意,少样本学习和微调是两码事。微调会真的去改模型权重,一改就改定了,下次还在。少样本学习只是把例子塞进提示,模型这会儿照着做,参数一个没动,换个对话又从零开始。所以少样本的好处是灵活、零成本试新任务,缺点是每次都要把例子塞进去,占地方,而且效果一般不如好好微调过的模型。

2.提示工程:怎么把需求说清楚

既然模型这么依赖提示,怎么写提示就成了一门学问,这门学问叫提示工程。同样一个模型,提示写得好不好,结果能差一大截。几条经验挺管用。一是把任务和输出格式说清楚,比如要求它分点回答、或者按某种结构输出,模型就会照着来。二是给几个好例子,例子质量直接影响效果,例子选歪了,模型也跟着歪,挑例子要挑有代表性、能覆盖各种情况的。三是把复杂任务拆成步骤,一步一步引导,比让它一口气答完更稳。举个小张写情感分类的例子,零样本的提示是判断这句话是好评还是差评,结果有时还行、有时跑偏,改成少样本,在提示里先摆上三组例子,好评例句对应好评、差评例句对应差评、再一个中性例句对应中性,然后才接上要判断的新句子,模型的稳定性和准确率立刻就上去了,可见几个好例子往往比干巴巴一句指令管用得多。

还有几招也常用。一是角色设定,先告诉模型你是个资深的产品经理或者你是个严谨的校对编辑,模型回答的口吻和专业度就会往那个方向靠。二是给明确的约束,比如不超过200字、只用给定资料里的信息、不要编造,约束越硬,输出越可控。三是必要时分多轮对话,先让它分析、再让它总结,比挤在一条提示里效果好。

提示工程的核心心态,是把模型当成一个聪明但不了解你具体语境的助手,你给的背景越足、要求越明确,它越能给你想要的东西。模棱两可的提示,往往只能换来模棱两可的回答。小明有次让模型总结一篇文章,提示只写了一句总结一下,结果模型给了个特别笼统的几句话,后来他把字数、重点、读者对象都写明白,输出立刻靠谱多了。

3.思维链:让模型先打草稿再答题

提示工程里有一招特别出名,叫思维链(Chain of Thought,简称CoT)。它的做法很简单,就是在提示里加一句请一步步思考,或者给几个带推理过程的例子,引导模型把推理过程写出来,再给最终答案。这又有两种用法,一种是给带推理的例子,另一种是啥例子不给、只加一句请一步步思考,两种都管用。

这对数学题、逻辑推理这类任务提升尤其明显。小张做过对比,直接问模型一道应用题要答案,它常常算错,可一旦让它先列算式、一步步推,正确率就上去了。比方说一道分步计算的应用题,让模型直接给答案,它可能凭感觉猜个数,让它先把已知条件列出来、再列算式、最后算结果,每一步都摆出来,它就很难在中途偷偷跳步出错了。直觉上理解,思维链相当于逼着模型在生成最终答案之前,先把中间步骤走一遍,给它留出了打草稿的空间,错误也就更容易暴露和修正。

后来大家还琢磨出不少变体。比如自洽性(self-consistency),让模型对同一道题多推理几次,看哪个答案出现得最多就采信哪个,比单次推理更稳。还有把一个难题拆成几个小问题分别问、再综合起来的做法,思路都是给模型更充分的推理余地。这些技巧在面试里也常被问到,知道它们的来龙去脉很加分。

4.提示也有脆弱性和安全的一面

提示虽好,但也有两个要留意的方面。一个是脆弱性:同样的事换个说法,结果可能差不少,提示稍微改动一下,模型有时就领会不到点子上,这让提示用起来有点像玄学,得多试多调,不能指望一次就完美。也正因为这样,工业级应用里往往要做大量的提示测试和评估,而不是凭感觉写一句就上线。

另一个是安全性。模型会把提示里的内容都当成输入来理解,而现实应用里,提示里常常掺着来源不太可靠的外部文本,比如从网页、邮件、用户评论里直接拼进来的内容。这些外部内容有可能干扰模型本来该做的事,让它偏离原本的任务要求。这种风险通常叫提示注入。

防范的办法,主要是把可信的指令和不可信的外部内容分开处理,给外部内容划清边界,不让它越过指令去发号施令,再配合内容过滤和输出审核。小张做的客服机器人项目就踩过这个坑,一开始把用户输入和系统提示混在一起,结果有人留言几句奇怪的话,机器人就跟着跑偏了,后来老老实实做了输入隔离和内容过滤,才算稳住。可见把提示用好,不光是写得好,还得防得稳。

5.收个尾

少样本和提示工程,让大模型不用重新训练就能干很多新活,是它好用的重要一环。再加上5.6 节讲的LoRA那种低成本微调、5.8 节要讲的RAG检索增强,大模型就有了三件趁手的兵器,提示工程、轻量微调、检索增强,很多应用需求都能靠它们拼出来。把这些套路摸熟,再去看市面上的各种大模型产品,就能看明白它们各自在哪个环节下了功夫,心里也就有底了,遇到新需求也大致知道该挑哪件兵器来应对,不至于两眼一抹黑。

练习

Q1. 少样本学习(上下文学习)和微调有什么本质区别?

微调会真的去改模型权重,一改就改定了,下次还在;少样本学习只是把几个例子塞进提示,模型这会儿照着做,参数一个没动,换个对话又从零开始。所以少样本的好处是灵活、零成本试新任务,缺点是每次都要把例子塞进去占地方,而且效果一般不如好好微调过的模型。简单说,一个动参数、一个不动参数,这是根本区别。

Q2. 思维链(CoT)对哪类任务提升特别明显?它的核心机制是什么?

对数学题、逻辑推理这类任务提升尤其明显。核心机制是在提示里加一句"请一步步思考"或者给几个带推理过程的例子,引导模型把推理过程写出来、再给最终答案。这相当于逼着模型在生成最终答案前先把中间步骤走一遍,给它留出"打草稿"的空间,错误更容易暴露和修正,而不是凭感觉猜个数。常见变体还有自洽性(同一题多推理几次取出现最多的答案)。

Q3. 易错点:提示工程写好一条提示就能一劳永逸用下去吗?

不能。提示有个明显的脆弱性:同样的事换个说法,结果可能差不少,稍微改动一下模型可能就领会不到点子上,用起来有点像玄学。所以工业级应用里往往要做大量的提示测试和评估,而不是凭感觉写一句就上线。此外还有安全性问题——提示里常掺着网页、邮件等不可靠外部内容,这些可能干扰模型本来该做的事(提示注入),要把可信指令和不可信外部内容分开处理、配合内容过滤。所以用好提示不光是写得好,还得防得稳。

相关标签
深度学习大语言模型少样本提示工程