🐎 第6章 海纳百川:MCP
📄 一句话概括

MCP 给的是手,技能给的是做法。有手没菜谱会乱做,有菜谱没手做不出来。 演示里五个任务:只有工具能做三个、只有技能能做两个、两个都有的五个全都能做。 缺的那一半,恰好是最难补的那一半。

📝 本章和前面几章的关系

前面两节把 MCP 讲完了,这一节把它和第 3 章的技能放在一起看。 这两个东西经常被混着说,其实分工很清楚:一个管够不够得着,一个管做得对不对。

一、两者的分工

MCP 服务器提供工具:能读文件、能查数据库、能调接口。它拓宽的是「能碰到什么」。 技能提供做法:先做什么、按什么规范、做到什么算完。它约束的是「怎么碰」。 用厨房打比方:工具是锅和刀,技能是菜谱。有手没菜谱会乱做,有菜谱没手做不出来。

这个比方有点土,但它精确:手和菜谱不能互相替代,缺哪个都只能干半件事。

二、五个任务,三种配置

演示里五个任务,三种配置各跑一遍:只有工具、只有技能、两个都有。 结果是:只有工具能做三个,只有技能能做两个,两个都有的能做完五个。 注意这两个数不是「一半一半」。 工具那三个是「能出结果但顺序靠猜」,技能那两个是「知道怎么做但动不了手」。

而两个都缺的那类任务,其实是最常见的:既要查数据、又要按规范整理成一份东西。

三、只有工具会怎样

工具是「能做什么」,不是「该怎么做」。 模型手里有读写文件、查数据库的工具,但你让它「按项目规范补测试」,它不知道规范是什么。 结果就是「能跑,但不合规矩」:测试文件放错目录、没用项目的断言库、漏了异常分支。

这和 4.5 节那个「只用子智能体」的现象是同一个:能力到位了,判据没到位。

四、只有技能会怎样

技能里写着「读 src 下的文件、按规范补测试、跑一遍确认通过」——但它没有读文件的工具,第一步就卡住。 技能是描述,不是能力。它能把「怎么做」说清楚,但它自己动不了手。 这一条容易被忽略,因为技能读起来很像「能做事的说明书」。说明书不能代替手。

所以写技能的时候要顺手确认一件事:它正文里提到的每个动作,当前有没有工具能做。

五、组合之后谁管什么

工具负责「够得着」:文件、数据库、工单系统。技能负责「做得对」:顺序、判据、边界。 分工的判据很简单:这件事是「能不能做」还是「该怎么做」?前者配工具,后者写技能。 还有一个顺序:先配工具再写技能。 因为技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。

所以一句话收口:MCP 拓宽了能碰到的边界,技能保证了碰的方式。两个缺一个,都只能干半件事。

六、动手 Demo:五个任务,只用工具、只用技能、两个都有

MCP 给的是「手」,技能给的是「做法」。手和菜谱的关系:有手没菜谱会乱做,有菜谱没手做不出来。 五个任务,三种配置各跑一遍,看哪种配置能做完几个。

TASKS = [(u"给这个模块补三个测试", True, False, True),
         (u"按项目的测试规范补测试", False, True, True)]

n_tool = sum(1 for _a, _ot, _os, _b in TASKS if _ot)
n_skill = sum(1 for _a, _ot, _os, _b in TASKS if _os)

实跑输出:

--------------------------------------------------------------------
五个任务,只用工具、只用技能、两个都有
--------------------------------------------------------------------

  MCP 给的是「手」,技能给的是「做法」。手和菜谱的关系:有手没菜谱会乱做,有菜谱没手做不出来。

  ① 两者的分工
  --------------------------------------------------------------------
| 东西 | 提供什么 | 比喻 |
|---|---|---|
| MCP 服务器 | 提供工具:能读、能查、能写 | 厨房里的锅和刀 |
| 技能 | 提供做法:先做什么、做到什么算完 | 菜谱 |


  ② 五个任务,三种配置
  --------------------------------------------------------------------
