OpenAI Images API 图片生成过程怎么显示预览图
素材后台接入图片生成时,预览图可以帮助用户确认任务仍在进行,但不能把它当作最终素材。下面用流式请求、partial_images 和状态隔离的方式,建立一条可复用的预览处理流程。
准备
要显示生成过程中的预览,调用图片生成接口时需要启用流式响应,并设置 partial_images。资料显示,该参数用于让流式响应返回过程图片,可设为 0 到 3;设为 0 时会在一个流式事件中返回单张图片。过程图片数量并不保证固定,最终图可能在所有过程图之前到达。
开始前,为每次请求创建一条任务记录,至少保存任务 ID、提示词、状态、预览图列表和最终图位置。界面上应把“生成中预览”和“可归档成图”做成两个不同区域。
分步操作
创建任务时,先在数据库写入
generating状态,并生成自己的任务 ID。前端只依据这个 ID 更新对应卡片,避免多任务时图片串位。调用 Images API 的生成方法时,设置
stream=True,并将partial_images设为 1 到 3 之间的值。流式生成仅支持 GPT Image 模型,因此不要把这套预览逻辑套到不支持流式生成的模型上。持续读取流事件。收到带图片数据的事件后,先解码为临时文件或临时对象存储地址,再推送给前端替换预览区域。不要在此时写入素材库正式表。
为每张收到的图片标记用途。过程图片写为
preview,确认收到最终结果后才写为final。保存动作必须只接受final类型。收到最终图后,将任务状态改为
completed,把最终文件保存到正式存储,并启用“保存到素材库”按钮。过程预览可保留一小段时间供排查,随后按清理策略删除。
可复制模板或示例
下面示例使用 Python SDK 展示核心分流逻辑。事件对象的具体字段应以你安装版本的 SDK 类型定义为准;重点是先识别过程结果与最终结果,再交给不同的保存方法。
from openai import OpenAI
client = OpenAI()
task_id = create_task(status="generating")
stream = client.images.generate(
model="gpt-image-1.5",
prompt="一只摆放在木桌上的陶瓷杯,柔和自然光",
size="1024x1024",
stream=True,
partial_images=2,
)
for event in stream:
image_data = read_image_data(event)
if not image_data:
continue
if is_final_event(event):
final_url = save_final_image(task_id, image_data)
update_task(task_id, status="completed", final_url=final_url)
push_to_page(task_id, kind="final", url=final_url)
else:
preview_url = save_temp_preview(task_id, image_data)
append_preview(task_id, preview_url)
push_to_page(task_id, kind="preview", url=preview_url)
前端可以按下面的规则渲染:任务为 generating 时展示最新预览并显示“生成中”;收到 final 后替换主图、显示“已完成”,并开放归档操作。不要仅凭“收到一张图片”就认为任务结束。
翻车怎么改
常见故障:预览图被自动保存进正式素材库。原因是后端把所有流事件都走了同一个上传和入库分支,没有区分过程图片与最终图片。修正动作是新增 kind 或 is_final 字段:preview 只能写入临时存储,只有确认最终事件后才能创建正式素材记录;同时让“发布”“下载原图”等按钮只在任务状态为 completed 时可用。
常见故障:设置了 partial_images,却始终看不到多张预览。原因可能是最终图生成得更快,接口会在返回满额过程图前发送最终图。修正动作是把预览视为“可能到达的中间结果”,不要依赖固定张数计算进度;界面应以生成中、已完成和失败等任务状态表达进度。
常见故障:多个任务的预览相互覆盖。原因通常是前端用单个全局图片状态接收所有推送。修正动作是每个事件都携带自己的任务 ID,页面以任务 ID 为键更新图片卡片,并在重新提交时创建新任务而不是覆盖旧任务。
完成前检查
- 确认请求已开启
stream=True,且partial_images在 0 到 3 的有效范围内。 - 确认预览文件与最终文件使用不同标记、不同存储路径或不同生命周期策略。
- 确认只有任务状态为
completed且图片类型为final时,才允许保存到正式素材库。 - 确认最终图比预览更早到达时,页面仍能直接进入完成状态,不会一直等待预览数量。
- 发布前验收:新建两条并行任务,检查每张预览和最终图都只出现在对应任务卡片中,且素材库没有未完成图片。
下一步
把这篇的方法练一遍
提示词和步骤可以带到创作里直接试做一版。