中文 English

AI 怎么学会“用手”的?从只会聊天到会查、会写、会操作

发布时间: 2026-07-19
AI Agent Tool Calling MCP Function Calling 大模型 自动化 安全

先说结论

AI 并不是突然长出了手。它只是学会了一个非常关键的动作:先判断自己需要什么工具,再用结构化参数请求工具,等工具返回真实结果,最后把结果翻译成人话。

这套机制通常叫 Tool Calling(工具调用);在不同平台上也会看到 Function Calling、Tools API 等名字。MCP(Model Context Protocol,模型上下文协议)则像一套“统一插座”,让不同的 AI 应用可以用相似的方式发现和调用文件、数据库、搜索、工单、浏览器等能力。

本文不把 AI 神化成“会自己做事的数字员工”,而是把一次调用拆开给你看:模型到底做了什么、真正执行动作的是谁、为什么 MCP 会火、权限应该放在哪里,以及为什么“能调用工具”不等于“可以随便给它钥匙”。文中截图来自 OpenAI 与 MCP 官方页面,命令输出图为本文根据真实调用流程制作的示意证据;文章不包含任何真实内网地址或主机名。

AI 怎么学会“用手”的?

图 1:AI 的“手”不是模型本身,而是模型与工具之间的一条受控流水线。

一、问题背景:聊天机器人为什么总像“只会说”?

早期的大模型很像一个读过很多书、口才很好的同学。你问它“今天的天气怎么样”,它可以讲天气的形成原理,也可能凭经验猜一个答案;但它不能保证知道现在的温度。你让它“把这段话保存成文件”,它可以给你一段文本,却不一定真的在你的电脑上创建了文件。

这不是它笨,而是它的工作范围本来就不同:

如果没有工具调用,模型只能“描述动作”。就像一个厨师站在厨房门口说:“我已经把菜炒好了”,但实际上没有碰过锅。

把 AI 想成餐厅:会说话,不等于会做菜

图 2:生活化比喻。用户是顾客,模型像服务员,工具才是后厨里真正拿锅铲的人。

二、一次工具调用到底发生了什么?

假设你对 AI 说:“帮我查一下明天北京的天气,如果下雨就提醒我带伞。”这句话看上去很自然,但系统要把它变成一连串明确步骤:

  1. 理解目标:用户要天气,还要根据结果做判断;
  2. 查看工具清单:系统有没有天气工具和提醒工具;
  3. 选择工具:决定先调用 get_weather
  4. 生成参数:例如城市是北京、单位是摄氏度、日期是明天;
  5. 执行前检查:参数是否完整,是否超出权限,是否需要用户确认;
  6. 得到结果:工具返回结构化数据,而不是一段模糊的自然语言;
  7. 继续推理:模型发现明天下雨,于是提出调用 create_reminder
  8. 最终回复:告诉用户天气和提醒是否创建成功。

一次工具调用,实际上是五步接力

图 3:一条看似简单的请求,实际上是“理解—选择—校验—执行—解释”的接力。

关键点在这里:**模型通常不直接执行工具。**它输出的是一份“调用建议”,真正拿这份建议去访问网络、读文件或写数据库的,是外部的 Agent 运行时或应用程序。

下面是一份极简的工具描述。它像餐厅菜单,也像遥控器说明书:告诉模型“我能做什么、需要哪些参数”,但没有把执行权完全交给模型。

{
  "name": "get_weather",
  "description": "Return current weather for a city",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {"type": "string"},
      "unit": {"enum": ["celsius", "fahrenheit"]}
    },
    "required": ["city"]
  }
}

工具描述不是魔法,是一份机器可读的菜单

图 4:工具描述把自然语言能力变成了机器能检查的“菜单”。

三、Function Calling 和 Tool Calling 有什么区别?

很多文章把 Function Calling 和 Tool Calling 混在一起,这是可以理解的:它们解决的是同一个大问题——让模型输出调用工具所需的结构化请求

更准确地说:

