3分钟搞懂工具调用(Function Calling)

工具调用(Function Calling / Tool Use)= 模型遇到自己答不了或做不了的事时,按约定的格式开出一张“调用单”,写明要用哪个工具、传什么参数,由背后的程序去执行,再把结果交回给模型继续分析。

开发者Club
更新于
3 分钟阅读
AI人工智能工具调用Function CallingTool UseAgentMCP工具设计工具搜索
阅读 —收藏 —

一句话定义

工具调用(Function Calling / Tool Use)= 模型遇到自己答不了或做不了的事时,按约定的格式开出一张“调用单”,写明要用哪个工具、传什么参数,由背后的程序去执行,再把结果交回给模型继续分析。

举个例子:问 AI“明天上海下不下雨”,模型本身其实是答不上来的。训练数据里没有明天的天气,它能做的是说一句:“我需要查一下天气接口,参数是上海、明天。”然后等程序把结果递回来,它再用人话告诉你。

这里最容易搞错的一点是:模型自己从来不执行任何东西。它只负责写调用单,真正去查天气、读文件、发请求的,是模型背后的程序。

模型只负责开单子

这件事很像去医院看病。医生不会亲自去操作 CT 机,他要做的是判断需不需要做检查、做哪一项,然后开一张检查单。检验科照着单子执行,然后把报告送回来,医生看完报告再下诊断。如果报告不够清楚,不足以让医生下结论,他还可以再开一张。

换到 AI 这边,一次完整的工具调用是这样的:

1. 你的程序: 把用户问题 + 工具说明书一起发给模型
2. 模型: 返回一张调用单
   {"name": "get_weather", "arguments": {"city": "上海", "date": "明天"}}
3. 你的程序: 真的去调天气接口, 拿到结果
4. 你的程序: 把结果塞回对话, 再发给模型
5. 模型: 回答 "明天上海小雨, 出门带伞"

模型只负责开单子:医生开检查单和工具调用的对应关系

第 2 步是关键。模型输出的不是一段随意的文字,而是符合约定格式的 JSON,程序可以直接解析。这个能力是 OpenAI 在 2023 年 6 月 13 日的 API 更新里正式推出的,它的作用是:开发者向模型描述函数,模型会判断什么时候需要调用,并输出一个包含调用参数的 JSON 对象。此后主流模型厂商都提供了类似的接口,国内的 DeepSeek、千问、Kimi、智谱等模型 API 也都支持工具调用,而且大多兼容 OpenAI 的写法,所以你写好的一套工具代码,换个模型通常也能用。

实际使用时还有几个细节值得知道:

  • 一次可以开好几张单子:模型可以在同一轮里同时调用多个工具,比如一次查上海和北京两个城市的天气,这叫并行调用。
  • 可以规定它用不用工具:开发者可以设置成让模型自己决定、必须调用工具、只能调用某个指定工具,或者干脆不调用。
  • 可以要求格式严格对齐:早期模型偶尔会输出格式不对的 JSON。现在 OpenAI 和 DeepSeek 等都提供了“严格模式”(strict),开启后模型输出的参数会严格符合你定义的格式,不再只是“尽量遵守”。

把第 1 到第 5 步不断重复,让模型一张接一张地开单子,直到任务做完,就是 Agent Loop。可以说,工具调用是 Agent 能够动手干活的基础。

模型只能看见说明书

模型并不认识你的天气接口。它能看到的只有三样东西:工具叫什么、这个工具是干什么的、需要哪些参数。一份工具说明书大概是这样的(注意:这里做了简化,实际要按 JSON Schema 的格式来写):

{
  "name": "get_weather",
  "description": "查询指定城市某一天的天气预报。只支持未来7天内的日期。",
  "parameters": {
    "city": "城市中文名, 如 上海",
    "date": "日期, 格式 YYYY-MM-DD, 或 今天/明天"
  }
}

所以说明书写得好不好,直接决定了模型能不能用对。Anthropic 在 2025 年 9 月的工程博客《Writing effective tools for agents》里总结过几条经验:

  • 描述里的小改动,效果可能差很多。参数格式、专有名词、工具之间的关系都要写清楚,不要让模型去猜。
  • 返回有意义的信息。如果工具返回的是一串 UUID 这样的随机编号,模型很难用;换成人能看懂的名字之后,检索的准确率明显提升了,胡编的情况也变少了。
  • 控制返回内容的长度。工具一次返回太多内容会占满上下文,要用分页、筛选、截断这些办法。比如 Claude Code 默认把单次工具返回限制在 25,000 个 token 以内。
  • 少而精,比多而散好。与其给 list_users、list_events、create_event 三个工具让模型自己去拼,不如直接做一个 schedule_event,一步完成查空闲时间和创建日程。
  • 加前缀分组。工具多了以后,asana_search、jira_search 这样的命名能帮模型分清每个工具管哪一块。

