函数调用

让 LLM 与外部 API 互动!

强制 JSON Schema 食谱中所述,LLM 现在擅长生成符合特定语法的输出。我们可以将这种 LLM 能力与它们的推理能力结合起来,让 LLM 与外部 API 进行交互。这称为函数(或工具)调用。 简而言之,函数调用:

  1. 在可以使用外部 API 回答问题时通知用户

  2. 以 API 的格式生成有效请求

  3. 将 API 的响应转换为自然语言答案

函数调用目前在 AnyscaleTogether AIFireworks AIGoogle GeminiOpenAI 的某些模型上得到支持。使用 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-previewgpt-4-0125-previewgpt-4-1106-previewgpt-3.5-turbo-0125gpt-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

fw-function-call-34b-v0 Fireworks

gemini-1.0-pro

gemini-1.0-pro-001

gemini-1.5-pro-lates Google

Last updated