文本生成(OpenAI Chat Completions 协议)
接口概述
使用 OpenAI Chat Completions 格式进行纯文本对话生成。支持多轮对话、系统提示词、函数调用与流式输出;参数语义与 OpenAI 官方一致,可直接使用官方 SDK。
接口地址
POST https://test.jw-info.com/v1/chat/completions
请求头
| 请求头 | 是否必填 | 说明 |
|---|---|---|
| Content-Type | 是 | application/json |
| Authorization | 是 | Bearer {API_KEY},也可用 x-api-key: {API_KEY}(两种方式共用同一把密钥) |
请求参数
请求体(JSON)
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| model | string | 是 | - | 模型名称,见下方「可用模型」或模型广场 |
| messages | array | 是 | - | 对话消息列表,按时间顺序排列 |
| temperature | float | 否 | 1.0 | 采样温度,范围 [0, 2]。值越高输出越随机,越低越确定 |
| top_p | float | 否 | 1.0 | 核采样(nucleus sampling),范围 [0, 1],仅保留累积概率达 top_p 的 token |
| max_tokens | integer | 否 | 模型默认值 | 生成的最大 token 数(旧版参数,部分模型仍支持) |
| max_completion_tokens | integer | 否 | 模型默认值 | 生成的最大 token 数(新版参数,优先级高于 max_tokens) |
| n | integer | 否 | 1 | 为每个输入生成的候选回复数量 |
| stream | boolean | 否 | false | 是否启用流式输出(SSE) |
| stream_options | object | 否 | null | 流式输出选项。使用默认设置时,响应末尾会返回一帧只带 usage 的统计(无需调用方设置);显式传 {"include_usage": false} 则不返回该帧 |
| stop | string / array | 否 | null | 停止词:遇到该字符串时停止生成,可传单个字符串或字符串数组 |
| seed | integer | 否 | null | 随机种子,用于可复现的输出 |
| presence_penalty | float | 否 | 0 | 存在惩罚,范围 [-2.0, 2.0];正值惩罚已出现过的 token |
| tools | array | 否 | null | 可用的工具/函数定义列表 |
| tool_choice | string / object | 否 | "auto" | 工具选择策略:auto / none / required,或指定具体工具 {"type":"function","function":{"name":"my_func"}} |
| response_format | object | 否 | null | 输出格式约束:纯文本模式可设为 {"type":"text"} 或 {"type":"json_object"} |
messages 结构
messages 是一个消息对象数组,每条消息包含:
| 字段 | 类型 | 说明 |
|---|---|---|
| role | string | 消息角色,可选值:system、developer、user、assistant、tool |
| content | string | 消息内容(纯文本模式下为字符串;视觉理解场景为内容数组,见「视觉理解」) |
各角色含义:
| role | 说明 |
|---|---|
| system | 系统级提示词,用于设定 AI 的行为、角色和输出风格,通常放在 messages 数组的第一条 |
| developer | 开发者级提示词,与 system 类似但优先级更高 |
| user | 用户输入消息 |
| assistant | AI 历史回复消息,用于多轮对话 |
| tool | 工具调用结果 |
请求示例
示例 1:简单对话
{
"model": "deepseek-v3.2",
"messages": [
{"role": "user", "content": "你好,请用一句话介绍你自己"}
],
"temperature": 0.7,
"max_tokens": 1024
}
示例 2:带系统提示词的多轮对话
{
"model": "qwen3.7-max",
"messages": [
{"role": "system", "content": "你是一个专业的 Python 编程助手,回答问题时请提供代码示例。"},
{"role": "user", "content": "如何在 Python 中读取 JSON 文件?"},
{"role": "assistant", "content": "可以使用内置的 json 模块:……"},
{"role": "user", "content": "如果要写入 JSON 文件呢?"}
],
"temperature": 0.5,
"max_tokens": 2048
}
示例 3:流式输出
{
"model": "deepseek-v3.2",
"messages": [
{"role": "user", "content": "写一首关于秋天的五言诗"}
],
"stream": true,
"max_tokens": 512
}
响应参数
非流式响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 本次请求的唯一标识符 |
| object | string | 固定值 chat.completion |
| created | integer | 创建时间戳(Unix 秒) |
| model | string | 实际使用的模型名称 |
| choices | array | 回复列表 |
| choices[].index | integer | 候选回复的索引(从 0 开始) |
| choices[].message | object | 回复消息对象 |
| choices[].message.role | string | 固定值 assistant |
| choices[].message.content | string | AI 回复的文本内容 |
| choices[].finish_reason | string | 停止原因:stop(正常结束)、length(达到长度限制)、content_filter(内容过滤)、tool_calls(触发工具调用) |
| usage | object | Token 用量统计 |
| usage.prompt_tokens | integer | 输入(提示词)消耗的 token 数 |
| usage.prompt_tokens_details.cached_tokens | integer | 命中缓存的输入 token 数(计费按缓存价) |
| usage.completion_tokens | integer | 输出(回复)消耗的 token 数 |
| usage.total_tokens | integer | 总 token 消耗 |
流式响应参数(SSE)
流式响应中,每条 data: 行是一个 JSON 对象,增量内容在 choices[].delta:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 本次请求的唯一标识符 |
| object | string | 固定值 chat.completion.chunk |
| created | integer | 创建时间戳 |
| model | string | 模型名称 |
| choices[].index | integer | 候选回复索引 |
| choices[].delta | object | 增量内容对象 |
| choices[].delta.role | string | 首个 chunk 中出现 assistant |
| choices[].delta.content | string | 本次增量的文本内容 |
| choices[].finish_reason | string | 最后一个内容 chunk 中出现,取值同非流式 |
| usage | object | 响应末尾单独一帧给最终用量(默认返回;显式关闭 stream_options 时不返回) |
响应示例
非流式响应:
{
"id": "chatcmpl-abc123def456",
"object": "chat.completion",
"created": 1720000000,
"model": "deepseek-v3.2",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是 DeepSeek,很高兴为你服务。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"prompt_tokens_details": {"cached_tokens": 0},
"completion_tokens": 22,
"total_tokens": 37
}
}
流式响应(节选,最后以 data: [DONE] 结束):
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1720000000,"model":"deepseek-v3.2","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1720000000,"model":"deepseek-v3.2","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1720000000,"model":"deepseek-v3.2","choices":[{"index":0,"delta":{"content":",我是 DeepSeek。"},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1720000000,"model":"deepseek-v3.2","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":6,"total_tokens":21}}
data: [DONE]
流式调用说明
| 说明 | 细节 |
|---|---|
| 事件流格式 | data: {chunk json},末尾 data: [DONE],与 OpenAI 完全一致,可直接用官方 SDK |
| usage | 末尾有一帧只带 usage 的 chunk(仅含用量统计),默认返回、无需设置 |
| 费用 | 流式调用在流结束(或客户端断开)后结算,本次费用可在控制台「费用中心」查看 |
| 中途断开 | 客户端断开时中止本次生成;按已收到的用量(含估算)计费,完全拿不到用量时记 0 费用并标记失败 |
| 超时 | 流式读超时放宽到 300 秒 |
错误响应
错误响应格式
{
"error": {
"message": "错误描述信息",
"type": "错误类型",
"param": "相关参数名(如适用)",
"code": "错误代码(如适用)"
}
}
本平台自身产生的错误按「错误码」页的统一格式返回 {"detail": "说明文字"};模型侧报错时以 502 返回,detail 里带上模型给出的原始正文(即上表形状,param 指出出错字段),便于对照模型文档定位。
常见错误类型
模型侧报错时,正文里的 type / code 常见取值:
| HTTP | 错误类型 | 说明 |
|---|---|---|
| 400 | invalid_request_error | 请求格式错误或参数无效 |
| 401 | authentication_error | API Key 无效或缺失 |
| 403 | permission_error | 无权访问该资源或模型 |
| 404 | not_found_error | 请求的资源不存在 |
| 429 | rate_limit_error | 请求频率超限,请稍后重试 |
| 429 | insufficient_quota | 配额不足,请检查账户余额 |
| 500 | server_error | 服务端内部错误 |
| 503 | server_error | 服务暂时不可用 |
本平台侧的状态码(401 密钥无效 / 402 余额不足 / 404 模型未上架 / 502 模型报错等)见「错误码」页。
代码示例
cURL
非流式调用:
curl https://test.jw-info.com/v1/chat/completions \
-H "Authorization: Bearer sk-你的密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
"temperature": 0.7,
"max_tokens": 1024
}'
流式调用:
curl https://test.jw-info.com/v1/chat/completions \
-H "Authorization: Bearer sk-你的密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "讲一个笑话"}],
"stream": true,
"max_tokens": 512
}'
Python
官方 SDK(流式):
from openai import OpenAI
client = OpenAI(base_url="https://test.jw-info.com/v1", api_key="sk-你的密钥")
stream = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "你好"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
requests(非流式):
import requests
resp = requests.post(
"https://test.jw-info.com/v1/chat/completions",
headers={"Authorization": "Bearer sk-你的密钥"},
json={
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
"max_tokens": 1024,
},
timeout=300,
)
data = resp.json()
print(data["choices"][0]["message"]["content"], data["usage"]["total_tokens"])
Java(OkHttp)
非流式调用:
String json = """
{
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
"max_tokens": 1024
}
""";
Request request = new Request.Builder()
.url("https://test.jw-info.com/v1/chat/completions")
.addHeader("Authorization", "Bearer YOUR_API_KEY")
.addHeader("Content-Type", "application/json")
.post(RequestBody.create(json, MediaType.parse("application/json")))
.build();
try (Response response = new OkHttpClient().newCall(request).execute()) {
System.out.println(response.body().string());
}
可用模型
通义千问:
| 模型名称 | 说明 |
|---|---|
| qwen3.7-max | 通义千问旗舰模型,综合能力最强 |
| qwen3.6-27b | 通义千问 27B 参数模型,能力均衡 |
| qwen3.6-35b-a3b | 通义千问 35B 激活 3B 的 MoE 模型 |
| qwen3-max | 通义千问 3 代旗舰模型 |
| qwen-plus | 通义千问增强版,性价比之选 |
| qwen3-coder-plus | 通义千问编程专用增强版 |
DeepSeek:
| 模型名称 | 说明 |
|---|---|
| deepseek-v4-pro | DeepSeek V4 旗舰版 |
| deepseek-v4-flash | DeepSeek V4 轻量极速版 |
| deepseek-v3.2 | DeepSeek V3.2 版本 |
| deepseek-r1 | DeepSeek 推理增强模型 |
| deepseek-r1-0528 | DeepSeek R1 0528 版本 |
智谱(GLM):
| 模型名称 | 说明 |
|---|---|
| glm-5.2 | 智谱 GLM-5.2 旗舰模型 |
| glm-5.1 | 智谱 GLM-5.1 版本 |
| glm-5.0 | 智谱 GLM-5.0 版本 |
| glm-5-turbo | 智谱 GLM-5 Turbo 速度版 |
MiniMax:
| 模型名称 | 说明 |
|---|---|
| minimax-m2.7 | MiniMax M2.7 版本 |
| minimax-m2.5 | MiniMax M2.5 版本 |
豆包(Doubao):
| 模型名称 | 说明 |
|---|---|
| doubao1.5-pro-32k | 豆包 1.5 Pro 32K 上下文版本 |
以上为常用模型;完整清单(含视觉理解、向量、重排、图像、视频等能力)见模型广场,模型名以广场卡片为准。