GPT 5.4
OpenAI GPT 5.4 多模态推理模型,通过 OpenAI Responses API /v1/responses 提供。支持结构化输入数组、可调推理强度(minimal → xhigh)、网络搜索和函数调用。
模型
| 模型名称 | 上下文窗口 | 推理 |
|---|---|---|
gpt-5-4 | 256K tokens | 是(reasoning.effort 控制) |
定价
按 token 计费:
| 类型 | 积分 / 百万 tokens | 价格 / 百万 tokens |
|---|---|---|
| 输入 (Input) | 300 credits | $1.50 |
| 输出 (Output) | 1800 credits | $9.00 |
接口地址
POST https://api.aivideoapi.ai/v1/responses
兼容 OpenAI Responses API。可直接使用 openai SDK 的 responses.create,将 baseURL 指向 https://api.aivideoapi.ai/v1。
创建响应
curl -X POST https://api.aivideoapi.ai/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-4",
"input": [
{
"role": "user",
"content": [
{ "type": "input_text", "text": "用一句话总结量子纠缠" }
]
}
],
"reasoning": { "effort": "low" }
}'
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 必须为 gpt-5-4 |
input | string | array | 是 | 文本字符串或消息数组 |
stream | boolean | 否 | 是否流式输出(默认 false) |
reasoning.effort | string | 否 | minimal/low/medium/high/xhigh(默认 low) |
tools | array | 否 | web_search 或 function(互斥) |
tool_choice | string | 否 | 配合 function 使用,建议 auto |
输入消息
input 可以是一个简单字符串,或一个消息数组。
字符串形式(最简)
{ "model": "gpt-5-4", "input": "用一句话总结量子纠缠" }
消息数组形式(推荐)
{
"model": "gpt-5-4",
"input": [
{
"role": "user",
"content": [
{ "type": "input_text", "text": "用一句话总结量子纠缠" }
]
}
],
"reasoning": { "effort": "low" }
}
消息字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
role | string | 是 | user / assistant / system / developer / tool |
content | array | 是 | 内容块数组 |
内容块类型
type | 字段 | 说明 |
|---|---|---|
input_text | text: string | 纯文本 |
input_image | image_url: string | 公开可访问的图片 URL |
input_file | file_url: string | 公开可访问的文件 URL(PDF、文档等) |
多模态混合示例
{
"role": "user",
"content": [
{ "type": "input_text", "text": "这张图里是什么?" },
{ "type": "input_image", "image_url": "https://example.com/photo.jpg" },
{ "type": "input_file", "file_url": "https://example.com/doc.pdf" }
]
}
注意:跟 OpenAI Chat Completions 不同,Responses 协议用
input_text/input_image/input_file这套显式类型,不复用 Chat 的image_url包装结构。
响应(非流式)
{
"id": "resp_0e90a829f82901960169e10f8f12d081999a38d26a2d3f2f8e",
"object": "response",
"model": "gpt-5.4",
"status": "completed",
"created_at": 1776357263,
"completed_at": 1776357264,
"output": [
{
"type": "message",
"role": "assistant",
"id": "msg_0e90a829f82901960169e10f8fab94819994201d9d5f8b201c",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "量子纠缠是指两个或多个粒子的状态彼此强相关,即使相隔很远,测量其中一个也会立刻关联到另一个的测量结果。",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 0,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 45,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 45
},
"reasoning": { "effort": "low" },
"text": { "format": { "type": "text" }, "verbosity": "medium" },
"tool_choice": "auto",
"tools": [],
"parallel_tool_calls": true,
"temperature": 1,
"top_p": 0.98,
"frequency_penalty": 0,
"presence_penalty": 0,
"service_tier": "default",
"truncation": "disabled",
"store": false,
"background": false,
"prompt_cache_key": "3e936979-eeac-46b9-b8de-1023adf31fb1",
"prompt_cache_retention": "24h",
"credits_consumed": 0.08
}
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 响应唯一 ID(resp_ 前缀) |
object | string | 固定为 response |
model | string | 上游实际响应模型版本 |
status | string | completed / incomplete / failed |
created_at / completed_at | int | 创建/完成 Unix 时间戳 |
output[].type | string | 输出块类型:message 是文本回复;如启用思考可能含 reasoning 块 |
output[].content[].type | string | output_text(文本)/ output_image 等 |
output[].content[].text | string | 文本内容 |
usage.input_tokens | int | 输入 token 数 |
usage.input_tokens_details.cached_tokens | int | 命中提示缓存的 token 数(缓存命中按上游折扣) |
usage.output_tokens | int | 输出 token 数(已包含 reasoning) |
usage.output_tokens_details.reasoning_tokens | int | 其中思考占的部分 |
usage.total_tokens | int | 总 token 数 = input + output |
reasoning.effort | string | 当前请求使用的思考强度(回显) |
text.format.type / text.verbosity | string | 输出文本格式与详略度 |
prompt_cache_key / prompt_cache_retention | string | 提示缓存 key 与保留时长 |
service_tier | string | 服务层级(default / flex 等) |
credits_consumed | number | 本次实际扣费积分(按本平台单价计算,与上游内部值无关) |
计费说明:
credits_consumed = input_tokens × 300/1M + output_tokens × 1800/1M。 注意output_tokens在 OpenAI Responses 协议里已经包含reasoning_tokens(这是 OpenAI 的官方计费方式),所以思考会被一起收费——如不希望产生大量思考费用,请显式设置reasoning.effort: "minimal"或"low"。 上面这条示例 input=0、output=45,按公式得0 + 45 × 1800 / 1_000_000 = 0.081,四舍五入后credits_consumed = 0.08。
响应(流式)
stream: true 时返回 SSE。事件按顺序分为:生命周期事件(response/output_item/content_part 的 added/done) + 增量事件(output_text.delta) + 终止事件(completed)。
完整事件序列示例
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_xxx","object":"response","status":"in_progress","created_at":1776357621,"model":"gpt-5.4","output":[],"usage":null,...}}
event: response.in_progress
data: {"type":"response.in_progress","sequence_number":1,"response":{...}}
event: response.output_item.added
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_xxx","type":"message","status":"in_progress","content":[],"phase":"final_answer","role":"assistant"}}
event: response.content_part.added
data: {"type":"response.content_part.added","sequence_number":3,"content_index":0,"item_id":"msg_xxx","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":4,"content_index":0,"delta":"量","item_id":"msg_xxx","output_index":0,"obfuscation":"Lh5gIRXJduvt83D","logprobs":[]}
event: response.output_text.delta
data: {"type":"response.output_text.delta","sequence_number":5,"content_index":0,"delta":"子","item_id":"msg_xxx","output_index":0,"obfuscation":"6aRgLGNpXdPvddV","logprobs":[]}
... (more delta events) ...
event: response.output_text.done
data: {"type":"response.output_text.done","sequence_number":56,"content_index":0,"item_id":"msg_xxx","output_index":0,"text":"量子纠缠是指两个或多个量子系统形成一个不可分割的整体..."}
event: response.content_part.done
data: {"type":"response.content_part.done","sequence_number":57,"content_index":0,"item_id":"msg_xxx","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"量子纠缠是指..."}}
event: response.output_item.done
data: {"type":"response.output_item.done","sequence_number":58,"output_index":0,"item":{"id":"msg_xxx","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"量子纠缠是指..."}],"phase":"final_answer","role":"assistant"}}
event: response.completed
data: {"type":"response.completed","sequence_number":59,"response":{"id":"resp_xxx","object":"response","status":"completed","created_at":1776357621,"completed_at":1776357625,"model":"gpt-5.4","output":[{"role":"assistant","id":"msg_xxx","type":"message","status":"completed","content":[{"annotations":[],"text":"量子纠缠是指...","type":"output_text"}]}],"usage":{"input_tokens":0,"input_tokens_details":{"cached_tokens":0},"output_tokens":57,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":57},...},"credits_consumed":0.10}
⚠️ 注意:本上游不返回
data: [DONE]终止行,以response.completed事件作为流结束标志。
事件类型说明
| 事件名 | 说明 |
|---|---|
response.created | 响应对象已创建,status: "in_progress" |
response.in_progress | 处理中(与 created 同一对象) |
response.output_item.added | 新增输出项(如 message 块) |
response.content_part.added | 输出项内新增内容部分(如 output_text) |
response.output_text.delta | 文本增量——delta 字段是要拼接的片段 |
response.output_text.done | 文本输出完成,text 是完整内容 |
response.content_part.done | 内容部分定稿 |
response.output_item.done | 输出项定稿 |
response.completed | 流结束——response.usage 含最终 token 数,顶层 credits_consumed 是本次实际扣费 |
客户端拼接
只关心文本结果时,订阅 response.output_text.delta 累加 delta 即可;要拿最终全文,可在 response.output_text.done 直接取 text;要取扣费/计 token,看 response.completed 的 response.usage 与 credits_consumed。
字段补充
| 字段 | 说明 |
|---|---|
sequence_number | 单调递增序号,可用于排序与去重 |
obfuscation | 上游为防重放注入的随机串,可忽略 |
output_index / content_index | 多输出项 / 多内容块场景下的索引 |
item_id | 关联到具体的输出项 ID(msg_xxx) |
示例
网络搜索
curl -X POST https://api.aivideoapi.ai/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-4",
"input": [
{ "role": "user", "content": [
{ "type": "input_text", "text": "本周热门 AI 新闻" }
]}
],
"tools": [{ "type": "web_search" }],
"reasoning": { "effort": "high" }
}'
函数调用
curl -X POST https://api.aivideoapi.ai/v1/responses \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5-4",
"input": [
{ "role": "user", "content": [
{ "type": "input_text", "text": "旧金山现在多热?" }
]}
],
"tools": [
{
"type": "function",
"name": "get_current_weather",
"description": "查询城市当前天气",
"parameters": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location", "unit"]
}
}
],
"tool_choice": "auto"
}'
限制:
web_search与function不能同时使用。
常见错误码
请求失败时,API 返回 JSON 格式的错误响应:
{
"error": {
"code": "insufficient_credits",
"message": "Your credit balance is too low. Please top up.",
"type": "billing_error"
}
}
错误码一览
| HTTP 状态码 | 错误码 | 类型 | 说明 |
|---|---|---|---|
| 400 | invalid_request | invalid_request_error | 缺少必填参数或参数无效 |
| 401 | invalid_api_key | authentication_error | API Key 无效、已禁用或已删除 |
| 402 | insufficient_credits | billing_error | 积分余额不足,请充值 |
| 403 | ip_not_allowed | permission_error | 请求 IP 不在 Key 的白名单中 |
| 404 | model_not_found | invalid_request_error | 模型不存在或已停用 |
| 404 | task_not_found | invalid_request_error | 任务 ID 不存在 |
| 429 | rate_limit_exceeded | rate_limit_error | 请求过于频繁,请降低频率 |
| 429 | spend_limit_exceeded | billing_error | 达到 Key 的消费限额(每小时/每天/总量) |
| 500 | internal_error | api_error | 服务器内部错误 |
| 503 | upstream_error | upstream_error | 上游 AI 服务返回错误 |
常见场景
invalid_request (400)
缺少必填字段或参数格式错误时返回。
{
"error": {
"code": "invalid_request",
"message": "'model' is required.",
"type": "invalid_request_error"
}
}
insufficient_credits (402)
积分不足。可通过 GET /v1/credits 查询余额,前往 Dashboard > Billing 充值。
invalid_api_key (401)
可能原因:
- Key 不以
sk-开头 - Key 已被禁用或删除
- 用户账户已被封禁
upstream_error (503)
上游 AI 服务返回错误,可能原因:
- 输入内容包含敏感或违规信息
- 上游服务暂时不可用
- 请求参数不被上游支持
因上游错误导致任务失败时,预扣积分会自动退还。