OpenAI Python API – 完整指南

OpenAI是人工智能领域的领先公司。随着ChatGPT、DALL-E、GPT-3和Whisper等软件的公开发布,该公司席卷了整个人工智能行业。每个人都采用 ChatGPT 来更有效地完成工作,而那些未能这样做的人则失去了工作。人工智能时代已经开始,不适应人工智能的人们可能会给他们带来一些困难。 

在本文中,我们将讨论如何利用OpenAI API (应用程序编程接口)来利用 AI 的力量,让您的日常任务变得更加轻松,该 API允许开发人员轻松访问他们的 AI 模型并集成它们使用 Python 集成到他们自己的应用程序中。

OpenAI API是一个强大的基于云的平台,托管在Microsoft Azure上,旨在为开发人员提供对最先进的、预先训练的人工智能模型的无缝访问。该 API 使开发人员能够轻松地将尖端的人工智能功能集成到他们的应用程序中,无论他们选择使用哪种编程语言。通过利用 OpenAI Python API,开发人员可以解锁高级 AI 功能并增强其软件解决方案的智能和性能。

生成 OpenAI API 密钥
为了在 Python 环境中使用 OpenAI 的模型,您必须首先生成 API 密钥。您可以按照以下步骤生成API密钥:

  • 步骤1:创建OpenAI账户后,登录。
  • 第 2 步:登录后,从右上角菜单中选择“个人”,然后选择“查看 API 密钥”。
  • 步骤 3:完成步骤 2 后,包含 API 密钥的页面上将出现“创建新密钥”按钮。单击该按钮会生成一个密钥,您应该将其复制并保存在其他位置,因为在后续步骤中将需要它。


OpenAI包的安装
第 1 步:现在打开您选择的文本编辑器或在线笔记本,例如Google ColabJupyter Notebook。在这里,我们使用 Google Colab 笔记本运行下面所示的命令,以便在 Python 中安装 Open AI 库。
!pip install -q openai

步骤 2:现在将 OpenAI 库导入到您的 Python 环境中,并通过在文本编辑器中执行以下代码行将 API 密钥添加到环境中。

# 将 openai 模块导入您的 openai 环境 ;
import openai 

# 分配 API KEY 以初始化 openai 环境 ;
openai.api_key = '<API_KEY>'

现在您已准备好在 Python 环境中使用 OpenAI。您可以按照以下教程尝试 OpenAI 的最新模型。

提示工程
人工智能提示工程需要为人工智能大脑提供一套独特的指令来提高其智能和响应能力。为了理解我们想要从 ChatGPT 或 GPT-4 等人工智能模型中得到什么,需要轻轻地将它们推向正确的方向。及时的工程设计可以帮助解决这个问题。通过仔细构建提示,可以确保人工智能提供最好的答案。现在,即时工程不仅仅发生一次。调整和试验的过程仍在继续。当我们向人工智能提出问题时,我们会尝试不同的措辞并添加独特的规则。我们似乎正在炮制一种神奇的指令混合物!让我们看一下构建良好提示以生成人工智能准确结果的一些规则。

  • 规则 1:使用最新的人工智能模型来完成您的任务

使用最新的人工智能模型很重要,因为如果不使用最新数据进行更新,人工智能模型往往无法给出准确的结果。例如,ChatGPT 使用截至 2021 年 9 月的数据进行训练,因此无法为您提供 2021 年 9 月之后的信息。而 GPT-4(或 ChatGPT plus)则使用最新数据进行训练,能够生成最新的数据信息。
  • 规则 2:以说明开始提示,并使用“””或### 将您的输入与说明分开。
  • 规则 3:在描述上下文、结果、长度、格式、风格和其他所需特征时,尽可能精确、说明性和彻底。
  • 规则 4:尝试包含示例来说明所需的输出格式。
  • 规则 5:从零样本学习开始,然后是少样本学习。如果两者都不起作用,则进行微调。

Zero-shot:无需接受培训即可完成任务的能力。
Few-shot:在经过有限数量的示例训练后完成任务的能力。
微调:通过使用训练数据微调 GPT-3,您可以提高其在特定任务上的性能。当模型进行微调时,它从训练集中读取文本标记并预测接下来会出现哪个标记。当模型预测错误时,模型的内部权重会更新,以增加下一次正确预测的可能性。在接受足够的训练后,模型最终将学会生成训练数据中显示的标记模式。

  • 规则 6:不要在提示中添加不精确的描述
  • 规则 7:不要提及“不该做什么”,而是尝试在提示中包含“该做什么”
  • 规则 8:专门针对代码生成:使用“引导词”来引导模型走向某种模式。

文本
要执行任何特定于文本的任务,您可以定义以下函数并使用所需的提示执行它。

