怎么读OpenAI API的OpenAPI规范?openai-openapi完整拆解
【免费下载链接】openai-openapiOpenAPI specification for the OpenAI API项目地址: https://gitcode.com/GitHub_Trending/op/openai-openapi
openai-openapi 是 OpenAI API 的官方 OpenAPI 规范文档仓库,用一份 YAML 把这个 REST API 的端点、参数、响应结构全部描述清楚。如果你平时靠"复制 curl、猜参数"过日子,这份文档就是该补的那一课。这篇文章带你走一遍它是什么、里面有什么、怎么跑起来、坑在哪。
一、先搞清楚:这份文档在说什么
说白了,OpenAPI 规范就是把一份 API 的"接口契约"写成机器能读的数据:有哪些路径、每个 HTTP 方法怎么调、哪些字段必填、出错会返回什么码。它的价值不在于"文档写得多细",而在于这份文件能被工具直接消费——拿它可以生成各语言的客户端 SDK、搭建接口浏览器、配置自动化测试,这些都能自动完成。
openai-openapi 仓库就是 OpenAI 官方为此发布的那份契约:核心文件是 openapi.yaml,另外还有等价的 openapi.json,两者都基于 OpenAPI 3.1 编写,规范版本号为 2.3.0。官方 Python、Node.js 等语言的 openai SDK 都是从这份规范生成出来的,还有一个带逐字段注解的 openapi.documented.yml 变体可供细读。所以你在读的不是一份静态说明,而是各语言 SDK 的共同源头——这也意味着接口新增参数、字段弃用,规范里会先于文档出现。
这里有个细节:仓库里的 yaml 和 json 都是自动同步的生成产物,不需要你手工维护,发现问题走 README.md 里的反馈流程提 issue 即可。
二、打开文档,里面到底有什么
这一节基本就是"OpenAPI 规范怎么读"的核心答案。先说结论:结构是固定的,熟悉一遍之后,以后读任何 API 规范文档都是同一套路数。
顶层字段速览
整份文档的顶层结构永远是这 7 个字段,每个的作用用一句人话概括:
| 字段 | 一句话作用 |
|---|---|
openapi | 声明规范版本号,这里是 3.1 |
info | API 名称、版本(2.3.0)、许可证等元信息 |
servers | 告诉你请求发往哪个域名,即api.openai.com/v1 |
security | 认证方式,用 API key 走请求头 |
tags | 给所有端点贴功能标签,方便你按模块找接口 |
paths | 全文主体,每个端点的定义都写在这里 |
components | 公共组件库,请求/响应 schema 和错误响应都在此复用 |
真正的信息量集中在paths和components里,其余五个是"封面",扫一眼就行。
功能模块怎么分
tags数下来一共 17 个模块。按使用频率拆开看,分成两组:
日常高频,写应用第一天就会碰到的:
| 模块 | 干什么用 |
|---|---|
| Chat | 对话接口,用得最多的一个 |
| Completions | 传统文本补全 |
| Embeddings | 文本转向量,检索和 RAG 的基础 |
| Images | 图像生成与编辑 |
| Models | 查可用模型列表和说明 |
| Audio | 语音转文字、文字转语音 |
进阶场景,做更重的活时才会用到:
| 模块 | 干什么用 |
|---|---|
| Assistants | 构建能调用工具、执行代码的助手 |
| Fine-tuning | 用自己的数据微调模型 |
| Batch | 大批量请求的异步执行 |
| Files | 上传训练数据和文档 |
| Conversations | 管理对话历史 |
| Evals / Graders | 跑评测和打分任务 |
一个端点的定义长什么样
拿/embeddings的 POST 端点举例,文档里一个端点的最小骨架长这样:
/embeddings: post: summary: Create embeddings requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/CreateEmbeddingRequest" responses: "200": description: OK "400": description: Invalid embedding input or request parameters.你看requestBody这里写了required: true,意思就是这个接口必须带请求体,空着发直接不行。而那个$ref并不是真实数据,它是指针:请求体的完整结构定义在components/schemas的CreateEmbeddingRequest里,点过去就能看到每个字段、类型和默认值。再看responses,连"400"都写明了原因是"输入或参数不合法",以后遇到 400 先对照 schema 检查自己传了什么,而不是盲目重试。
还有个值得知道的细节:每个端点下面都挂了一个x-oaiMeta自定义扩展字段,里面附了现成的 curl 和 Python 示例请求以及示例响应。想先"跑起来看看"的话,直接从这里抄就行。
三、五分钟上手:把文档跑起来
⚡ 三步走,就能把这份规范用起来。
第一步,拉仓库。在终端执行git clone https://gitcode.com/GitHub_Trending/op/openai-openapi,openapi.yaml和openapi.json就到手了。
第二步,导入可视化工具。把 YAML 拖进 Swagger UI,或者用 Redoc 渲染成静态文档站,效果是左侧端点列表,点开即见参数详情,填上 API key 还能直接发请求——这就是"动手玩"的感觉。
第三步,盯版本。规范会随 API 一起更新,README.md 里给出了获取最新版本的方式,info里的版本号一变,就说明有新端点或字段变更,值得对着 diff 看一眼。
整套流程其实就是 openai-openapi 使用指南的全部:拉取、可视化、发一个请求。发这个请求时可以用最熟悉的 Python:
from openai import OpenAI client = OpenAI() resp = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "write a haiku about OpenAPI"}], ) print(resp.choices[0].message.content)这一下对应文档里Chat模块的/chat/completions定义,卡住了就回去翻对应的 schema,看哪个字段传错了。
四、进阶玩法:两个实用场景
批量请求:用 Batch API 跑量
一次要处理上千条数据时,逐条同步调用既慢又占速率额度,Batch 模块就是为此设计的:先把请求整理成文件传上去,再创建批处理作业:
curl https://api.openai.com/v1/batches \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "input_file_id": "file-xyz789", "endpoint": "/v1/chat/completions", "completion_window": "24h" }'completion_window是给你设定的完成时限,一般写24h。作业建好之后异步执行,轮询到状态完成后取结果文件即可,适合离线跑数据这类不急在当下的任务。
内容安全接入:Moderations API
UGC 入口的内容安全检测也是高频需求,调用非常直接:
const res = await openai.moderations.create({ input: "some text that needs checking" }); console.log(res.results[0].categories);categories是一组风险类别标记,能实时告诉你这段文本命中了哪类风险。对面向用户的输入做一道前置拦截,成本远低于事后处理。
五、别踩这几个坑
📌 结合这份规范,下面几个坑基本是写 OpenAI API 代码时的高频翻车点。
- 枚举字段严格按 schema 传。参数不是随便填的,枚举字段写错一个字母直接 400。发请求前对着规范里的
enum列表取值,别凭记忆敲。 - 非 200 响应要处理。文档对 400、401、403、429、500、503 都分别给了定义,每个状态码含义不同:401 是 key 的问题,429 是限流。代码里按状态码分支,排障会快很多。
- 用
OpenAI-Beta头指定版本。调用处于 beta 阶段的接口时,通过OpenAI-Beta请求头声明你用的版本,避免上游更新后行为突变。 - 资源用完及时清理。你创建的 Assistants 和 Files 都是持久资源,不是用完即弃的,定期调 delete 接口清掉,别让它们越积越多。
- 别自己动手改规范。仓库里的 yaml 是生成产物,改了也不会生效。发现 schema 有误,按 README 的流程提 issue 才是正确姿势。
这份规范文档的价值在于它处在"人读的文档"和"SDK 代码"中间:不用靠猜接口,也不必去啃生成代码。下次调 OpenAI API 遇到新参数、新行为,第一反应应该是打开 openapi.yaml 搜一下 schema,而不是去论坛问。
【免费下载链接】openai-openapiOpenAPI specification for the OpenAI API项目地址: https://gitcode.com/GitHub_Trending/op/openai-openapi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考