一、最底层:LLM 本身只会"输出文字"
LLM(Claude、GPT、Kimi、DeepSeek 这些)本质上是一个只会生成文字的模型。你给它一段输入,它输出一段文字。仅此而已。
它不能:读你的文件、点击网页、查实时天气、写入 Obsidian、运行代码。
那为什么我们感觉 ChatGPT 能搜索、Claude 能写代码?因为外面套了一层东西,让它"假装"能做这些。这层东西就是接下来要讲的 tool calling、MCP、Skill。
二、Tool Calling(工具调用):最基础的机制
Tool calling 是 LLM 厂商提供的一个 API 特性。流程是这样:
- 你(开发者)在 API 请求里告诉模型:"你有这些工具可以用:
get_weather(city)、read_file(path)、write_obsidian_note(content),每个工具的参数和说明是 XX。" - 用户问:"今天上海天气怎么样?"
- 模型不直接回答,而是返回一个结构化的 JSON :"我要调用
get_weather,参数 city='上海'。" - 你的代码 接到这个 JSON,真正去执行
get_weather('上海'),拿到结果(比如"晴 25°C")。 - 你把结果塞回对话历史,再让模型生成最终回复:"今天上海晴天,25度。"
关键点:LLM 自己不会执行工具,它只会"说我想用哪个工具"。真正的执行是你写的代码做的。LLM 厂商只是规范了"模型怎么表达想用工具"这件事。
这就是 tool calling 的全部。它是个底层协议。
三、MCP(Model Context Protocol):工具的"标准化接口"
Tool calling 解决了"模型怎么说想用工具",但留了一个问题:工具本身怎么写、怎么分发?
举例:你想让 Claude 能操作你的 Notion,那你得自己写 Notion API 的封装代码、定义工具 schema、处理认证、塞进 API 请求里。我也想让 Claude 操作 Notion,我也得从零写一遍。Bob 想让 GPT 操作 Notion,他还得再写一遍------而且因为 Claude 和 GPT 的 tool calling 格式有细微差别,还得改。
Anthropic 在 2024 年底推了 MCP (Model Context Protocol),它的核心想法是:把"工具"做成可以独立运行的小服务(叫 MCP Server),用统一的协议和任何 LLM 客户端通信。
类比:MCP 之于 LLM 工具,就像 USB 之于硬件外设。以前每个鼠标键盘都有自己的接口,现在统一 USB,插哪都能用。
具体形式:
- 一个 MCP Server 是一个独立的程序(可以是 Python、Node.js、Rust 写的),监听某个端口或 stdio
- 它声明自己提供哪些工具(比如
notion-mcp-server提供create_page、search_pages等) - 任何支持 MCP 的客户端(Claude Desktop、Claude Code、Cursor、OpenClaw 等)都能连上这个 server,立刻获得这些工具能力
- 你不用改 LLM,不用改客户端,只要装一个 MCP server 就行
所以 MCP 和 tool calling 的关系是:tool calling 是 LLM 层面的协议("模型如何表达想用工具"),MCP 是工具层面的协议("工具如何被分发和调用")。MCP server 内部最终还是用 tool calling 把工具暴露给模型。
四、Skill:给 Agent 的"操作手册"
Tool 解决"能做什么"(capability),Skill 解决"该怎么做"(know-how)。
举个例子。你给 Claude 一堆工具:read_file、write_file、run_python、search_web。然后你说:"帮我做一个 PPT"。Claude 知道有这些工具,但它不一定知道:
- 应该用哪个 Python 库(python-pptx?还是别的)
- 你公司的 PPT 模板放在哪
- 标题字号该用多大、配色用什么
- 要不要加封面页和封底
Skill 就是把这些"领域知识 + 操作步骤"写成一个 markdown 文件,放在 agent 能找到的地方。Agent 在执行任务前先读 SKILL.md,按里面的指引调用工具。
一个典型的 SKILL.md 长这样:
markdown
# job-tracker Skill
## 何时使用
当用户提到"记录岗位"、"投递了 XX 公司"、"保存这个 JD"时使用。
## 执行步骤
1. 解析用户提供的 JD 文本,提取公司、岗位、薪资、地点
2. 用 LLM 总结 JD 核心需求(必备技能、加分项)
3. 调用 write_file 工具,把内容按指定格式写到 ~/Obsidian/求职/岗位/{公司}_{岗位}_{日期}.md
4. frontmatter 用 YAML 格式,字段包括 ...
5. 完成后在聊天里回复"已记录到 Obsidian"
Anthropic 在 Claude 应用和 Claude Code 里推这个概念叫 Agent Skills (你看我的系统里有 /mnt/skills/public/docx/SKILL.md、pptx/SKILL.md 这些就是)。OpenClaw 直接借用了这套设计,它的 Skills 放在 ~/.openclaw/workspace/skills/。
Skill 和 MCP 的区别:MCP 是给模型加新工具(新能力),Skill 是教模型怎么用已有工具完成特定任务(操作手册)。一个 Skill 通常会调用多个工具,可能是内置工具、也可能是 MCP 工具。
五、Claude Code 是什么
Claude Code 是 Anthropic 出的一个命令行工具(CLI),本质上是一个跑在终端里的 coding agent。
它内置了:文件读写、bash 执行、代码搜索、git 操作等工具。你在终端里 claude 一下,就开始和它对话,它能直接读你当前目录的代码、改文件、跑测试。
它支持 MCP(你可以接 GitHub MCP 让它操作 PR),也支持 Skills(放在 .claude/skills/ 目录)。
和 OpenClaw 的对比:
- Claude Code = 给开发者用的、专注于 coding 的 CLI agent,绑定 Claude 模型
- OpenClaw = 给所有人用的、通过 IM 聊天交互的、什么都能做的个人 agent,模型可换