Skip to content

OpenAI Python库为用Python语言编写的应用程序提供了对OpenAI API的方便访问。

License

Notifications You must be signed in to change notification settings

Alan-xh/openai-python

 
 

Repository files navigation

OpenAI Python 库

OpenAI Python 库提供从用Python编写的应用程序方便访问OpenAI API的功能。它包含了一系列预定义的类,用于API资源,这些类可以根据API响应动态初始化,这使得它与广泛版本的OpenAI API兼容。

您可以在我们的API参考OpenAI Cookbook中找到OpenAI Python库的使用示例。

安装

除非您想修改包,否则无需此源代码。如果您只想使用包,只需运行:

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
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)

参数

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

Microsoft Azure 端点

为了使用Microsoft Azure端点,您需要额外设置api_typeapi_baseapi_version,除了api_keyapi_type必须设置为'azure',其他参数对应您端点的属性。此外,部署名称必须作为engine参数传递。

import openai
openai.api_type = "azure"
openai.api_key = "..."
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笔记本:

Microsoft Azure Active Directory 认证

为了使用Microsoft Active Directory来认证您的Azure端点,您需要将api_type设置为"azure_ad",并将获取的凭证令牌传递给api_key。其余参数需要按照上一节中指定的设置。

from azure.identity import DefaultAzureCredential
import openai

# 请求凭证
default_credential = DefaultAzureCredential()
token = default_credential.get_token("https://cognitiveservices.azure.com/.default")

# 设置参数
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

示例代码

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

  • 使用微调进行分类
  • 聚类
  • 代码搜索
  • 自定义嵌入
  • 从文档语料库中回答问题
  • 推荐
  • 嵌入可视化
  • 等等

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

聊天

gpt-3.5-turbo这样的对话模型可以通过对话完成端点调用。

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world!"}])
print(completion.choices[0].message.content)

嵌入

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

要获取一个文本字符串的嵌入,您可以像以下Python示例一样使用嵌入方法:

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥

# 选择要嵌入的文本
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提供的嵌入类型更多信息,请阅读嵌入指南

微调

通过在训练数据上微调模型,可以同时提高结果(通过为模型提供更多学习示例)并降低API调用的成本/延迟(主要通过减少在提示中包含训练示例的需求)。

微调的示例在以下Jupyter笔记本中共享:

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

openai wandb sync

有关微调的更多信息,请阅读微调指南

内容审核

OpenAI提供了一个Moderation端点,可以用来检查内容是否符合OpenAI 内容政策

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥

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

更多详情请见审核指南

图像生成 (DALL·E)

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥

image_resp = openai.Image.create(prompt="two dogs playing chess, oil painting", n=4, size="512x512")

音频转录 (Whisper)

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥
f = open("path/to/file.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", f)

异步API

通过在网络绑定方法前添加a,可以使用异步支持:

import openai
openai.api_key = "sk-..."  # 以您选择的方式提供API密钥

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

为了使异步请求更高效,您可以传入您自己的 aiohttp.ClientSession,但您必须在程序/事件循环结束时手动关闭客户端会话:

import openai
from aiohttp import ClientSession

openai.aiosession.set(ClientSession())
# 在程序结束时,关闭http会话
await openai.aiosession.get().close()

更多详情请见使用指南

要求

  • Python 3.7.1+

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

致谢

此库是基于Stripe Python库的分支。

About

OpenAI Python库为用Python语言编写的应用程序提供了对OpenAI API的方便访问。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.9%
  • Makefile 0.1%