功能说明

通过对接阿里云内容安全检测大模型的输入输出,保障AI应用内容合法合规。

运行属性

插件执行阶段:默认阶段 插件执行优先级:300

配置说明

NameTypeRequirementDefaultDescription
serviceNamestringrequried-服务名
servicePortstringrequried-服务端口
serviceHoststringrequried-阿里云内容安全endpoint的域名
accessKeystringrequried-阿里云AK
secretKeystringrequried-阿里云SK
checkRequestbooloptionalfalse检查提问内容是否合规
checkResponsebooloptionalfalse检查大模型的回答内容是否合规,生效时会使流式响应变为非流式
requestCheckServicestringoptionalllm_query_moderation指定阿里云内容安全用于检测输入内容的服务
responseCheckServicestringoptionalllm_response_moderation指定阿里云内容安全用于检测输出内容的服务
requestContentJsonPathstringoptionalmessages.@reverse.0.content指定要检测内容在请求body中的jsonpath
responseContentJsonPathstringoptionalchoices.0.message.content指定要检测内容在响应body中的jsonpath
responseStreamContentJsonPathstringoptionalchoices.0.delta.content指定要检测内容在流式响应body中的jsonpath
denyCodeintoptional200指定内容非法时的响应状态码
denyMessagestringoptionalopenai格式的流失/非流式响应,回答内容为阿里云内容安全的建议回答指定内容非法时的响应内容

配置示例

前提条件

由于插件中需要调用阿里云内容安全服务,所以需要先创建一个DNS类型的服务,例如:

AI内容安全 - 图1

检测输入内容是否合规

  1. serviceName: safecheck.dns
  2. servicePort: 443
  3. serviceHost: green-cip.cn-shanghai.aliyuncs.com
  4. accessKey: XXXXXXXXX
  5. secretKey: XXXXXXXXXXXXXXX
  6. checkRequest: true

检测输入与输出是否合规

  1. serviceName: safecheck.dns
  2. servicePort: 443
  3. serviceHost: green-cip.cn-shanghai.aliyuncs.com
  4. accessKey: XXXXXXXXX
  5. secretKey: XXXXXXXXXXXXXXX
  6. checkRequest: true
  7. checkResponse: true

指定自定义内容安全检测服务

用户可能需要根据不同的场景配置不同的检测规则,该问题可通过为不同域名/路由/服务配置不同的内容安全检测服务实现。如下图所示,我们创建了一个名为 llm_query_moderation_01 的检测服务,其中的检测规则在 llm_query_moderation 之上做了一些改动:

AI内容安全 - 图2

接下来在目标域名/路由/服务级别进行以下配置,指定使用我们自定义的 llm_query_moderation_01 中的规则进行检测:

  1. serviceName: safecheck.dns
  2. servicePort: 443
  3. serviceHost: green-cip.cn-shanghai.aliyuncs.com
  4. accessKey: XXXXXXXXX
  5. secretKey: XXXXXXXXXXXXXXX
  6. checkRequest: true
  7. requestCheckService: llm_query_moderation_01

配置非openai协议(例如百炼App)

  1. serviceName: safecheck.dns
  2. servicePort: 443
  3. serviceHost: green-cip.cn-shanghai.aliyuncs.com
  4. accessKey: XXXXXXXXX
  5. secretKey: XXXXXXXXXXXXXXX
  6. checkRequest: true
  7. checkResponse: true
  8. requestContentJsonPath: input.prompt
  9. responseContentJsonPath: output.text
  10. denyCode: 200
  11. denyMessage: “很抱歉,我无法回答您的问题”

可观测

Metric

ai-security-guard 插件提供了以下监控指标:

  • ai_sec_request_deny: 请求内容安全检测失败请求数
  • ai_sec_response_deny: 模型回答安全检测失败请求数

Trace

如果开启了链路追踪,ai-security-guard 插件会在请求 span 中添加以下 attributes:

  • ai_sec_risklabel: 表示请求命中的风险类型
  • ai_sec_deny_phase: 表示请求被检测到风险的阶段(取值为request或者response)

请求示例

  1. -H Content-Type: application/json \
  2. -d ‘{
  3. model”: gpt-4o-mini”,
  4. messages”: [
  5. {
  6. role”: user”,
  7. content”: “这是一段非法内容”
  8. }
  9. ]
  10. }’

请求内容会被发送到阿里云内容安全服务进行检测,如果请求内容检测结果为非法,网关将返回形如以下的回答:

  1. {
  2. id”: chatcmpl-123”,
  3. object”: chat.completion”,
  4. created”: 1677652288,
  5. model”: gpt-4o-mini”,
  6. system_fingerprint”: fp_44709d6fcb”,
  7. choices”: [
  8. {
  9. index”: 0,
  10. message”: {
  11. role”: assistant”,
  12. content”: “作为一名人工智能助手,我不能提供涉及色情、暴力、政治等敏感话题的内容。如果您有其他相关问题,欢迎您提问。”,
  13. },
  14. logprobs”: null,
  15. finish_reason”: stop
  16. }
  17. ]
  18. }