除了写文字描述,还可以直接在说明书里给几个调用示例。按 Anthropic 2025 年 11 月公布的内部测试,加上示例之后,模型处理复杂参数的准确率从 72% 提高到了 90%。

写工具说明书,其实就是在给一个很聪明、但对你的系统一无所知的新同事写操作手册,写得越清楚,它犯的错就越少。

模型只能看见说明书:工具说明书的写法要点

工具不是越多越好

直觉上,给 AI 接的工具越多,它能干的事就越多。但实际情况是,工具说明书本身也要占用上下文。

Anthropic 在 2025 年 11 月的《Introducing advanced tool use》里举过一个例子:同时接入 GitHub、Slack、Sentry 等 5 个 MCP 服务,一共 58 个工具,对话还没开始,这些工具说明书就已经占掉了大约 55K token。他们内部还遇到过优化前占到 134K token 的情况。

工具多占用上下文只是一方面,更麻烦的是模型容易选错工具。名字相近的工具,比如“发通知给用户”和“发通知到频道”,模型很容易搞混。他们给出的解法是工具搜索:先不把所有说明书都塞进去,而是让模型需要的时候再按关键词去查。按官方数据,这种方式让工具相关的 token 消耗减少了约 85%,选对工具的准确率也提高了,在他们的测试里,Claude Opus 4 从 49% 提高到 74%,Opus 4.5 从 79.5% 提高到 88.1%。

现在这个做法已经不只是 Anthropic 在用了。OpenAI 也在 Responses API 里提供了工具搜索,开发者把不常用的工具标记成“延迟加载”,模型需要时再搜出来,目前只有 GPT-5.4 及之后的模型支持。

Anthropic 还提出了另一种思路,叫程序化工具调用:不再让模型一个一个地调工具、每次都把结果读一遍,而是让模型写一段代码,在代码里批量调用工具、处理中间结果,最后只把需要的结论交给模型。按他们的测试,复杂研究任务的平均 token 用量从 43,588 降到了 27,297,减少了 37%。

这对开发者来说意味着:接工具之前先想清楚哪些是常用的、哪些可以按需加载,而不是一股脑全接上去。

工具全部塞进去和工具搜索的对比

工具调用和 MCP、Agent Loop 是什么关系

这三个词经常一起出现,它们的分工其实很清楚:

工具调用MCPAgent Loop
是什么模型的一项能力一套接口标准一种运行方式
解决什么模型怎么“开口要工具”工具怎么统一接进来怎么一步步把活干完
类比医生开检查单全院统一的检查单格式看病、开单、看报告、再开单的全过程

没有 MCP 也能做工具调用,只是每接一个工具,都要自己写一遍对接代码。有了 MCP 之后,同一个工具就可以被不同的 AI 应用复用。MCP 本身也还在更新,2026 年 7 月 28 日发布的新版规范把协议改成了无状态的设计,服务端更容易大规模部署,客户端也可以把工具列表缓存起来,不用每次都重新获取。

工具调用、MCP、Agent Loop 的分工

能力边界和风险

工具调用让 AI 从“只会说”变成了“能动手”,风险也随着增加了:

  • 参数可能是编的。模型可能填一个不存在的城市、一个格式不对的日期,甚至在该调工具的时候不调,直接凭印象回答。严格模式只能保证格式对,保证不了内容对,所以程序端一定要校验参数。
  • 工具返回的内容不一定可信。网页、邮件、文档里可能藏着“忽略之前的指令”这类文字,模型读到后可能会被带偏,这就是 Prompt 注入。
  • 有副作用的工具要设关卡。查天气调错了无所谓,但删文件、发邮件、付款调错了就是事故。这类工具应该默认需要人来确认,这部分在《3分钟搞懂Agent沙箱与权限》里有展开。

工具调用的三个风险和对应的防护

还有一个常见的误会:看到 AI 能查实时天气、搜网页,就以为“模型联网了”。实际上模型本身没有变,联网的是它背后的程序。这里的“程序”有两种:一种是你自己写的代码;另一种是厂商平台内置的工具,比如 ChatGPT 的联网搜索、代码解释器,是由 OpenAI 的平台替你执行的。但不管是哪一种,模型都只负责开单子。同一个模型,接不接工具、接哪些工具,表现可以天差地别。

时效性提醒

工具调用的基本机制已经很稳定了,变化比较快的是周边的东西:

  • 各家 API 的参数写法、工具数量上限和严格模式的支持范围
  • 工具搜索、程序化工具调用这类按需加载的方案,目前还在快速迭代
  • MCP 的规范版本,2026 年 7 月刚发布了一次比较大的更新

建议:动手之前,以各家官方文档为准。

💬 互动话题:如果让你给 AI 写一份工具说明书,你觉得最容易被它误解的一个参数会是什么?

📖 相关阅读:

资料来源:

评论

登录后即可发表评论

登录账户

加载评论中...