引言
在 AI 浪潮席卷全球、深刻重塑工作与生活方式的时代,OpenAI API 已悄然成为行业内的 “黄金标准”。当我们谈论自然语言处理领域的智能客服、内容创作、代码生成等应用时,OpenAI API 的身影无处不在。它不仅为开发者提供了接入前沿人工智能模型的便捷通道,更是极大降低了 AI 应用开发的技术门槛。
如今,OpenAI API 已然成为实际上的接口标准,深刻影响着整个 AI 生态的发展。众多头部大模型纷纷对标其接口规范进行开发,如 DeepSeek、Qwen,均在设计上向 OpenAI API 看齐,以便用户能够无缝迁移使用经验,降低学习成本。在本地化部署领域,Ollama、vllm 等工具也积极适配 OpenAI API 的接口方式,让开发者即使在本地环境,也能享受近似 OpenAI API 的操作体验与功能优势。

随着企业和开发者对智能化解决方案的需求与日俱增,OpenAI API 凭借强劲功能与广泛适用性,成为众多项目的核心选择。无论是初创企业希望借 AI 提升产品竞争力,还是资深开发者探索人工智能的无限可能,掌握 OpenAI API 的核心概念、使用方法和最佳实践,都是充分释放 AI 潜力、在项目和业务中实现创新突破的关键一步。接下来,让我们一同深入探索 OpenAI API 的世界。
API接口总览
以下是 OpenAI API 接口的表格整理(基于第三方文档描述,具体以官方文档为准):
|
分类 |
接口名称 |
接口地址 |
功能描述 |
关键参数/说明 |
|
聊天与文本生成 |
Chat Completions |
/v1/chat/completions |
支持多轮对话交互(如 GPT-3.5-turbo、GPT-4) |
messages(含role和content的列表) |
|
Text Completions |
/v1/completions |
生成单轮文本续写(如text-davinci-003) |
prompt(输入文本)、max_tokens(生成长度) |
|
|
图像生成 |
Image Generation |
/v1/images/generations |
通过文本生成图像(DALL·E 模型) |
prompt(描述文本)、n(生成数量)、size(分辨率如1024×1024) |
|
嵌入与语义理解 |
Embeddings |
/v1/embeddings |
将文本转换为向量(用于语义分析、聚类等) |
input(输入文本)、model(如text-embedding-3-small) |
|
语音处理 |
Audio Transcriptions |
/v1/audio/transcriptions |
将音频转录为文本(Whisper 模型) |
支持格式:MP3、WAV 等;需上传音频文件 |
|
模型微调 |
Fine-tuning Jobs |
/v1/fine_tuning/jobs |
创建、查询和管理微调作业(如定制gpt-3.5-turbo) |
子操作:创建(POST)、查询(GET)、撤销(DELETE) |
|
内容审核 |
Moderation |
/v1/moderations |
检测文本是否违规或敏感 |
input(待审核文本) |
|
辅助功能 |
模型列表查询 |
/v1/models |
获取可用模型列表及详情 |
无特殊参数 |
|
文件操作 |
/v1/files |
上传、删除或查询文件(用于微调等场景) |
子操作:上传(POST)、删除(DELETE)、列表查询(GET) |
为了验证这些接口,可以到OpenAI官网开发,或者找个国内模型厂商进行验证。
如硅基流动:SiliconFlow

魔塔:魔搭社区

