chatgpt|安装及示例|聊天|嵌入|微调|适度|图像|音频|异步|API 错误代码-OpenAI Python库简介

OpenAI Python库

项目git地址

OpenAI Python 库提供了对 OpenAI API 的便捷访问来自用 Python 语言编写的应用程序。它包括一个用于初始化的 API 资源的预定义类集自己从 API 响应动态地使其兼容具有广泛版本的 OpenAI API。

您可以在官方的网站中找到 OpenAI Python 库的使用示例 API reference and the OpenAI Cookbook.

安装

你不需要这个源代码,除非你想修改包。如果你只是想要使用这个包,只需运行:

pip install --upgrade openai

从源安装:

python setup.py install

在这里插入图片描述

可选依赖项

openai.embeddings_utils安装依赖:

pip install openai[embeddings]

Weights & Biases安装支持:

pip install openai[wandb]

numpypandas 等数据库因其大小而默认不安装。该库的某些功能需要它们,但通常不需要与 API 对话。如果遇到“MissingDependencyError”,请使用以下命令安装它们:

pip install openai[datalib]

用法

该库需要使用您帐户的密钥进行配置,该密钥可在 网站 上找到。在使用库之前将其设置为 OPENAI_API_KEY 环境变量:

export OPENAI_API_KEY='sk****'

或者将 openai.api_key 设置为其值:

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"

# 列表模式
models = openai.Model.list()

# 打印第一个模型的 id
print(models.data[0].id)

# 创建完成
completion = openai.Completion.create(model="ada", prompt="Hello world")

# 打印完成
print(completion.choices[0].text)

参数

所有端点都有一个支持“request_timeout”参数的“.create”方法。此参数采用 Union[float, Tuple[float, float]],如果请求超过该时间(以秒为单位),将引发 openai.error.Timeout 错误(参见:https://requests.readthedocs.io/en/latest/user/quickstart/#timeouts)。

微软 Azure 端点

为了将库与 Microsoft Azure 端点一起使用,除了 api_key 之外,您还需要设置 api_type、api_base 和 api_version。 api_type 必须设置为’azure’,其他对​​应于您端点的属性。此外,部署名称必须作为引擎参数传递。

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_type = "azure"
openai.api_key = "sk****"
openai.api_base = "https://example-endpoint.openai.azure.com"
openai.api_version = "2023-03-15-preview"

# 创建完成
completion = openai.Completion.create(deployment_id="deployment-name", prompt="Hello world")

# 打印完成
print(completion.choices[0].text)

请注意,目前 Microsoft Azure 端点只能用于完成、嵌入和微调操作。有关如何使用 Azure 端点进行微调和其他操作的详细示例,请查看以下 Jupyter notebook:

微软 Azure 活动目录身份验证

为了使用 Microsoft Active Directory 对您的 Azure 端点进行身份验证,您需要将 api_type 设置为“azure_ad”并将获取的凭证令牌传递给 api_key。其余参数需要按照上一节中的说明进行设置。

from azure.identity import DefaultAzureCredential
import openai

# Request credential
default_credential = DefaultAzureCredential()
token = default_credential.get_token("https://cognitiveservices.azure.com/.default")

# Setup parameters
openai.api_type = "azure_ad"
openai.api_key = token.token
openai.api_base = "https://example-endpoint.openai.azure.com/"
openai.api_version = "2023-03-15-preview"

# ...

命令行界面

这个库还提供了一个 openai 命令行工具这使得从您的终端与 API 交互变得容易。跑步openai api -h 用于使用。

# 列出模型
openai api models.list

# 创建完成
openai api completions.create -m ada -p "Hello world"

# 创建聊天完成
openai api chat_completions.create -m gpt-3.5-turbo -g user "Hello world"

# 通过DALL·E API生成图片
openai api image.create -p "two dogs playing chess, cartoon" -n 1

示例代码

OpenAI Cookbook 中可以找到有关如何使用此 Python 库完成各种任务的示例。它包含以下代码示例:

  • 使用微调分类
  • 聚类
  • 代码搜索
  • 自定义嵌入
  • 从文档语料库中回答问题
  • 建议
  • 嵌入的可视化
  • 和更多

在 2022 年 7 月之前,这个 OpenAI Python 库在其示例文件夹中托管代码示例,但此后所有示例都已迁移到 OpenAI Cookbook

聊天

可以使用聊天完成端点调用“gpt-3.5-turbo”等对话模型。

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"  # supply your API key however you choose

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{
    
    "role": "user", "content": "Hello world!"}])
