深蓝黑背景的品牌封面:左侧大标题「大模型如何调用外部工具」,副标题「Function Calling 与插件机制」,右侧为青蓝与紫色的六边形工具节点互相连接的装饰图案,左上标注「AI 工程知识专栏」,右上标注「Day 02 · 2026-09-10」 图 1:本文封面,点明主题「大模型如何调用外部工具」。

先想象一个场景。你在做客服机器人,用户问「我的订单到哪了」。大模型回答得滴水不漏:「很抱歉,我无法查询您的订单。」用户流失了。隔壁团队的机器人却直接报出物流单号和当前位置。用的可能是同一个模型,差别只在一件事:有没有给模型接上工具。

核心结论一句话

大模型调用外部工具的本质,不是模型真的去执行什么,而是模型输出一个结构化的「调用请求」——函数名加 JSON 参数——由你的程序执行后,再把结果喂回给模型。模型负责决策,代码负责执行,这个分工是理解一切工具调用机制的钥匙。

五步流程拆开看

以 OpenAI 官方的 Function Calling(现在也叫 tool calling)文档为例,完整链路是五步:第一步,你在 API 请求里用 JSON Schema 描述可用工具,比如一个 get_weather 函数,声明它接受 location 参数;第二步,模型看到用户问「巴黎今天天气如何」,判断需要工具,返回一个 function_call,里面写着函数名和参数 {"location": "Paris, France"};第三步,你的程序解析这个调用,真正去请求天气接口;第四步,把结果按 call_id 对应关系作为 function_call_output 发回模型;第五步,模型把工具结果组织成自然语言:「巴黎今天 25 摄氏度」。

注意一个关键细节:整个过程中模型没有碰过网络。它只产出一个 JSON 字符串,执行、权限、超时、重试,全部是应用侧的责任。

流程图:Function Calling 的完整链路分六步——用户提问、LLM 判断需要工具并理解意图、生成结构化函数调用(函数名加 JSON 参数)、执行外部工具或 API、把结果回填给 LLM、生成最终自然语言回答;图中第三步高亮展示 JSON 调用示例,底部说明插件、Function Calling 与代码解释器是同一机制的不同封装 图 2:Function Calling 的完整链路——模型生成结构化调用,应用执行后回填结果。

插件、函数调用、代码解释器是什么关系

这三者容易被当成三个东西,其实是同一机制的不同封装。函数调用是底座:工具由你自己定义、自己执行。插件是把工具的定义与执行打包给第三方提供,模型看到的仍然是一份接口描述。代码解释器更特殊:OpenAI 官方文档显示,它让模型在沙箱容器里写并运行 Python,处理上传的文件、生成图表、代码报错后自己改写重跑——模型向它学习到的名字是「python 工具」;沙箱容器闲置 20 分钟即过期,数据要及时取回。

学术上这条路也走了好几年:2022 年 AI21 提出 MRKL 架构,让 LLM 当路由器、把问题分发给计算器等专家模块;2023 年初的 Toolformer 让模型自学何时调用 API;HuggingGPT 让 ChatGPT 充当调度器,从 Hugging Face 选模型执行子任务;同年 4 月的 API-Bank 则用 73 个 API、314 段标注对话系统评估模型的工具规划与调用能力。

回到开头的客服场景

给机器人配一个 query_order 工具,声明它需要 order_id 参数。用户再问「订单到哪了」,模型不再道歉,而是反问拿到单号后返回一个 function_call;你的后端查库拿到物流状态回填;模型最终回答「您的包裹已到达杭州转运中心」。从「无法查询」到「直接报单号」,中间就是这一套机制。

这套能力怎么评估也有研究支撑。API-Bank 把评测分三级:会不会按描述正确调用单个 API;面对需求会不会自己检索到合适的 API;面对「帮我安排小组会议」这种模糊需求,能不能规划多次调用组合完成。三个级别恰好对应工具调用从入门到生产的三道坎。

三个常见误区

误区一:以为模型会自己执行函数。它只生成调用文本,你不写执行层,什么都不会发生。

误区二:工具配得越多越好。官方文档明确建议单次暴露的函数尽量少(软建议是 20 个以内),因为工具定义会占用上下文、摊薄模型注意力,函数越多选错概率越高。

误区三:把模型的参数输出当可信输入。模型可能编造参数值,应用侧必须做校验和权限控制,尤其是涉及写操作的工具。

给你的行动建议

动手做一次最小闭环:写一个返回固定数据的假函数,按五步流程跑通「模型请求调用—你执行—结果回填—模型作答」。然后重点打磨工具描述——文档原话是,要把函数写得让一个实习生只看描述也能用对。描述质量,往往比模型选择更影响调用准确率。

你在给模型接工具时踩过最大的坑是什么——参数编造、工具选错,还是执行层没做好权限隔离?欢迎分享你的经历。

参考资料

  • Function calling(OpenAI 官方文档:工具定义、function_call 与 function_call_output、五步调用流程、函数数量建议) — https://platform.openai.com/docs/guides/function-calling
  • Code Interpreter(OpenAI 官方文档:沙箱容器运行 Python、处理文件与生成图表、容器 20 分钟闲置过期) — https://platform.openai.com/docs/guides/tools-code-interpreter
  • LLM Powered Autonomous Agents(Lilian Weng,Lil'Log,2023 年 6 月,Tool Use 章节) — https://lilianweng.github.io/posts/2023-06-23-agent/
  • Toolformer: Language Models Can Teach Themselves to Use Tools(arXiv:2302.04761) — https://arxiv.org/abs/2302.04761
  • HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face(arXiv:2303.17580) — https://arxiv.org/abs/2303.17580
  • API-Bank: A Comprehensive Benchmark for Tool-Augmented LLMs(arXiv:2304.08244,73 个 API 工具、314 段标注对话、753 次 API 调用) — https://arxiv.org/abs/2304.08244