赞
踩
这篇文章中个人结合自己的实践经验把 OpenAI 官方文档解读一遍。但是原文档涉及内容众多,包括微调,嵌入(Embeddings)等众多主题,我这里重点挑选自己开发高频使用到的,需要详细了解的可以自行前往官网阅读。
所有 API 演示均使用 Python 代码作为示例,所以确保已经安装官方 Python 包:pip install openai
,同时配置 API 密钥的环境变量 OPENAI_API_KEY
。
认证:OpenAI API 使用 API 密钥进行身份验证, API 密钥页面可以获取使用的 API 密钥。除了密钥,对于属于多个组织的用户,可以传递一个 Requesting organization 字段(可以在组织设置页面上找到组织 ID)来指定用于 API 请求的组织,这些 API 请求的使用将计入指定组织的订阅配额。
arduino复制代码import os
import openai
# openai.organization = "org-gth0C8mT2wnKealyDkrSrpQk"
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
这个是使用频次最高的接口,几乎当前所有的套壳 ChatGPT 应用都是基于这个接口封装的,所以将其放在第一个。给定一组描述对话的消息列表,模型将返回一个回复。
ini复制代码import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# https://api.openai.com/v1/chat/completions
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)
响应 :
swift复制代码{ "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 } }
Request body(常用入参详解) :
model
(string,必填)要使用的模型 ID。有关哪些模型适用于 Chat API 的详细信息,请查看 模型端点兼容性表
messages
(array,必填)迄今为止描述对话的消息列表
role
(string,必填)发送此消息的角色。
system
、user
或assistant
之一(一般用 user 发送用户问题,system 发送给模型提示信息)
content
(string,必填)消息的内容
name
(string,选填)此消息的发送者姓名。可以包含 a-z、A-Z、0-9 和下划线,最大长度为 64 个字符
stream
(boolean,选填,是否按流的方式发送内容)当它设置为 true 时,API 会以 SSE( Server Side Event )方式返回内容。SSE 本质上是一个长链接,会持续不断地输出内容直到完成响应。如果不是做实时聊天,默认 false 即可。请参考 OpenAI Cookbook 以获取 示例代码。
max_tokens
(integer,选填)在聊天补全中生成的最大 tokens 数。
输入 token 和生成的 token 的总长度受模型上下文长度的限制。
temperature
(number,选填,默认是 1)采样温度,在 0 和 2 之间。
较高的值,如 0.8 会使输出更随机,而较低的值,如 0.2 会使其更加集中和确定性。
通常建议修改这个(
temperature
)或者top_p
,但两者不能同时存在,二选一。
给定一个提示,模型将返回一个或多个预测的补全,并且还可以在每个位置返回替代 token 的概率。
ini复制代码import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# https://api.openai.com/v1/completions
openai.Completion.create(
model="text-davinci-003",
prompt="Say this is a test",
max_tokens=7,
temperature=0
)
响应 :
swift复制代码 "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 } }
Request body(入参详解) :
model
(string,必填)要使用的模型的 ID。可以参考 模型端点兼容性表
prompt
(string or array,选填,Defaults to <|endoftext|>)生成补全的提示,编码为字符串、字符串数组、token 数组或 token 数组数组。
注意 <|endoftext|> 是模型在训练过程中看到的文档分隔符,所以如果没有指定提示符,模型将像从新文档的开头一样生成。
stream
(boolean,选填,默认 false)当它设置为 true 时,API 会以 SSE( Server Side Event )方式返回内容,即会不断地输出内容直到完成响应,流通过
data: [DONE]
消息终止。
max_tokens
(integer,选填,默认是 16)补全时要生成的最大 token 数。
提示
max_tokens
的 token 计数不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个 token(最新模型除外,它支持 4096)
temperature
(number,选填,默认是 1)使用哪个采样温度,在 0 和 2 之间。
较高的值,如 0.8 会使输出更随机,而较低的值,如 0.2 会使其更加集中和确定性。
通常建议修改这个(
temperature
)或top_p
但两者不能同时存在,二选一。
n
(integer,选填,默认为 1)每个
prompt
生成的补全次数。注意:由于此参数会生成许多补全,因此它会快速消耗 token 配额。小心使用,并确保对
max_tokens
和stop
进行合理的设置。
将一个给定输入转换为向量表示,提供给机器学习模型算法使用。
ini复制代码import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# https://api.openai.com/v1/embeddings
openai.Embedding.create(
model="text-embedding-ada-002",
input="The food was delicious and the waiter..."
)
响应 :
css复制代码{ "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 } }
Request body(入参详解) :
model
(string,必填)要使用的 模型 ID,可以参考 模型端点兼容性表
input
(string or array,必填)输入文本以获取嵌入,编码为字符串或 token 数组。要在单个请求中获取多个输入的嵌入,请传递字符串数组或 token 数组的数组。每个输入长度不得超过 8192 个 token。
user
(string,选填)一个唯一的标识符,代表终端用户,可以帮助 OpenAI 检测滥用。
使用自定义的特定训练数据,定制自己的模型。
创建一个微调作业,从给定的数据集中微调指定模型。
ini复制代码import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# POST https://api.openai.com/v1/fine-tunes
openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY")
响应(响应包括已入队的作业的详细信息,包括微调作业状态和完成后微调模型的名称):
json复制代码{ "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, }
Request body(入参详解) :
training_file
(string,必填)包含 训练数据 的已上传文件的 ID。
请参阅 upload file 以了解如何上传文件。
数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有 “prompt” 和 “completion” keys 的 JSON 对象。
validation_file
(string,选填)包含 验证数据 的已上传文件的 ID。
如果提供此文件,则数据将在微调期间定期用于生成验证指标。这些指标可以在 微调结果文件 中查看,训练和验证数据应该是互斥的。
model
(string,选填,默认是 curie)要微调的基础模型名称。
可以选择其中之一:“ada”、“babbage”、“curie”、“davinci”,或 2022 年 4 月 21 日 后创建的经过微调的模型。要了解这些模型的更多信息,请参阅 Models 文档。
n_epochs
(integer,选填,默认是 4)训练模型的批次数。一个 epoch 指的是完整地遍历一次训练数据集
batch_size
(integer,选填)用于训练的批次大小,指的是每次迭代中同时处理的样本数量。
默认情况下,批次大小将动态配置为训练集示例数量的约 0.2%,上限为 256。
通常,发现较大的批次大小对于更大的数据集效果更好。
learning_rate_multiplier
(number,选填)用于训练的学习率倍增器。微调学习率是预训练时使用的原始学习率乘以此值得到的(
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1007647
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。