print(completion.choices[0].message.content)
  As an AI language model, I do not have any physical sensations or emotions but I can help you with a wide range of tasks such as writing, editing, summarizing, translating and more. How may I assist you today?

嵌入

在 OpenAI Python 库中,嵌入将文本字符串表示为浮点数的固定长度向量。嵌入旨在衡量文本字符串之间的相似性或相关性。

要获取文本字符串的嵌入,您可以使用 Python 中的 embeddings 方法,如下所示:

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****" # supply your API key however you choose

# 选择要嵌入的文本
text_string = "sample text"

# 选择嵌入
model_id = "text-similarity-davinci-001"

# 计算文本的嵌入
embedding = openai.Embedding.create(input=text_string, model=model_id)['data'][0]['embedding']

获取嵌入笔记本 中显示了如何调用嵌入方法的示例。

以下 Jupyter 笔记本中共享了如何使用嵌入的示例:

有关嵌入和 OpenAI 提供的嵌入类型的更多信息,请阅读 OpenAI 文档中的嵌入指南

微调

对训练数据模型进行微调既可以改善结果(通过为模型提供更多示例来学习),也可以降低 API 调用的成本/延迟(主要是通过减少在提示中包含训练示例的需要)。

以下 Jupyter notebooks 中共享了微调示例:

将您的微调同步到 Weights & Biases,以跟踪中央仪表板中的实验、模型和数据集:

openai wandb sync

有关微调的更多信息,请阅读 OpenAI 文档中的微调指南

适度

OpenAI 提供了一个审核端点,可用于检查内容是否符合 OpenAI 内容政策

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"  # supply your API key however you choose

moderation_resp = openai.Moderation.create(input="Here is some perfectly innocuous text that follows all OpenAI content policies.")

有关详细信息,请参阅审核指南.

图像生成 (DALL·E)

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"  # supply your API key however you choose

image_resp = openai.Image.create(prompt="two dogs playing chess, oil painting", n=4, size="1024x1024")
for i in range(4):
    image_url = image_resp['data'][i]['url']
    print(image_url)

音频转录(Whisper)

import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"   # supply your API key however you choose
f = open(r".\Desktop\test1.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", f)

  暂时无权限,提示:
  openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details.

waitlist等待中:
在这里插入图片描述

异步API

通过在网络绑定方法前添加 a 可以在 API 中获得异步支持:

import openai
import os
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
openai.api_key = "sk****"   # supply your API key however you choose

async def create_completion():
    completion_resp = await openai.Completion.acreate(prompt="This is a test", model="davinci")

为了使异步请求更高效,您可以传入自己的aiohttp.ClientSession,但是最后必须手动关闭client session你的程序/事件循环:

import openai
from aiohttp import ClientSession

openai.aiosession.set(ClientSession())
# At the end of your program, close the http session
await openai.aiosession.get().close()

有关详细信息,请参阅 使用指南 .

要求

  • Python 3.7.1+

一般来说,我们希望支持我们的 Python 版本客户正在使用。如果您遇到任何版本的问题,请在我们的支持页面上告诉我们。

信用

这个库是从 Stripe Python 库 派生出来的。

TIPS:OpenAI API 错误代码

引自:OpenAI API 中文教程 - W3Cschool
本指南概述了您可能会从 API 和我们的官方 Python 库中看到的错误代码。概述中提到的每个错误代码都有专门的部分提供进一步的指导。

API 错误

状态码 概述

401 - Invalid Authentication Cause: 无效认证
Solution: 确保使用正确的 API 密钥和请求组织。
401 - Incorrect API key provided Cause: 请求的 API 密钥不正确。
Solution: 确保使用的 API 密钥正确,清除浏览器缓存,或生成一个新的。
401 - You must be a member of an organization to use the API Cause: 您的帐户不属于组织。
Solution: 联系我们以加入新组织或请您的组织经理邀请您加入组织。
429 - Rate limit reached for requests Cause: 您发送请求的速度太快了。
Solution: 调整你的要求。阅读速率限制指南。
429 - You exceeded your current quota, please check your plan and billing details Cause: 您已达到每月最高支出(硬性限制),您可以在账户账单部分查看。
Solution: 申请增加配额。
429 - The engine is currently overloaded, please try again later Cause: 我们的服务器正在经历高流量。
Solution: 请稍等片刻后重试您的请求。
500 - The server had an error while processing your request Cause: 我们服务器上的问题。
Solution: 稍等片刻后重试您的请求,如果问题仍然存在,请联系我们。检查状态页面。

详细解释

401 - Invalid Authentication
此错误消息表明您的身份验证凭据无效。发生这种情况的原因可能有多种,例如:

