图 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 字符串,执行、权限、超时、重试,全部是应用侧的责任。
图 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