图片生成失败怎么办:安全策略、提示词、重试
从安全策略、提示词约束、参数组合、异步任务、网络与配额,到重试队列和人工审核,整理一套可复用的 AI 生图排障流程。
做 AI 生图工作流时,最容易让人崩溃的不是“图不好看”,而是请求直接失败:有时是安全策略拦截,有时是模型不支持尺寸,有时是返回超时,有时同一个 prompt 今天能跑、明天又不稳定。
这篇文章不讲玄学提示词,而是把“图片生成失败”拆成可排查的工程问题:先判断失败类型,再调整 prompt、参数、重试策略和人工审核流程。适合你把图片模型接进内容生产、客服机器人、社群 Bot 或营销素材流水线时参考。
先把失败分成四类
很多团队一看到报错就改 prompt,结果越改越乱。建议先按下面四类归因:
- 安全策略类:prompt、参考图或输出意图触发安全规则,例如真人敏感内容、侵权、暴力、隐私、误导性内容等;
- 参数与模型类:模型名、尺寸、质量、数量、输入图格式不被当前接口支持;
- 网络与服务类:超时、异步任务未完成、上游拥塞、网关限流、余额或配额不足;
- 质量不可用类:接口成功,但图片出现错字、畸形、主体跑偏、比例错误,不适合发布。
第一类要改需求,第二类要查文档,第三类要重试和监控,第四类要做审核与二次生成。不要用同一种方式处理所有失败。
安全策略:先改意图,不是只换词
如果失败原因和安全策略有关,最稳的做法不是把敏感词拆开,而是把需求改成更明确、可发布、低风险的表达。
例如你想做“故障排查”主题封面,不要写成:
A panicked engineer fighting a dangerous AI system, red warning, chaos, explosion.
可以改成:
A friendly AI support mascot helping a developer debug an image generation dashboard.
Visible UI cards show: prompt check, policy review, retry queue, human approval.
Clean black and orange tech style, no real logos, no private data, no violent scene.
这类写法把画面从“危险冲突”转成“支持与排障”,既更容易通过,也更贴近文章内容。
Prompt 排障:保留结构,逐步减法
当图片生成失败或跑偏时,不要一次性大改。推荐按顺序做减法:
- 固定主体:一句话说明谁在做什么;
- 固定用途:封面、社媒图、流程图、产品插画;
- 固定限制:不要真实 Logo、二维码、密钥、可读小字、未授权商标;
- 删除高风险细节:真人姓名、具体品牌、敏感场景、过度夸张的伤害描述;
- 删除互相冲突的风格词:不要同时要求写实摄影、3D、手绘、水彩、赛博朋克。
一个可复用模板:
Use case: tutorial cover for an AI image generation troubleshooting guide.
Subject: a friendly support mascot and a developer checking failed image tasks.
Scene: dashboard with four cards: policy, prompt, retry, review.
Style: clean modern illustration, black and orange palette, high contrast.
Composition: 16:9 cover, leave blank title-safe area, no tiny readable text.
Constraints: no real logos, no API keys, no private user data, no watermark.
如果这仍然失败,就进一步删到只剩主体、场景和限制。最小 prompt 能跑通后,再一点点加细节。
参数排障:模型、尺寸、质量要一起看
图片 API 通常会有模型、尺寸、质量、数量、输入图格式等约束。排障时重点检查:
model是否真实存在、是否支持图片生成;size是否在模型支持范围内,例如1024x1024、1536x1024、1024x1536这类常见值;quality是否被该模型支持,先用medium或默认值跑通;- 编辑/参考图场景下,输入图片格式、大小、透明通道是否符合要求;
- SDK 版本是否太旧,导致参数名或响应结构不匹配。
如果你通过 Nbility 这类 OpenAI-compatible API 网关调用图片模型,建议把 Base URL、模型名和质量参数集中放在 .env,不要散落在脚本里:
NBILITY_API_KEY=[REDACTED]
NBILITY_BASE_URL=https://api.nbility.dev/v1
NBILITY_IMAGE_MODEL=gpt-image-2
NBILITY_IMAGE_QUALITY=medium
这样后续切模型、切质量、切项目 Key 时,不需要改业务代码。
重试策略:不要无限重试
图片生成比文本更慢,也更贵。失败时要有重试,但不能无限撞接口。
推荐策略:
- 参数错误:不重试,直接失败并提示开发者修配置;
- 安全策略错误:不自动绕过,进入人工改写;
- 超时 / 502 / 503 / 429:可指数退避重试 2–3 次;
- 质量不可用:最多生成 2–4 个候选,交给人工挑选;
- 批量任务:记录 task id、prompt hash、失败原因,避免重复烧钱。
Python 伪代码:
import time
RETRYABLE = {408, 429, 500, 502, 503, 504}
def should_retry(status_code, error_type):
if error_type in {"policy_violation", "bad_request", "invalid_model"}:
return False
return status_code in RETRYABLE
def retry_delay(attempt):
return min(60, 2 ** attempt)
for attempt in range(3):
try:
image = generate_image()
break
except ApiError as e:
if not should_retry(e.status_code, e.type):
raise
time.sleep(retry_delay(attempt))
批量生产:先小样,再放量
营销图、公众号封面、小红书轮播这类任务,很容易从“一张图”变成“一百张图”。批量生产前建议加一道小样流程:
- 每个主题先生成 1–2 张低成本草图;
- 人工确认风格、比例、安全区;
- 通过后再高质量重跑;
- 每张图保留 prompt、模型名、尺寸、时间、成本标签;
- 失败图进入失败目录,不要覆盖原始结果。
成本控制也很重要。统一走 Nbility 这样的 OpenAI-compatible 网关,可以把聊天模型、图片模型和 Agent 工具调用放在同一个入口下看用量。对团队来说,这比每个人各自拿一个 Key 更容易控预算。
上线前检查清单
生图工作流上线前,至少做这些检查:
[ ] 错误日志记录 status code、error type、request id / task id
[ ] prompt 中没有真实 API Key、手机号、客户资料、内部后台截图
[ ] 安全策略失败不会自动绕过,只进入人工改写
[ ] 429/5xx 有指数退避,参数错误不会无意义重试
[ ] 批量任务有最大生成数量和预算上限
[ ] 图片发布前经过人工预览,尤其检查中文、小字和裁剪
[ ] 失败样本会沉淀到 prompt 模板和排障文档里
常见问题
1. 为什么同一个 prompt 有时成功有时失败?
图片模型和安全检查都可能随上下文、参考图、参数、服务状态变化。把 prompt、模型、尺寸、参考图 hash、错误信息都记录下来,才能复盘。
2. 安全策略失败能不能自动改写后重试?
可以做“保守改写”,例如去掉真实姓名、品牌、暴力词、隐私信息,但不要做绕过式改写。涉及敏感人物、仿冒、隐私、伤害等场景,应该交给人工判断。
3. 图片成功了,但中文字错了怎么办?
不要让图片模型负责最终文字。生成无字底图,再用脚本、Canva、Figma 或设计模板叠加标题。
4. 怎么判断是 Nbility、模型还是代码问题?
先用最小 prompt、默认尺寸、官方 SDK 示例跑一次;再换同一个模型的文本接口验证 Key 和 Base URL;最后看错误码。如果文本能通、图片参数失败,通常是模型名、尺寸、质量或图片接口参数问题。
参考链接
- OpenAI Image Generation guide: https://developers.openai.com/api/docs/guides/image-generation
- OpenAI Images and Vision guide: https://developers.openai.com/api/docs/guides/images-vision
- OpenAI Safety best practices: https://platform.openai.com/docs/guides/safety-best-practices
- Nbility API overview: https://nbility.dev/docs/api
- Nbility Chat Completions API: https://nbility.dev/docs/api/chat/completions


