OpenAI功能调用
#网络开发人员 #python #openai #chatgpt

图片来源:OpenAI

你好,编码人员!如果您一直在探索AI和聊天机器人的世界,那么您可能会听说Openai令人惊叹的语言模型GPT-4及其对应物GPT-3.5 Turbo。它们是改变我们与技术互动方式的强大工具。

在这篇文章中,我们正在研究他们的迷人功能之一:函数调用。即使您是初学者,我们将揭开它的含义,为什么有用以及如何使用它。因此,喝杯咖啡,坐下来,让我们开始吧!

什么是函数调用?

函数在GPT-4和GPT-3.5 Turbo的上下文中调用是这些模型根据用户查询来理解和生成特定功能调用的JSON对象的能力。这并不意味着模型正在执行该函数,而是为您提供必要的信息来调用您自己的代码。

为什么函数调用有用?

此功能开辟了一个可能性的世界。您可以:

  • 创建聊天机器人通过调用外部API(例如天气API)来回答问题。
  • 将自然语言转换为API呼叫(想象一下“谁是我的顶级客户?”变成一个实际的API呼叫)。
  • 从文本块中提取结构化数据。

那只是刮擦表面!

如何使用函数调用

函数调用涉及四个主要步骤:

  1. 使用用户查询和一组函数调用模型。您描述了要在分析用户输入时要考虑的功能。
  2. 检查模型是否为函数调用生成JSON对象。如果模型认为需要根据用户查询调用函数,则它将生成JSON对象。
  3. 解析JSON并调用您的功能。从模型中获取输出并使用适当的参数调用您的功能。
  4. 再次通过功能响应调用模型。让模型总结给用户的结果。

让我们看一个python示例:

python
import openai
import json

# A dummy function that always returns the same weather information
def get_current_weather(location, unit="fahrenheit"):
    weather_info = {
        "location": location,
        "temperature": "72",
        "unit": unit,
        "forecast": ["sunny", "windy"],
    }
    return json.dumps(weather_info)

def run_conversation():
    messages = [{"role": "user", "content": "What's the weather like in Boston?"}]
    functions = [
        {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        }
    ]

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=messages,
        functions=functions,
        function_call="auto",
    )
    response_message = response["choices"][0]["message"]

    if response_message.get("function_call"):
        available_functions = {"get_current_weather": get_current_weather}
        function_name = response_message["function_call"]["name"]
        function_to_call = available_functions[function_name]
        function_args = json.loads(response_message["function_call"]["arguments"])
        function_response = function_to_call(
            location=function_args.get("location"),
            unit=function_args.get("unit"),
        )

        messages.append(response_message)
        messages.append(
            {"role": "function", "name": function_name, "content": function_response}
        )
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=messages,
        )
        return second_response

print(run_conversation())

示例礼貌OpenAI

此脚本模仿与用户询问波士顿天气的聊天机器人的交互。 run_conversation函数使用GPT-3.5 Turbo的功能调用功能来处理对话。

处理幻觉输出

有时,该模型可能会生成未提供的函数调用 - 我们将这些幻觉输出称为。为了减轻这种情况,请使用系统消息提醒模型仅使用已提供的功能。

结论

就是这样!通过此简单的介绍,您现在准备探索在GPT-4和GPT-3.5 Turbo中使用的功能世界。这是一个强大的工具,可以帮助您构建更高级和交互式聊天机器人或数据提取方法。因此,不要等待 - 开始编码,看看这些惊人的工具可以将您带到哪里!