了解OpenAI function call

国内各种智能体也都推出了,腾讯的元宝/元器,字节的豆包,月之暗面的Kimi+等等,这些智能体背后都用到了关键技术function call,那什么是function call呢?

这里我实际使用了下混元和OpenAI的,来梳理下function call怎么玩的。

https://cdn.openai.com/API/docs/images/function-calling-diagram.png

Function Call

先说概念,顾名思义,即函数调用。

但注意从AI API上来看,AI本身并不帮你直接调用函数,而是根据我们事先定义的Function Schema,再结合用户的输入,确定调用哪个函数,以及函数参数。

所以Function Call一种用户意图识别。

交互流程

  1. 定义工具列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tools: [{
    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"

比如我这里定义这样一个函数,参数的话,只有城市。这里我限制了城市是必填参数。

  1. 用户发起问题我明天应该穿什么,AI识别出跟天气有关,而上面定义的函数又约束了城市为必填参数,因此会引导用户继续回答城市信息

    为了给您提供合适的穿衣建议,我需要知道您所在的城市。请问您能告诉我您所在的城市名称吗?(城市名称为必填项)

  2. 用户回答北京

  3. AI根据城市确定满足了调用get_realtime_weather函数的条件,因此返回了意图识别后的函数和对应参数

    1
    2
    3
    4
    5
    {
    id: 'call_cqs8e7k2c3m5dtj9a9tg',
    type: 'function',
    function: { name: 'get_realtime_weather', arguments: '{"city":"北京"}' }
    }
  4. 根据AI确定的函数和参数,进行实际调用,然后可以将调用后的天气结果,返回给AI

    1
    2
    3
    4
    {
    "role": "tool",
    "content": "北京 天气晴朗,微风,最高气温27摄氏度,最低气温17摄氏度"
    }
  5. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 [
{ role: 'user', content: '我明天应该穿什么?' },
{
role: 'assistant',
content: '为了给您提供合适的穿衣建议,我需要知道您所在的城市。请问您能告诉我您所在的城市名称吗?(城市名称为必填项)'
},
{ role: 'user', content: '北京' },
{
role: 'assistant',
content: '调用天气查询工具,输入参数为用户所在的城市北京。\n' +
'\t\n' +
'\t现在已经获得了用户所在的城市信息,可以使用天气查询工具来获取明天的天气情况。根据用户提供的城市信息和当前日期,可以计算出明天的日期,并查询那天的天气情况。',
tool_calls: [ [Object] ]
},
{ role: 'tool', content: '北京 天气晴朗,微风,最高气温27摄氏度,最低气温17摄氏度' },
{
role: 'assistant',
content: '根据查询到的天气情况,明天北京天气晴朗,微风,最高气温27摄氏度,最低气温17摄氏度。建议您可以穿着长袖衬衫或薄型外套,搭配长裤。如果您对温度比较敏感,可以随身携带一件轻薄的外套以防温度变化。'
}
]
https://static.1991421.cn/2024/2024-08-11-180536.jpeg

Agent

AI平台支持可视化搭建自定义Agent,实际上是将各种能力进行了组合,而Function Call是关键能力,正如上述所说的意图识别。

有了Function Call即可以调用任何一个工具/函数的能力了。

写在最后

没玩过function call的可以试试。