跳转至

Tool Call

Tool Call 和 Tool Response

开发者定义工具的 schema,告诉大模型有哪些工具、每个工具需要什么参数、返回结果大概是什么形状。模型判断需要工具时,不是直接执行工具,而是在输出里生成结构化的 tool call,通常包含工具名和参数。

实际执行者是宿主程序代码。代码解析模型给出的 tool call,真正调用函数、API、数据库或文件系统,再把 tool response 写回对话上下文,让模型基于结果继续生成。

现在 agent 常常可以一次发出好几个 tool call,不过这不意味着代码一定会并行执行。是否并行取决于宿主程序的调度策略、工具之间有没有依赖、工具是否有副作用、权限和限流要求。可以通过 prompt 告诉 LLM 尽量只并行发出相互独立的调用,但代码侧也要做调度和保护。

LLM 是如何学会 Function Tool Call 的

最开始的 LLM 并不会稳定调用工具。预训练最多让模型学会“描述自己想查什么”,但不会可靠输出可被程序解析的结构化调用。Function Tool Call 能力主要来自后训练,包括监督微调 SFT、偏好优化/RLHF,以及覆盖工具选择、参数生成、多工具调用、失败恢复、不需要工具时直接回答等场景的专项数据。

MCP 模型上下文协议

MCP 不是一个工具集合,而是一个连接 Agent 应用和外部能力的协议标准。它规定 Host、Client、Server 之间如何发现能力、调用工具、读取资源、复用提示,从而减少每个应用单独适配工具的成本。

MCP Server 能对外提供 tools、resources、prompts。Tools 是可执行动作,比如查数据库、读文件、调 API;Resources 是可读取的上下文数据;Prompts 是可复用的提示模板。实际落地里 Tools 最常见,很多 server 不一定提供 resources 和 prompts。

MCP 是 Host-Client-Server 架构。Host 是用户直接使用的应用,比如 IDE、桌面助手或 Agent 平台;Client 是 Host 内部负责连接某个 MCP Server 的协议组件;Server 是能力提供方,暴露 tools、resources、prompts。一个 Host 可以同时维护多个 Client,分别连接不同的 Server。

底层通信使用 JSON-RPC 2.0,传输可以是 stdio 或者 Streamable HTTP。

Skill

「指令、脚本、模板」一体化打包成可复用能力包 + 渐进式披露,按需加载。Skill 本身不等于工具权限,它更像流程、知识和资源包;真正执行脚本、读文件、调 API 仍然依赖宿主环境提供能力和授权。

code-review/                  # Skill 文件夹,名字就是这个 Skill 的标识
├── SKILL.md                  # 核心指令文件(必须有)
├── scripts/                  # 可选:可执行的脚本
   └── check_security.py     # 比如一个安全检查脚本
├── references/               # 可选:参考文档
   └── review_standards.md   # 比如团队的审查标准文档
└── assets/                   # 可选:模板、资源文件
    └── report_template.md    # 比如审查报告的输出模板

SKILL.md

---
name: code-review
description: "对代码进行全面审查,检查 bug、安全漏洞和性能问题,输出结构化审查报告"
---

# 代码审查 Skill

## 指令

### 第一步:理解代码上下文
阅读提交的代码,理解它的功能和所属模块,确认修改范围。

### 第二步:逐项检查
按以下维度逐一检查:
1. 功能正确性:逻辑是否有 bug,边界条件是否处理了
2. 安全性:是否有注入、XSS、权限绕过等漏洞
3. 性能:是否有 N+1 查询、不必要的循环、内存泄漏风险
4. 可读性:命名是否清晰,关键逻辑是否有注释

### 第三步:输出报告
使用 assets/report_template.md 的模板格式,输出结构化的审查报告。

「渐进式加载」(Progressive Disclosure)

  • 第一层是「只看简历」。典型实现会先暴露每个 Skill 的 name 和 description,大概每个 Skill 只占 30 到 50 个 token。这就像你面前摆了 20 份简历,每份只看名字和一句话介绍,几秒钟就能扫完,心里有数「我手上有哪些能力可以用」。

  • 第二层是「翻开详细资料」。当用户提了一个任务,Agent 判断「这个任务跟 code-review 这个 Skill 相关」,这时候才会把 code-review 的 SKILL.md 正文完整加载进来,读取里面的详细指令。不相关的 Skill 始终不会被加载,不浪费一个 token。

  • 第三层是「需要时再取」。执行过程中,如果指令里提到了「使用 assets/report_template.md 的模板」,Agent 才会在那个时刻去读取这个模板文件。参考文档、脚本这些辅助资源也是一样,用到的时候才加载。