要安装官方 Python 库,请运行以下命令:
pip install openai
OpenAI API 使用 API 密钥进行身份验证。访问您的API 密钥页面以检索您的 API 密钥。
所有 API 请求都应在 HTTP 标头中包含您的 API 密钥,**Authorization
**如下所示:
Authorization: Bearer OPENAI_API_KEY
对于属于多个组织的用户,您可以传递一个标头来指定哪个组织用于 API 请求。来自这些 API 请求的使用将计入指定组织的订阅配额。
openai.organization = "YOUR_ORG_ID"
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.xxxxxx
import openai,json
openai.api_key = '你的AIP密钥'
response =openai.ChatCompletion.create(
model="gpt-3.5-turbo",
temperature=0.7,
messages=[
{"role": "user", "content": "Say this is a test!"}
]
)
result = json.dumps(response,ensure_ascii=False) # ensure_ascii处理中文
with open('chat.json', 'a+', encoding='utf-8') as f: # 将返回保存为json文件
f.write(result)
此请求查询模型以完成以提示“ Say this is a test**gpt-3.5-turbo
** ”开头的文本。您应该会收到类似于以下内容的响应:
{
"id": "chatcmpl-7BYJHEraVZUFW9tsUSpaIsG671cLh",
"object": "chat.completion",
"created": 1682987851,
"model": "gpt-3.5-turbo-0301",
"usage": {
"prompt_tokens": 14,
"completion_tokens": 5,
"total_tokens": 19
},
"choices": [
{
"message": {
"role": "assistant",
"content": "This is a test!"
},
"finish_reason": "stop",
"index": 0
}
]
}
现在你已经生成了你的第一个聊天完成。我们可以看到**finish_reason
isstop
这意味着 API 返回了模型生成的完整完成。在上面的请求中,我们只生成了一条消息,但是您可以设置参数n
来生成多条消息选择。在这个例子中,gpt-3.5-turbo
更多的是用于传统的文本补全任务**。该模型还针对聊天应用程序进行了优化。
列出并描述 API 中可用的各种模型。您可以参考模型文档以了解可用的模型以及它们之间的区别。
列出当前可用的模型,并提供有关每个模型的基本信息,例如所有者和可用性。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
{
"data": [
{
"id": "model-id-0",
"object": "model",
"owned_by": "organization-owner",
"permission": [...]
},
{
"id": "model-id-1",
"object": "model",
"owned_by": "organization-owner",
"permission": [...]
},
{
"id": "model-id-2",
"object": "model",
"owned_by": "openai",
"permission": [...]
},
],
"object": "list"
}
检索模型实例,提供有关模型的基本信息,例如所有者和权限。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.retrieve("text-davinci-003")
{
"id": "text-davinci-003",
"object": "model",
"owned_by": "openai",
"permission": [...]
}
给定一个提示,该模型将返回一个或多个预测的补全,并且还可以返回每个位置的替代标记的概率。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Completion.create(
model="text-davinci-003",
prompt="Say this is a test",
max_tokens=7,
temperature=0
)
{
"id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
"object": "text_completion",
"created": 1589478378,
"model": "text-davinci-003",
"choices": [
{
"text": "\n\nThis is indeed a test",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 5,
"completion_tokens": 7,
"total_tokens": 12
}
}
{
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0,
"top_p": 1,
"n": 1,
"stream": false,
"logprobs": null,
"stop": "\n"
}
model
string 必选:要使用的模型的 ID。
prompt
string or array 可选 默认为<|endoftext|>:生成补全的提示,编码为字符串、字符串数组、标记数组或标记数组数组。请注意,<|endoftext|> 是模型在训练期间看到的文档分隔符,因此如果未指定提示,模型将生成新文档的开头。
suffix
string 可选 默认为 null:插入文本补全后出现的后缀。
max_tokens
integer 可选 默认为16:生成的最大令牌数。您的提示加上的令牌计数**max_tokens
**不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个标记(最新模型除外,它支持 4096)
temperature
number 可选 默认为1:使用什么采样概览热度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变次参数或**top_p
,**但不要同事改变两者。
top_p
number 可选 默认为1:一种替代概览热度采样的方法,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。
n
integer 可选 默认为1:为每个提示生成多少补全。注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对max_tokens
和进行了合理的设置stop
。
stream
boolean 可选 默认为false:是否流方式返回。流由**data: [DONE]
**消息终止。
logprobs
integer 可选 默认为null:包括最有可能标记的对数概率**logprobs
,以及所选标记。例如,如果logprobs
**是 5,API 将返回 5 个最有可能的标记的列表。
echo
boolean 可选 默认为false:除了补全之外的回显提示。
stop
string or array 可选 默认为null:API 将停止生成更多令牌的最多 4 个序列。返回的文本将不包含停止序列。
presence_penalty
number 可选 默认为0:-2.0 和 2.0 之间的数字。正值会增加模型谈论新主题的可能性。
frequency_penalty
number 可选 默认为0:-2.0 和 2.0 之间的数字。正值会降低模型逐字重复同一行的可能性。
best_of
integer 可选 默认为1:
**best_of
**在服务器端生成补全并返回“最佳的补全”(每个标记具有最高对数概率的那个)。无法流式传输结果。与 n
一起使用时,控制候选完成的数量并n
指定要返回的数量 ,best_of
必须大于n
。
logit_bias
map 可选 默认为null:修改指定标记出现在补全中的可能性。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。
给定一个描述对话的消息列表,该模型将返回一个响应。
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": "Hello!"}
]
)
print(completion.choices[0].message)
result = json.dumps(completion ,ensure_ascii=False)
with open('chat.json', 'a+', encoding='utf-8') as f:
f.write(result)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
model
string 必选:要使用的模型的 ID。
message
array 必选:到目前为止描述对话的消息列表。包含:
role
string 必选:此消息作者的角色。system
、user
或assistant
。content
string 必选:消息的内容。name
string 可选:作者的姓名。可包含 az、AZ、0-9 和下划线,最大长度为 64 个字符。temperature
number 可选 默认为1:使用什么采样热度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。
top_p
number 可选 默认为1:一种替代热度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。
n
integer 可选 默认为1:为每个输入消息生成多少个聊天完成选项。
stream
boolean 可选 默认为false:如果设置为true,将以流的方式发送消息,就像在 ChatGPT 中一样。
max_tokens
integer 可选 默认为16:聊天完成时生成的最大**令牌**数。输入标记和生成标记的总长度受模型上下文长度的限制。
stop
string or array 可选 默认为null:API 将停止生成更多令牌的最多 4 个序列。
presence_penalty
number 可选 默认为0:-2.0 和 2.0 之间的数字。正值会增加模型谈论新主题的可能性。
frequency_penalty
number 可选 默认为0:-2.0 和 2.0 之间的数字。正值会降低模型逐字重复同一行的可能性。
logit_bias
map 可选 默认为null:修改指定标记出现在完成中的可能性。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。
给定提示和指令,模型将返回提示的编辑版本。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Edit.create(
model="text-davinci-edit-001",
input="What day of the wek is it?",
instruction="Fix the spelling mistakes"
)
{
"object": "edit",
"created": 1589478378,
"choices": [
{
"text": "What day of the week is it?",
"index": 0,
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 32,
"total_tokens": 57
}
}
model
string 必选:要使用的模型的 ID。
input
string 可选 默认为空字符串:用作编辑起点的输入文本。
instruction
string 必选:告诉模型如何编辑的指令。
temperature
number 可选 默认为1:使用什么采样热度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。
top_p
number 可选 默认为1:一种替代热度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。
n
integer 可选 默认为1:为输入和指令生成多少编辑。
给定提示和/或输入图像,模型将生成新图像。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create(
prompt="A cute baby sea otter",
n=2,
size="1024x1024"
)
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
prompt
string 必选:所需图像的文本描述。最大长度为 1000 个字符。
n
integer 可选 默认为1:要生成的图像数。必须介于 1 和 10 之间。
size
string 可选 默认为1024x1024:生成图像的大小。必须是**256x256
、512x512
或1024x1024
**。
response_format
string 可选 默认为url:生成的图像返回的格式。必须是 url
或b64_json
。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create_edit(
image=open("otter.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A cute baby sea otter wearing a beret",
n=2,
size="1024x1024"
)
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
image
string 必选:要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供遮罩,图像必须具有透明度,将用作遮罩。
mask
string 可选:附加图像,其完全透明区域(例如,alpha 为零的区域)指示**image
**应编辑的位置。必须是有效的 PNG 文件,小于 4MB,并且与image
具有相同尺寸。
prompt
string 必选:所需图像的文本描述。最大长度为 1000 个字符。
n
integer 可选 默认为1:要生成的图像数。必须介于 1 和 10 之间。
size
string 可选 默认为1024x1024:生成图像的大小。必须是**256x256
、512x512
或1024x1024
**。
response_format
string 可选 默认为url:生成的图像返回的格式。必须是 url
或b64_json
。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create_variation(
image=open("otter.png", "rb"),
n=2,
size="1024x1024"
)
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
image
string 必选:用作变体基础的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。
n
integer 可选 默认为1:要生成的图像数。必须介于 1 和 10 之间。
size
string 可选 默认为1024x1024:生成图像的大小。必须是**256x256
、512x512
或1024x1024
**。
response_format
string 可选 默认为url:生成的图像返回的格式。必须是 url
或b64_json
。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为
获取给定输入的矢量表示,机器学习模型和算法可以轻松使用该表示。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Embedding.create(
model="text-embedding-ada-002",
input="The food was delicious and the waiter..."
)
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.0023064255,
-0.009327292,
.... (1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
}
],
"model": "text-embedding-ada-002",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
model
string 必选:要使用的模型的 ID。
input
string or array 必选:输入文本以获取嵌入,编码为字符串或标记数组。要在单个请求中获取多个输入的嵌入,请传递一个字符串数组或令牌数组数组。每个输入的长度不得超过 8192 个标记。
user
string 可选:代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为
了解如何将音频转换为文本。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
{
"text": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that."
}
file
string 必选:要转录的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
model
string 必选:要使用的模型的 ID。当前仅**whisper-1
**可用。
prompt
string 可选:可选文本,用于指导模型的风格或继续之前的音频片段。提示应与音频语言相匹配。
response_format
string 可选 默认为json:输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
temperature
number 可选:采样概率热度,介于 0 和 1 之间。
language
string 可选:输入音频的语言。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("german.m4a", "rb")
transcript = openai.Audio.translate("whisper-1", audio_file)
{
"text": "Hello, my name is Wolfgang and I come from Germany. Where are you heading today?"
}
file
string 必选:要翻译的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
model
string 必选:要使用的模型的 ID。当前仅**whisper-1
**可用。
prompt
string 可选:可选文本,用于指导模型的风格或继续之前的音频片段。提示应为英文**。**
response_format
string 可选 默认为json:输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
temperature
number 可选:采样概率热度,介于 0 和 1 之间。
上传用于与微调等功能一起使用的文档。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.list()
{
"data": [
{
"id": "file-ccdDZrC3iZVNiQVeEA6Z66wf",
"object": "file",
"bytes": 175,
"created_at": 1613677385,
"filename": "train.jsonl",
"purpose": "search"
},
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779121,
"filename": "puppy.jsonl",
"purpose": "search"
}
],
"object": "list"
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.create(
file=open("mydata.jsonl", "rb"),
purpose='fine-tune'
)
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779121,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.delete("file-XjGxS3KTG0uNmNOK362iJua3")
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"deleted": true
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.retrieve("file-XjGxS3KTG0uNmNOK362iJua3")
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779657,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
content = openai.File.download("file-XjGxS3KTG0uNmNOK362iJua3")
管理微调作业,以您的特定训练数据定制模型。
创建一个从给定数据集微调指定模型的作业。
响应包括排队作业的详细信息,包括作业状态和完成后微调模型的名称。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY")
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"events": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
}
],
"fine_tuned_model": null,
"hyperparams": {
"batch_size": 4,
"learning_rate_multiplier": 0.1,
"n_epochs": 4,
"prompt_loss_weight": 0.1,
},
"organization_id": "org-...",
"result_files": [],
"status": "pending",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807352,
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list()
{
"object": "list",
"data": [
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"fine_tuned_model": null,
"hyperparams": { ... },
"organization_id": "org-...",
"result_files": [],
"status": "pending",
"validation_files": [],
"training_files": [ { ... } ],
"updated_at": 1614807352,
},
{ ... },
{ ... }
]
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"events": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
},
{
"object": "fine-tune-event",
"created_at": 1614807356,
"level": "info",
"message": "Job started."
},
{
"object": "fine-tune-event",
"created_at": 1614807861,
"level": "info",
"message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Job succeeded."
}
],
"fine_tuned_model": "curie:ft-acmeco-2021-03-03-21-44-20",
"hyperparams": {
"batch_size": 4,
"learning_rate_multiplier": 0.1,
"n_epochs": 4,
"prompt_loss_weight": 0.1,
},
"organization_id": "org-...",
"result_files": [
{
"id": "file-QQm6ZpqdNwAaVC3aSz5sWwLT",
"object": "file",
"bytes": 81509,
"created_at": 1614807863,
"filename": "compiled_results.csv",
"purpose": "fine-tune-results"
}
],
"status": "succeeded",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807865,
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.cancel(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
{
"id": "ft-xhrpBbvVUzYGo8oUO1FY4nI7",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807770,
"events": [ { ... } ],
"fine_tuned_model": null,
"hyperparams": { ... },
"organization_id": "org-...",
"result_files": [],
"status": "cancelled",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807789,
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
{
"object": "list",
"data": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
},
{
"object": "fine-tune-event",
"created_at": 1614807356,
"level": "info",
"message": "Job started."
},
{
"object": "fine-tune-event",
"created_at": 1614807861,
"level": "info",
"message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Job succeeded."
}
]
}
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20")
{
"id": "curie:ft-acmeco-2021-03-03-21-44-20",
"object": "model",
"deleted": true
}
给定输入文本,判断是否违反 OpenAI 的内容策略。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Moderation.create(
input="I want to kill them.",
)
{
"id": "modr-5MWoLO",
"model": "text-moderation-001",
"results": [
{
"categories": {
"hate": false,
"hate/threatening": true,
"self-harm": false,
"sexual": false,
"sexual/minors": false,
"violence": true,
"violence/graphic": false
},
"category_scores": {
"hate": 0.22714105248451233,
"hate/threatening": 0.4132447838783264,
"self-harm": 0.005232391878962517,
"sexual": 0.01407341007143259,
"sexual/minors": 0.0038522258400917053,
"violence": 0.9223177433013916,
"violence/graphic": 0.036865197122097015
},
"flagged": true
}
]
}
input
string or array 必选:要分类的输入文本
mode
string 可选 默认为text-moderation-latest:有两种内容审核模型可用:text-moderation-stable
和text-moderation-latest
。默认情况下**text-moderation-latest
会随着时间的推移自动升级。这可确保您始终使用我们最准确的模型。如果您使用text-moderation-stable
,我们将在更新模型之前提供提前通知。的准确度text-moderation-stable
可能略低于 的准确度text-moderation-latest
**