| 任务 | 只有工具 | 只有技能 | 两者都有 |
|---|---|---|---|
| 给这个模块补三个测试 | 能 | 不能 | 能 |
| 查一下库里有几条订单 | 能 | 不能 | 能 |
| 按项目的测试规范补测试 | 不能 | 能 | 能 |
| 把订单表导成一份周报 | 不能 | 能 | 能 |
| 随便看看这个仓库有什么 | 能 | 不能 | 能 |

  五个任务里,只有工具能做的 3 个(有手没菜谱,能出结果但顺序靠猜);
  只有技能能做的 2 个(有菜谱没手,写不出代码也查不了库);两个都有的五个都能做。

  ③ 只有工具会怎样
  --------------------------------------------------------------------
  工具是「能做什么」,不是「该怎么做」。
  模型手里有读写文件、查数据库的工具,但你让它「按项目规范补测试」,它不知道规范是什么。
  结果就是「能跑,但不合规矩」:测试文件放错目录、没用项目的断言库、漏了异常分支。
  这和 4.5 节那个「只用子智能体」的现象是同一个。

  ④ 只有技能会怎样
  --------------------------------------------------------------------
  技能里写着「读 src 下的文件、按规范补测试、跑一遍确认通过」——但它没有读文件的工具,
  第一步就卡住。
  技能是描述,不是能力。它能把「怎么做」说清楚,但它自己动不了手。

  ⑤ 组合之后谁管什么
  --------------------------------------------------------------------
  工具负责「够得着」:文件、数据库、工单系统。技能负责「做得对」:顺序、判据、边界。
  分工的判据很简单:这件事是「能不能做」还是「该怎么做」?前者配工具,后者写技能。
  还有一个顺序:先配工具再写技能。
  因为技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。
  ! 一句话:MCP 拓宽了能碰到的边界,技能保证了碰的方式。两个缺一个,都只能干半件事。

①分工:MCP 服务器提供工具(能读、能查、能写),技能提供做法(先做什么、做到什么算完)。 锅和刀对菜谱。 ②五个任务:只有工具能做三个(能出结果但顺序靠猜),只有技能能做两个(知道怎么做但动不了手), 两个都有的五个全都能做。 ③只有工具的问题:能跑,但不合规矩——测试文件放错目录、没用项目的断言库、漏了异常分支。 这和 4.5 节那个「只用子智能体」是同一个现象:能力到位了,判据没到位。 ④只有技能的问题:技能里写着「读 src 下的文件」,但它没有读文件的工具,第一步就卡住。 技能是描述,不是能力。 ⑤顺序:先配工具再写技能。技能正文里要写「用哪个工具、传什么参数」,工具没有的时候写不出来。

30 秒实验

  1. 再加一个任务「把这个模块的日志格式统一成项目规范」,三条判据走一遍。 它属于「只有工具」「只有技能」还是「两者都要」?
  2. 把「按项目的测试规范补测试」的技能正文删掉判据、只留步骤,重跑一遍。 它还能算「只有技能能做」吗?
  3. 先写技能再配工具,会卡在哪一步?把这件事实际做一遍,记下卡住的位置。

常见误区

  1. 以为装了 MCP 就等于会干活。工具只解决「够得着」,不解决「做得对」。
  2. 以为写了技能就等于能干活。技能是描述,没有工具它一步都动不了。
  3. 先写技能再配工具。技能正文里要写用哪个工具、传什么参数,写的时候工具还没有。
  4. 把两者混着说。一个管能不能碰到,一个管碰得对不对,混着说就分不清该补哪个。
  5. 用技能去补「没有工具」的缺。再怎么描述,动不了手还是动不了手。
自测三问(点开对答案) 1. MCP 和技能分别提供什么? —— MCP 提供工具(能读、能查、能写),技能提供做法(顺序、判据、边界)。 一个管够不够得着,一个管做得对不对。 2. 只有工具会缺什么? —— 缺判据。能出结果,但顺序靠猜、产出不合项目规范。 3. 为什么说该先配工具再写技能? —— 因为技能正文里要写「用哪个工具、传什么参数」。工具没有的时候,这段写不出来,写出来也是空的。

单个开发者的事讲完了,下一节上规模:五十人的团队,这些服务器怎么部署。

相关笔记