一文看懂 AI Agent 的工具调用机制

张开发
2026/4/18 21:56:39 15 分钟阅读

分享文章

一文看懂 AI Agent 的工具调用机制
很多人第一次接触 AI Agent 的 Tool Use都会有一个错觉好像模型自己“会调用接口”“会执行代码”“会操作系统”。真正的执行链路其实不是这样。模型负责判断、选择和生成调用请求应用负责真正执行执行结果再回到模型由模型继续推理或组织最终回答。Tool Use / Function Calling 的本质不是“模型自己动手”而是模型输出一份结构化的动作意图外部程序替它把动作落地。OpenAI 把这件事明确拆成五步给模型工具、收到工具调用、应用侧执行、把工具结果再发回模型、模型再产出最终回答或继续调用工具。Anthropic 对这个闭环的描述也很接近客户端工具由你的应用执行并回传tool_result服务端工具则由平台侧直接执行。这也是为什么工具调用不是一个“小功能”而是 Agent 和普通聊天模型之间最关键的分水岭。普通模型只能在参数里“知道”世界Agent 则可以借助工具去碰真实世界查实时数据、访问数据库、执行代码、调用业务 API、操作外部系统。LangChain 官方也把 tools 定义为一种让 Agent 获取实时数据、执行代码、查询数据库并对外部世界采取行动的机制。工具调用机制本质上是“模型决策 程序执行”如果把整个链路压缩成一句话那就是用户提需求模型决定要不要调工具、调哪个工具、参数填什么你的程序拿着这份结构化调用去执行再把结果喂回模型模型基于新信息继续判断直到结束。这就是典型的 agent loop模型调用返回“答复”或“工具请求”工具执行返回结果这个循环持续到模型决定结束。所以Tool Use 不是单次 API 技巧而是一种运行时机制。真正的 Agent不是“有工具列表”而是“有工具调用闭环”。第一步先把工具翻译成模型能理解的语言模型之所以能调用工具不是因为它天生认识你的内部 API而是因为你先把工具“描述”给了它。这一步通常要提供三类信息工具名、工具说明、输入参数 schema。OpenAI 的 function calling 文档里明确说函数是一类由 JSON Schema 定义的工具定义中通常包括name、description、parameters和可选的strictAnthropic 这边则是name、description、input_schema。两边的核心思想是一样的你要先把工具能力、使用时机和参数格式翻译成模型能消费的结构化提示。这里最容易被低估的其实不是 schema而是 description。Anthropic 文档里专门强调工具描述应尽可能详细因为模型越清楚“这个工具是干什么的、该怎么用”调用效果就越好还可以用自然语言去强化 schema 里比较关键的约束。OpenAI 文档对description的定义也很直接它描述的是什么时候用、怎么用这个函数。这背后其实是一个很重要的产品结论工具不是给人看的 API 文档而是给模型看的操作手册。很多团队工具调用不稳定不是模型不行而是工具定义写得太“程序员”比如名字很抽象、描述太短、参数语义不清、枚举值没有解释。模型当然也就更容易选错工具、补错参数。第二步模型怎么决定“要不要调用工具”很多人会把这件事理解成“只要给了工具模型就会优先去调”。其实不是。LangChain 官方文档的说法很清楚模型会基于对话上下文决定是否调用工具以及传什么参数。Anthropic 也明确写到Claude 会根据用户请求和工具描述决定何时调用工具。OpenAI 则提供了默认自动决策模式也就是让模型自己判断这轮是直接回答还是调用零个、一个或多个工具。换句话说模型通常在做一个隐性的判断这个问题我靠已有上下文能不能直接答如果不能是否需要借助外部能力借助外部能力后答案会不会更准、更完整、更可执行例如“帮我总结一下 TCP 三次握手”通常不需要调工具但“查一下今天苹果股价”“把这封邮件发给张三”“帮我从 CRM 里拉出客户信息”天然就更适合进入工具调用链路因为这些任务依赖实时数据或外部系统。这个判断机制本质上就是 Agent 比普通问答更“行动化”的地方。当然工程上你也可以不把决定权完全交给模型。OpenAI 提供了tool_choice机制默认是auto也可以强制required、强制指定某个函数、限制只能在某个子集工具里选甚至直接none禁止调用。也就是说工具调用既可以完全放权给模型也可以被产品策略半约束、强约束。这对产品经理很重要。因为很多场景里“是否允许模型自己决定”本身就是一个产品策略问题而不是纯模型问题。第三步模型怎么决定“调用哪个工具”决定要调用工具之后下一步才是“选哪个”。本质上模型是在当前上下文里做一次语义匹配 约束匹配。它会结合用户意图、工具描述、参数 schema、以及前面对话信息去判断哪个工具最贴近当前任务。LangChain 的定义非常直白工具是带有清晰输入输出定义的可调用函数模型会根据上下文决定调用哪一个以及传入什么参数。所以在实际系统里工具选择准确率往往取决于三件事第一工具边界是不是清楚。如果两个工具描述高度重叠比如一个叫search_order一个叫query_order_info模型就很容易混。第二工具数量是不是太多。OpenAI 官方已经明确建议如果你的应用里函数很多、schema 很大可以配合tool_search把不常用工具延迟加载只在模型真正需要时再把相关工具拉进当前回合。Anthropic 也支持defer_loading这类思路本质都是在减少无关工具对当前决策的干扰。第三工具说明是不是面向模型写的。工具选择错很多时候不是“模型笨”而是你把工具组织成了一个模型很难 disambiguate 的工具箱。从工程角度看这一步最像搜索排序。模型不是“看见工具就点”而是在做一轮轻量的能力检索。第四步参数是怎么生成出来的这是产品经理和工程师都特别关心的一点参数到底从哪来最直接的答案是从用户输入、对话历史、系统提示、以及前序工具结果里来。模型会结合当前可见上下文把信息映射到参数 schema 对应的字段上再输出一份结构化参数对象。OpenAI 和 Anthropic 的文档都把这一点写得很清楚工具输入是由 schema 定义的而模型会据此生成对应形状的输入。比如用户说“帮我查一下北京明天的天气。”如果工具 schema 是location和date模型就会尝试把“北京”映射到location把“明天”解析成合适的日期字段。再比如用户说“帮我把这条工单指给王磊。”如果模型前文已经知道“这条工单”的工单 ID或者前一步工具刚返回了工单列表那它就会从上下文中抽取对应 ID再补进参数里。所以参数生成并不是“只从当前一句话抠关键词”而是一个基于上下文的结构化槽位填充过程。这也是为什么多轮对话和中间结果回传在 Agent 里特别重要。但这里必须强调一个工程事实模型生成参数不等于参数一定可信。Schema 能帮助模型按格式输出但不自动保证业务正确。OpenAI 和 Anthropic 都支持strict模式用来更严格地保证工具名和输入符合 schemaOpenAI 也明确建议在很多场景下开启 strict mode。可即便 schema 对了业务值仍可能错比如把“上海分公司”误当“上海市”把模糊时间理解错或把用户没授权的数据字段补进去。所以schema 解决的是“长得像不像”不是“业务上对不对”。第五步模型输出的是一份“调用请求”这是最关键、也最容易被误解的一点。当模型决定调工具时它输出的通常不是“最终答案”而是一条或多条结构化工具调用请求。OpenAI 的工具调用流程里第二步就是“收到 tool call”LangChain 的文档也明确说AI message 里会包含工具名、参数和一个把调用与结果关联起来的唯一 ID。Anthropic 这边则是返回tool_useblock然后你的应用去执行再回传tool_result。这意味着模型并没有真的“查到天气”或“发出邮件”。它只是说我建议现在调用get_weather参数是{...}。或者我建议调用search_docs和fetch_order这是它们各自的参数。真正动手的是 orchestrator也就是你的应用层。这也是为什么 Tool Use 系统里一定会有一层模型外的执行器。没有这层工具调用就只是“看起来很像能做事”的文本。第六步真正执行工具的是你的程序不是模型收到工具调用请求后应用层才会开始真正做事解析工具名和参数做 schema 校验和业务校验检查权限、配额、风控和人工确认策略调用真实 API / 数据库 / 代码执行环境拿到结果后再封装回模型能读懂的格式。Anthropic 把工具分成 client tools 和 server tools前者由你的应用执行后者由平台执行OpenAI 也区分了 function calling 和平台内建工具。无论哪种模式核心都是模型负责提出动作系统负责执行动作。这一层在工程上极其重要因为它决定了系统是不是安全、可靠、可控。一个成熟 Agent不会把模型生成的参数原封不动直接打到生产系统上。通常至少会做几件事参数校验。防止格式对了、值却不合法。权限校验。模型“想做”不等于“允许做”。幂等控制。避免重复下单、重复发信、重复写库。超时与重试。工具失败时要有恢复策略。审计日志。谁触发了什么动作要能追踪。所以Tool Use 的本质不是 prompt engineering而是模型决策层和业务执行层之间的一次协议对接。第七步工具结果怎么回到模型里工具执行完并不代表任务就结束了。下一步是把工具结果再发给模型。OpenAI 的五步流程里第四步就是“把工具输出再次发给模型”第五步才是最终回答或更多工具调用。Anthropic 也是同样的 agentic loop应用执行后把tool_result发回模型再继续。LangGraph 的 quickstart 甚至把这件事写成了显式循环如果上一条消息里有 tool call就执行工具把ToolMessage加回消息列表再继续让模型判断。这一步特别像人类工作时的“读回执”。比如模型先调用搜索工具拿到三条搜索结果然后它基于这三条结果再判断要不要继续点进详情页详情页看完后再决定要不要总结给用户。所以工具结果不是系统的终点而是模型下一轮推理的输入。工具是 Agent 的手脚模型仍然是大脑。如果是 reasoning modelOpenAI 还特别建议在多轮 function calling 里把相关 reasoning items、function call items 和 function call output items 一并保留进上下文避免模型在链路中“断片”。这说明多步工具调用不是几次孤立 API 调用而是一条连续推理链。为什么有的 Agent 调一次工具就结束有的会连调很多次因为工具调用本来就不是单步机制而是循环机制。一次调用结束后模型会再次判断我现在信息够了吗可以直接回答了吗还是还要继续调下一个工具这就是标准的 agent loop。LangChain 的官方描述就是模型调用与工具执行两步循环往复直到模型决定结束。支持多个顺序工具调用、并行工具调用、基于前一步结果的动态工具选择本质上都只是这个 loop 的不同展开方式。OpenAI 的 function calling 和 Assistants/Responses 文档也都明确支持一轮触发多个工具调用以及并行 function calling。所以你看到一个 Agent 能先检索、再读文件、再执行代码、最后写总结本质上不是“模型突然变复杂了”而是这个工具调用循环被跑了多轮。总结Function Calling / Tool Use 不是模型自己去执行工具而是模型先输出“该怎么调用”的结构化请求外部程序替它执行再把结果送回模型完成闭环。模型决定要不要调、调哪个、参数怎么填系统决定能不能调、怎么调、结果怎么回两者合起来才构成一个真正能“做事”的 Agent。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多文章