curl --request POST \
--url https://api.apiyi.com/v1/chat/completions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gpt-image-2-all",
"messages": [
{
"role": "user",
"content": "横版 16:9 电影画幅,黄昏时的海边老灯塔,写实风格"
}
]
}
'
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1778037331,
"model": "gpt-image-2-all",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\n"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 818,
"total_tokens": 842
}
}对话式 API 参考
gpt-image-2-all 对话式端点 — 一个端点同时支持文生图与带参考图改图,直接传入在线图片 URL;多轮改图请把上一张输出作为新一轮 user 消息的参考图。
POST
/
v1
/
chat
/
completions
curl --request POST \
--url https://api.apiyi.com/v1/chat/completions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gpt-image-2-all",
"messages": [
{
"role": "user",
"content": "横版 16:9 电影画幅,黄昏时的海边老灯塔,写实风格"
}
]
}
'
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1778037331,
"model": "gpt-image-2-all",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\n"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 818,
"total_tokens": 842
}
}本调用方式不再主推:推荐统一使用 /v1/images/generations 与 /v1/images/edits——更稳定、与官转
gpt-image-2 同套代码。本页对话式端点仍可正常调用,适合多轮迭代改图、直接传在线图片 URL 的场景。对话式端点特点:一个端点同时支持文生图与带参考图改图,方便直接传入在线图片 URL(CDN 链接或 base64 data URL)作为参考图。响应为标准 Chat Completions 格式,图片以 Markdown 形式放在
choices[0].message.content 里。如果你希望同一套代码兼容官转和官逆,建议使用 /v1/images/generations 与 /v1/images/edits(OpenAI Images API 标准格式)。选择模式:
- 仅输入文本
messages→ 文生图 messages的 user 消息里加入image_url(URL 或 base64 data URL)→ 带参考图改图- 要多轮改上一张图 → 把上一次输出的图片 URL,放进新一轮 user 消息的
image_url里再发(见下方多轮改图)
多轮改图不能靠保留对话历史。 本模型是逆向模型,只读取最后一条 user 消息里的
image_url 作为底图;放在 assistant 历史消息里的图片(无论纯文本 URL 还是 image_url 结构)都会被忽略。要改上一张图,必须把它作为新一轮 user 消息的参考图重新传入 —— 详见 多轮改图。响应格式
响应为标准 Chat Completions 格式,生成的图片以 Markdown 形式放在choices[0].message.content 中(默认是 R2 CDN 链接):
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1778037331,
"model": "gpt-image-2-all",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\n"
},
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 24, "completion_tokens": 818, "total_tokens": 842 }
}
取图建议:从
choices[0].message.content 里用正则提取 Markdown 链接  即可。极少数情况下 content 里是 base64 data URL(),同样可被正则取出,直接作为 <img src> 使用。🖥️ 浏览器 Playground 限制(响应含 base64 时):若
content 里返回的是大段 base64,响应字符串可能达数 MB,Playground 可能弹出 请求时发生错误: unable to complete request —— 实际请求已成功,只是浏览器无法显示这么长的内容。遇到时直接复制下方代码到本地运行即可。代码示例
响应是标准 Chat Completions 结构,含
choices 字段,因此也可以直接用 OpenAI SDK(client.chat.completions.create(...))调用,从 resp.choices[0].message.content 取到 Markdown,再提取图片 URL。下面用通用的 requests / fetch 演示。Python(文生图)
import re, requests
API_KEY = "sk-your-api-key"
resp = requests.post(
"https://api.apiyi.com/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"model": "gpt-image-2-all",
"messages": [
{"role": "user", "content": "横版 16:9 电影画幅,黄昏时的海边老灯塔,写实风格"}
],
},
timeout=300, # 保守值,吸收长尾 + 图片上传/下载耗时
).json()
content = resp["choices"][0]["message"]["content"]
url = re.search(r'!\[[^\]]*\]\((.*?)\)', content).group(1) # 提取 Markdown 里的图片地址
print(url)
Python(带参考图改图)
import re, base64, requests
API_KEY = "sk-your-api-key"
# 可用 HTTPS URL,也可以用 base64 data URL
with open("photo.png", "rb") as f:
data_url = "data:image/png;base64," + base64.b64encode(f.read()).decode()
resp = requests.post(
"https://api.apiyi.com/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"model": "gpt-image-2-all",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "把这张图改成水彩画风"},
{"type": "image_url", "image_url": {"url": data_url}},
],
}
],
},
timeout=300,
).json()
content = resp["choices"][0]["message"]["content"]
print(re.search(r'!\[[^\]]*\]\((.*?)\)', content).group(1))
cURL(文生图)
curl -X POST "https://api.apiyi.com/v1/chat/completions" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2-all",
"messages": [
{"role": "user", "content": "横版 16:9,赛博朋克雨夜街景,霓虹招牌写着 Hello World"}
]
}'
{/* 图片在 choices[0].message.content 里,形如  */}
cURL(带参考图改图)
curl -X POST "https://api.apiyi.com/v1/chat/completions" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2-all",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "把这张图改成水彩画风" },
{ "type": "image_url", "image_url": { "url": "https://example.com/photo.png" } }
]
}
]
}'
Node.js(文生图)
const API_KEY = "sk-your-api-key";
const resp = await fetch("https://api.apiyi.com/v1/chat/completions", {
method: "POST",
headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
model: "gpt-image-2-all",
messages: [{ role: "user", content: "1024x1024 方形 LOGO,极简猫咪线条" }],
}),
});
const data = await resp.json();
const content = data.choices[0].message.content;
const url = content.match(/!\[[^\]]*\]\((.*?)\)/)[1]; // 提取图片地址
console.log(url);
多轮改图
要在上一张图的基础上继续修改,不要依赖对话历史(assistant 里的图会被忽略)。正确做法:把上一次输出的图片 URL,作为新一轮 user 消息的image_url 再发一次,配合新的修改指令。要继续迭代,就把最新一张的输出再喂回去。
import re, requests
API_KEY = "sk-your-api-key"
URL = "https://api.apiyi.com/v1/chat/completions"
H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
def edit_with(image_url, instruction):
"""把 image_url 作为底图,按 instruction 改图,返回新图 URL。"""
resp = requests.post(URL, headers=H, json={
"model": "gpt-image-2-all",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": instruction},
{"type": "image_url", "image_url": {"url": image_url}},
],
}],
}, timeout=300).json()
content = resp["choices"][0]["message"]["content"]
return re.search(r'!\[[^\]]*\]\((.*?)\)', content).group(1)
# 第 1 轮:基于原图改沙发颜色
img1 = edit_with("https://example.com/cat.png", "把沙发改成红色,猫和构图保持不变")
# 第 2 轮:把上一轮输出再喂回去,继续精调
img2 = edit_with(img1, "给猫戴一顶黄色小帽子,其它保持不变")
print(img2)
下面这种”靠 改成把
assistant 历史的真·对话多轮”不生效(产出不会基于上一张图),请勿使用:{"messages": [
{"role": "user", "content": "生成一只橙色的猫坐在蓝色沙发上"},
{"role": "assistant", "content": ""},
{"role": "user", "content": "把沙发改成红色"}
]}
https://.../cat.png 放进新一轮 user 消息的 image_url(见上方代码)才会真正基于该图修改。等价做法:用
/v1/images/edits 标准编辑端点,把上一次输出图片作为 image 字段上传 + 新指令,同样实现多轮迭代 —— 见 图片编辑 API。参数说明速查
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 固定填 gpt-image-2-all |
messages | array | 是 | 对话消息数组;支持 system / user / assistant 三种 role(注意:图像底图只认最后一条 user 的 image_url) |
messages[].content | string | array | 是 | 纯文本字符串(文生图)或多模态数组(带图改图) |
stream | boolean | 否 | 是否流式。本模型为一次性出图,建议保持 false |
content 为数组时):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | enum | 是 | text 或 image_url |
text | string | 条件 | 当 type=text 时必填 |
image_url.url | string | 条件 | 当 type=image_url 时必填。支持 https://... 或 data:image/png;base64,... |
对话式端点的优势
同端点双能力
不需要在 generations / edits 两个端点之间切换,统一走一个端点
方便传入在线 URL
image_url 直接接受 CDN 图片地址或 base64 data URL,无需 multipart 上传标准 Chat 响应
响应含
choices,可直接用 OpenAI SDK / 各类 Chat 前端对接,图片在 message.content 的 Markdown 里迭代改图
把上一张输出作为新一轮 user 的参考图,即可逐步精调(非对话状态记忆)
如果你的代码需要同时兼容官转与官逆,建议改用
/v1/images/generations 与 /v1/images/edits(OpenAI Images API 标准格式),同一套代码即可切换通道。相关资源
模型概览
能力说明、定价、最佳实践
文生图 API(/v1/images/generations)
OpenAI Images API 兼容端点
图片编辑 API(/v1/images/edits)
multipart/form-data 上传参考图改图,多轮迭代同理
在线出图
imagen.apiyi.com 在线测试
授权
在 API易控制台获取的 API Key
请求体
application/json
响应
成功生成图片。标准 Chat Completions 格式,图片以 Markdown 放在 choices[0].message.content。
标准 Chat Completions 响应。生成的图片以 Markdown()放在 choices[0].message.content,默认是 R2 CDN 链接;极少数情况下为 base64 data URL。
此页面对您有帮助吗?
⌘I