您使用的是已撤销的 API 密钥。

您使用的 API 密钥与分配给请求组织的 API 密钥不同。

您使用的 API 密钥没有您所调用端点所需的权限。

要解决此错误,请执行以下步骤:

检查您是否在请求标头中使用了正确的 API 密钥和组织 ID。您可以在您的帐户设置中找到您的 API 密钥和组织 ID。

如果您不确定您的 API 密钥是否有效,您可以生成一个新密钥。确保在请求中用新的 API 密钥替换旧的 API 密钥,并遵循我们的最佳实践指南。

401 - Incorrect API key provided
此错误消息表示您在请求中使用的 API 密钥不正确。发生这种情况的原因可能有多种,例如:

您的 API 密钥中有拼写错误或多余的空格。

您正在使用属于不同组织的 API 密钥。

您正在使用已被删除或停用的 API 密钥。

旧的、已撤销的 API 密钥可能会缓存在本地。

要解决此错误,请执行以下步骤:

尝试清除浏览器的缓存和 cookie,然后重试。

检查您是否在请求标头中使用了正确的 API 密钥。

如果您不确定您的 API 密钥是否正确,您可以生成一个新的。确保替换代码库中的旧 API 密钥并遵循我们的最佳实践指南。

401 - You must be a member of an organization to use the API
此错误消息表明您的帐户不属于某个组织。发生这种情况的原因可能有多种,例如:

您已经离开或被从以前的组织中移除。

您的组织已被删除。

要解决此错误,请执行以下步骤:

如果您已经离开或被从以前的组织中移除,您可以申请一个新组织或受邀加入现有组织。

要申请新组织,请通过 help.openai.com 联系我们

现有组织所有者可以通过成员面板邀请您加入他们的组织。

429 - Rate limit reached for requests
此错误消息表示您已达到为 API 分配的速率限制。这意味着您在短时间内提交了过多的令牌或请求,并且超出了允许的请求数量。发生这种情况的原因可能有多种,例如:

您正在使用发出频繁或并发请求的循环或脚本。

您正在与其他用户或应用程序共享您的 API 密钥。

您正在使用具有低速率限制的免费计划。

要解决此错误,请执行以下步骤:

调整您的请求,避免进行不必要或多余的呼叫。

如果您使用的是循环或脚本,请确保实施退避机制或尊重速率限制和响应标头的重试逻辑。您可以在我们的速率限制指南中详细了解我们的速率限制政策和最佳实践。

如果您与其他用户共享您的组织,请注意限制是按组织而不是按用户应用的。值得检查您团队其他成员的使用情况,因为这会影响限制。

如果您使用的是免费或低级别计划,请考虑升级到提供更高速率限制的现收现付计划。您可以在我们的速率限制指南中比较每个计划的限制。

429 - You exceeded your current quota, please check your plan and billing details
此错误消息表示您已达到 API 的每月最大支出。您可以在 account billing settings 的“hard limit”下查看每月最高限额。这意味着您已经消耗了分配给您的计划的所有积分,并且已经达到了当前账单周期的限制。发生这种情况的原因可能有多种,例如:

您正在使用消耗大量信用或代币的大容量或复杂服务。

对于您的组织的使用,您的限制设置得太低。

要解决此错误,请执行以下步骤:

在您的帐户设置中检查您当前的配额。您可以在帐户的使用部分查看您的请求消耗了多少令牌。

如果您使用的是免费计划,请考虑升级到提供更高配额的现收现付计划。

如果您需要增加配额,您可以申请一个并提供有关预期使用情况的相关详细信息。我们将审核您的请求并在大约 7-10 个工作日内回复您。
429 - The engine is currently overloaded, please try again later
此错误消息表明我们的服务器流量过大,目前无法处理您的请求。发生这种情况的原因可能有多种,例如:

对我们服务的需求突然激增。

我们的服务器有计划或计划外的维护或更新。

我们的服务器发生意外或不可避免的中断或事件。

要解决此错误,请执行以下步骤:

稍等片刻后重试您的请求。我们建议使用指数退避策略或尊重响应标头和速率限制的重试逻辑。您可以阅读更多关于我们的速率限制最佳实践的信息。
查看我们的状态页面,了解有关我们的服务和服务器的任何更新或公告。
如果在合理的时间后您仍然收到此错误,请联系我们以获得进一步的帮助。对于给您带来的不便,我们深表歉意,感谢您的耐心等待和理解。

猜你喜欢

转载自blog.csdn.net/Medlar_CN/article/details/129893756
今日推荐