如何利用OpenAI的函数调用特性
函数调用能实现哪些功能?
简单来说,函数调用功能可以助你在请求方法时构建结构化的数据。因为生成模型的特性,它产生的数据往往是无结构的,即使在提示(prompt)中指定了输出格式,但实际输出的结果往往偏离预期。
如果你曾经使用过Langchain,那么你一定知道其中有一个叫做OutputParser
的模块,这个模块中定义了许多用于快速结构化数据的工具。
然而,面对大规模的模型,这些工具并不总是那么有效。因为模型的输出结果难以预测,这使得在一些复杂场景下,模型输出的结果总是无法被正确解析。即使是使用了Langchain中的OutputFixingParser
,也难以让整个流程变得流畅。
因此,我们仍然需要回归到OpenAI官方推出的函数调用
特性。在官方提供的一个示例中,它使用function calling
让GPT模型提取自然语言中可用于函数调用的信息,然后利用第三方接口获取实时信息,最后生成一个全新的总结。
如何使用函数调用以及其工作原理?
接下来,让我们借助官方的示例来解析一下如何使用function calling
这个特性,以及它究竟是如何运作的。
第一步:携带函数调用去请求GPT接口
首先,你需要把一个问题和函数调用一起,作为请求提交到GPT的接口。
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"