# 函数,以字符串参数作为参数 ;
def comp(PROMPT, MaxToken=50, outputs=3): 
    使用 OpenAI 的 Completion 模块,该模块可帮助执行 
   任何涉及文本的任务 ;
    response = openai.Completion.create( 
        # 这里使用的型号名称是 text-davinci-003 
       GPT-3  的下还有许多其他型号;
        model="text-davinci-003"
        # passing the user input 
        prompt=PROMPT, 
        # 生成的输出可以有
"max_tokens "数量的标记 ;
        max_tokens=MaxToken, 
        # 一次调用产生的输出数 ;
        n=outputs 
    ) 
    # 创建一个列表来存储所有输出 ;
    output = list() 
    for k in response['choices']: 
        output.append(k['text'].strip()) 
    return output

在这里,我们使用 OpenAI 库中的 Completions 模块生成用户提示文本。这些是与完成模块相关的关键变量:

  • model [必需]:以下 openai 命令可用于确定 openai.Model.list().data 的模型 ID,其中模型名称作为 'id' 字段的值。我们必须选择一个适合我们的模型。
  • prompt提示:生成补全的提示,编码为字符串、字符串数组、标记数组或标记数组数组。请注意,<|endoftext|> 是模型在训练期间看到的文档分隔符,因此如果未指定提示,模型将像从新文档的开头生成一样。
  • max_tokens:完成将生成的最大令牌数。16 是该参数的默认值。
  • temperature温度:采样温度的范围是 0 到 2。与 0.2 等较低值相比,0.8 等较高值将导致更集中和确定性的输出。
  • n:为每个提示生成的答案数。

文本生成提示示例
现在让我们尝试生成文本的一些提示。

PROMPT = """写一个激励伟大的故事,把反面人物当作兔子,把主人公当作乌龟。
让反面人物和主人公为了一个共同的目标相互竞争。
"""
comp(PROMPT, MaxToken=3000, outputs=3)

输出:

