OpenAI API 介绍

OpenAI API 介绍

  • 开始我们的第一个例子
  • 模型
    • 查询可使用的模型
  • 预测结果
    • 创建一个预测
  • 对话
    • 创建一次对话
  • 编辑
    • 创建一个编辑
  • 图片
    • 生成一张图片
    • 修改图片
    • 创建图片的变体
  • 声音
    • 将录音转成文本
    • 翻译
  • 文件
    • 当前文件列表
    • 删除文件
  • 微调(Fine-tunes)
    • 创建 Fine-tune 任务
    • 获得 fine-tune 任务列表
    • 取消某个 fine-tune 任务
    • 获得某个 fine-tune 任务状态
    • 删除某个 fine-tune 任务

官方 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}

你可能感兴趣的:(oneapi,ai)