Skip to main content

Function Calling

Function Calling

通过提示词的形式,将工具箱带过去。

  1. 繁琐:大段大段的提示词,仅仅是为了约束大模型的输出。
  2. 不标准:每个开发者的提示词的描述千差万别。
  3. 约束力不高:即便使用了语气最重的提示词,大模型的底层原理决定了它总会有不按照要求回复的情况。

JSON Schema

为了解决这个问题,OpenAI 在 2023 年 6 月推出了 Function Calling,通过 JSON Schema 格式来进行标准化,主要标准两个部分:

提供工具箱

const tools = [
{
type: "function",
name: "get_weather",
description: "Get current temperature for provided coordinates in celsius.",
parameters: {
type: "object",
properties: {
latitude: { type: "number" },
longitude: { type: "number" }
},
required: ["latitude", "longitude"],
additionalProperties: false
},
strict: true
}
]

返回工具请求

[
{
"type": "function_call",
"id": "fc_12345xyz",
"call_id": "call_12345xyz",
"name": "get_weather",
"arguments": "{\"latitude\":48.8566,\"longitude\":2.3522}"
}
]

可以在 OpenAI 官方文档 看到这个过程,也可以在 Playground 这里体验整个过程。

为什么采用 Function Calling 能约束大模型,让它要一定按照要求输出一个 JSON ?其实就是大模型微调的效果。

也正因为如此,并非所有的模型都支持 Function Calling,可以在 Hugging Face 上面查询某一模型是否支持 Function Calling 特性。

Hugging Face 是目前最主流的开源 AI 模型托管与使用平台,相当于 AI 界的 GitHub.

Function Calling的格式不一致:

deepseek

tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"]
},
}
}]

GPT

const tools = [{
type: "function",
name: "get_weather",
description: "Get current temperature for provided coordinates in celsius.",
parameters: {
type: "object",
properties: {
latitude: { type: "number" },
longitude: { type: "number" }
},
required: ["latitude", "longitude"],
additionalProperties: false
},
strict: true
}]

Claude

"tools": [{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}]