本讲目录

第 09 讲 · 工具调用、智能体、MCP 与 Skills

诞生场景:一个只会输出文字的 LLM,再聪明也只是"缸中之脑":不知道今天的日期,算不准 17 位数乘法,读不了你的文件,改不了你的代码。让它能做事的每一步演化——工具调用、智能体、MCP、GPTs、Skills——都诞生于一个具体的痛点。本讲按"痛点 → 方案"的顺序把这条链讲完,讲完你会发现它们不是零散的新名词,而是同一个问题的层层递进:怎么让语言模型接入世界,并且让这种接入可复用、可分享、可规模化。

智能体循环:LLM ↔ 工具/环境(观察→思考→行动→观察),MCP 连接外部工具。

图 9.1智能体循环:LLM ↔ 工具/环境(观察→思考→行动→观察),MCP 连接外部工具。

1. 工具调用:给缸中之脑装上手

1.1 之前的方式有多不优雅

2022–2023 年初,人们已经在用提示词硬凑工具能力:

你可以使用以下工具。需要搜索时,请严格输出:SEARCH["查询词"]
需要计算时,请严格输出:CALC["表达式"]

然后用正则表达式在模型输出里扒这些标记,扒到就执行、把结果贴回对话。能跑,但脆弱得可笑:模型有时写成 Search("..."),有时礼貌地加一句"好的,我来搜索:",有时把参数里的引号嵌套错——每个开发者都在重复发明解析器,每个解析器都在随机崩溃。需求真实存在,接口野蛮生长——这是标准化前夜的典型景象。

1.2 Function Calling:把意图变成结构化数据

2023 年 6 月,OpenAI 把工具调用变成 API 的一等公民(Anthropic 等随后跟进,方案大同小异)。开发者用 JSON Schema 声明工具:

{
  "name": "get_weather",
  "description": "查询指定城市的当前天气",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {"type": "string", "description": "城市名,如'北京'"}
    },
    "required": ["city"]
  }
}

完整的消息流是一个四步握手(务必看清谁在做什么):

  1. 你 → 模型:用户问题 + 工具清单;
  2. 模型 → 你:不再输出自然语言,而是一个结构化的调用意图 {"name": "get_weather", "arguments": {"city": "北京"}}(模型经过专门训练,会输出合法 JSON 并知道何时该用工具);
  3. 你执行:你的代码真正去调天气 API——模型自始至终没有执行任何东西,它只是"填表";执行权、鉴权、安全边界全在你手里;
  4. 你 → 模型:把执行结果作为新消息塞回上下文,模型据此生成最终回答(或发起下一次调用)。

这个设计的深意:LLM 的输出从"给人读的文本"扩展成"给程序读的指令",于是 LLM 可以被嵌进任何软件系统当"决策芯片"。而"模型只填表、宿主来执行"的权责分离,是后面一切安全讨论的基石。

1.3 工具 + 循环 = 智能体

把工具调用塞进第 08 讲的循环工程里,化学反应发生了:模型可以根据上一个工具的结果决定下一个工具调用——搜索发现信息不足就换关键词再搜,代码跑出报错就读报错再改。这个"自主决定行动序列以完成目标"的系统,就是智能体(agent)。一个极简但严格的定义:

\[ \textbf{Agent} = \text{LLM (决策)} + \text{工具 (行动)} + \text{循环 (过程)} + \text{上下文管理 (记忆)} \]

2025 年前后智能体从 demo 走向生产,最成熟的落地是编程智能体(Claude Code、Cursor 等):读代码库、改文件、跑测试、看报错、再改——正是"路径无法预知"的循环工程教科书场景。编程任务还有个天然优势:测试提供了客观的验证信号(第 08 讲"验证节点"的理想形态,也呼应第 07 讲 RLVR 为什么先在代码/数学上成功)。更通用的计算机使用(模型看截图、操作鼠标键盘)也已实用化——工具的尽头是"人能用的它都能用"。

2. MCP:工具调用的 USB-C

2.1 痛点:M × N 的胶水地狱

Function calling 统一了"模型怎么表达调用意图",但没有统一"工具怎么接入应用"。设想 2024 年的生态:M 个 AI 应用(Claude 桌面版、各家 IDE、各公司内部助手……),N 种资源(GitHub、数据库、Slack、本地文件……)。每对组合都要写一遍专属胶水代码——M × N 个适配器,谁开发谁重复造轮子,工具作者要给每个平台各写一份接入。

2.2 方案:一个协议,M + N

2024 年 11 月,Anthropic 开源 MCP(Model Context Protocol):一个标准协议,让"提供能力的一方"和"使用能力的一方"各自只实现一次:

M × N 坍缩成 M + N——与 USB-C 统一充电口、HTTP 统一网页访问是同一个套路:标准化接口是生态爆发的前提。技术底座刻意保守:JSON-RPC 2.0 消息格式(几十年的老技术),本地用标准输入输出通信、远程用 HTTP。协议定义三类原语,恰好对应上下文工程的三类原料(第 08 讲):

原语 是什么 谁发起
Tools 可执行的动作(查库、发消息) 模型决定调用
Resources 可读取的数据(文件、文档) 应用/用户选择注入
Prompts 预置的提示词模板 用户挑选使用

