文章目录
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]
numpy 和 pandas 等数据库因其大小而默认不安装。该库的某些功能需要它们,但通常不需要与 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)。
为了将库与 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:
为了使用 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.")
有关详细信息,请参阅审核指南.
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)
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等待中:

通过在网络绑定方法前添加 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 版本客户正在使用。如果您遇到任何版本的问题,请在我们的支持页面上告诉我们。
这个库是从 Stripe Python 库 派生出来的。
引自:OpenAI API 中文教程 - W3Cschool
本指南概述了您可能会从 API 和我们的官方 Python 库中看到的错误代码。概述中提到的每个错误代码都有专门的部分提供进一步的指导。
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
此错误消息表明我们的服务器流量过大,目前无法处理您的请求。发生这种情况的原因可能有多种,例如:
对我们服务的需求突然激增。
我们的服务器有计划或计划外的维护或更新。
我们的服务器发生意外或不可避免的中断或事件。
要解决此错误,请执行以下步骤:
稍等片刻后重试您的请求。我们建议使用指数退避策略或尊重响应标头和速率限制的重试逻辑。您可以阅读更多关于我们的速率限制最佳实践的信息。
查看我们的状态页面,了解有关我们的服务和服务器的任何更新或公告。
如果在合理的时间后您仍然收到此错误,请联系我们以获得进一步的帮助。对于给您带来的不便,我们深表歉意,感谢您的耐心等待和理解。
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121