提示与上下文学习
约 14 分钟
大模型带来一个前所未有的现象:不改一个参数,只靠输入的文字,就能改变模型的行为。
上下文学习(In-Context Learning)
在提示里给几个例子,模型就能照着做:
中文:你好 → 英文:Hello
中文:谢谢 → 英文:Thank you
中文:再见 → 英文:
模型会输出 Goodbye。
它的权重完全没有更新——「学习」发生在这一次前向传播的内部。
| 叫法 | 给几个例子 |
|---|---|
| 零样本(zero-shot) | 0 个,只给指令 |
| 单样本(one-shot) | 1 个 |
| 少样本(few-shot) | 通常 2–8 个 |
这为什么重要:它把「定制一个模型」的成本,从「准备数据 + 训练 + 部署」降到了「写一段文字」。
思维链:让模型把步骤写出来
对需要多步推理的问题,要求模型先写推理过程再给答案,准确率会显著提升。
❌ 问:小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?
答:6
✅ 问:……请一步步思考。
答:小明开始有 5 个。给了小红 2 个,剩下 5 - 2 = 3 个。
又买了 3 个,所以是 3 + 3 = 6 个。答案是 6。
为什么有效:模型每生成一个 token 的计算量是固定的。直接输出答案,等于要求它在一步之内完成所有推理;写出中间步骤,相当于给了它更多计算步骤,而且每一步都能利用前面已经写出的中间结果。
一个直观的说法:思维链把「心算」变成了「草稿纸」。
几个实用的提示技巧
| 技巧 | 做法 |
|---|---|
| 给角色 | 「你是一位资深审稿人……」 |
| 给格式 | 「用 JSON 输出,字段为……」 |
| 给示例 | 一个示范胜过十句描述 |
| 拆步骤 | 把复杂任务拆成几次调用 |
| 要求自检 | 「检查上面的答案是否有逻辑漏洞」 |
| 限定不做什么 | 「只指出问题,先不要给修改版」 |
注意最后一条:在学习场景里,限制模型「不要直接给答案」比让它给答案更有价值——这一点在 AI 素养课里详细讲过。
RAG:给模型一个可查的资料库
提示工程解决不了两个根本问题:模型不知道最新信息,以及会编造事实。
检索增强生成(RAG) 的思路:
① 把资料库切成小块,用嵌入模型转成向量存起来
② 用户提问时,把问题也转成向量,检索出最相关的几块
③ 把这几块内容塞进提示,让模型基于它们回答
三个关键好处:
- 知识可更新——改资料库即可,不用重新训练
- 可溯源——能指出答案来自哪一段,大幅降低幻觉
- 便宜——比微调成本低几个数量级
这也是 BERT 类模型今天的主要战场——第 4 节提到的文本嵌入,正是 RAG 检索环节的基础。
上下文窗口:一个真实的约束
提示不是越长越好:
| 约束 | 说明 |
|---|---|
| 长度上限 | 超出窗口的内容直接被截断 |
| 成本 | 费用和延迟大致随输入长度增长 |
| 注意力稀释 | 上下文过长时,中间部分的信息容易被忽略 |
第三条最反直觉:研究观察到模型对提示的开头和结尾更敏感,中间的内容容易被「读漏」。
实践建议:把最重要的指令放在开头或结尾,不要埋在中间。
练习:用思维链的方式,写一个提示让模型解一道两步应用题,并要求它最后自检一遍。
小纸条
思维链为什么能提升推理准确率?RAG 相比微调有哪三个好处?
登录 后可看答案