搜索

搜索 HiAPI 模型、工具和资源。

返回博客
教程5 分钟阅读

HiAPI 内容策略拒绝(CONTENT_POLICY_VIOLATION):成因与修复

读懂这个错误码、在哪看到它、以及怎么把内容改到过审

hiapi内容审核错误排查GPT Image 2

在 HiAPI 的统一异步任务接口上提交生成任务时,如果提示词或输入素材没能通过安全审核,你会拿到业务错误码 CONTENT_POLICY_VIOLATION,官方文档对它的含义说明是「内容未通过安全审核」,处置建议是「调整提示词或输入内容后重试」。它既不是鉴权问题,也不是余额或参数问题——是内容本身被拦下了。这篇讲清它长什么样、在哪能看到、以及怎么改。

一、问题现象

内容策略拒绝有两种出现形态,取决于拦截发生在提交阶段还是任务运行阶段。CONTENT_POLICY_VIOLATION 属于统一异步接口的业务错误码,和创建任务时的同步 error_code、以及任务终态里的 data.error.code 共用同一套枚举(它没有被标为「仅创建期」,因此两处都可能出现)。

形态 A:创建时被同步拒绝。 调 POST /v1/tasks 时内容就没过审,返回一个失败信封,error_code 为 CONTENT_POLICY_VIOLATION。信封形状如下(以官方文档的失败响应为准,code 是 HTTP 状态、error_code 是业务码):

{
  "code": 400,
  "message": "...",
  "data": null,
  "error_code": "CONTENT_POLICY_VIOLATION"
}

这种情况拿不到 taskId——任务根本没建起来。

形态 B:任务运行后终态为 fail。 已经拿到 taskId、任务跑起来之后才被判定不合规。这时轮询 GET /v1/tasks/{taskId},HTTP 仍是 200(信封 message 甚至是 success,那只代表「这次查询成功」,不代表你的任务成功),真正的失败藏在 data 里:

{
  "code": 200,
  "data": {
    "taskId": "tk-hiapi-...",
    "status": "fail",
    "error": { "code": "CONTENT_POLICY_VIOLATION", "message": "..." }
  },
  "message": "success"
}

一句话定位法则:别只看 HTTP 状态码。按三层读——HTTP 状态(请求是否被接受)→ 业务错误码(error_code / data.error.code,为什么被拒)→ 任务状态(data.status 走到哪一步)。只要 code 字段(同步信封的 error_code 或终态的 data.error.code)是 CONTENT_POLICY_VIOLATION,就是内容审核拦截,和超时、断链、参数错都不是一回事。message 文案可能随场景略有不同,稳定可判的信号是这个码,不要去正则匹配 message 文本。

在 Playground / 模型页「在线试用」里触发同类拦截时,页面会直接给出一条「未通过安全审核」的内联提示,而不是把码丢给你自己解析——这是网页试用(同步)路径和你写代码调用的 API 路径在呈现上的区别。

二、常见原因(按命中概率从高到低)

  1. 提示词里有不被允许的内容。 最常见。NSFW / 成人、露骨暴力血腥等内容会被安全审核拦下。注意很多模型本身就明确不支持 NSFW 内容,部分模型(如 GPT Image 2)还遵循其模型方的内容政策(如 OpenAI 内容政策)。
  2. 输入图片 / 参考素材没过审。 图生图(i2i)、参考图生视频这类任务里,被审核的不只是提示词——你上传或引用的图片、参考素材同样要过审。提示词干净但输入图不合规,照样 CONTENT_POLICY_VIOLATION。
  3. 换了模型后踩到更严的政策。 不同模型的内容政策宽严不一。同一段提示词在 A 模型能过、在 B 模型被拒是正常的,尤其是写实人像、名人肖像、品牌 / 版权素材这类敏感方向。
  4. 把拒绝误判成别的错误。 真正的内容拦截被当成「服务抽风」反复原样重试——同样的内容重试多少次都不会过,只是白等。

