第 22 章 · 通往大模型

用好大模型:提示、RAG 与 Agent

绝大多数人既不训练也不部署大模型,而是直接使用别人训练好的那个。 这一章把“用”这件事讲透:怎么写提示词让它更听话、怎么用 RAG 给它补上最新和私有的知识、 怎么让它调用工具去算数和查资料、以及 AgentMCP 这些热词到底把大模型 变成了什么。全程你会看到:这些花样,全都建立在前面那些章的原理之上。

路线图 · 你在这一段的哪一站

上一站(第 21 章)讲了工程与基建;本站讲你不训练、也不部署,只使用它时的招数——提示 / RAG / 工具 / Agent。这也是这条主线的终点

读完这一章,你会明白

  • 提示词(prompt)、上下文学习、few-shot、思维链(CoT)分别是什么;
  • RAG 怎么用“外挂知识库”治好幻觉和知识截止;
  • 提示、RAG、微调三招各自改什么、该在什么时候用;
  • function calling / 工具调用怎么让模型学会“借外力”;
  • Agent 是什么,MCP 和 A2A 又想解决什么问题;
  • 用大模型时该守的安全与常识底线;
  • 为什么同一模型在不同产品/参数下会“有时很聪明、有时像降智”。

1. 提示词:你和模型之间唯一的旋钮

模型参数固定了,你唯一能调的就是输入——也就是提示词(prompt)。 回忆第 17、19 章:模型会把你给的整段文字当上下文,一路影响它对“下一个词”的预测。所以 提示写得好,等于把模型往你要的方向“推”了一把。这件事有个正经名字叫 上下文学习(in-context learning):不改一个参数,只靠上下文就让模型临场“学会”做某件事。

采样参数也在你手里

第 19 章temperature / top-k / top-p 通常也开放给你调。要稳定、确定的答案 (如改代码、抽取信息),把温度调低;要发散、有创意的内容(如头脑风暴),把温度调高。 道理和第 19 章完全一样,只是换了个使用场景。

写好提示词的几条实用技巧

· 给角色和目标:“你是一位资深 C++ 工程师,帮我 review 下面这段代码的内存安全问题。”
· 说清输出格式:要表格就说“用表格”,要 JSON 就把字段列出来,别让它猜。
· 一次交代清上下文与约束:相关背景、必须遵守的限制,别挤牙膏。
· 复杂任务拆步骤:先让它“列个计划”,再逐步执行,比一句“全给我做完”靠谱得多。
· 给范例(few-shot):想要什么风格/格式,甩一两个例子最省事。

2. RAG:给模型接一块“外挂知识库”

第 20 章说过大模型的两个硬伤:知识截止(不知道最新的事)和幻觉(没依据也敢编)。 最实用的解药叫 RAG(检索增强生成)——不重新训练,而是先查资料,再让它带着资料回答

你的问题"公司请假流程?"
检索在知识库里找最相关的片段
拼接问题 + 找到的资料
大模型带着资料作答

RAG:把“开卷考试”的资料先塞进上下文,模型据此回答,而不是凭记忆硬编。

它的核心机制,处处都是你学过的东西:

  1. 把你的文档切成小片段(chunk),每段几百字;
  2. 第 20 章词嵌入把每段变成向量,存进“向量库”;
  3. 提问时,把问题也变成向量,用向量相似度(点积/余弦)找出最相关的几段;
  4. 把这几段和问题一起塞进提示,让模型“看着材料”回答。
为什么 RAG 能治幻觉

把它想成从“闭卷”变“开卷”:闭卷时模型只能凭记忆(容易编),开卷时正确资料就摆在上下文里, 它只需照着答。这也解释了为什么片段不能太大——太大既降低检索精度,又可能撑爆上下文窗口(第 20 章)。

3. 提示、RAG 还是微调:三招该用哪个?

讲完提示和 RAG,一个很自然的问题冒出来了:要让模型在我的场景里表现更好,到底是改提示接 RAG, 还是干脆微调(fine-tune,拿你的数据接着训一小段,属于第 20 章后训练的范畴)? 它们不是三选一的对立关系,而是成本从低到高、按需叠加的三层台阶。

手段改的是什么最适合解决成本
提示工程 只改输入(上下文) 让它听懂任务、按格式输出;通用能力它本来就有 最低,改一句话即可
RAG 输入 + 一个外挂知识库 补上最新的、私有的知识;治幻觉、防知识截止 中,要搭检索/向量库
微调 模型参数本身 固化一种稳定的风格/口吻/领域习惯,或压缩提示长度 最高,要数据、算力和训练
一个实用的排查顺序

