了解OpenAI function call
国内各种智能体也都推出了,腾讯的元宝/元器,字节的豆包,月之暗面的Kimi+等等,这些智能体背后都用到了关键技术function call,那什么是function call呢?
这里我实际使用了下混元和OpenAI的,来梳理下function call怎么玩的。
Function Call
先说概念,顾名思义,即函数调用。
但注意从AI API上来看,AI本身并不帮你直接调用函数,而是根据我们事先定义的Function Schema,再结合用户的输入,确定调用哪个函数,以及函数参数。
所以Function Call一种用户意图识别。
交互流程
定义工具列表
1
2
3
4
5
6
7
8
9
10
11
12tools: [{
type: "function", function: {
name: "get_realtime_weather", description: "获取当前的天气情况", parameters: {
type: "object", properties: {
city: {
type: "string", description: "城市名称"
}
}, required: ["city"], additionalProperties: true,
}
}
}], // 工具选项,当为string类型时,可选参数为"none"/"auto", "none"表示不会使用工具,"auto"表示模型自行选择生成回复或调用工具;当为object类型时,强制模型调用指定的function
tool_choice: "auto"
比如我这里定义这样一个函数,参数的话,只有城市。这里我限制了城市是必填参数。
用户发起问题
我明天应该穿什么
,AI识别出跟天气有关,而上面定义的函数又约束了城市为必填参数,因此会引导用户继续回答城市信息为了给您提供合适的穿衣建议,我需要知道您所在的城市。请问您能告诉我您所在的城市名称吗?(城市名称为必填项)
用户回答
北京
AI根据城市确定满足了调用
get_realtime_weather
函数的条件,因此返回了意图识别后的函数和对应参数1
2
3
4
5{
id: 'call_cqs8e7k2c3m5dtj9a9tg',
type: 'function',
function: { name: 'get_realtime_weather', arguments: '{"city":"北京"}' }
}根据AI确定的函数和参数,进行实际调用,然后可以将调用后的天气结果,返回给AI
1
2
3
4{
"role": "tool",
"content": "北京 天气晴朗,微风,最高气温27摄氏度,最低气温17摄氏度"
}AI根据函数调用结果组织语言,再次返回给用户即可
1
2{"created":1723369252,"id":"b097e75efe3d328fa0f6ecc1f884e908","model":"hunyuan","version":"202403121316","choices":[{"finish_reason":"stop","message":{"role":"assistant","content":"根据查询到的天气情况,北京明天天气晴朗,微风,最高气温27摄氏度,最低气温17摄氏度。建议您可以穿着长袖衬衫或薄型外套,搭配长裤。如果您对温度比较敏感,可以随身携带一件轻薄的外01,"completion_tokens":50,"total_tokens":151}}
如上就是一次完整的函数调用过程。
这里贴下完整的message信息
1 | [ |
Agent
AI平台支持可视化搭建自定义Agent,实际上是将各种能力进行了组合,而Function Call是关键能力,正如上述所说的意图识别。
有了Function Call即可以调用任何一个工具/函数的能力了。
写在最后
没玩过function call的可以试试。