022、Function Calling实战:工具定义与调用
💡 核心导读:还记得上回咱们聊的ReAct模式吗?它让模型学会了“思考-行动-观察”的循环,但真正让这种循环落地的关键,就是Function Calling——它就像给模型配了一把瑞士军刀,让LLM能调用外部工具。今天,咱们就死磕OpenAI的Function Calling机制,从原理到Schema定义,再到多工具选择与调用,手把手带你踩坑。
文章目录
- 022、Function Calling实战:工具定义与调用
- 一、核心原理:为什么Function Calling是Agent的“手脚”?
- 1. 从ReAct到Function Calling的桥接
- 2. 底层机制:Chat Completion API的“函数感知”
- 3. 函数调用的三种模式
- 二、工具Schema定义:让模型“读懂”你的API
- 1. Schema的“血肉”结构
- 2. 参数类型的“隐形坑”
- 3. 多工具定义:让模型“选择困难”
- 三、实战:完整的多工具调用流程
- 1. 一次真实的对话循环
- 2. 错误处理的艺术
- 四、高级技巧:让Function Calling更“智能”
- 1. 动态函数注入
- 2. 函数调用的“温度”控制
- 3. 流式输出的函数调用
- 五、性能与成本优化
- 1. Token消耗的计算
- 2. 调用频率控制
- 📚 参考资料
- 🎯 下期预告
一、核心原理:为什么Function Calling是Agent的“手脚”?
1. 从ReAct到Function Calling的桥接
咱们上回说ReAct模式时,我提过一个坑:当时我天真地以为让模型直接输出JSON格式的“action”字段就行,结果模型经常输出格式错误,或者动作参数不完整。后来我才明白,Function Calling不是让模型自由发挥,而是通过结构化定义来约束模型的输出。
OpenAI的Function Calling本质是:模型不直接执行函数,而是输出一个结构化的函数调用请求。咱们的应用层拿到这个请求后,再实际调用对应函数。这就像模型说:“我需要调用get_weather函数,参数是{'location': '北京'}”,然后咱们的代码去执行。
2. 底层机制:Chat Completion API的“函数感知”
当咱们在API调用中传入functions参数时,OpenAI的模型会做两件事:
- 理解函数定义:模型会解析每个函数的名称、描述、参数Schema,就像咱们读API文档一样。
- 决策是否调用:模型根据用户输入和函数描述,判断是否需要调用某个函数。如