2025 年 MCP 被 OpenAI、Google 等竞争对手相继采纳,成为事实标准——协议的胜利不在技术精巧,而在生态时机:它出现在所有人都被 M × N 折磨、又没人愿意用竞争对手私有方案的那个窗口。

3. GPTs / Gems:把"我的用法"打包分享

镜头转向另一条支线,痛点来自普通用户而非开发者。

场景:你花一下午调出了一段极好用的提示词——比如"把论文段落改写成通顺学术英语,保留术语、给出修改对照表"。你自然想:下次还能这么干,最好一键调用;还能分享给同学。2023 年 11 月 OpenAI 推出 GPTs(Google 随后推出 Gems),本质就是给这个朴素需求一个产品形态——一个可保存、可分享的定制包:

\[ \text{GPT} = \text{系统提示词 (人设与规则)} + \text{知识文件 (随包附带的 RAG 资料)} + \text{动作 (可选的外部 API)} \]

它把第 08 讲的提示词工程 + 上下文工程的成果资产化了:调好的配置不再是聊天记录里的一段话,而是一个有名字、有图标、可迭代版本的"应用"。局限也清楚:本质仍是"预设了开场的对话",无法执行代码、无法按需加载不同材料、逻辑复杂了就塞不下——天花板正好是下一个概念的起点。

4. Skills:提示词 + 资源 + 脚本,按需加载

场景:2025 年,智能体(如 Claude Code)已经能干很复杂的活,但每次让它做"处理 Excel 报表"这类专业任务,你都得重新交代一遍套路:用什么库、注意什么坑、输出什么格式。GPTs 式的"一段系统提示词"装不下这些——套路里除了话术还有代码脚本参考资料,而且你不希望这几千行材料永远占着上下文(第 08 讲:上下文是稀缺资源)。

Agent Skills(Anthropic 2025)的方案:把一项技能打包成一个文件夹——

excel-report/
├── SKILL.md          # 核心:这项技能怎么干(提示词 + 流程说明)
│   └── 头部元数据: name + description(何时该用我)
├── reference.md      # 深水区材料:完整 API 细节、边角案例
└── scripts/
    └── build_chart.py   # 确定性步骤直接跑脚本,不靠模型现写

两个设计点是全部精髓:

1. 自动触发:智能体平时只把每个技能的一行描述装进上下文(几十 token);用户任务匹配到描述时才展开。

2. 渐进披露(延迟加载):展开也分层——先读 SKILL.md 主体(几百 token),真遇到深水区问题才去读 reference.md,确定性操作直接执行 scripts/ 里的脚本(代码比模型现想更可靠也更省 token——第 08 讲"确定性骨架"思想的又一次落地)。上下文占用从"常驻全量"变成"按需分层",一个智能体因此可以携带上百项技能而不撑爆窗口。

对比一眼看懂三代形态的递进:

提示词收藏 GPTs / Gems Skills
内容 一段话 提示词 + 知识文件 + API 提示词 + 资料 + 可执行脚本
加载 手动粘贴 创建时全量固定 自动触发 + 渐进披露
宿主 聊天框 聊天应用 智能体(能执行、能读文件)
类比 便签 应用商店的轻应用 给员工的岗位操作手册

概念谱系总表

上篇发展史的最后一站,把本讲的链条按"痛点 → 方案"收拢:

概念 诞生的痛点 方案一句话
Function Calling (2023) 正则扒工具指令,脆弱不优雅 调用意图成为结构化的一等公民
Agent (2023–2025) 预设流程覆盖不了动态任务 工具 + 循环,模型自主决定行动序列
MCP (2024) M×N 胶水地狱 统一协议,M+N,即插即用
GPTs / Gems (2023) 好提示词无法保存复用分享 提示词 + 知识打包成可分享应用
Skills (2025) 复杂技能装不进提示词、不能常驻上下文 文件夹化技能包 + 自动触发 + 延迟加载

规律浮出水面:每一层都在把上一层"个人的、一次性的、手工的"用法,变成"标准的、可复用的、可组合的"基础设施。这正是所有技术生态成熟的通用路径——从工匠手艺到工业标准件。

5. 开放的前沿

链条还没到头,三个方向正在演化中(2026 年初的快照,读时请自行更新):

本讲小结

概念 一句话
Function calling 模型填表、宿主执行;LLM 成为可嵌入的决策芯片
Agent LLM + 工具 + 循环 + 上下文管理
MCP 工具接入的 USB-C:M×N → M+N
GPTs/Gems 提示词资产化:保存、复用、分享
Skills 技能文件夹:脚本 + 资料 + 自动触发 + 渐进披露
演化主线 手工用法 → 标准件;上下文经济学驱动一切设计

动手:跑 labs/lab09_agent_loop.py——不用任何框架,纯 Python + DeepSeek API 手搓一个完整的智能体循环:注册两三个工具(计算器、读文件、查"资料库"),看模型自主决定调用顺序、处理工具报错、最后收敛作答。把循环的每一步打印出来,你会对"智能体"三个字祛魅,同时真正理解它。

延伸阅读:Anthropic "Building Effective Agents" 与 MCP 官方文档(modelcontextprotocol.io);Anthropic "Agent Skills" 工程博客。


上篇到此完整落幕:从 1936 年的鸢尾花到 2025 年的智能体技能包,"找函数"的故事讲完了。下篇换挡——不再问"它是怎么造出来的",改问"我明天怎么用它干活"。第一站:市面上这么多模型,到底怎么选?