快速给接口添加多层内容安全校验

更新时间:

给工作流快速添加内容安全校验

方案概览

用户在已有工作流的基础上,对于文本和图片内容分别追加对应的节点用于安全校验,当文本安全校验不通过,工作流会直接执行结束,并且抛出包含敏感信息类型的错误信息,当图片安全校验不通过,工作流会返回默认的图片告知用户图片包含敏感信息。

image

环境准备

如果已经在控制台部署好了一份可运行的工作流,可以直接开始下一步,否则参考下面的文档进行基础环境配置:快速创建一个生成漫画插图接口

添加步骤

  1. 环境准备好后,获得一个可以运行的工作流如下:image

保存图片内容安全校验

  1. 将上图中原始的 保存图片 节点删除,双击界面空白处搜索 保存图片with阿里图片内容安全Plus,选择添加:image

  2. 添加到工作流的结尾。添加后的效果如下如所示:image

  3. 参数说明(重要)

    1. safe_check:boolean 类型,是否开启图片内容安全校验,默认是开启

    2. safe_check_level:int类型,图片内容安全监测等级,为 0 是安全等级最低,100 安全监测等级最高,建议设置 80-90。具体的阈值选取可以参考:图片审核增强版2.0版同步检测API

  4. 正向提示词输入 暴力,测试运行效果:image

上传图片内容安全校验

  1. 双击界面空白处搜索 上传图片with阿里图片内容安全Plus,选择添加,效果如图所示:image

  2. 参数说明(重要)

    1. safe_check:boolean 类型,是否开启图片内容安全校验,默认是开启

    2. safe_check_level:int类型,图片内容安全监测等级,为 0 是安全等级最低,100 安全监测等级最高,建议设置 80-90。具体的阈值选取可以参考:图片审核增强版2.0版同步检测API

  3. 测试运行效果,运行时候会直接抛出异常:image

文本内容安全校验

  1. 搜索 阿里文本内容安全Plus,添加imageimage

  2. 正向提示词 的 CLIP文本编码器文本框转换为输入image

  3. 连接内容安全的输出和文本编码器的输入:

  4. 参数说明(重要)

    1. safe_check:boolean 类型,是否开启图片内容安全校验,默认是开启

    2. llm_allow_goon:boolean 类型,本地 LLM 模型安全校验是否通过,默认是true

  5. 测试效果,输入 暴力,点击运行:image

添加本地 LLM 校验满足更高的安全要求

  1. 如果发现文本内容安全和图片内容安全还是有无法过滤的情况,可以尝试添加本地 LLM 内容安全监测:

  2. 搜索三个节点添加,分别是 Ollama Generate Advance展示文本Text Containsimage

  3. 阿里文本内容安全Plustext 内容以及 llm_allow_goon 转换为输入:image

    1. 转换后的效果如下:image

  4. Text Contains 节点 text 转换为输入,sub_text 中填入 yesimage

  5. Ollama Generate Advance节点中,LLM模型切成 qwen:7b,适合儿童看的提示词可以使用下面的,替换为如下

    This GPT reviews input text from children and assesses whether the described scenario contains inappropriate, harmful, disturbing, or gross content. If such content is detected, it will respond with 'No.' Otherwise, it will respond with 'Yes.' The GPT should recognize unconventional but harmless content as appropriate. It must not elaborate on its answers and should only respond with either 'Yes' or 'No.'

    image

    1. prompt 转换为节点的输入image

  6. 连接各个节点如下:image

  7. 输入 恶心的胃,测试效果,可以看到大模型监测结果为 false,表示不通过:image

发布为接口后,内容安全返回效果

保存图片安全监测失败

返回的图片名字为default.png,如需要监测,可以判断当前字符串是否存在。

{
  "status": 10,
  "apiInvokeId": "i_660d04736d74470025e691d0",
  "data": {
    "images": [
      "http://sd-fc-shanghai-daily.oss-cn-shanghai.aliyuncs.com/default.png"
    ],
    "taskId": "co6fcikahf3lhj6cl1d0",
    "status": "succeeded"
  },
  "subErrCode": null,
  "subErrMessage": null,
  "errCode": null,
  "errMessage": null,
  "startTime": null,
  "endTime": null
}

返回默认的图片URL:

image

上传图片内容安全监测失败

上传图片节点在阿里云图片安全监测不通过时,会直接报错(注意保存图片节点检测失败会替换默认图不报错)返回参数如下:

{
  "status": 20,
  "apiInvokeId": "i_66167aba6d744700257a1c84",
  "data": null,
  "subErrCode": "P_Request_ContentSafe",
  "sub_err_message": "{'labels': 'political_politicalFigure', 'code': 'content_safe_check_failed'}",
  "errCode": "B_API_ServiceError",
  "errMessage": "api调用下游服务错误",
  "startTime": null,
  "endTime": null
}

文本安全监测失败

文本安全监测会直接失败,返回如下格式错误。

{
  "status": 20,
  "apiInvokeId": "i_66167aba6d744700257a1c84",
  "data": null,
  "subErrCode": "P_Request_ContentSafe",
  "subErrMessage": "包含的具体错误码",
  "errCode": "B_API_ServiceError",
  "errMessage": "api调用下游服务错误",
  "startTime": null,
  "endTime": null
}

大模型校验不通过返回参数示例如下:

{
  "status": 20,
  "err_code": "B_API_ServiceError",
  "errMessage": "api调用下游服务错误",
  "sub_err_code": "P_Request_ContentSafe",
  "sub_err_message": "{'labels': 'llm_not_allow_goon', 'reason': 'llm check not allow goon', 'code': 'content_safe_check_failed'}",
  "api_invoke_id": "i_66c7f9789b8059002559f670",
  "data": null
}

阿里云文本安全监测不通过,返回参数如下:

{
  "status": 20,
  "apiInvokeId": "i_66167aba6d744700257a1c84",
  "data": null,
  "subErrCode": "P_Request_ContentSafe",
  "subErrMessage": "{'labels': 'sexual_content', 'reason': '{\"riskLevel\":\"medium\",\"riskTips\":\"色情_低俗\",\"riskWords\":\"色情\"}', 'code': 'content_safe_check_failed'}",
  "errCode": "B_API_ServiceError",
  "errMessage": "api调用下游服务错误",
  "startTime": null,
  "endTime": null
}

具体的错误码可以参考:文本审核增强版API