提问人:SkyBest I 提问时间:11/11/2023 更新时间:11/14/2023 访问量:41
Openai function_calling不执行该函数
Openai function_calling not execute the function
问:
使用函数调用,openai 不会执行函数,而是打印带有参数的函数,请参见下文:
我在 colab 中使用本地 LLM (Llama2)。
已安装 OpenAI 版本 0.27.8
!pip install openai==0.27.8
os.environ['OPENAI_API_KEY'] = 'NULL'
os.environ['OPENAI_API_BASE'] = "http://localhost:8000/v1"
#import OpenAI from "openai";
openai.api_base = os.getenv('OPENAI_API_BASE')
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_version = "2023-07-01-preview"
这里的功能:
def get_current_weather(location):
"""Get the current weather in a given location"""
url = "https://weatherapi-com.p.rapidapi.com/forecast.json"
querystring = {"q":location, "days":"1"}
headers = {
"X-RapidAPI-Key": "xxxxx",
"X-RapidAPI-Host": "weatherapi-com.p.rapidapi.com"
}
response = requests.get(url, headers=headers, params=querystring)
weather_info = {
"location": response.json()['location']['name'],
"temperature": response.json()['current']['temp_c'],
}
print(json.dumps(weather_info))
return json.dumps(weather_info)
它返回以下结果:
response=get_current_weather('Naples, Italy')
{"location": "Naples", "temperature": 17.0}
这里是函数的架构
function_descriptions = [{
"name": "get_current_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
},
"required": ["location"],
},
}]
聊天到此结束
completion = openai.ChatCompletion.create(
model="gpt-35-turbo-0613",
messages=[{"role": "user", "content": user_prompt}],
functions=function_descriptions,
function_call={"name": "get_current_weather"}
#function_call="auto"
)
output = completion.choices[0].message
print(output)
{
"role": "assistant",
"content": "Ah, thank you for asking! The current temperature in Naples, Italy is approximately {get_current_weather({location: \"Naples, Italy\"})}. Would you like me to tell you more about the weather there?<|END_OF_ASSISTANT|></s>"
}
为什么它不执行函数,而只是打印调用 {get_current_weather({location: “那不勒斯,意大利”})} ???
答:
1赞
Daniel Benzaquen
11/14/2023
#1
大型语言模型 (LLM) 无法直接运行代码。他们的专长在于处理和生成文本,其中包括代码片段,但不会扩展到实际执行。如果目标是执行代码,则有两种选择:
服务器端执行: 在这种方法中,代码在 OpenAI 或 Google 等实体拥有的服务器上执行。但是,由于存在任意代码执行的风险,此方法会带来安全问题。需要注意的是,您并没有将实际函数传递给模型,而只是在 中提供了描述。
get_current_weather
function_descriptions
客户端处理: 许多公司选择客户端处理,其中模型标识的参数被发送到客户端,以便用户可以处理(参数的功能选择和识别是该功能的实际好处)。为此,需要在客户端仔细管理模型的输出。 收到模型的响应后,可以通过检查 来解析结果。如果您正在使用并且模型确定需要函数调用,则返回 .您可以使用此信息智能地解析输出并在服务器上执行代码,从而保持对执行过程的控制。
finish_reason
response.choices[0].finish_reason
function_call="auto"
finish_reason='function_call'
评论