第 22 章 · 通往大模型
用好大模型:提示、RAG 与 Agent
绝大多数人既不训练也不部署大模型,而是直接使用别人训练好的那个。 这一章把“用”这件事讲透:怎么写提示词让它更听话、怎么用 RAG 给它补上最新和私有的知识、 怎么让它调用工具去算数和查资料、以及 Agent、MCP 这些热词到底把大模型 变成了什么。全程你会看到:这些花样,全都建立在前面那些章的原理之上。
上一站(第 21 章)讲了工程与基建;本站讲你不训练、也不部署,只使用它时的招数——提示 / RAG / 工具 / Agent。这也是这条主线的终点。
读完这一章,你会明白
- 提示词(prompt)、上下文学习、few-shot、思维链(CoT)分别是什么;
- RAG 怎么用“外挂知识库”治好幻觉和知识截止;
- 提示、RAG、微调三招各自改什么、该在什么时候用;
- function calling / 工具调用怎么让模型学会“借外力”;
- Agent 是什么,MCP 和 A2A 又想解决什么问题;
- 用大模型时该守的安全与常识底线;
- 为什么同一模型在不同产品/参数下会“有时很聪明、有时像降智”。
1. 提示词:你和模型之间唯一的旋钮
模型参数固定了,你唯一能调的就是输入——也就是提示词(prompt)。 回忆第 17、19 章:模型会把你给的整段文字当上下文,一路影响它对“下一个词”的预测。所以 提示写得好,等于把模型往你要的方向“推”了一把。这件事有个正经名字叫 上下文学习(in-context learning):不改一个参数,只靠上下文就让模型临场“学会”做某件事。
- zero-shot 零样本直接下命令:“把下面这段翻译成英文”。
- few-shot 少样本先给几个示范再出题:“中文→英文:猫→cat;狗→dog;鸟→?”。给了例子,它照葫芦画瓢的成功率大增(这正是第 20 章说的“涌现”能力之一)。
- 思维链 CoT加一句“一步一步想”,让它把推理过程写出来。别小看这句话——复杂题目的正确率往往因此明显提高,因为它把“一步到位猜答案”变成了“顺着写、边写边推”。
第 19 章的 temperature / top-k / top-p 通常也开放给你调。要稳定、确定的答案 (如改代码、抽取信息),把温度调低;要发散、有创意的内容(如头脑风暴),把温度调高。 道理和第 19 章完全一样,只是换了个使用场景。
· 给角色和目标:“你是一位资深 C++ 工程师,帮我 review 下面这段代码的内存安全问题。”
· 说清输出格式:要表格就说“用表格”,要 JSON 就把字段列出来,别让它猜。
· 一次交代清上下文与约束:相关背景、必须遵守的限制,别挤牙膏。
· 复杂任务拆步骤:先让它“列个计划”,再逐步执行,比一句“全给我做完”靠谱得多。
· 给范例(few-shot):想要什么风格/格式,甩一两个例子最省事。
2. RAG:给模型接一块“外挂知识库”
第 20 章说过大模型的两个硬伤:知识截止(不知道最新的事)和幻觉(没依据也敢编)。 最实用的解药叫 RAG(检索增强生成)——不重新训练,而是先查资料,再让它带着资料回答。
RAG:把“开卷考试”的资料先塞进上下文,模型据此回答,而不是凭记忆硬编。
它的核心机制,处处都是你学过的东西:
- 把你的文档切成小片段(chunk),每段几百字;
- 用第 20 章的词嵌入把每段变成向量,存进“向量库”;
- 提问时,把问题也变成向量,用向量相似度(点积/余弦)找出最相关的几段;
- 把这几段和问题一起塞进提示,让模型“看着材料”回答。
把它想成从“闭卷”变“开卷”:闭卷时模型只能凭记忆(容易编),开卷时正确资料就摆在上下文里, 它只需照着答。这也解释了为什么片段不能太大——太大既降低检索精度,又可能撑爆上下文窗口(第 20 章)。
3. 提示、RAG 还是微调:三招该用哪个?
讲完提示和 RAG,一个很自然的问题冒出来了:要让模型在我的场景里表现更好,到底是改提示、接 RAG, 还是干脆微调(fine-tune,拿你的数据接着训一小段,属于第 20 章后训练的范畴)? 它们不是三选一的对立关系,而是成本从低到高、按需叠加的三层台阶。
| 手段 | 改的是什么 | 最适合解决 | 成本 |
|---|---|---|---|
| 提示工程 | 只改输入(上下文) | 让它听懂任务、按格式输出;通用能力它本来就有 | 最低,改一句话即可 |
| RAG | 输入 + 一个外挂知识库 | 补上最新的、私有的知识;治幻觉、防知识截止 | 中,要搭检索/向量库 |
| 微调 | 模型参数本身 | 固化一种稳定的风格/口吻/领域习惯,或压缩提示长度 | 最高,要数据、算力和训练 |
先用提示,不行再上 RAG,最后才考虑微调。 大多数问题(“它不按我要的格式来”“它没理解任务”)其实改提示就解决了,根本不用动模型。 如果问题是“它不知道某些事实”(公司内部文档、今天的新闻),那是知识缺口,RAG 最对症。 只有当问题是“它知道、但就是不肯照我要的风格/领域习惯稳定地做”,而且提示怎么调都不够,才值得为微调付出数据和算力的代价。
很多人一上来就想“用我的文档微调一个模型”。但微调更擅长教风格和形式, 往里灌事实既低效又容易带来遗忘和新的幻觉——而且知识一更新就得重训。 要“记住并用上一批资料”,RAG 通常才是更省、更准、更好维护的选择。
4. 工具调用:让模型学会“借外力”
大模型不擅长精确计算,也查不到实时数据(第 20 章)。那就别让它硬算——让它调用外部工具。 这套机制最早叫 function calling(函数调用):
- 你把可用的工具清单(计算器、搜索、日历……)连同问题一起给模型;
- 模型判断该用哪个工具、要传什么参数,把这个“意图”返回;
- 由程序真正执行工具、拿到结果,再喂回模型;
- 模型结合工具结果,给出最终回答。
于是“3897 × 421 等于几”“今天北京天气”这类它本来做不好的事,就交给计算器和天气 API,它负责理解、调度、总结。 模型从“一张嘴”升级成了“会用工具的手”。
5. Agent:把大模型变成会做事的“智能体”
当一个系统能感知环境 → 思考决策 → 执行动作,还能看着结果继续下一步,它就成了一个 Agent(智能体)。如果负责“思考决策”的大脑是一个大模型,那它就是我们现在常说的 AI Agent。
Agent = 大模型当“大脑”,加上感知与执行的“手脚”,并能循环多步,直到把任务办成。
你正在用的这个编程助手,本质就是一个 Agent:它读你的需求(感知)、决定改哪个文件、跑什么命令(思考), 真正去编辑和执行(执行),再根据报错继续修(循环)。RAG 和工具调用,都是喂给这个“大脑”的能力。
6. MCP 与 A2A:让 Agent 能“接万物”“互相通话”
Agent 要调用各种外部工具和数据源,如果每接一个都要定制一套对接,就太乱了。于是出现了协议来统一接口:
- MCP 模型上下文协议由 Anthropic 提出,给“Agent ↔ 外部工具/数据源”定义了一套标准插头。 有了它,任何遵守协议的工具都能被任何 Agent 即插即用,不用一个个定制(可以类比 USB 之于外设)。
- A2A(Agent to Agent)由 Google 提出,解决Agent 与 Agent 之间怎么通信、协作。 未来多个专职 Agent(订机票的、查资料的、写代码的)要组队干活,就需要这种“Agent 之间的普通话”。
这两个协议都在走向行业标准。你不需要记细节,只要建立一个认知:大模型正从“一个聊天框”,长成一个能连接工具、彼此协作的生态。
7. 用它,但别全信它
· 关键事实要核对:它会一本正经地编(第 20 章的幻觉),涉及数字、引用、法律医疗等,务必自己复核。
· 小心提示注入:让它读的网页/文档里可能藏着“骗它执行的指令”,给 Agent 授予真实权限(删文件、付款)时要谨慎。
· 注意隐私:别把敏感信息随手贴进第三方模型。
· 它没有立场也没有真正的“懂”:它在做极其复杂的模式延续,语气再笃定也不等于正确。
把这些记在心里,你就能既享受它的强大,又不被它的“自信”带偏。理解原理的人,用起工具来总是更稳、更有分寸。
8. 为什么有时觉得它“变笨了”?
作为使用者,你碰到的“降智”往往不是模型一夜之间重训坏了,而是使用链路里的某个环节在起作用:
| 环节 | 发生了什么 | 去哪章细读 |
|---|---|---|
| 采样参数 | 温度太高答案飘;太低又死板像“不会想” | 第 19 章 |
| 上下文被截断 | 长文档只喂进去一半,它只能瞎猜前半段 | 第 20 章长上下文 |
| 量化/小模型 | 本地 4-bit 或蒸馏版,能力上限更低 | 第 21 章 |
| MoE 激活过少 | 为省算力把 top-k、专家规模压太狠,每步只走很窄的子网络 | 第 21 章 MoE §④ |
| 对齐与安全策略 | 拒答变多、口吻变保守 | 第 20 章对齐税 |
| 系统提示 / 护栏 | 产品加了 hidden system prompt、输出过滤,限制风格与话题 | 本节下文 |
| RAG 检索失败 | 知识库没召回到正确段落,它只能硬编 | 本章 §2 |
你看到的往往只是用户消息,但服务端通常还塞了一段你看不见的系统提示:
规定角色、语气、哪些话不能说、输出格式等。再叠加内容安全过滤(敏感词、分类器拦截),
同一底座在不同 App 里可以判若两“智”——这不是玄学,是产品策略叠在模型外面。
调 API 时若你能设 system 字段,就是在改这一层。
小结
- 提示词是你唯一的旋钮:zero-shot 直接问、few-shot 给例子、CoT 让它一步步想。
- RAG = 先检索再回答,用词嵌入+相似度找资料,把“闭卷”变“开卷”,治幻觉与知识截止。
- 提示 / RAG / 微调是成本递增的三层:先改提示,缺知识上 RAG,只有要固化风格才微调——别拿微调补知识。
- function calling 让模型调用计算器/搜索/API,补上它不会算、查不到的短板。
- Agent = 大模型当大脑 + 感知与执行 + 多步循环;MCP 统一“接工具”、A2A 规范“Agent 互联”。
- 始终核对关键事实、防提示注入、护隐私——理解原理才能用得稳。
- “降智”多来自量化、截断、对齐、系统提示、MoE 激活过少等链路上的权衡,先排查环节再怀疑底座。
动手与思考
问题 1:few-shot 和 CoT 都不改模型参数,为什么还能提升表现?
因为它们改变的是上下文。模型预测下一个词时会被整段输入影响(上下文学习):给了示范,它照着模仿;让它“一步步想”,它就把推理写出来、逐步推进,而不是一步硬猜。参数没变,但输入把它推向了更好的轨道。
问题 2:RAG 为什么能缓解幻觉和知识截止?它用到了哪些前面的知识?
它先从知识库检索出相关资料,连同问题一起给模型,让它“看着材料答”而非凭记忆编,同时资料可以是最新的。用到的正是第 20 章的词嵌入,和第 8/11 章的向量点积/相似度检索。
问题 3:为什么要让大模型“调用工具”,而不是让它自己算、自己查?
因为它本质是概率文本预测器,不擅长精确计算,也没有实时数据。把算术交给计算器、把实时信息交给搜索/API,让模型负责理解意图、调度工具、总结结果,整体又准又可靠。
从一个神经元到大模型的原理主干,到这里就全通了(强化学习那套学习范式,我们已在第 12 章讲过)。 接下来第六部分 · 代码实战对着三份 C++ 程序把全书对一遍号: 第 23 章 MNIST, 第 24 章 字符级语言模型, 第 25 章 井字棋 Q-learning。
下一章进入代码实战:第 23 章 先把 MNIST 程序逐行对上号。