OpenAI API 介绍
官方 API 文档:https://platform.openai.com/docs/api-reference/introduction,对于我这样英语不好的同学读起来还是费劲,所以计算记录下学习的过程以方便后续查阅。
我们可以使用任何语言用 HTTP 请求来访问 API,官方提供了 Python 和 Node.js 的库,社区也提供了 C++ 、Java 等多种语言的库,详细的可以参考 Open AI Libraries。
开始我们的第一个例子
让我们用 HTTP 请求发起一次对话
import requests
import json
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer OPENAI_API_KEY"
}
data = json.dumps({
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
})
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, data=data)
# json格式化输出
print(json.dumps(response.json(), sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
示例使用 HTTP 查询用 gpt-3.5-tubo 模型、prompt 是 “Say this is a test!” 的内容,输出结果如下
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "This is a test!",
"role": "assistant"
}
}
],
"created": 1683960281,
"id": "chatcmpl-7FdHdSj8pSQAhq7BopIMSTAN7IVpw",
"model": "gpt-3.5-turbo-0301",
"object": "chat.completion",
"usage": {
"completion_tokens": 5,
"prompt_tokens": 14,
"total_tokens": 19
}
}
至此我们就使用 openAI API 完成了一次对话。gpt-3.5-turbo 模型多用于传统的文本生成任务,该模型还针对聊天场景进行了优化。
模型
查询可使用的模型
使用 GET https://api.openai.com/v1/models 可以查询当前可用的模型,同时会提供每个模型的基本信息。可用的模型非常多,具体每种模型有什么使用场景后续再进行分析。
{
"data": [
{
"created": 1677532384,
"id": "whisper-1",
"object": "model",
"owned_by": "openai-internal",
"parent": null,
"permission": [
{
"allow_create_engine": false,
"allow_fine_tuning": false,
"allow_logprobs": true,
"allow_sampling": true,
"allow_search_indices": false,
"allow_view": true,
"created": 1683912666,
"group": null,
"id": "modelperm-KlsZlfft3Gma8pI6A8rTnyjs",
"is_blocking": false,
"object": "model_permission",
"organization": "*"
}
],
"root": "whisper-1"
},
....
],
"object": "list"
}
预测结果
创建一个预测
使用 https://api.openai.com/v1/completions 根据参数信息执行一次完成。
参数解释
- model: string 使用的模型 id,可以从上一届查询到的可用模型中获取 (必选)
- prompt: string | string[] 提示词 (可选)
- suffix: string 文本生成后插入的后缀 (可选)
- max_tokens: integer 最大令牌数 ,默认为 16 不能超过模型的上下文长度,大多数模型上下文长度为 2048
- temperature: number 介于 0~2 之间,较高的值会使输出结果更加随机,较小的值会使输出结果更加集中和确定。
- top_p: number 模型采用具有 top_p 概率质量的结果,比如 0.1 意味着只考虑率前 10% 概率质量的标记
- n:integer 为每个 prompt 生成多少个答案,默认为 1
- stram: boolean –
- logprobs: integer 返回概率最有可能的 logprobs 个标记,最大值为 5
- echo: boolean 是否返回除了结果之外的提示
- stop: string | string[] 停止生产序列
- presence_penalty: number -2.0 和 2.0 之间的数字。 正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性
- frequency_penalty: number -2.0 和 2.0 之间的数字。 正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性
- best_of: number 只返回 best_of 个最佳的结果
- logit_bias: map 修改指定标记出现在结果中的可能性
- user: string 用户唯一标识
对话
创建一次对话
给定一些文本,模型以对话的形式返回结果。
接口 POST https://api.openai.com/v1/chat/completions,接口参数说明:
- model: string 模型类型
- message: string[] 到目前为止对话内容的列表,内容的格式为:role: system | user | assistant 表示会话方,content 表示会话内容。
其他参数同上,不再一一介绍。
编辑
创建一个编辑
根据 prompt 和 内容,返回修改后的版本。使用 POST https://api.openai.com/v1/edits 接口,接口参数说明
- model: string 模型类型
- input: string 需要被修改的内容
- instruction: string 告诉模型如何修改内容
图片
生成一张图片
根据提示生成图片,使用 POST https://api.openai.com/v1/images/generations 接口,接口参数如下
- prompt: string 图片的描述,限制在 1000 个字符以内
- n: integer 生产的图片个数,在 1~10 之间
- size: string 图片大小,入 256x256
- response_format: string 图片图片链接,或者 base64
修改图片
使用 POST https://api.openai.com/v1/images/edits 根据提示修改原图,接口参数如下
- image: string 必须是小于 4M 的 PNG 图片
- mask: string 圈定完全透明的区域
- prompt: string 修改建议
- n | size | response_formt 参数同图片生产
创建图片的变体
使用 POST https://api.openai.com/v1/images/variations 返回图片的变体,接口参数如下
- image | n | size | response_format 参数同修改图片
声音
将录音转成文本
使用 POST https://api.openai.com/v1/audio/transcriptions 接口将录音转成文本,接口参数如下
- file: string 录音的文件,支持 mp3 mp4 等
- model: string 模型 id,目前只有 whisper-1 这一个模型可用
- prompt: string 可以指导模型的风格
- response_format: string 指定返回的格式,支持 json / text 等
- temperature: number 介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定
- language: string 录音文件的语言类型,符合 ISO-639-1 标准
翻译
将录音转成英语,使用 POST https://api.openai.com/v1/audio/translations,接口参数同录音转文本。
文件
可上传被用于 Fine-tuning 的文件。
当前文件列表
获得当前用户的文件列表,使用 GET https://api.openai.com/v1/files 接口
上传文件,使用 POST https://api.openai.com/v1/files,所有的文件加起来可以上传 1GB 的内容,接口参数如下
- file: string 要上传的 JSON 文件名称
- purpose: string 上传文件的目的,使用 fine-tune 进行模型微调
删除文件
删除文件,使用 DELETE https://api.openai.com/v1/files/{file_id} 接口,参数如下
- file_id: string 要删除的文件的 id
微调(Fine-tunes)
使用给定的数据进行模型微调
创建 Fine-tune 任务
创建 fine-tune 任务,使用接口 POST https://api.openai.com/v1/fine-tunes,接口参数如下
- training_file: string 包含训练数据集的文件 id
- validation_file: string 包含验证数据及的文件 id
- model: string 要训练的模型
- n_epochs: integer 训练模型的时期数
- batch_size: integer 用于训练的批量大小
- learning_rate_multiplier: number 用于训练的学习率乘数。 微调学习率是用于预训练的原始学习率乘以该值。
- prompt_loss_weight: number 用于提示令牌损失的权重。 这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成较短时为训练增加稳定效果。
- compute_classification_metrics: boolean 如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标。
- classification_n_classes: integer 分类任务中的类数。
- classification_positive_class: string 二元分类中的正类。
- classification_betas: array 我们将计算指定 beta 值的 F-beta 分数。 F-beta 分数是 F-1 分数的推广。
- suffix: string 最多 40 个字符的字符串,将添加到您的微调模型名称中。
获得 fine-tune 任务列表
获得正在执行 fine-tuning 任务,接口 GET https://api.openai.com/v1/fine-tunes
获得某个 fine-tuning 任务的详细信息,接口 GET https://api.openai.com/v1/fine-tunes/{fine_tune_id},参数如下
- fine_tune_id: string fine-tuning 任务的 id
取消某个 fine-tune 任务
取消某个 fine-tuning 任务,接口 POST https://api.openai.com/v1/fine-tunes/{fine_tune_id}/cancel,参数如下
- fine_tune_id: string fine-tuning 任务的 id
获得某个 fine-tune 任务状态
获得 fine-tune 任务的更新状态,接口 GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}/events
- fine_tune_id: string fine-tuning 任务的 id
- stream: boolean 是否以 stream 返回
删除某个 fine-tune 任务
删除某个 fine-tune 任务,接口 DELETE https://api.openai.com/v1/models/{model}