OpenAI 的官方文档把工具调用描述成一个循环:模型先请求工具,应用执行工具,再把工具结果送回模型,由模型生成最终答案。这个设计非常重要,因为它把“思考”和“执行”分成了两个不同的责任区。

OpenAI 官方 Function Calling 文档截图

图 5:OpenAI 官方 Function Calling 文档页面。不同 SDK 的写法会变化,但核心仍然是结构化参数和结果回传。

如果把聊天比作打电话,普通聊天是“你问我答”;工具调用则像“接线员帮你转接部门”。模型不必知道每个部门内部怎么工作,只要能说清楚:我要找谁、办理什么、参数是什么。

四、MCP 是什么?为什么不是“又一个 API”?

工具调用解决了“模型如何请求工具”,但很快会遇到新的麻烦:每个 AI 客户端都要为每个工具单独写适配器。

今天你接入文件系统,明天接入 Git 仓库,后天接入数据库。如果每个应用都自己发明一套接口,就会出现很多“插头”:A 客户端支持自己的工具格式,B 客户端支持另一套,工具提供者也要重复开发。

MCP 的思路是提供一套共同的通信约定,让 AI 应用能够发现服务器提供的能力,再以统一方式调用。它通常包含三类可被发现的能力:

MCP:给 AI 配了一套“统一插座”

图 6:MCP 的价值不是“替 AI 发明新能力”,而是把已有能力接到统一插座上。

用小学生能懂的比喻:**Tool Calling 像“服务员会下单”,MCP 像“所有餐厅都采用同一种点菜单格式”。**服务员换餐厅不需要重新学每个后厨的暗号,后厨也不用为每个服务员定制一套暗号。

MCP 服务器并不等于“服务器拥有无限权限”。它可以只暴露只读搜索、指定目录文件、有限数据库表,甚至每次危险操作都要求人确认。协议统一的是“怎么说话”,不是“谁都能做什么”。

MCP 官方介绍页面截图

图 7:MCP 官方介绍页。读者可以从官方文档了解 Host、Client、Server 以及能力发现的基本关系。

MCP 官方 GitHub 组织页面截图

图 8:MCP 官方 GitHub 页面。协议之外,还需要 SDK、示例和服务器实现,生态才能真正跑起来。

Anthropic 官方 MCP 介绍截图

图 9:Anthropic 发布的 MCP 介绍页面。MCP 的目标是减少 AI 应用与外部数据、工具之间的重复连接工作。

五、为什么 AI 有时会“自信地乱操作”?

工具调用把 AI 从文字带进现实,也把风险一起带进来了。最常见的问题不是“模型不会调用”,而是“调用范围太大、校验太少、错误不可撤销”。

1. 参数看起来正确,实际含义却错了

模型可能把“最近的订单”理解成按创建时间排序,也可能理解成最后一次支付。参数格式合法,不代表业务语义正确。因此重要工具应当使用枚举、范围、正则和业务规则多重校验。

2. 只读工具和写入工具没有分级

搜索文档通常风险较低;删除文件、发邮件、改生产配置则属于高风险动作。把它们全部放在同一个“自动执行”开关后面,就像把厨房里的菜刀和玩具放进同一个抽屉。

3. 工具返回的内容也可能不可信

网页、邮件、工单和文件里可能藏着“忽略之前指令”的恶意文本。模型把工具返回内容当成上下文,不等于它就应该把其中的命令当成系统命令。工具结果必须经过来源标记、长度限制和敏感动作隔离。

4. 失败后自动重试可能造成重复副作用

“创建订单”“发送邮件”“扣款”“提交审批”都可能因为网络超时而出现“执行成功但响应丢失”。如果 Agent 直接重试,就可能重复操作。可靠系统要设计幂等键、操作记录和人工确认。

工具调用不是放权,而是过闸机

图 10:安全的 Agent 像机场闸机,不是把所有门都打开,而是每一步都检查。

六、一个靠谱的 Agent 应该怎样设计?

我建议把工具调用拆成四层,而不是把所有逻辑塞进一个“大模型提示词”里。

