1 前言
随着人工智能技术的迅猛发展,OpenAI 以其卓越的研发能力和前瞻性的技术理念,在自然语言处理、强化学习等多个关键的人工智能子领域取得了突破性的进展。其开发的 GPT(Generative Pretrained Transformer)系列模型等成果在自然语言处理领域取得了前所未有的成就。这些模型通过在海量文本数据上进行预训练,能够对各种自然语言处理任务进行有效处理,如文本生成、语言翻译、问答系统等。
OpenAI 在 2023 年 3 月宣布开放 API,允许第三方开发者通过 API 将 ChatGPT 集成至他们的应用程序和服务中;并在2023 年 7 月 6 日向所有付费 API 客户开放 GPT-4 API,并计划在 7 月底前向新的开发人员开放访问权限。
OpenAI API 的出现激发了行业内对人工智能技术的进一步探索和创新。许多公司和研究机构在 OpenAI 的影响下,加大了对自然语言处理技术的研发投入,推动了整个行业的技术进步。目前,几乎所有的大模型服务和开源项目都支持 OpenAI 的接口。这意味着开发者可以使用一套适配 OpenAI 的代码来调用各种其他大模型,具有较高的通用性和灵活性。
因而,解读 OpenAI - API 接口文档对于希望构建自研大模型、搭建大模型平台、应用的机构/开发者都是至关重要的。本文系列主要就OpenAI-API接口协议进行解读,并从个人角度分析理解一些模型参数的用法,并对
2 OpenAI-API 接口协议介绍
2.1 协议格式
OpenAI通过HTTP方式对外暴露服务功能,需要采用统一的域名以及鉴权方式进行接口访问。
- 请求域名:https://api.openai.com
- 请求路径:OpenAI在所有API接口路径中加入了版本参数,目前版本为v1,目前所有OpenAI API请求的URL前缀为:https://api.openai.com/v1。
2.2 接口鉴权
OpenAI API使用API密钥进行身份验证。所有的HTTP API请求都应包括以下格式的Authorization
HTTP标题, 其中包含API密钥:
Authorization: Bearer OPENAI_API_KEY
2.3 接口请求
2.3.1 CURL请求
由于OpenAI API通过HTTP请求进行访问,因而可以通过CURL进行发送HTTP请求。
curl https://api.openai.com/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer $OPENAI_API_KEY"
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}'
2.3.2 OpenAI python包发送请求
OpenAI 提供了封装好的python包,可以方便用户快速发送请求、接收模型返回结果,并处理过程中可能出现个各种异常。
pip install openai
try:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me a joke."}
])
print(response['choices'][0]['message']['content'])
except openai.error.OpenAIError as e:
# 捕获所有 OpenAI API 错误
print(f"OpenAI API error: {e}")
except Exception as e:
# 捕获其他潜在的错误
print(f"An unexpected error occurred: {e}")
4 接口返回
OpenAI 支持流式/非流式的返回
4.1 非流式正常返回
非流式请求中,OpenAI 会同步返回一个Http Response,Http Response中包含本次请求的结果。具体的Http Response Body内容需见具体的请求,此处不做详细介绍。
4.2 流式正常返回
流式请求中,OpenAI 会同步会一个Http SSE 流式对象,并在流式对象中,通过SSE chunk的逐个返回模型的输出结果。
5 异常处理
当OpenAI在处理请求过程中出现异常时,会返回一个异常信息给到接口调用方。
- 首先是返回一个非200的 httpcode以表示当前请求无法正常完成。
- 其次是在http 响应的body中返回一个error 结构,error中返回具体的错误信息。
5.1 异常http code
目前已知的http 错误code有以下几种:
HTTP错误码 | 说明 |
---|---|
400 | 通常表示客户端发送的请求存在问题,例如请求中的参数错误、格式不正确或者缺少必要的参数等。在OpenAI API的使用中,可能是输入数据不符合API的要求,如输入的文本格式错误或者请求的参数值不合法。 |
401 | 授权类错误。这可能是因为在请求OpenAI API时,使用的API密钥不正确、已过期或者根本没有提供API密钥。这是一种身份验证失败的情况,需要检查API密钥的正确性和有效性。 |
403 | 国家/地区禁止访问。 |
429 | 表示在单位时间内发送的请求数量过多或超出限额,需要调整请求的频率或者数量 或是 增加限额。 |
500 | 这是服务器内部错误,表示OpenAI的服务器端出现了故障。 |
503 | 服务器过载。 |
5.2 error 结构
OpenAI 的 API 会返回类似这样的error错误响应:
字段名称 | 二级字段 | 类型 | 必选 | 描述 |
---|---|---|---|---|
error | object | 是 | 错误信息 | |
- | code | string | 是 | 错误码 |
- | type | string | 是 | 错误类型 |
- | message | string | 是 | 错误详情 |
- | param | string | 否 | 错误提示参数 |
错误结果示例
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "rate_limit_error",
"param": null,
"code": "rate_limit_exceeded"
}
}