自ChatGPT 3.5/4 双双升级:更长,更便宜,更开放,更可控发出去之后,有朋友问怎么接入 API。
什么是函数调用?
函数调用指 Chat-GPT 模型会自动逻辑判断后,调用在代码中预先定义好的某个或者多个函数,获得返回的信息后,再用自然语言形式回复用户。
以官方的回答天气情况时,调用天气网站的提供的API来回答用户问题举例。
调用过程两部分:
一、定义函数,
functions = [{"name": "get_current_weather","description": "获取指定地点的当前天气","parameters": {"type": "object","properties": {"location": {"type": "string","description": "城市和州,例如:San Francisco, CA",},"unit": {"type": "string", "enum": ["washington", "boston"]},},"required": ["location"],},}]
二、发消息给ChatGPT,模型决定要不要调用,调用则把外部API返回信息再发给模型,模型把包括函数返回信息的完整回复返回给用户。
全部完整代码如下:
import openai
import json
Import os
openai.api_key = os.getenv("OPENAI_API_KEY")// 此函数为固定返回相同天气的示例的函数,实际应用中替换成你需要调用的外部API
def get_current_weather(location, unit="boston"):"""获取指定地点的当前天气"""weather_info = {"location": location,"temperature": "72","unit": unit,"forecast": ["sunny", "windy"],}return json.dumps(weather_info)def chat(content):content = "What's the weather like in Boston?"# 1:将用户的提问和函数定义发送给GPTmessages = [{"role": "user", "content": content}]functions = [{"name": "get_current_weather","description": "获取指定地点的当前天气","parameters": {"type": "object","properties": {"location": {"type": "string","description": "城市和州,例如:San Francisco, CA",},"unit": {"type": "string", "enum": ["washington", "boston"]},},"required": ["location"],},}]# 2:获取 GPT 的返回response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,functions=functions,function_call="auto", # 是否调用函数,auto是默认值,可以不指定)response_message = response["choices"][0]["message"]# 3:GPT会判断是否需要调用函数,是则返回调用标记为真。if response_message.get("function_call"):# 4:调用函数available_functions = {# 此处可以多个函数"get_current_weather": get_current_weather,} function_name = response_message["function_call"]["name"]fuction_to_call = available_functions[function_name]function_args = json.loads(response_message["function_call"]["arguments"])# 5:获得函数返回信息function_response = fuction_to_call(location=function_args.get("location"),unit=function_args.get("unit"),)# 6:用返回信息封装助手信息结构体messages.append(response_message) # 将助手的回复加入对话messages.append({"role": "function","name": function_name,"content": function_response,}) # 7: 将封装好,包含函数返回信息再发送给GPT,并获得GPT自然语言形式的回答second_response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,) # 从GPT获取一个新的响应,这个响应可以看到函数的响应return second_response# 输出应答
print(run_conversation())
整个用户交互及程序的流程如下:
用户问一个问题,例如“波士顿现在的天气怎么样?”
这个问题被发送给GPT模型,并告知其有一个可以调用的函数get_current_weather。
GPT模型确定它需要调用这个函数来回答用户的问题,所以它返回一个“函数调用”的请求,指定要调用的函数名称和参数。
代码中的运行会查找对应的函数(在这个例子中是get_current_weather),并用GPT模型指定的参数调用它。
函数返回天气信息,这个信息被发送回GPT模型。
GPT模型使用这个天气信息来生成一个回答,例如“波士顿现在的天气是晴朗的,温度是72度”。
也有朋友问:它实际应用场景是什么样的?
问了一下 ChatGPT:
填充模板:可以将特定的信息填充到预定义的模板中,生成个性化的文本,如生成定制化的邮件、通知或报告。
条件逻辑:用于在生成的文本中实现条件分支和逻辑判断,根据特定条件生成不同的文本输出,增强了文本的灵活性和可定制性。
变量和状态管理:可以引入变量和状态管理,使得文本可以跟踪和操作特定的信息,实现更加复杂的任务和交互。
上下文控制:可以在生成文本的过程中引入上下文信息,控制模型对上下文的理解和应答,提高文本的连贯性和一致性。
多模态输入和输出:可以实现多模态数据(如文本、图像、视频等)的输入和输出,更加丰富和多样化的文本生成和理解任务。
ChatGPT
官方给了三个应用场景举例:
创建聊天机器人通过调用外部工具来回答问题
将自然语言转换为 API 调用或数据库查询
从文本中提取结构化数据
我的回答是:例子里只是列举了一个查询天气状况的情况。实际上它有很多场景可以扩展。
chatGPT 模型本质还是一个通用AI模型,它的能力大多数表现文字和图片方面。其次它的知识需要训练,无法做到实时更新数据。虽然它有接近人类的逻辑推理能力,可以根据已知信息来推导问题答案。
应用场景的落地可以往两个方面扩展:
一、实时性的信息获取和加工。例如新闻,天气,交通状况,售票情况,停车位情况,航班情况,考试分数查询等等;
二、垂直领域的能力。例如调用别的人工智能机器人:阿尔法围棋(AlphaGo) 来陪你下棋,调用运输机器人帮你把货物运到目的地,调用专门法律政策类型的智能助手(这类方面问题因为安全和政策的原因,GPT的输出被限制了)帮你查询和准备资料等等。
关注我,领取九大类别,数百篇 AI 学习资源。
一起学习 ChatAI,掌握 AI 工具,不被时代淘汰。