**第一层:能力目录。**明确列出工具名称、用途、输入、输出、权限级别和是否可撤销。模型只能看到需要的工具,避免工具太多导致选择混乱。

**第二层:参数与策略校验。**先检查类型和必填项,再检查范围、路径、租户、用户身份和业务状态。不要因为模型输出了 JSON,就跳过服务端校验。

**第三层:执行隔离。**只读操作可以在沙箱或受限身份下运行;写入操作要限制目录和数据表;高风险动作需要确认。执行器应该记录完整的请求、结果、耗时和错误。

**第四层:结果回传与审计。**工具返回尽量使用稳定的结构化字段。模型负责解释,不负责篡改事实。对删除、发送、付款等操作,要能查到“谁在什么时候通过什么工具做了什么”。

先发现能力,再决定是否调用

图 11:能力发现阶段就应该显示工具数量、参数和权限,而不是等到出错才追日志。

这四层像小区门禁:门口有住户名单,电梯有楼层权限,重要房间有二次确认,物业还保留进出记录。AI 可以当一个很聪明的访客,但不能因为它说话像主人,就把门禁卡交给它。

七、从“会调用”到“真的有用”,还差哪几步?

工具数量不是 Agent 能力的唯一指标。工具越多,选择空间越大,误选概率也可能上升。真正有用的系统通常会做好以下事情:

更重要的是,Agent 不应该伪装成“什么都能做”。当它没有浏览器、没有联网权限或没有某个 MCP Server 时,最可靠的回答是“我现在没有这个工具”,而不是编造一个看似真实的结果。

八、常见问题 Q&A

Q1:有了 MCP,AI 就能访问我的所有文件吗?

不会。MCP 只是协议,具体能访问什么取决于服务器暴露了哪些能力,以及运行时给了它什么权限。安全做法是默认只读、限制目录、限制文件类型,并让危险写入必须确认。

Q2:MCP 会取代所有 API 吗?

不会。API 仍然是系统之间稳定通信的基础。MCP 更像面向 AI 应用的能力发现与调用层,可以把现有 API 包装成模型容易发现和使用的工具。

Q3:为什么不让模型直接执行 Shell 命令?

因为 Shell 权限太宽,错误后果太大。同一个“清理缓存”的需求,可能被模型翻译成危险的删除命令。更好的方式是提供窄而明确的工具,例如 clear_app_cache(app_id),由程序内部决定允许清理哪些路径。

Q4:工具调用会让幻觉消失吗?

不会。它可以减少“实时数据靠猜”的问题,但模型仍可能选错工具、填错参数、误读返回值。工具调用不是幻觉的终点,而是把一部分事实交给可验证的系统。

Q5:个人用户现在最适合从哪里开始?

先从只读工具开始:搜索自己的文档、读取项目文件、查询日历或查看任务列表。确认权限、日志和错误处理都清楚后,再逐步开放写入能力。不要一开始就给 Agent 生产数据库、支付账户或整台电脑的管理员权限。

九、最后的判断:AI 的“手”属于谁?

AI 学会用工具之后,最容易出现一个错觉:好像模型本身突然获得了行动能力。其实更准确的说法是:人类把行动能力包装成了可描述、可校验、可审计的工具,然后让模型负责选择和编排。

模型像大脑,工具像手脚,运行时像脊髓,权限系统像门卫,日志像监控录像。少了任何一环,Agent 都可能只会聊天、不会落地,或者会落地却不安全。

Tool Calling 解决“如何发出结构化请求”;MCP 解决“如何让不同应用和工具用统一方式相遇”;真正决定系统质量的,则是权限、边界、可撤销性和人类监督。

所以,判断一个 Agent 是否成熟,不要只问“它能不能自动做事”,还要问四个问题:

  1. 它调用了哪个工具?
  2. 它凭什么有这个权限?
  3. 如果做错了,能不能撤销?
  4. 出问题后,能不能查清楚全过程?

能回答这四个问题,AI 才不是“会说话的魔法盒子”,而是一套真正可以被使用、被管理、被信任的工具系统。

参考资料