如果您以任何规模使用 GPT Image 模型(gpt-image-2, gpt-image-2.5)生成图像,最终都会遇到一个令人沮丧的错误:HTTP 400,并提示您的请求被安全系统拒绝。没有图像,没有部分输出,而且提示词在您看来完全合理。
本指南解释了该错误的本质、实际触发原因,以及如何调整提示词和参考图以降低其发生频率。本指南基于 TokenLab 图像 API 30 天的生产数据(2026 年 8 月 19 日至 9 月 18 日),以及 OpenAI 的官方图像生成文档。文中引用的数字均为平台汇总统计数据;未复现任何客户内容。
该错误的本质
GPT Image 模型会根据提供商的内容政策过滤每一个提示词、每一个输入图像以及每一个生成的图像。当过滤器触发时,请求将失败并返回 400 错误,其稳定的判别器是错误代码:
{
"error": {
"type": "image_generation_user_error",
"code": "moderation_blocked",
"moderation_details": {
"moderation_stage": "input",
"categories": ["sexual"]
}
}
}
根据官方文档,moderation_details 是可选的且故意设计得比较粗略:moderation_stage 会告诉您拦截是来自您的输入(input)还是生成的图像(output),而 categories 则包含广泛的公共标签,如 harassment(骚扰)、self-harm(自残)、sexual(性)或 violence(暴力)。它从不公开内部的分类器评分。
在 TokenLab 上,同一事件以两种形式出现:
- 同步调用(
/v1/images/generations,/v1/images/edits)立即返回 HTTP 400。 - 异步任务转为
failed状态,并显示消息“The request was rejected by the safety system.”(请求被安全系统拒绝)。
无论哪种方式,有两个操作事实很重要。首先,审核拦截对于相同内容是确定性的:重试未更改的请求基本上永远不会成功。其次,在 TokenLab 上,被审核拦截的任务被视为失败任务,预扣的配额会自动全额退还——您无需为被拦截的生成付费。
三十天的生产数据
在 2026 年 8 月 19 日至 9 月 18 日期间,TokenLab 上约 4.3% 的 GPT Image 任务(大约每 23 个任务中就有 1 个)被上游安全系统拒绝。这种分布并非随机;被拦截的请求紧密聚集在几种模式周围:
| 信号 | 被拦截任务 | 所有其他任务 | 解读 |
|---|---|---|---|
| 提示词提及未成年人(儿童、小孩、婴儿、“7岁”等) | 79% | 33% | 最强的单一预测指标 |
| 照片级渲染用词(“照片级真实”、“真人”、“实拍”) | 77% | 57% | 放大器,尤其是在涉及未成年人时 |
| 性相关描述词(裸露、性感、内衣、身体部位相关词汇) | 43% | 17% | 强预测指标 |
| 通用动作/暴力词汇(战斗、剑、爆炸) | ~50% | ~50% | 本身无预测价值 |
同一窗口期的另外三个发现:
- 参考图会增加风险。 带有输入/参考图的任务被拦截率为 8.4%,而纯文本生成仅为 3.7% ——高出一倍多。图像的审核与文本一样严格。
- 长提示词更容易失败。 被拦截的提示词平均长度约为 3,600 个字符,超过一半超过了 2,000 个字符。每一个额外的从句都会增加分类器的覆盖面积。
- 重试从未成功。 窗口期内每一个被拦截的任务最终都处于失败状态;没有一个通过重新提交相同输入而成功。且每一个任务都已自动退款。
我们观察到的最常被拦截的工作流是:未成年人的照片级角色设计表——即描述具有超真实渲染、精确身体比例和服装说明的儿童角色的“选角参考”式提示词。将未成年人相关词汇与照片级渲染相结合的提示词被拦截率为 ~9.5%,是基准率的 2.2 倍。
触发拦截的五种模式
通读被拦截的样本,几乎所有的拒绝都属于以下几类:
- 未成年人的照片级描绘。 被渲染为“在摄影棚拍摄的真人”、“超写实”、“非 CGI,非插画”的儿童或婴儿角色。未成年人与照片级真实感的结合是图像审核中最严密的边界,即使意图只是为了制作无辜的角色表,它也会触发拦截。
- 围绕未成年人的服装或身体部位描述。 诸如“未穿衣服的锁骨特写”(本意是简单的肖像裁剪)或儿童角色的详细全身比例测量等短语。单独看是无辜的,但汇总起来会被解读为对未成年人的身体部位描述。
- 成人角色的性化描述。 即使在其他方面是 SFW(适合工作场所)的构图中,使用关注姿势、皮肤和内衣的词汇(“内衣”、“裸露”、“诱人姿势”)。
- 图形化的血腥解剖。 描述腐烂的肉体、暴露的器官、开放性伤口或寄生虫的恐怖和黑暗奇幻提示词。
- 真实人物的参考图。 真人儿童照片、皮肤暴露较多的图像或用作编辑输入的类似名人的面孔。
两个放大器使上述所有情况更容易触发拦截:非常长的提示词(文本越多,出现不良组合的机会就越多)和负面词列表。像“无裸露、无性内容、无血腥”这样的行并不能让分类器放心——它重复了您想要避免的概念,并将它们添加到了输入中。描述您想要的,而不是您不想要的。
提示词调优手册
以下是与数据相对应的重写策略。(示例仅供说明,并非来自客户流量。)
1. 让未成年人远离照片级真实感
如果您的故事、漫画或游戏需要儿童角色,请以清晰的风格化媒介进行渲染:
修改前:"7岁女孩的超写实选角照片,在摄影棚拍摄的真人儿童,详细的身体比例,锁骨以上未穿衣服的面部特写..."
修改后:"明朝服饰年轻女孩的绘本水彩插画,肩部以上肖像,圆脸,布带扎成的双发髻,温柔的表情,纯白背景"
更改媒介(水彩、2D 动画、3D 卡通、绘本风格),去掉“真人/拍摄”的框架,完全跳过身体测量。如果您必须描述服装,请描述角色穿着什么(“穿着圆领布夹克”),而不是他们没穿什么。
2. 删除负面词列表
用正面措辞替换“无裸露、无血腥、无文字、无水印”:例如“穿着完整”、“干净的构图”、“纯净背景”。仅保留不涉及受限类别的负面词(例如“无水印”是可以的;“无裸露”则无济于事)。
3. 精简提示词
如果您生成多面板角色表,不要在每个面板描述中重复相同的风格块。一个共享的风格句子加上每个面板的具体细节,可以使您保持在触发阈值之下,从而避免意外的触发组合。
4. 用氛围而非解剖结构来化解血腥
修改前:"她的身体腐烂,暴露的头骨,肉体,脓疱和寄生虫..."
修改后:"一半宁静慈母,另一半消融在阴影和潮汐雾气中,通过剪影和光影而非解剖细节来暗示腐朽"
当恐怖感通过情绪、光影和剪影而非组织层面的描述来传达时,黑暗奇幻内容可以通过审核。
5. 中和成人内容相关性
对于成人角色,将关注身体和内衣的词汇替换为时尚和情绪语言:用“晚礼服”代替“内衣”,用“自信的对立式平衡姿势”代替“诱人姿势”。
参考图卫生
由于图像输入也会被审核——而且在我们的数据中,它们使拦截率增加了一倍以上——请将参考图视为提示词的一部分:
- 未成年人优先使用风格化参考图。 儿童角色的插画或 3D 渲染作为输入比真实儿童照片安全得多,且通常在角色一致性方面效果同样出色。
- 裁剪到重点。 如果您需要面部以保持一致性,请上传面部裁剪图,而不是全身海滩照。更少的皮肤和更少的背景意味着更小的分类器覆盖面。
- 移除覆盖的文字和水印。 参考图上的标题、模因文字和水印字符串会被读取为输入文本,并可能携带您未注意到的触发词。
- 避免使用真实名人的肖像,无论是作为参考图还是作为“以 <演员> 风格”的提示词文本。
审核参数
根据官方文档,GPT Image 模型接受一个带有两个值的 moderation 参数:
auto(默认):标准过滤,限制某些类别的潜在年龄不当内容。low:限制较少的过滤。
TokenLab 在 /v1/images/generations 和 /v1/images/edits 上都透传此参数:
curl https://api.tokenlab.sh/v1/images/generations \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "明朝服饰年轻女孩的绘本水彩插画,肩部以上肖像",
"size": "1024x1024",
"moderation": "low"
}'
当您的内容显然是良性的但一直被标记时,请使用 low——风格化插画作品就是典型案例。两个警告:low 并不等于 off(非法类别如 CSAM 始终会被拦截),它是一个调节器,而不是保证——请先修复提示词,然后再使用该参数。
在代码中处理拦截
官方指南明确指出:image_generation_user_error 失败是用户可纠正的,在不更改请求的情况下不应重试。我们的数据也证实了这一点——在 30 天的窗口期内,没有一个被拦截的任务通过重试未更改的请求而恢复。正确的处理方式:
- 根据
error.code进行区分,而不是消息文本。只有moderation_blocked(以及一般的image_generation_user_error)意味着“修复输入”。速率限制和 5xx 错误仍然可以重试。 - 读取阶段。
moderation_stage: "input"意味着重写提示词或更换参考图;"output"意味着生成的图像本身被标记——使用稍微调整、降低风险的提示词重新生成通常可以解决问题。 - 保持最终用户消息通用(“此请求因内容安全要求无法完成”),并记录
moderation_details和请求 ID 以供您自己的调试和支持使用。 - 不要循环。 每个唯一输入在一次审核拦截后应断路;重新提交相同内容会浪费延迟和调试时间,即使 TokenLab 会退款。
检查清单
| 您的情况 | 可能的触发因素 | 修复方法 |
|---|---|---|
| 儿童角色设计表 | 未成年人 × 照片级真实感 | 风格化媒介,无身体测量,正面服装用词 |
| 照片级成人肖像被拦截 | 性化描述词 | 时尚/情绪用词;考虑使用 moderation="low" |
| 黑暗奇幻/恐怖生物 | 血腥解剖结构 | 氛围和剪影而非组织细节 |
| 带参考图的编辑被拦截 | 真人/皮肤暴露较多的输入图 | 更紧凑的裁剪,使用风格化参考,去除覆盖文字 |
| 长多面板提示词被拦截 | 提示词覆盖面积 + 负面列表 | 去重样板,删除负面词列表 |
| 良性风格化作品仍被标记 | 分类器保守性 | moderation="low" |
常见问题解答
我需要为被拦截的生成付费吗? 不需要。在 TokenLab 上,被审核拦截的任务会失败,预扣的配额会自动全额退还。
重试相同的提示词有帮助吗? 没有。在 30 天的数据中,没有一个被拦截的任务在未更改的情况下重试成功。请先更改输入。
moderation="low" 会禁用安全过滤吗? 不会。它只是降低了限制性;非法内容类别无论如何都会被拦截。
参考图真的会被审核吗? 是的——提示词和每一个输入图像都会被过滤,在我们的数据中,带有参考图的任务被拦截率是纯文本任务的两倍多。
我能看到具体触发了哪条规则吗? 只能在粗略的 moderation_details.categories 级别看到,且仅在上游包含该信息时。提供商故意不公开分类器内部细节。
局限性
上述统计数据是来自 TokenLab 生产流量的 30 天汇总,描述的是趋势而非保证;审核分类器会随时间变化,同一提示词在上游更新后可能会被不同对待。重写示例仅为说明性模板,而非客户数据。在批量运行之前,请务必通过小规模测试验证当前行为。
要尝试这些模型,请浏览 图像模型目录,查看 异步图像生成指南 以了解任务生命周期处理,并查看 docs.tokenlab.sh 以获取当前的请求格式。



