函数调用
让 LLM 与外部 API 互动!
如强制 JSON Schema 食谱中所述,LLM 现在擅长生成符合特定语法的输出。我们可以将这种 LLM 能力与它们的推理能力结合起来,让 LLM 与外部 API 进行交互。这称为函数(或工具)调用。 简而言之,函数调用:
在可以使用外部 API 回答问题时通知用户
以 API 的格式生成有效请求
将 API 的响应转换为自然语言答案
函数调用目前在 Anyscale、Together AI、Fireworks AI、Google Gemini 和 OpenAI 的某些模型上得到支持。使用 Portkey,您可以轻松地在各种提供者之间实验函数调用,并获得将其投入生产的信心。
让我们通过一个例子来理解它是如何工作的:
我们希望 LLM 告诉我们今天德里(Delhi)的温度。我们将使用“天气 API”来获取天气:
import Portkey from "portkey-ai";
const portkey = new Portkey({
apiKey: "PORTKEY_API_KEY",
virtualKey: "ANYSCALE_VIRTUAL_KEY",
});
// 描述天气 API 的功能和期望
let tools = [
{
"type": "function",
"function": {
"name": "getWeather",
"description": "获取给定地点的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
];
let response = await portkey.chat.completions.create({
model: "mistralai/Mixtral-8x7B-Instruct-v0.1",
messages: [
{"role": "system", "content": "您是一个有帮助的助手。"},
{"role": "user", "content": "德里的天气怎么样 - 请以 JSON 格式回复"}
],
tools,
tool_choice: "auto", // auto 是默认值,但可以显式设置
});
console.log(response.choices[0].finish_reason) 在这里,我们定义了天气 API 对其请求的期望,在 tool 参数中设置了 tool_choice 为 auto。因此,根据用户消息,LLM 将决定是否应该进行函数调用以满足请求。在这里,它将选择这样做,我们将看到以下输出:
我们只需获取 LLM 发出的 tool_call,并将其传递给我们的 getWeather 函数 - 它应该返回一个适当的响应。然后我们将该响应发送给我们的 LLM 以完成循环:
我们应该看到这个最终输出:
函数调用工作流程
回顾一下,进行函数调用有4个关键步骤,如下所示:

支持的模型
虽然大多数提供者都有标准的函数调用,如上所示,但Together AI上的模型和OpenAI的部分新模型(gpt-4-turbo-preview、gpt-4-0125-preview、gpt-4-1106-preview、gpt-3.5-turbo-0125和gpt-3.5-turbo-1106)也支持并行函数调用 - 在这里,您可以在单个查询中传递多个请求,模型将为每个查询选择相关工具,并返回一个包含唯一ID的tool_calls数组。 (点击这里了解更多信息)
mistralai/Mistral-7B-Instruct-v0.1
Anyscale
✅
❌
mistralai/Mixtral-8x7B-Instruct-v0.1
Anyscale
✅
❌
mistralai/Mixtral-8x7B-Instruct-v0.1
Together AI
✅
✅
mistralai/Mistral-7B-Instruct-v0.1
Together AI
✅
✅
togethercomputer/CodeLlama-34b-Instruct
Together AI
✅
✅
gpt-4 和之前的版本
OpenAI / Azure OpenAI
✅
✅ (部分)
gpt-3.5-turbo 和之前的版本
OpenAI / Azure OpenAI
✅
✅ (部分)
firefunction-v1
Fireworks
✅
❌
Last updated