三、修复步骤

  1. 先确认错误码。 从同步响应的 error_code 或任务终态的 data.error.code 读出确切的码。确认是 CONTENT_POLICY_VIOLATION,而不是 TASK_FAILED(通用失败,多为瞬时问题或输入图链接不可达)或 INVALID_REQUEST(请求体不合法)。码不同,修法完全不同。
  2. 逐项清理提示词。 去掉 NSFW / 成人、露骨暴力等表述,换成合规写法再提交。改动要针对性,不是随便删词。
  3. 检查所有输入素材。 图生图 / 参考生成时,把可能触审的输入图、参考图换掉——它们和提示词一样要过审。
  4. 核对目标模型的政策。 到该模型的模型页看它标注的限制(比如 GPT Image 2 模型页 明确「不支持 NSFW 内容,遵循 OpenAI 内容政策」);需要换模型时,可在模型市场对比各模型的能力与政策。
  5. 改完再重试。 文档对这个码的处置建议就是「调整提示词或输入内容后重试」。注意:失败的任务不扣费——创建时预留的额度会在任务进入失败终态后全额退回,所以被审核拦下的任务本身不花钱;但原样重复提交同样的违规内容不会通过,先改再提。

四、最小验证示例

想先排除「是不是我的 key / 接入出问题」,用一个明显合规的提示词打一发 POST /v1/tasks,看能不能正常拿到 taskId(model 用裸 id gpt-image-2):

curl -s -X POST "https://api.hiapi.ai/v1/tasks" \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "input": { "prompt": "a cozy coffee shop storefront at sunrise, warm light" }
  }'
  • 返回 {"code":200,"data":{"taskId":"tk-hiapi-..."}} → 你的 key 和接入是通的;那么此前那条被拒的请求,问题就在内容,回到第三节清理提示词 / 输入图。
  • 返回 HTTP 401 + {"error":{"code":"permission_denied",...}} → 是鉴权问题(key 不对 / 没带 Authorization: Bearer),不是内容策略。
  • 连合规提示词都回 error_code: "CONTENT_POLICY_VIOLATION" → 比较少见,重新审视这条提示词里有没有被你忽略的敏感词,或换个更中性的描述再试。

五、延伸阅读

  • 统一异步接口完整的业务错误码表(含 CONTENT_POLICY_VIOLATION、TASK_FAILED、INVALID_REQUEST 等的含义与处置建议):统一异步接口文档。
  • 想确认某个模型的内容限制:到对应模型页或模型市场查看。

六、FAQ

Q:CONTENT_POLICY_VIOLATION 和 TASK_FAILED 有什么区别? A:前者是内容没过安全审核,修法是改提示词 / 输入素材;后者是通用失败,最常见原因是输入的图片 / 视频 URL 不可达或瞬时波动,修法是修 URL / 重试。两者是不同的业务错误码,别混。读 error.code 就能区分。

Q:任务被内容策略拒绝,会扣我的费吗? A:不会。按文档,任务进入失败终态后,创建时预留的额度全额退回。被审核拦下的任务本身不产生费用。

Q:同一段提示词,为什么在网页「在线试用」能看到明确的「未通过审核」提示,用 API 却只拿到一个码? A:网页试用是同步路径,会把审核结果以内联提示直接展示;API 路径把结果放在响应体的 error_code / data.error.code 里,由你的代码去读和分支。信息是一致的,只是呈现方式不同。

Q:我只改了提示词,输入图没动,为什么还是被拒? A:安全审核覆盖输入素材,不只是提示词。图生图 / 参考生成时,先把可能触审的输入图、参考图也换掉。

Q:HiAPI 有没有一个公开的「内容政策」页面可以查? A:没有独立的内容政策页。各模型的内容限制写在对应模型页上(例如「不支持 NSFW 内容」),平台层面的条款见服务条款与隐私政策。

Q:反复重试能不能「碰过去」? A:不能。同样的违规内容重试多少次都不会过,只会白白占用轮询。先按第三节改内容,再提交。

现在就用 HiAPI 生成

选一个模型,输入你的提示词,直接查看生成结果。

HiAPI Blog

相关文章

HiAPI

现在就用 HiAPI 生成

开始生成