['从前,有一只兔子和一只乌龟。两人都想成为最快的,所以他们决定进行一场比赛。 乌龟尽管行动缓慢,但从未放弃, 最终取得了第一,让大家大吃一惊,把兔子甩在了后面。”,“从前,兔子和乌龟为了一个进球而互相竞争。 两人都想在尽可能短的时间内穿过同一条轨道。 到最后,乌龟证明了,无论看起来多快或多慢,真正的伟大在于永不放弃的坚持。 ”重要目标。 兔子速度很快,而乌龟意志坚定,永不放弃。最终,海龟证明了缓慢而稳定地赢得了比赛。”]

提示2:

PROMPT = """写一段客户和商人之间关于购买酒瓶的简短对话。 
客户对购买的酒瓶不满意,而商人则不接受自己的错误;
"""
comp(PROMPT, MaxToken=3000, outputs=1)


输出:

['顾客:“哦,尝尝看,我买的这酒是臭的!”\n商人:“确实,我的眼睛看不到你的不满。” \n客户:“伙计,我想说的是,这是一些垃圾酒!” \n商人:“小心你的言语,沉默中的智慧是坚定的。”']


文本完成提示示例
现在让我们尝试使用 Completions 模块进行一些文本完成提示。

PROMPT = """完成下面客户和工人之间的对话。 
使对话有一个健康的情节转折:
对话:### 
客户:我想要一个水瓶。
工人:我没有水壶。
顾客:但我想要水瓶。
工作员:
### 
"""
comp(PROMPT, MaxToken=3000, outputs=1)

输出:

[‘那么,来个杯子怎么样?我们的很多顾客都用杯子喝水,它是水瓶的绝佳替代品!”]

提示2:

P

ROMPT = ""
完成下面的故事。 
故事应侧重于一种道德价值观,如贪婪、忿怒、骄傲、傲慢、懒惰或嫉妒。
故事:### 
很久很久以前,有一个希腊国王迈达斯,他非常富有,有很多黄金。有一天,迈达斯发现一个天使需要帮助。他帮助了她,作为回报,她同意实现一个愿望;
### 
"""
comp(PROMPT, MaxToken=3000, outputs=1)

输出:

['迈达斯被他的贪婪蒙蔽了双眼,希望他所触摸的任何东西都能变成金子。\n天使实现了他的愿望,迈达斯去他的女儿身上试试。他一触碰,她立刻变成了金色。他充满了恐惧和羞愧,意识到自己的贪婪夺走了他的女儿。\n他恳求天使解除咒语,天使无奈地答应了。迈达斯很好地吸取了教训。永远不要让贪婪超越判断力和理性。”]

翻译提示示例
现在让我们尝试使用 Completions 模块进行一些翻译提示。

PROMPT = ""
用日语翻译下面的文字;
Text:### 
数据结构课程是最好的;
### 
"""
comp(PROMPT, MaxToken=3000, outputs=1)


输出:

['日语:\nジークス・fuォー・ジークスのデータ构造的コーsuが最高です。]

总结提示示例
现在让我们尝试使用 Completions 模块进行摘要的一些提示。

PROMPT = ""
概括下面的文字并提取要点;
Text:### 
这是一个非常受欢迎的关于兔子和乌龟的故事。 
兔子是一种行动迅速的动物,而乌龟是一种行动缓慢的动物。 
有一天,兔子为了证明自己是最棒的,向乌龟提出赛跑的挑战。乌龟同意了。 
比赛开始后,兔子很容易就领先了。当意识到乌龟远远落在后面时。兔子过于自信,决定小睡一会儿。 
与此同时,乌龟以极大的毅力和献身精神慢慢地接近了终点。最重要的是,他谦虚而不自大;
### 
"""
comp(PROMPT, MaxToken=3000, outputs=1)

输出:

[“众所周知的兔子和乌龟的故事讲述了兔子的过度自信和乌龟的决心和奉献精神,使乌龟赢得了比赛。兔子本来领先,但当他意识到乌龟落后时,他小睡了一会儿,乌龟首先到达了终点线。乌龟取得了胜利,因为这个故事的寓意是努力工作会有回报,并且应该谦虚地完成工作。”]

检索事实信息的示例提示
现在让我们尝试一些使用 Completions 模块检索事实信息的提示。

PROMPT = ""
谁是世界上收入最高的演员?
"""
comp(PROMPT, MaxToken=3000, outputs=1)

输出:

[《福布斯》称,截至 2021 年全球收入最高的演员是道恩·强森,预计 2020 年收入为 8750 万美元。]


聊天
要执行任何聊天特定任务,您可以定义以下函数并使用所需的提示执行它。

# 以字符串为参数的函数
def chat(MSGS, MaxToken=50, outputs=3): 
    # 我们使用聊天完成端点进行类似聊天的输入 ;
    response = openai.ChatCompletion.create( 
    这里使用的模型是 ChatGPT 
   # 您可以为该端点使用所有这些模型: 
   # gpt-4、gpt-4-0314、gpt-4-32k、gpt-4-32k-0314、 
   # gpt-3.5-turbo, gpt-3.5-turbo-0301 
    model="gpt-3.5-turbo"
    messages=MSGS, 
    人工智能模型生成的最大令牌数 
    #
"gpt-3.5-turbo "的最大值可以是 4096 个令牌数 ;
    max_tokens = MaxToken, 
    # 人工智能模型生成的输出变量数量 ;
    n = outputs, 
    ) 
    return response.choices[0].message 

消息必须由消息对象集合组成, 
# 每个消息对象包括一个角色(
"系统""用户 ""助手") 
# 和一个消息实际文本的内容字段;
MSGS = [ 
        {
"role": "system", "content": "<message generated by system>"}, 
        {
"role": "user", "content": "<message generated by user>"}, 
        {
"role": "assistant", "content": "<message generated by assistant>"
    ]

在这里,我们使用OpenAI 库中的聊天完成模块来使用 ChatGPT 模型执行聊天特定任务。以下是聊天完成模块涉及的重要参数:

  • model [必填]:相应型号的 ID。有关哪些模型与 Chat API 兼容的信息,请访问模型端点兼容性表 (https://platform.openai.com/docs/models/model-endpoint-compatibility)。
  • message消息:对话消息的时间顺序列表。对象列表必须包含仅具有以下参数的字典:
    • 角色: 此消息的作者的角色。它可以是“系统”、“用户”或“助手”。
    • 内容:消息的内容。
  • max_tokens:完成时生成的最大令牌数。默认值为 16。
  • temperature:采样温度范围在 0 到 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定性。
  • n:为每个提示生成的完成数。

图像
我们可以使用OpenAI的DALL-E模型进行图像生成和图像编辑。在开始之前,让我们导入一些图像处理库。

# importing other libraries 
import requests 
from PIL import Image 
from io import BytesIO

现在我们构建一个函数来使用 DALL E API 的“创建”端点生成图像。

# 使用 DALL-E API 的创建端点生成文本到图像的函数 
# # 函数接收一个字符串参数 ;
def generate(text): 
res = openai.Image.create( 
    # 描述生成图像的文本 ;
    prompt=text, 
    # 生成图像的数量 ;
    n=1, 
    # 每个生成图像的大小 ;
    size="256x256"

返回一张图片的 URL 作为 
# 我们只生成一张图片 ;
return res[
"data"][0]["url"]

上述函数将参数字符串传递到 API 端点。其他参数包括 n(“使用该提示生成的图像数量”)和 size(“生成的图像的大小”)。API 可以使用 Base64 或 URL 来生成图像。API 提供所创建图像的 URL 作为输出。
生成的图像尺寸必须为256×256、512×512或1024×1024之一。

图像生成示例
现在让我们看一些示例,以更好地理解使用 DALL-E 生成图像

# 提示描述所需的图像 ;
text = "batman art in red and blue color"
# 调用自定义函数
"generate" 
# 将输出保存在
"url1" ;
url1 = generate(text) 
# 使用请求库以字节为单位获取图像 ;
response = requests.get(url1, stream=True) 
# 使用 PIL 库中的图像模块查看图像 ;
Image.open(response.raw)

提示2:

# 文字提示,描述我想要的图像 ;
text = "a scenic view of moon shining light on a yacht"
# generate 函数使用 DALL-E API 生成图像 
它返回图像的临时 URL ;
url1 = generate(text) 
# 我们使用请求库从 URL  抓取图像;
response = requests.get(url1, stream=True) 
我们使用 PIL 库中的图像类打开图像 ;
Image.open(response.raw)

[b]声音[/b]

Whisper 模块有 2 个可用模块:
1.转录:此模块将您的音频文件转录为输入语言。该模块的模型参数为:
  • file [必需]:要转录的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
  • model [必需]:要使用的模型的 ID。目前只有 耳语-1 可用。
  • prompt [可选]:用于指导模型风格或继续之前的音频片段的可选文本。提示应与音频语言相匹配。
  • response_format [可选]:记录输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
  • temperature [可选]:采样温度,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定性。如果设置为 0,模型将使用对数概率自动升高温度,直到达到特定阈值。
  • 语言 [可选]:输入音频的语言。以 ISO-639-1 格式提供输入语言将提高准确性和延迟。

以读取模式打开音频文件
audio_file = open("FILE LOCATION", "rb")
使用这一行调用模块,并传递模型名称和音频文件
# 目前只有一种模型可用于语音到文本的转换
transcript = openai.Audio.transcribe(file=
"audio file", model="whisper-1")
transcript

2.翻译:此模块将您的音频文件翻译成英语。该模块的模型参数为:

  • file [必需]:要翻译的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
  • model [必填]:您要使用的型号名称。目前只有 耳语-1 可用。
  • prompt [可选]:用于指导模型风格或继续之前的音频片段的可选文本。提示应该是英文的。
  • response_format [可选]:记录输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
  • temperature [可选]:采样温度,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定性。如果设置为 0,模型将使用对数概率自动升高温度,直到达到特定阈值。

# opening the audio file in read mode
audio_file = open("FILE LOCATION", "rb")
使用这一行调用模块,并传递模型名称和音频文件
# 只有一个模型可用于语音到文本的转换
transcript = openai.Audio.translate(file=
"audio file", model="whisper-1")
transcript

音频文件大小不应大于 25 MB。如果文件大小超过 25 MB,则应将文件分成较小的块。


嵌入
嵌入模块用于获取机器学习模型和算法可以快速使用的给定输入的向量表示。我们将编写一个函数来使用 OpenAI API 生成这些向量。我们的 API 采用“text-embedding-ada-002”模型,它是 OpenAI 第二代嵌入模型的成员。该模型生成 1536 字节长的嵌入。

函数为字符串生成向量 ;
def get_embedding(text, model="text-embedding-ada-002"): 
return openai.Embedding.create(input = , model=model)['data'][0]['embedding']


API错误代码
本指南概述了您可能从 API 和我们的官方 Python 库中看到的错误代码。概述中提到的每个错误代码都有一个专门的部分来提供进一步的指导。
API错误
401 –身份验证无效
原因:身份验证无效 解决方案:确保使用正确的 API 密钥和请求组织。
401 –提供的 API 密钥不正确
原因:请求的API密钥不正确。 解决方案:确保使用的 API 密钥正确,清除浏览器缓存,或生成新的。
401 –您必须是组织的成员才能使用 API
原因:您的帐户不属于组织。 解决方案:联系我们以添加到新组织,或要求您的组织经理邀请您加入组织。
429 –请求达到速率限制
原因:您发送请求的速度太快。 解决方案:调整您的请求。阅读速率限制指南。
429 –您超出了当前配额,请检查您的计划和账单详细信息
原因:您已达到每月最高支出(硬性限制),您可以在帐户账单部分查看该支出。 解决方案:申请增加配额。
429 –引擎当前过载,请稍后重试
原因:我们的服务器流量很高。 解决方案:请稍等片刻后重试您的请求。
500 –服务器在处理您的请求时发生错误
原因:我们的服务器出现问题。 解决方案:短暂等待后重试您的请求,如果问题仍然存在,请联系我们。检查状态页面。

结论
在本文中,我们通过示例讨论了 OpenAI API 提供的所有主要功能及其实现。现在,您非常有能力在应用程序、日常任务等中有效地使用 OpenAI 的服务。