系统文档
这里按当前代码真实链路说明:页面入口和外接入口都是协议适配层,不互相 HTTP 调用,最终统一进入同一套生成、扣费、调度和存储链路。默认部署启用自用模式:关闭公开注册,首次启动补本地随机密码超管。
普通 image/chat/responses 请求中,用户自接 API 目前仍保留最高优先级;命中用户自接 API 时不扣本站积分,也不占用本站外接 API Key 额度。Agent 或明确要求 Codex/Responses 的入口会忽略用户自接 API。外接接口不会反向请求站内 /api/images/*。
- 1校验登录态或外部 API Key
- 2把页面表单或 OpenAI 兼容请求转换为统一运行参数
- 3计算积分和审核成本
- 4调用 runImageGenerationForUser 进入统一生成链路
- 1外部 API Key 绑定分组优先
- 2其次使用用户在设置里选择的生图后端分组
- 3没有显式选择时使用默认启用分组
- 4分组会检查套餐权限、是否启用、内容安全开关
如果用户设置了自己的 OpenAI 兼容 API,普通 image/chat/responses 请求会先直接使用它;命中时 useCredits=false,不扣本站余额,也不增加本站 API Key 已用额度。
通过 ChatGPT Web 链路承接页面文生图、图生图和对话生图。
通过 Responses 语义承接 responses,也能把 image generation/edit 转成 responses 请求。
管理员配置的 OpenAI 兼容 Base URL/API Key;按当前请求类型调用 images 或 responses 端点。
所以关系不是“外接 API 调页面 API”,而是“各入口共享同一个 service 层”。
Agent 是 Codex 风格自动执行模式。页面端复用 /api/images/chat 并展示任务卡;外接版使用 /v1/agents/images,以 SSE/JSON 形式返回任务事件和图片结果。
- 仅在 Codex/Responses 能力可用时启用;Web 分支不会开启 Agent 工具循环。
- 默认工具包含 image_generation、web_search 和 continue_generation;后端不会强制 tool_choice,避免阻断联网和生图等多工具组合。
- 每轮会展示 Agent 任务卡:联网、工具兼容性调整、生图、流式预览、继续/停止决策等事件。
- 支持上传文本/代码类附件作为上下文读取;不会读取用户在提示词中写入的服务器本地路径。
- 可配置最大轮数;开启强制轮数时会跑满用户选择的轮数,否则模型可通过 continue_generation 决定是否继续。
- 多轮生成的草稿图会作为迭代版本保存,最后一张作为默认最终图。
- 计费分为 Agent 每轮基础积分和图片实际输出积分;默认 Agent 每轮 3 积分,最终以套餐能力矩阵配置为准。
- 外部 /v1/responses 不等于 Agent;它只做 OpenAI Responses 兼容协议适配,不会自动开启 Agent 工具循环。
- 当前没有接入 generate_image_batch 并发批量工具,避免破坏 Responses 粘性会话和线性迭代状态。
以下按 OpenAI 官方接口形态整理本站当前支持范围。粗体字段为本站扩展或兼容增强,不属于标准 OpenAI 字段。
通用规则
- 所有外接接口都需要 Authorization: Bearer <本站 API Key>。
- Chat Completions、图片生成和图片编辑接口需要入门版及以上;Responses 接口需要专业版及以上;Agent 生图接口默认需要旗舰版及以上。具体门槛可在套餐能力矩阵中调整 externalApi.*。
- /api/v1/* 与 /v1/* 使用同一套 handler,只是路径别名。
- response_format 控制返回 URL 或 base64;output_format 才控制图片文件格式,二者不是同一个字段。
- 错误响应采用 OpenAI 风格 error 对象;本站可能额外返回 generation_id、generationId、credits_consumed 方便排查和对账。
- 外接 API Key 绑定的后端分组优先;未绑定时使用用户默认分组,再回退默认启用分组。
- 分组计费倍率会参与预扣、结算、退款和用量记录;mixed 父分组命中子分组成员时,父分组倍率与子分组倍率相乘生效。
- 外接 API Key 可设置独立积分限额;GET /v1/credits 可查询 Key 限额、已用额度和账户余额。
- 用户已启用“接入其他站 API”时,普通 /v1/chat/completions、/v1/images/generations、/v1/images/edits 和 /v1/responses 仍优先使用用户自接 API;命中时 credits_consumed 为 0,不扣本站余额,也不增加本站 API Key 已用额度。
- /v1/agents/images 和需要 Codex/Responses 能力的页面功能会忽略用户自接 API,按平台后端池或外接后端池结算本站积分。
- image 接口的 force_web / forceWeb 只在进入平台 mixed 后端池后生效,不会覆盖用户自接 API。
List models
兼容 OpenAI List models,用于列出当前 API Key 所属用户可见的图片模型和 Responses 模型。
请求示例
curl https://your-domain.example/v1/models \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY"响应示例
{
"object": "list",
"data": [
{
"id": "gpt-image-2",
"object": "model",
"created": 0,
"owned_by": "gpt2image"
}
]
}请求字段
返回与流式
实现说明
- 本站当前只实现模型列表,不实现 /v1/models/{model} 详情。
- 返回模型会按套餐过滤;Ultra 用户可见更多 Responses 模型。
Get credits
查询当前 Bearer API Key 的限额、已用额度、剩余额度,以及所属账户当前积分余额。
请求示例
curl https://your-domain.example/v1/credits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY"响应示例
{
"object": "credit_balance",
"account": {
"balance": 15702.45,
"total_earned": 20000,
"total_spent": 4297.55,
"status": "active"
},
"api_key": {
"credit_limit": 1000,
"credits_used": 12.7,
"credits_remaining": 987.3,
"unlimited": false
}
}请求字段
返回与流式
实现说明
- API Key 限额只限制该 Key 自身;走本站平台计费路径时仍必须有足够账户积分。
- 命中用户自接 API 时不扣本站账户积分,也不增加 Key 已用额度。
- 生成失败退款、审核拦截结算和实际尺寸后修正会同步修正 Key 已用额度。
Create chat completion
兼容 OpenAI Chat Completions 的生图对话入口。它复用页面 Chat 的非 Agent 模式,不启用 Agent 工具循环。
请求示例
# 1. 普通对话生图;默认返回 URL,content 中会追加 Markdown 图片链接
curl https://your-domain.example/v1/chat/completions \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"image_model": "gpt-image-2",
"messages": [
{ "role": "system", "content": "你是专业视觉海报设计师。" },
{ "role": "user", "content": "生成一张科技企业宣传海报,16:9,蓝白配色" }
],
"size": "1536x864",
"quality": "high",
"response_format": "url"
}'
# 2. 多模态输入,image_url 会作为本轮真实参考图输入
curl https://your-domain.example/v1/chat/completions \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"image_model": "gpt-image-2",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "参考这张产品图,生成一张电商主图" },
{ "type": "image_url", "image_url": { "url": "https://example.com/product.png" } }
]
}
],
"size": "1024x1024",
"response_format": "url"
}'
# 3. 流式返回;文本走 chat.completion.chunk,自定义 partial_image 事件返回流式预览
curl -N https://your-domain.example/v1/chat/completions \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"messages": [
{ "role": "user", "content": "生成一张未来城市概念图" }
],
"size": "1024x1024",
"stream": true
}'响应示例
{
"id": "chatcmpl_...",
"object": "chat.completion",
"created": 1713833628,
"model": "gpt-5.4",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "已生成图片。\n\n",
"images": [
{
"url": "https://your-domain.example/api/storage/generations/...",
"revised_prompt": "...",
"generation_id": "gen_..."
}
]
},
"finish_reason": "stop"
}
],
"images": [
{
"url": "https://your-domain.example/api/storage/generations/...",
"generation_id": "gen_..."
}
],
"generation_id": "gen_...",
"generationId": "gen_...",
"credits_consumed": 2.31,
"usage": null
}
# stream=true 时的 SSE 片段
data: {"id":"chatcmpl_...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"正在生成..."},"finish_reason":null}]}
event: chat.completion.partial_image
data: {"type":"chat.completion.partial_image","index":0,"partial_image_index":0,"url":"https://your-domain.example/api/storage/generations/..."}
data: {"id":"chatcmpl_...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"generation_id":"gen_...","credits_consumed":2.31}
请求字段
返回与流式
实现说明
- 上游 API 配置可选择 Chat Completions 上游模式:默认 responses 会请求上游 /responses + image_generation tool,保留图片生成、图片引用和 Codex/Responses 能力。
- 选择 chat_completions 后,本站 /v1/chat/completions 会请求命中上游的 /chat/completions;这更适合纯聊天兼容,但是否能返回图片取决于上游实现。Agent 和 /v1/responses 不受该配置影响。
- OpenAI 官方 Chat Completions 并不定义“生成图片”的标准返回字段;本站为了兼容对话生图,在 Chat Completions 外形上扩展 choices[].message.images、顶层 images,并在 content 中追加 Markdown 图片链接。严格按官方生图协议接入时,建议使用 /v1/images/generations、/v1/images/edits 或 /v1/responses。
- 该接口走页面 Chat 的非 Agent 模式,不会注入 web_search、continue_generation,也不会展示 Agent 多轮任务卡。
- 调度类型是 chat,可命中 Web 账号、Codex/Responses 账号或支持 /responses 的外接 API 后端;用户自接 API 可用时仍保持最高优先级。
- 计费等同页面 Chat:先收 Chat 每轮基础积分,再按最终图片实际尺寸和数量追加图片积分、审核积分和分组倍率。
Create image
兼容 OpenAI Images generation。请求会转换成 image_generation 调度类型,进入统一生成链路。
请求示例
# 1. 官方 Images 风格,默认返回 b64_json
curl https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A cute baby sea otter",
"n": 1,
"size": "1024x1024",
"quality": "medium",
"moderation": "auto",
"background": "auto"
}'
# 2. 返回 URL,并关闭本站提示词优化
curl https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1.5",
"prompt": "一张赛博朋克城市夜景,雨后霓虹反光",
"n": 2,
"size": "1024x1024",
"quality": "high",
"moderation": "low",
"response_format": "url",
"output_format": "webp",
"output_compression": 85,
"background": "transparent",
"prompt_optimization": false
}'
# 3. Codex/Responses 后端专用参数;普通 Images API 后端可能忽略
curl https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "生成一张 16:9 产品海报",
"size": "1536x864",
"response_format": "url",
"output_format": "jpeg",
"output_compression": 90,
"gptModel": "gpt-5.4",
"thinking": "high",
"promptOptimization": false
}'
# 4. mixed 分组按可配置像素区间强制调度 Web 账号;非 mixed 分组会忽略 force_web
curl https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一张 1:1 头像海报",
"size": "1024x1024",
"response_format": "url",
"force_web": true
}'
# 5. 流式返回;也可用 Accept: text/event-stream 触发
curl -N https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一张透明玻璃材质的未来感咖啡杯",
"size": "1024x1024",
"response_format": "url",
"stream": true
}'
# 6. 异步模式;也可在 URL 后追加 ?async=true。callback_url 可选
curl https://your-domain.example/v1/images/generations \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1.5",
"prompt": "一张透明背景的产品图标",
"size": "1024x1024",
"response_format": "url",
"output_format": "png",
"background": "transparent",
"async": true,
"callback_url": "https://your-server.example/callback"
}'响应示例
{
"created": 1713833628,
"data": [
{
"url": "https://your-domain.example/api/storage/generations/...",
"revised_prompt": "..."
}
],
"generation_id": "gen_...",
"generationId": "gen_...",
"credits_consumed": 1.31,
"usage": null
}
# stream=true 时的 SSE 片段
event: image_generation.partial_image
data: {"type":"image_generation.partial_image","index":0,"partial_image_index":0,"url":"https://your-domain.example/api/storage/generations/..."}
event: image_generation.completed
data: {"type":"image_generation.completed","index":0,"generation_id":"...","generationId":"...","model":"gpt-image-2","size":"1024x1024","credits_consumed":1.31,"url":"https://your-domain.example/api/storage/generations/...","data":[{"url":"https://your-domain.example/api/storage/generations/...","revised_prompt":"..."}]}
# async=true 的立即响应
{
"id": "task_...",
"object": "image.generation",
"model": "gpt-image-2",
"status": "processing",
"created": 1713833628,
"created_at": "2026-05-28T00:00:00.000Z",
"generation_id": "gen_..."
}
# 查询任务
curl https://your-domain.example/v1/images/task_... \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY"
# 完成后的任务响应或回调 payload
{
"id": "task_...",
"object": "image",
"model": "gpt-image-2",
"status": "completed",
"created": 1713833628,
"created_at": "2026-05-28T00:00:00.000Z",
"completed": 1713833700,
"completed_at": "2026-05-28T00:01:12.000Z",
"data": [{"url": "https://your-domain.example/api/storage/generations/..."}],
"generation_id": "gen_...",
"generationId": "gen_...",
"credits_consumed": 1.31,
"usage": null
}
请求字段
返回与流式
实现说明
- 该接口不会调用页面 /api/images/generate,而是直接进入共享 service 层。
- 如果命中 Responses 账号池,内部会把图片请求转换成 Responses image_generation tool 请求。
- n/count 批量张数属于一次 HTTP 请求;一次 10 张会创建 10 条生成记录并按 10 张计费。运行时按套餐的生图并发受限并行,超过并发上限的图片会在本批次内排队等待。
- 并发与排队:底层只有一条进程内生图队列,任务按套餐队列优先级排序,同优先级先进先出;队列同时受全局并发和单用户生图并发限制。全局并发可在后台「系统设置 > 模型 > 全局生图并发」配置,环境变量 IMAGE_GENERATION_GLOBAL_CONCURRENCY 只作为兜底默认值。批量请求额外有请求内 runner,只启动套餐允许的并发数,剩余图片留在本批次内等待,不会一次性塞满底层队列。
- 排队等待阶段不会创建 generation,也不会扣图像生成积分;底层队列排队超过 IMAGE_GENERATION_QUEUE_TIMEOUT_MS 会返回 429 类错误。单张任务开始执行后才进入 20 分钟运行超时,运行超时按失败结算规则处理积分。
- Web 后端无法严格控制输出尺寸和输出格式;本站保存时会按实际图片头识别扩展名和 MIME。
- background=transparent 并非所有模型都支持;OpenAI 官方文档当前列出 gpt-image-1.5、gpt-image-1、gpt-image-1-mini 支持透明背景,且通常还要求 png 或 webp 输出。不支持的上游可能直接返回 HTTP 400,而不是自动降级。
- async 任务当前为进程内状态,30 分钟后过期;服务重启或多实例切换会导致未完成任务无法继续查询,callback 已发送的结果不受影响。
- 如果实际生成尺寸与请求尺寸不一致,本站会按检测到的实际尺寸修正记录和计费。
- 官方 Images API 可能返回 usage;本站当前 usage 通常为 null,但会通过顶层 credits_consumed、错误对象或流式完成事件返回本站结算积分。命中用户自接 API 时不扣本站积分。
Create image edit
兼容 OpenAI Images edit。multipart 可上传图片;JSON 可使用公网图片 URL。
请求示例
# 1. multipart 上传参考图
curl https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-F model="gpt-image-2" \
-F prompt="把参考图改成电影海报风格" \
-F n="1" \
-F size="1024x1024" \
-F quality="high" \
-F moderation="auto" \
-F response_format="url" \
-F output_format="jpeg" \
-F output_compression="90" \
-F background="opaque" \
-F 'image[]=@/path/to/reference.png'
# 2. multipart 多参考图 + mask + Codex/Responses 参数
curl https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-F model="gpt-image-2" \
-F prompt="只重绘 mask 区域,保持人物脸部不变" \
-F size="1536x1024" \
-F quality="medium" \
-F response_format="b64_json" \
-F promptOptimization="false" \
-F gpt_model="gpt-5.4" \
-F thinking="medium" \
-F 'image[]=@/path/to/person.png' \
-F 'image_2=@/path/to/style.png' \
-F mask="@/path/to/mask.png"
# 3. JSON 图片 URL;推荐 images,image_url/image_urls 只是兼容快捷字段
curl https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "把参考图改成干净的电商主图",
"images": [
"https://example.com/reference.png",
{ "image_url": "https://example.com/detail.webp" }
],
"image_url": "https://example.com/single-reference.png",
"image_urls": ["https://example.com/extra.jpg"],
"mask_url": "https://example.com/mask.png",
"mask_image_url": "https://example.com/mask-alt.png",
"n": 1,
"size": "1024x1024",
"quality": "auto",
"moderation": "low",
"response_format": "url",
"output_format": "webp",
"output_compression": 80,
"background": "transparent",
"prompt_optimization": false,
"gptModel": "gpt-5.4-mini",
"thinking": "low"
}'
# 4. mixed 分组按可配置像素区间强制调度 Web 账号;非 mixed 分组会忽略 force_web
curl https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "保留人物,改成电影剧照质感",
"images": ["https://example.com/reference.png"],
"size": "1024x1024",
"response_format": "url",
"force_web": true
}'
# 5. 流式图生图
curl -N https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Accept: text/event-stream" \
-F model="gpt-image-2" \
-F prompt="保留构图,改成水彩插画风格" \
-F size="1024x1024" \
-F response_format="url" \
-F stream="true" \
-F 'image=@/path/to/reference.png'
# 6. 异步图生图;也可在 URL 后追加 ?async=true。callback_url 可选
curl https://your-domain.example/v1/images/edits \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-F model="gpt-image-1.5" \
-F prompt="去除背景,输出透明 PNG" \
-F size="1024x1024" \
-F response_format="url" \
-F output_format="png" \
-F background="transparent" \
-F async="true" \
-F callback_url="https://your-server.example/callback" \
-F 'image=@/path/to/reference.png'响应示例
{
"created": 1713833628,
"data": [
{
"url": "https://your-domain.example/api/storage/generations/...",
"revised_prompt": "..."
}
],
"generation_id": "gen_...",
"generationId": "gen_...",
"credits_consumed": 1.31,
"usage": null
}
# stream=true 时的 SSE 片段
event: image_edit.partial_image
data: {"type":"image_edit.partial_image","index":0,"partial_image_index":0,"url":"https://your-domain.example/api/storage/generations/..."}
event: image_edit.completed
data: {"type":"image_edit.completed","index":0,"generation_id":"...","generationId":"...","model":"gpt-image-2","size":"1024x1024","credits_consumed":1.31,"url":"https://your-domain.example/api/storage/generations/...","data":[{"url":"https://your-domain.example/api/storage/generations/...","revised_prompt":"..."}]}
# async=true 的任务查询和回调响应格式同 /v1/images/generations
请求字段
返回与流式
实现说明
- URL 图片会先由本站服务端下载并校验公网可访问性、类型和大小。
- 不支持私网、localhost、metadata/internal 域名或带用户名密码的 URL。
- 官方 JSON file_id 图片引用当前未实现,请使用公网 image_url 或 multipart 上传。
- background=transparent 并非所有模型都支持;OpenAI 官方文档当前列出 gpt-image-1.5、gpt-image-1、gpt-image-1-mini 支持透明背景,且通常还要求 png 或 webp 输出。不支持的上游可能直接返回 HTTP 400,而不是自动降级。
- async 任务当前为进程内状态,30 分钟后过期;服务重启或多实例切换会导致未完成任务无法继续查询,callback 已发送的结果不受影响。
Create Agent image run
本站扩展接口:把页面 Agent 模式开放给外接 API。它固定按 Codex/Responses 能力调度,支持联网、工具循环、自动迭代、附件上下文和流式 Agent 事件。
请求示例
# 1. JSON Agent 生图;默认返回 URL。默认需要 Ultra,可在能力矩阵 externalApi.agent 调整。
curl https://your-domain.example/v1/agents/images \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"image_model": "gpt-image-2",
"prompt": "联网查询浙江双元科技公开资料,迭代生成一张企业宣传海报",
"size": "1536x1024",
"quality": "high",
"thinking": "medium",
"agent_max_rounds": 3,
"agent_force_max_rounds": false,
"response_format": "url"
}'
# 2. 带参考图 URL。images / image_url / image_urls 会合并去重。
curl https://your-domain.example/v1/agents/images \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"image_model": "gpt-image-2",
"prompt": "参考这张产品图,先分析卖点,再生成一张电商海报",
"images": ["https://example.com/product.png"],
"size": "1024x1024",
"agent_max_rounds": 2
}'
# 3. multipart 上传参考图和 PDF/文本附件。
curl https://your-domain.example/v1/agents/images \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-F model="gpt-5.4" \
-F image_model="gpt-image-2" \
-F prompt="阅读附件资料并生成一张展会宣传海报" \
-F size="1536x1024" \
-F response_format="url" \
-F agent_max_rounds="3" \
-F 'image[]=@/path/to/reference.png' \
-F 'file=@/path/to/company-profile.pdf'
# 4. 流式 Agent。会持续返回 agent.event / agent.partial_image / agent.completed。
curl -N https://your-domain.example/v1/agents/images \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"image_model": "gpt-image-2",
"prompt": "先搜索资料,再迭代生成一张科技蓝企业海报",
"size": "1536x1024",
"stream": true,
"agent_max_rounds": 2,
"agent_force_max_rounds": true
}'响应示例
{
"object": "agent.image_run",
"created": 1713833628,
"generation_id": "gen_...",
"generationId": "gen_...",
"model": "gpt-5.4",
"size": "1536x1024",
"response_text": "已完成资料检索并生成海报。",
"agent_round_count": 2,
"credits_consumed": 8.42,
"data": [
{
"url": "https://your-domain.example/api/storage/generations/...",
"revised_prompt": "...",
"output_role": "agent_draft"
},
{
"url": "https://your-domain.example/api/storage/generations/...",
"revised_prompt": "...",
"output_role": "final"
}
],
"agent_events": [],
"usage": null
}
# stream=true 时的 SSE 片段
event: agent.event
data: {"type":"agent.event","event":{"kind":"web_search","status":"completed","title":"联网搜索完成","detail":"浙江双元科技 官网"}}
event: agent.partial_image
data: {"type":"agent.partial_image","partial_image_index":0,"url":"https://your-domain.example/api/storage/generations/..."}
event: agent.completed
data: {"type":"agent.completed","generation_id":"...","generationId":"...","agent_round_count":2,"credits_consumed":8.42,"data":[{"url":"https://your-domain.example/api/storage/generations/...","output_role":"final"}]}
请求字段
返回与流式
实现说明
- 该接口是本站扩展,不是 OpenAI 官方接口;/api/v1/agents/images 是同一 handler 的别名。
- 默认要求 Ultra 套餐;管理员可在套餐能力矩阵中调整 externalApi.agent。
- 该接口强制 requiresResponsesBackend,不会命中 Web 账号;支持 Codex/Responses 账号或支持 /responses 的外接 API 后端。
- 不会调用页面 /api/images/chat;它和页面 Agent 共享 runImageGenerationForUser service 层。
- generate_image_batch 并发工具暂未开放,避免破坏线性迭代和 Responses 粘性会话。
Create response
基于 OpenAI Responses API 的生图适配入口。它会按 responses 调度类型选择 Codex/Responses 账号池或外接 /responses API 后端。
请求示例
# 1. 最小 Responses 生图请求;需要 Pro 套餐
curl https://your-domain.example/v1/responses \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"input": "生成一张 1:1 的未来感产品渲染图",
"size": "1024x1024",
"quality": "high",
"moderation": "auto"
}'
# 2. 显式 image_generation tool,并指定图片模型
curl https://your-domain.example/v1/responses \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"input": "生成一张横版科技产品 KV",
"tools": [{ "type": "image_generation", "model": "gpt-image-2" }],
"size": "1536x864",
"quality": "medium",
"reasoning": { "effort": "low" },
"store": true
}'
# 3. 带参考图的 Responses 输入
curl https://your-domain.example/v1/responses \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"input": [
{
"role": "user",
"content": [
{ "type": "input_text", "text": "参考这张图,换成冬季海报风格" },
{ "type": "input_image", "image_url": "https://example.com/reference.png" }
]
}
],
"tools": [{ "type": "image_generation", "model": "gpt-image-2" }],
"size": "1024x1024",
"output_format": "webp",
"output_compression": 85,
"moderation": "low"
}'
# 4. 续接上一轮,并使用流式返回
curl -N https://your-domain.example/v1/responses \
-H "Authorization: Bearer $GPT2IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"previous_response_id": "resp_previous_id",
"input": "在上一张图基础上加一个月亮",
"tools": [{ "type": "image_generation", "model": "gpt-image-2" }],
"size": "1024x1024",
"reasoning": { "effort": "minimal" },
"stream": true
}'响应示例
{
"id": "resp_...",
"object": "response",
"created_at": 1713833628,
"status": "completed",
"model": "gpt-5.4",
"output": [
{
"id": "ig_...",
"type": "image_generation_call",
"status": "completed",
"result": "..."
}
],
"usage": null,
"metadata": {
"generation_id": "...",
"credits_consumed": 1.31,
"size": "1024x1024"
}
}
# stream=true 时的 SSE 片段
event: response.output_item.done
data: {"type":"response.output_item.done","item":{"id":"ig_...","type":"image_generation_call","status":"completed","result":"..."}}
event: response.completed
data: {"type":"response.completed","response":{"id":"resp_...","object":"response","created_at":1713833628,"status":"completed","model":"gpt-5.4","output":[{"id":"ig_...","type":"image_generation_call","status":"completed","result":"..."}],"usage":null,"metadata":{"generation_id":"...","credits_consumed":1.31,"size":"1024x1024"}}}
请求字段
返回与流式
实现说明
- 该接口需要专业版或更高套餐。
- 该接口不是 Chat Completions;普通对话生图请使用 /v1/chat/completions,Responses 工具语义请使用本接口。
- input_image 只支持 image_url/data URL;file_id/file 输入当前不会作为参考图使用。
- 显式传 tools 但不包含 image_generation 会返回错误,避免模型只产出文本而不生图。
- 页面 Chat 模式只提供普通多模态对话/生图语义;Agent 模式默认提供 image_generation、web_search 和线性续跑工具 continue_generation,不强制 tool_choice,模型按任务自行选择工具。
- 页面 Chat/Agent 支持上传文本/代码类本地文件作为上下文读取;不会读取用户在提示词中写入的服务器本地路径。
- 页面 Chat/Agent 的每轮基础积分由后台「套餐能力矩阵」按套餐配置,默认 Chat 每轮 1 积分、Agent 每轮 3 积分;生成图片时再按实际尺寸和输出数量追加图片积分。
- Agent 会把上一轮文字、工具结果和已生成图片喂回下一轮,让模型自行判断是否继续改版;最大轮数由系统设置 IMAGE_AGENT_MAX_ROUNDS 控制,默认 3。当前没有接入 generate_image_batch 这类并发批量工具,以免打散 Responses 粘性会话。
- Agent 多轮产生的 image_generation_call 会作为自动迭代版本展示,最后一张作为默认选中版本。
页面请求
外接 API 请求
走 ChatGPT 网页生图能力,适合复用 Web 账号额度,但不是严格参数化的 Images/Responses API。
- 分辨率不可严格控制;size 只能作为提示/记录参考,不能保证按请求尺寸输出。
- 不能保证 4K 输出;是否出高分辨率取决于 ChatGPT Web 当前能力和账号状态。
- 可控制主 GPT 对话模型和 Web 思考强度;图片模型字段不会映射成独立 Web 生图模型。
- 关闭提示词优化时会发送原始 prompt,并把 Web 思考强度压到 instant,尽量减少平台侧改写。
- 外部 /v1/responses 会适配进统一 chat 生成链路,但调度类型仍是 responses;当前只会选择 Codex/Responses 分组或外接 Responses API 后端,不会转到 Web 账号池。
- 外部 /v1/responses 的 model 为空时使用后端默认;显式传入时需在 /v1/models 返回列表内,超出列表会被本站拦截。
- 不保证完全不改写提示词;ChatGPT Web 上游仍可能理解、补全或改写。
走 Responses 语义,是本站可参数化程度最高的系统账号后端。
- GPT 模型传给 Responses 顶层 model。
- 图片模型传给 image_generation 工具 model。
- size、quality、moderation、参考图、mask 会组装进 Responses 工具请求。
- 页面 Chat 模式只提供普通多模态对话/生图语义;页面 Agent 模式默认提供 image_generation、web_search、continue_generation,不强制 tool_choice,并会线性多轮续跑,让模型像 Codex 一样按需联网、读取已上传文本文件上下文、生成草图和迭代改版。
- Chat/Agent 上传的本地文本/代码文件会作为请求上下文读取;不会开放服务器文件系统路径读取。
- 支持外部 /v1/responses;也可承接 /v1/images/generations 和 /v1/images/edits 的内部转换。
- 关闭提示词优化时,会通过指令引导模型不要修改提示词;这是尽力约束,不能保证上游一定完全照做。
- 页面 Chat/Agent 的每轮基础积分由后台「套餐能力矩阵」按套餐配置,默认 Chat 每轮 1 积分、Agent 每轮 3 积分;完成的图片输出另按实际尺寸和完成数量计费。
- 不是 ChatGPT Web,不支持 Web 专属能力或 Web 额度语义。
- 账号限流、额度不足、凭据失效时,调度器会冷却/标错并尝试轮换。
走管理员配置的 OpenAI 兼容 Base URL/API Key,最终能力由对方服务决定。
- Images generation/edit 调用对方 Images API。
- Responses 请求调用对方 /responses。
- 模型、尺寸、质量、流式事件、usage 字段是否支持,以对方接口为准。
- 不使用本站 Web 或 Codex 账号池额度。
- 对方如果自行改写提示词或限制分辨率,本站无法覆盖。
- Sub2API 非数据库接口:当前同步依赖 SUB2API_POSTGRES_URL 直连 Sub2API PostgreSQL。后续调研并适配 Sub2API 管理员 Key / HTTP API 路线,优先用正式接口完成账号查询、分组筛选、状态读取、错误清理和同步任务;只有接口缺字段或能力不足时再保留数据库直连兜底。
- PSD 生成接口:准备适配 PSD/分层文件生成能力,需先明确上游接口协议、输出 MIME/扩展名、存储与预览策略、积分计费、外接 API 响应字段、后台能力矩阵开关和页面下载入口。
- Agent 批量生图工具:参考 generate_image_batch 模式,让模型规划多张独立图片后由后端并发执行;接入前需要先设计它与 Responses previous_response_id 粘性会话的关系。
- 图片引用交互:继续完善 @图1、@第N轮图M 的原子化输入、图片重排后的引用重映射和缺失引用提示。
- Agent 分支对话/轮次树:编辑或重生成历史某一轮时,从该轮派生新分支,避免覆盖后续记录。