OpenAI 刚刚发布了 ChatGPT API.这是一个调用 GPT-3.5-Turbo 的 API,与 ChatGPT 产品中使用的模型相同。
对于那些已经熟悉 Python 中的 OpenAI API 的人来说,学习如何使用 ChatGPT API 应该很简单,但仍有一些概念是该 API 独有的,我们将在本指南中学习。
让我们探索 Python 中的 ChatGPT API.
注意:API定价为每1K代币0.002美元。不过,你可以免费使用信用卡。现在我似乎有了另一个理由 取消我的ChatGPT Plus订阅.
生成你的 API 密钥
在我们开始使用 ChatGPT API 之前,我们需要登录我们的 OpenAI 帐户和生成我们的API密钥。
请记住,OpenAI 不会在你生成 API 密钥后再次显示它,因此请复制你的 API 密钥并保存它。我将创建一个名为OPENAI_API_KEY的环境变量,它将包含我在本教程中的 API 密钥。
安装库
要使用 ChatGPT API,首先,我们必须通过运行以下命令来安装 OpenAI 库。
pip install openai
你可以使用 OpenAI 库,今天我们将重点关注完成gpt-3.5-turbo。更准确地说,我们将使用“ChatCompletion”gpt-3.5-turbo,它与 ChatGPT 使用的模型相同。
使用 Python 的 ChatGPT API 入门
首先,我们将使用下面我从官方文档中获得的代码片段。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Tell the world about the ChatGPT API in the style of a pirate."}
print(completion.choices[0].message.content)
这是与 API 交互的一种非常简单的方式。要知道的主要一点是,该messages列表有一个包含两个键的字典:roles和content。
简单地说content就是消息的内容,主要roles有三种:“系统”、“用户”或“助手”。“用户”是给出指令并在上面的代码中使用的人。
如果我们运行上面的代码,我们将得到以下结果。
Ahoy matey, ye be lookin' for a chat API that'll blow ye away? Look no further than ChatGPT API ye ol' sea dog!
这与 ChatGPT “以web的方式向世界介绍 ChatGPT API ”功能是一样的。
现在,我们从文档中获取的代码片段是非常基本的,我们可以添加更多的代码来与 API 交互,就像我们在与 ChatGPT 聊天一样。此外,我们还应该添加用于设置助手行为的system角色和用于存储先前响应的assistant角色。
管理员角色
让我们添加一个系统角色来设置助手的行为。你可以告诉助理是一个“将英语翻译成法语的有用助理”或任何你想要的东西。
为了简单起见,我将通过消息列表将系统角色设置为“友好的助手”(我让 ChatGPT 在工作面试中表现为招聘人员)。
messages = [
{"role": "system", "content" : "You’re a kind helpful assistant"}
现在,我将把角色附加users到前面的列表中,并添加输入函数,以便与 API 交互,就像我们在使用 ChatGPT 一样。
import openai
content = input("User: ")
messages.append({"role": "user", "content": content})
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
chat_response = completion.choices[0].message.content
print(f'ChatGPT: {chat_response}')
现在,如果我们问“谁是第一个登上月球的人?”,系统就会表现得像一个“有用的助手,告诉我们答案”。
User:who was the first man on the moon?
ChatGPT:The first man on the moon was Neil Armstrong on July 20,1969.
不过只有一个小细节。assistant没有存储以前的响应,因此系统可能不会记住我们以前的响应并给出正确的响应。
让我们现在问“他来自哪里?”然后“他有多高?”我现在将添加一个 while 循环来问多个问题。
正如你所看到的,现在系统正在回答每个新问题,但它正在从以前的答复中积累信息。
我们可以用assistant角色来解决这个问题。
助理角色
我们使用助理角色来存储先前的响应。通过存储以前的响应,我们可以建立对话历史记录,当用户指令引用以前的消息时,对话历史记录就会派上用场。
使用下面的代码,我们将助理角色添加到消息列表中。
messages.append({"role": "assistant", "content": chat_response})
请注意,在内容中,我们必须添加聊天响应,以便存储响应。
现在,我们将上一行代码添加到 while 循环中。
import openai
while True:
content = input("User: ")
messages.append({"role": "user", "content": content})
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
chat_response = completion.choices[0].message.content
print(f'ChatGPT: {chat_response}')
messages.append({"role": "assistant", "content": chat_response})
现在,如果我们问之前问过的问题,我们会得到更好的回答。
就是这样!现在你知道如何使用这 3 个角色,你可以使用你想要的 API.除了请求主体中的模型和消息之外,你还可以添加其他参数来定制你的请求。
以下是一些额外的参数:
-
max_token:在完成中生成的最大标记数(here你可以看到 OpenAI 使用的提交数)
-
temperature:要使用的取样比例。接近 1 的值将给模型带来更多的风险/创造性,而接近 0 的值将产生定义明确的答案。
-
n:为每个输入消息生成的聊天完成选项的数量。