智能体

Function Calling:让只会动嘴的大模型,学会动手用锤子

2023 年 06 月 25 日 约 1703 字 · 5 分钟 智能体
Function Calling:让只会动嘴的大模型,学会动手用锤子

周末翻笔记翻到这个话题,整理一下。

OpenAI 这阵子刚给接口塞了个新功能,叫 function calling(函数调用 / 工具调用)。圈子里立马有人开始喊「工具调用元年」——听着有点中二,但这回我觉得,他们没夸张。

为啥这么说?因为在此之前,大模型一直有个特别尴尬的毛病:它什么都懂,但什么都不会干。

病根:它是个「只会动嘴」的实习生

你让大模型回答「今天北京天气咋样」,它会一脸真诚地告诉你:「抱歉,我无法获取实时信息。」——它不是不想答,是真没法答,因为它肚子里那点知识是训练时喂进去的,早就过期了,而且它也没法上网、没法查数据库、没法跑代码。

它就像一个博览群书但从不起身的实习生:你问他理论,他对答如流;你让他「去查一下今天的汇率」「帮我把这个数算一下」「订张明天的票」,他只会礼貌地告诉你「以下是查汇率的几种方法」,然后稳如泰山地坐着不动。

毛病出在哪?它只会动嘴,不会动手。 它没有「手」,没法碰到真实世界里的工具。

function calling 就是给它配了个工具箱

function calling 干的事,说穿了特别朴素:你提前告诉模型「我这儿有哪些工具可以用」,它需要的时候,就喊你帮它用。

注意一个关键点——模型自己并不真的去查天气、跑代码。它干的是「决定要用哪个工具、该传什么参数」,然后把这个决定吐出来,由你(你的程序)去真正执行,再把结果递回给它。它负责动脑和动嘴,你负责动手。

sequenceDiagram
  participant U as 用户
  participant M as 大模型
  participant T as 你的程序/工具
  U->>M: "北京今天天气咋样?"
  M->>T: "请调 查天气(城市=北京)"
  T->>T: 真正去查
  T-->>M: "返回:晴,26 度"
  M->>U: "北京今天晴,26 度"

看明白这个来回了吗?模型在第二步并没有自己变出天气,它只是举手说「这题该用查天气这个工具,参数填北京」。真正干活的是你的程序。等结果回来了,它再用人话把结果讲给用户听。

这就好比那个实习生终于学会了一句话:「这事我办不了,但我知道该找隔壁的查天气小哥,参数给他报『北京』就行。」——他还是不亲自动手,但他知道该喊谁、该说啥,这就够了。

为什么说这是 Agent 的「前置能力」

这阵子大家天天念叨 AI Agent(智能体),说它能「自己规划、自己干活」。但你有没有想过一个最基础的问题:一个只会输出文字的模型,凭什么去「干活」?

答案就是 function calling。它是 Agent 真正能落地的地基

 没有工具调用有了 function calling
能力边界只能聊天、生成文字能查、能算、能操作外部系统
信息时效卡在训练那一刻能拿到实时、真实的数据
在 Agent 里的角色一个嘴炮顾问一个能动手的执行者

你想,一个 Agent 要「自动帮我订机票」,它至少得能:查航班(一个工具)、比价(一个工具)、下单(一个工具)。这每一步背后,都是一次 function calling。没有工具调用,所谓的「自主智能体」就是空中楼阁——一个再会规划的大脑,没有手脚也只能在原地空想。

所以这回的「工具调用元年」这个说法,我是认的。它把大模型从「一个会聊天的百科全书」,往「一个能干活的助手」推进了关键一步。

几句提醒

新东西虽好,但我还是得啰嗦两句,毕竟它不是魔法:

  • 它只是「举手说要用啥」,执行和兜底全靠你。工具报错了、参数传歪了,得你来接住,模型可不会替你擦屁股。
  • 它依然会犯幻觉。模型可能自信地调用一个根本不存在的工具,或者把参数填得驴唇不对马嘴——别忘了它骨子里还是那个爱编故事的考生。
  • 工具的描述要写清楚。你怎么跟模型介绍这个工具、参数啥含义,直接决定它用得准不准。这又绕回了提示词那点功夫——把工具说明书写明白,本身就是门手艺。

说到底,function calling 没让大模型变得更聪明,它做的是更实在的事:给这个只会动嘴的脑子,接上了能够触碰真实世界的手。 而当一个东西既会动脑、又能动手,还能看着结果决定下一步该咋办的时候——离我们整天挂在嘴边的那个「智能体」,也就不远了。


这个话题还没琢磨透,回头继续。