返回列表

函数调用(Tool Calling):Agent 怎么"动手"调外部系统

模型刚能对话时,只能产出连贯文本,工程界为了把模型和外部系统接上,约定让模型输出一段结构化指令,由代码去真正执行。这种方式后来被多家模型支持,名字叫函数调用,也叫 Tool Calling。

 

函数调用是 Agent 从“陪聊”跨进“办事”的那道门槛,没有它,模型难以接入你的业务系统。下面拆解它的定义、原理、工程价值和落地方式,帮你判断自己的系统该不该、怎么接上这层能力。

 

 

函数调用是什么

 

 

函数调用指模型根据用户问题,生成一段结构化调用指令,写明要执行的工具名称和参数取值。

 

它和普通的文本回复不一样。普通回复是自然语言,系统通常无法直接据此操作数据库或接口。函数调用输出带字段的 JSON 结构,例如 {"tool":"query_order","params":{"order_id":"12345"}}。系统解析这段结构,调用对应服务,拿到结果再交给模型组织答案。

 

这一步把"理解"和"执行"拆成两层:模型负责读懂意图、挑工具、填参数;系统负责跑通接口并返回数据。

 

 

从意图到执行的四步链路

 

 

函数调用跑通需要四个环节配合。

 

第一步,注册工具。你把可用工具的名称、功能描述、参数 schema 告诉模型,通常是一组 JSON Schema,写清每个参数的类型、是否必填、取值范围。

 

第二步,模型决策。模型读用户问题并比对工具描述,判断该调哪个、参数是什么,输出结构化指令。

 

第三步,系统执行。你的代码解析指令,发起 REST API 请求或运行本地函数,取得返回值。

 

第四步,结果回灌。执行结果作为新消息送回模型,模型据此生成最终回复,或继续发起下一轮调用。

 

这条链路让模型能够串联多个工具。先查订单状态,接着调物流接口取轨迹,最后把结果汇成一句人话回复用户。模型通常不存储真实业务数据,它靠函数调用去取、去写,数据源头通常留在你的系统里。

 

 

常见误区

 

 

误区一,以为写完工具描述模型就调得对。参数抽取常常出错:用户说"上周的订单",模型可能填成具体日期却算错时区,也可能漏掉必填字段导致接口报错。工具描述要写清约束,系统侧还要做参数校验,不能全信模型输出。

 

误区二,以为调用越多越好。每多一个外部调用,就多一处权限暴露和失败概率。没做鉴权、没限频、没超时控制,调用越多窟窿越大。按业务最小必要原则开放工具,每个接口配权限边界和输入校验。一个常被忽略的维护成本:参数 schema 一旦变更,所有调用方要同步,否则旧字段名可能导致请求失败。

 

误区三,忽略结果可信度。模型拿到返回可能误读或编造,关键环节要让人确认,或加规则校验返回结构。给每个外部调用设超时,单接口响应经验上通常建议控制在较低延迟水平,否则一个慢接口可能影响整条长流程。

 

 

函数调用能办哪些事

 

问数场景。用户用自然语言问"华东区本月销售额",Agent 调数据库接口取数,再生成图表和解读,模型和数据库之间靠函数调用打通。

 

智能客服。用户问"我的退款到哪了",Agent 调订单接口和物流接口,拼出当前状态再回复,不必让用户自己翻多个页面。

 

代码审查。Agent 调代码扫描工具,拿到静态检查结果,整理成修改建议。

 

会议纪要。Agent 调语音转写和摘要工具,把录音变成结构化纪要。

 

这些场景有一个共同点:模型不保管业务数据,它通过函数调用去取、去写,有助于保持数据源头统一,也有助于避免把敏感信息塞进模型上下文。

 

 

小艾智能体里的函数调用落地

 

 

小艾智能体的动态 Agent 编排系统把函数调用做成了可配置能力。它的 REST API 节点对应"调用外部接口"这一步,你在 YAML 或 JSON 里写明地址、方法、参数映射,工作流运行时可支持发起请求。Skill Node 对应"调用本地或内置能力",系统启动时自动扫描技能目录并注册,工作流通过 Skill Node 调度代码审查、会议纪要这类原子能力。

 

在小艾的问数场景里,Agent 工作流可用 REST API 节点连数据库取数;在客服场景里,可用 Skill Node 或 REST API 节点对接下单、查询接口。条件路由节点可支持 Agent 根据返回结果选择下一步分支,状态传递可将前一个节点输出传递给下一个节点。函数调用在这里不仅是概念,更是工作流里可拖拽、可组合的节点。