常用API
学会对接API,也可以从另外一个层面了解AI的实现原理,当然有许多封装好的API工具类,可以拿来就用,如Spring boot OpenAI,但这不利于我们理解,目前开始手搓一下。
以下是根据OpenAI API整理的接口输入、输出参数表格及对应的Java代码示例(使用OkHttp和Gson库实现)。请确保已添加以下依赖:
<!-- Maven依赖 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
1.Chat Completions聊天补全
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
model |
String |
是 |
模型名称 |
“gpt-3.5-turbo” |
|
messages |
List |
是 |
消息列表(角色和内容) |
[{“role”: “user”, “content”: “Hello”}] |
|
temperature |
Float |
否 |
生成随机性(0-2) |
0.7 |
|
max_tokens |
Integer |
否 |
最大生成长度 |
100 |
输出参数(JSON关键字段)
|
字段名 |
类型 |
说明 |
示例值 |
|
id |
String |
请求ID |
“chatcmpl-123” |
|
choices |
List |
生成结果列表 |
[{“message”: {“content”: “Hi!”}}] |
|
usage |
Object |
Token统计 |
{“total_tokens”: 10} |
Java代码示例
import okhttp3.*;
import com.google.gson.Gson;
public class OpenAIChat {
public static void main(String[] args) throws Exception {
String apiKey = "YOUR_API_KEY";
String model = "gpt-3.5-turbo";
String content = "Hello, how are you?";
// 构建请求体
String jsonBody = new Gson().toJson(Map.of(
"model", model,
"messages", List.of(Map.of("role", "user", "content", content)),
"temperature", 0.7
));
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.openai.com/v1/chat/completions")
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.post(RequestBody.create(jsonBody, MediaType.parse("application/json")))
.build();
try (Response response = client.newCall(request).execute()) {
String responseBody = response.body().string();
System.out.println(responseBody);
}
}
}
2.Text Completions文本补全
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
model |
String |
是 |
模型名称 |
“text-davinci-003” |
|
prompt |
String |
是 |
输入提示 |
“Once upon a time” |
|
max_tokens |
Integer |
否 |
最大生成长度 |
100 |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
choices |
List |
生成结果列表 |
[{“text”: ” there was a…”}] |
Java代码示例
// 修改请求体为Text Completions格式
String jsonBody = new Gson().toJson(Map.of(
"model", "text-davinci-003",
"prompt", "Once upon a time",
"max_tokens", 100
));
Request request = new Request.Builder()
.url("https://api.openai.com/v1/completions")
// ...其余与Chat Completions类似
3.Image Generation图像生成
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
prompt |
String |
是 |
图像描述 |
“A futuristic city” |
|
n |
Integer |
否 |
生成数量(1-10) |
1 |
|
size |
String |
否 |
图像分辨率 |
“1024×1024” |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
data |
List |
图像URL或Base64数据 |
[{“url”: “https://…”}] |
Java代码示例
String jsonBody = new Gson().toJson(Map.of(
"prompt", "A futuristic city",
"n", 1,
"size", "1024x1024"
));
Request request = new Request.Builder()
.url("https://api.openai.com/v1/images/generations")
// ...其余类似
4.Audio Transcriptions语音转文本
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
file |
File |
是 |
音频文件(MP3/WAV等) |
new File(“audio.mp3”) |
|
model |
String |
是 |
模型名称 |
“whisper-1” |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
text |
String |
转录的文本 |
“Hello, world.” |
Java代码示例(需使用Multipart上传)
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "audio.mp3",
RequestBody.create(new File("audio.mp3"), MediaType.parse("audio/mpeg")))
.addFormDataPart("model", "whisper-1")
.build();
Request request = new Request.Builder()
.url("https://api.openai.com/v1/audio/transcriptions")
.header("Authorization", "Bearer " + apiKey)
.post(requestBody)
.build();
以下是OpenAI其他核心接口的详细参数说明及Java代码示例:
5. Embeddings(文本嵌入)
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
model |
String |
是 |
嵌入模型名称 |
“text-embedding-3-small” |
|
input |
String |
是 |
输入文本(支持批量) |
“自然语言处理技术” 或 [“文本1”, “文本2”] |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
data |
List |
嵌入向量列表 |
[{“embedding”: [0.1, -0.2, …]}] |
|
model |
String |
使用的模型名称 |
“text-embedding-3-small” |
Java代码示例
// 生成文本嵌入
String jsonBody = new Gson().toJson(Map.of(
"model", "text-embedding-3-small",
"input", "自然语言处理技术"
));
Request request = new Request.Builder()
.url("https://api.openai.com/v1/embeddings")
.header("Authorization", "Bearer " + apiKey)
.post(RequestBody.create(jsonBody, MediaType.parse("application/json")))
.build();
// 解析响应
try (Response response = client.newCall(request).execute()) {
JsonObject responseJson = new Gson().fromJson(response.body().string(), JsonObject.class);
JsonArray embeddings = responseJson.getAsJsonArray("data");
System.out.println(embeddings);
}
6. Moderation(内容审核)
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
input |
String |
是 |
待审核的文本 |
“暴力内容示例” |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
flagged |
Boolean |
是否标记为违规 |
true |
|
categories |
Object |
违规分类详情 |
{“violence”: true, …} |
Java代码示例
String jsonBody = new Gson().toJson(Map.of(
"input", "暴力内容示例"
));
Request request = new Request.Builder()
.url("https://api.openai.com/v1/moderations")
.header("Authorization", "Bearer " + apiKey)
.post(RequestBody.create(jsonBody, MediaType.parse("application/json")))
.build();
// 解析结果
try (Response response = client.newCall(request).execute()) {
JsonObject result = new Gson().fromJson(response.body().string(), JsonObject.class);
boolean isFlagged = result.getAsJsonArray("results").get(0).getAsJsonObject().get("flagged").getAsBoolean();
System.out.println("是否违规: " + isFlagged);
}
7. Fine-tuning(模型微调)
创建微调作业(POST/v1/fine_tuning/jobs)
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
training_file |
String |
是 |
训练文件ID(需预先上传) |
“file-abc123” |
|
model |
String |
是 |
基础模型名称 |
“gpt-3.5-turbo” |
|
suffix |
String |
否 |
微调模型名称后缀 |
“my-custom-model” |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
id |
String |
微调作业ID |
“ftjob-123” |
|
status |
String |
作业状态(如running) |
“succeeded” |
Java代码示例
// 创建微调作业
String jsonBody = new Gson().toJson(Map.of(
"training_file", "file-abc123",
"model", "gpt-3.5-turbo",
"suffix", "my-custom-model"
));
Request request = new Request.Builder()
.url("https://api.openai.com/v1/fine_tuning/jobs")
.header("Authorization", "Bearer " + apiKey)
.post(RequestBody.create(jsonBody, MediaType.parse("application/json")))
.build();
// 获取作业ID
try (Response response = client.newCall(request).execute()) {
JsonObject job = new Gson().fromJson(response.body().string(), JsonObject.class);
String jobId = job.get("id").getAsString();
System.out.println("微调作业ID: " + jobId);
}
查询微调作业(GET/v1/fine_tuning/jobs/{job_id})
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
fine_tuned_model |
String |
微调后的模型ID |
“ft:gpt-3.5-turbo:my-org:custom-model:abc123” |
// 查询作业状态
String jobId = "ftjob-123";
Request request = new Request.Builder()
.url("https://api.openai.com/v1/fine_tuning/jobs/" + jobId)
.header("Authorization", "Bearer " + apiKey)
.get()
.build();
try (Response response = client.newCall(request).execute()) {
JsonObject jobStatus = new Gson().fromJson(response.body().string(), JsonObject.class);
String modelId = jobStatus.get("fine_tuned_model").getAsString();
System.out.println("微调模型ID: " + modelId);
}
8. 模型列表查询(GET/v1/models)
输入参数
无(直接发送GET请求)
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
data |
List |
模型列表 |
[{“id”: “gpt-4”, “object”: “model”}] |
|
object |
String |
固定值”list” |
“list” |
Java代码示例
// 获取所有模型列表
Request request = new Request.Builder()
.url("https://api.openai.com/v1/models")
.header("Authorization", "Bearer " + apiKey)
.get()
.build();
try (Response response = client.newCall(request).execute()) {
JsonObject models = new Gson().fromJson(response.body().string(), JsonObject.class);
JsonArray modelList = models.getAsJsonArray("data");
modelList.forEach(model -> System.out.println(model.getAsJsonObject().get("id")));
}
9. 文件操作(Files)
上传文件(POST/v1/files)
输入参数
|
参数名 |
类型 |
必填 |
说明 |
示例值 |
|
file |
File |
是 |
要上传的文件 |
new File(“data.jsonl”) |
|
purpose |
String |
是 |
文件用途(如fine-tune) |
“fine-tune” |
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
id |
String |
文件ID |
“file-abc123” |
// 上传文件(Multipart请求)
RequestBody fileBody = RequestBody.create(new File("data.jsonl"), MediaType.parse("text/plain"));
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "data.jsonl", fileBody)
.addFormDataPart("purpose", "fine-tune")
.build();
Request request = new Request.Builder()
.url("https://api.openai.com/v1/files")
.header("Authorization", "Bearer " + apiKey)
.post(requestBody)
.build();
try (Response response = client.newCall(request).execute()) {
JsonObject fileInfo = new Gson().fromJson(response.body().string(), JsonObject.class);
String fileId = fileInfo.get("id").getAsString();
System.out.println("文件ID: " + fileId);
}
删除文件(DELETE/v1/files/{file_id})
输出参数
|
字段名 |
类型 |
说明 |
示例值 |
|
deleted |
Boolean |
是否删除成功 |
true |
// 删除文件
String fileId = "file-abc123";
Request request = new Request.Builder()
.url("https://api.openai.com/v1/files/" + fileId)
.header("Authorization", "Bearer " + apiKey)
.delete()
.build();
try (Response response = client.newCall(request).execute()) {
JsonObject result = new Gson().fromJson(response.body().string(), JsonObject.class);
boolean isDeleted = result.get("deleted").getAsBoolean();
System.out.println("删除成功: " + isDeleted);
}

注意事项
- 错误处理:所有请求需检查HTTP状态码(如200成功,401认证失败,429速率限制)。
- 异步操作:微调作业需要轮询状态,直至status变为succeeded。
- 文件格式:微调文件需为JSONL格式(每行一个训练样本)。
- 资源清理:完成微调后,及时删除不再需要的文件以释放配额。


