API 参考 › 对话模型

创建对话补全

文档最后更新于 2026年10月16日 02:29

OpenAI Chat Completions 兼容端点,可调用全部文本模型系列(Claude 建议改用创建消息)。

端点

POST /v1/chat/completions

OpenAI Chat Completions 兼容端点,适用于全部文本模型系列:GPT、Gemini、DeepSeek、Qwen、豆包、GLM、MiniMax、Kimi、Grok(gpt-6.1-sol 推荐使用 Responses),各协议的支持范围见 协议支持的模型。不建议通过本端点调用 Claude:会丢失 prompt cache、thinking 等能力,请改用 创建消息。

请求

请求头

请求头取值说明
AuthorizationBearer sk-xxxxxx鉴权。本端点不接受 `x-api-key`(只带它会返回 401)
content-typeapplication/json

最小请求体:

json
{
  "model": "gpt-5.6-sol",
  "messages": [
    {"role": "user", "content": "Hello"}
  ]
}

参数

字段类型必填说明
modelstring是文本模型 ID,完整列表见 GET /v1/models
messagesarray是对话消息,role 为 system、user 或 assistant,content 为文本
max_tokensinteger否最大输出 token 数。gpt-6 系推理模型建议 ≥ 4096,见下方说明;低于线路最小值时自动抬高(见下方「参数自动适配」)
temperaturenumber否采样温度,常用 0 到 2,越高越发散;默认 1。推理模型不接受时网关自动去掉重发,见下方「参数自动适配」
top_pnumber否核采样阈值,0 到 1;默认 1。一般与 temperature 只调一个。推理模型不接受时网关自动去掉重发,见下方「参数自动适配」
presence_penaltynumber否-2 到 2,正值鼓励谈新话题;默认 0。推理模型不接受时网关自动去掉重发,见下方「参数自动适配」
frequency_penaltynumber否-2 到 2,正值降低重复用词;默认 0。推理模型不接受时网关自动去掉重发,见下方「参数自动适配」
reasoning_effortstring否深度思考强度:none 关闭思考;low / medium / high 为强度档。各模型是否支持、可调形态(档位 / 开关 / 预算 / 始终开)见 深度思考 的「各模型推理强度」表;平台按模型转成上游的原生写法,不支持的模型忽略此字段;none / minimal 对不支持的模型自动改为 low(见下方「参数自动适配」)
streamboolean否设为 true 时以 SSE 流式返回,默认 false

其余字段按 OpenAI Chat Completions API 格式透传,用法以 OpenAI 官方文档为准。

响应

非流式返回 chat.completion 对象:

json
{
  "object": "chat.completion",
  "model": "gpt-5.6-sol",
  "choices": [
    {"index": 0, "message": {"role": "assistant", "content": "Hello!"}, "finish_reason": "stop"}
  ],
  "usage": {"prompt_tokens": 214, "completion_tokens": 3, "total_tokens": 217}
}
字段说明
id响应 ID
object固定为 chat.completion
created创建时间(Unix 秒)
model你请求时填的模型 ID(原样返回)
choices回复数组,文本在 choices[0].message.content,finish_reason 为停止原因(如 stop)
usageprompt_tokens、completion_tokens、total_tokens;命中缓存时另有 prompt_tokens_details.cached_tokens
service_tier服务档位标记;本站暂不支持快速模式,请求里的 service_tier 会被忽略

stream 为 true 时返回 data: {...} 分片(object 为 chat.completion.chunk),[DONE] 之前的最后一个分片带 usage(个别线路把 usage 挂在带 finish_reason 的那个分片上,choices 不为空;请在任一分片出现 usage 时读取),详见 流式输出。

示例

本页示例为海外模型(gpt-5.6-sol),地址用国外通道 https://acapi.top;第二个示例为国内模型(deepseek-v4-flash),用国内通道 https://api.acapi.top。两个地址均可用,见 调用地址。

基础请求

bash
curl https://acapi.top/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

国内模型请求(国内通道)

bash
curl https://api.acapi.top/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}]
  }'

流式请求

bash
curl https://acapi.top/v1/chat/completions \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "stream": true,
    "messages": [{"role": "user", "content": "写一句话"}]
  }'

Python SDK

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxxxxx",
    base_url="https://acapi.top/v1",
)

resp = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

错误

HTTP 状态error.type / error.code触发条件
401new_api_error(code 为空)鉴权失败,详见 鉴权
503model_not_foundmodel 不存在或暂不可用,请对照 GET /v1/models 检查 ID
400invalid_request_error参数错误,message 里会说明具体字段;见下方 max_tokens 说明

关于 max_tokens 与 max_completion_tokens

同一个模型名在不同线路背后可能要求不同的参数名。部分线路上,GPT-5.4 起的部分模型只接受 max_completion_tokens,传 max_tokens 会返回 400;而其它线路两者都接受。

这是间歇性的:网关对同一模型的多条线路自动分配,同一个请求有时成功、有时报 Unsupported parameter —— 取决于那次分配到哪条线路。实测 gpt-6-astra 连打 12 次有 2 次因此失败。

客户端应当这样处理:优先传 max_completion_tokens;若仍报错则回退到 max_tokens。网关本身也会在撞上 400 时自动换参数名重试一次。