先用提示,不行再上 RAG,最后才考虑微调。 大多数问题(“它不按我要的格式来”“它没理解任务”)其实改提示就解决了,根本不用动模型。 如果问题是“它不知道某些事实”(公司内部文档、今天的新闻),那是知识缺口,RAG 最对症。 只有当问题是“它知道、但就是不肯照我要的风格/领域习惯稳定地做”,而且提示怎么调都不够,才值得为微调付出数据和算力的代价。

常见误区:拿微调去补知识

很多人一上来就想“用我的文档微调一个模型”。但微调更擅长教风格和形式, 往里灌事实既低效又容易带来遗忘和新的幻觉——而且知识一更新就得重训。 要“记住并用上一批资料”,RAG 通常才是更省、更准、更好维护的选择

4. 工具调用:让模型学会“借外力”

大模型不擅长精确计算,也查不到实时数据(第 20 章)。那就别让它硬算——让它调用外部工具。 这套机制最早叫 function calling(函数调用):

  1. 你把可用的工具清单(计算器、搜索、日历……)连同问题一起给模型;
  2. 模型判断该用哪个工具、要传什么参数,把这个“意图”返回;
  3. 由程序真正执行工具、拿到结果,再喂回模型;
  4. 模型结合工具结果,给出最终回答。

于是“3897 × 421 等于几”“今天北京天气”这类它本来做不好的事,就交给计算器和天气 API,它负责理解、调度、总结。 模型从“一张嘴”升级成了“会用工具的手”。

5. Agent:把大模型变成会做事的“智能体”

当一个系统能感知环境 → 思考决策 → 执行动作,还能看着结果继续下一步,它就成了一个 Agent(智能体)。如果负责“思考决策”的大脑是一个大模型,那它就是我们现在常说的 AI Agent。

感知读你的话/看图/收数据
思考(大模型)该做什么?用哪个工具?
执行调用工具/写文件/发请求
看结果不满意就再来一轮

Agent = 大模型当“大脑”,加上感知与执行的“手脚”,并能循环多步,直到把任务办成。

你正在用的这个编程助手,本质就是一个 Agent:它读你的需求(感知)、决定改哪个文件、跑什么命令(思考), 真正去编辑和执行(执行),再根据报错继续修(循环)。RAG 和工具调用,都是喂给这个“大脑”的能力。

6. MCP 与 A2A:让 Agent 能“接万物”“互相通话”

Agent 要调用各种外部工具和数据源,如果每接一个都要定制一套对接,就太乱了。于是出现了协议来统一接口:

这两个协议都在走向行业标准。你不需要记细节,只要建立一个认知:大模型正从“一个聊天框”,长成一个能连接工具、彼此协作的生态。

7. 用它,但别全信它

几条实用底线

· 关键事实要核对:它会一本正经地编(第 20 章的幻觉),涉及数字、引用、法律医疗等,务必自己复核。
· 小心提示注入:让它读的网页/文档里可能藏着“骗它执行的指令”,给 Agent 授予真实权限(删文件、付款)时要谨慎。
· 注意隐私:别把敏感信息随手贴进第三方模型。
· 它没有立场也没有真正的“懂”:它在做极其复杂的模式延续,语气再笃定也不等于正确。

把这些记在心里,你就能既享受它的强大,又不被它的“自信”带偏。理解原理的人,用起工具来总是更稳、更有分寸。

8. 为什么有时觉得它“变笨了”?

作为使用者,你碰到的“降智”往往不是模型一夜之间重训坏了,而是使用链路里的某个环节在起作用:

环节发生了什么去哪章细读
采样参数温度太高答案飘;太低又死板像“不会想”第 19 章
上下文被截断长文档只喂进去一半,它只能瞎猜前半段第 20 章长上下文
量化/小模型本地 4-bit 或蒸馏版,能力上限更低第 21 章
MoE 激活过少为省算力把 top-k、专家规模压太狠,每步只走很窄的子网络第 21 章 MoE §④
对齐与安全策略拒答变多、口吻变保守第 20 章对齐税
系统提示 / 护栏产品加了 hidden system prompt、输出过滤,限制风格与话题本节下文
RAG 检索失败知识库没召回到正确段落,它只能硬编本章 §2
系统提示(system prompt)与护栏

你看到的往往只是用户消息,但服务端通常还塞了一段你看不见的系统提示: 规定角色、语气、哪些话不能说、输出格式等。再叠加内容安全过滤(敏感词、分类器拦截), 同一底座在不同 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 程序逐行对上号。