各位码农大家好!如果您一直在探索人工智能和聊天机器人的世界,您可能听说过 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 中的函数调用世界了。它是一个功能强大的工具,可以帮助您构建更高级的交互式聊天机器人或数据提取方法。所以不要等待 - 开始编码,看看这些神奇的工具可以带您去哪里!