python
body = {"model": model, "messages": msgs, "max_completion_tokens": 4096}
r = post("/v1/chat/completions", body)
# 少数线路只认 max_tokens,撞上就换名重试一次
if r.status == 400 and "max_completion_tokens" in r.text:
    body.pop("max_completion_tokens")
    body["max_tokens"] = 4096
    r = post("/v1/chat/completions", body)

gpt-6 系推理模型的 max_tokens

gpt-6 系(如 gpt-6-sol、gpt-6.1-sol)是推理模型,推理 token 也占输出预算。max_tokens(或 max_completion_tokens)给得太小时,部分线路不会返回截断结果,而是直接 400「output limit reached」。网关遇到这种 400 会自动把输出上限放大(取原值 2 倍与 4096 的较大者,不超过模型上限)重试一次;仍失败才把错误返回给你(中文提示「输出已达到 max_tokens 或模型输出上限…请调大 max_tokens 后重试」)。建议 `max_tokens` ≥ 4096。

GPT-6 系推理模型带 tools

gpt-6-sol、gpt-6.1-sol、gpt-6-luna、gpt-6-astra 与 gpt-5.6 系(gpt-5.6-sol / gpt-5.6-terra / gpt-5.6-luna)自带推理,部分线路在 Chat Completions 上不能同时接受 tools 与推理设置。用本端点带 tools 调用它们时由网关自动处理:网关会自动改走 `/v1/responses`(同一条线路,响应仍按 Chat Completions 格式返回给你),不能改道时 gpt-6-sol 会自动带上 reasoning_effort: "none" 兜底,客户端无需改协议或改模型。`/v1/messages`、`/v1beta` 入口同样生效:在这两个入口带工具调用上述模型,也由网关自动处理。需要完整的推理与工具字段时,建议这些模型直接用 [创建 Responses 响应](/docs/responses)。

`/v1/responses` 暂不支持内嵌 `image_generation` 工具(让对话模型边聊边画图)。带该工具的请求会返回 400,本次不扣费;请去掉该工具后重试。

参数自动适配

部分推理模型或线路不接受某些参数或取值。遇到下面四种情况,网关会在同一条线路上自动修正后重发一次(同类可连续补救多轮),客户端无需改代码;/v1/chat/completions、/v1/responses、/v1/messages、/v1beta 入口都适用。发生修正时响应头会带 X-CA-Compat,说明改了什么:

情况网关的处理响应头 X-CA-Compat
推理模型不接受采样参数(temperature、top_p、presence_penalty、frequency_penalty 等)而返回 400去掉该参数,同一线路重发一次ca_dropped_param=<参数名>,如 ca_dropped_param=temperature
max_tokens / max_output_tokens 低于线路要求的最小值(如 16)自动抬高到最小值ca_min_output_tokens=N(N 为实际发出的值)
reasoning_effort 为 none / minimal,而模型只支持 low 起自动改为 lowca_effort_floor=low
上游明确回「不认识某个参数」,如 Unknown parameter: 'enable_thinking' / 'thinking'去掉该参数,同一线路重发一次(仅在上游点名时才剥,网关不会主动增删你没传的字段)ca_dropped_param=<参数名>,如 ca_dropped_param=thinking
  • ·补救那一次失败不计费:被上游拒绝的那一次不扣费,修正后的重发也不额外计费,只按最终结果计费。
  • ·没有发生修正时不会出现 X-CA-Compat 响应头。
  • ·仍建议对推理模型不写采样参数(temperature、top_p 等):自动适配是兜底,会多一次往返,直接不写更快。

非流式请求超过 30 秒

经公网访问时,非流式请求(stream 不传或为 false)如果 30 秒内还没返回首字节,可能被网络边缘断开,客户端会收到空响应或连接中断,但服务端可能仍在生成、照常计费。推理模型、长输出、大上下文请务必用 stream: true(SSE 有保活,不受此限制)。Claude Code、Codex、Cherry Studio 默认都是流式,不受影响。

流式请求如果上游返回 200 却没有任何有效内容(空流),网关在你还没收到任何字节时会自动换一条线路重试一次;仍为空返回 502 empty_response,见 错误码。

客户端读超时(流式也要)

客户端读超时请设为 ≥300 秒(Claude 系列必须;其它模型 ≥150 秒),流式与非流式都一样。 推理模型、长上下文的首字常要 30–60 秒;不少客户端或 SDK 默认读超时只有 24–30 秒,到点会自己断开连接,这次请求在使用日志里记为 499 client_disconnected,通常不扣费(以实际账单为准)。长上下文场景实测首字可到 100–190 秒。网关自身等待上游首字最长 90 秒,客户端超时应在此之上留足余量。
  • ·Claude Code:环境变量 API_TIMEOUT_MS=600000(单位毫秒,即 600 秒)。
  • ·Codex:~/.codex/config.toml 里本站对应的 [model_providers.<id>] 下写 stream_idle_timeout_ms = 600000。
  • ·其它客户端 / SDK:若客户端有超时设置项,调到 ≥300 秒(Claude 系列);其它模型 ≥150 秒。注意部分客户端该项单位是毫秒(300 秒 = 300000)。

共 30 篇文档。文中出现的模型名与价格以模型广场的实时数据为准。