支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Dify 集成 Azure AI 内容安全插件:从部署到落地的全流程教程

发布日期:2025-06-26 14:51:21 浏览次数: 1533
作者:Dify

微信搜一搜,关注“Dify”

推荐语

Azure AI 内容安全插件现已上线Dify市场,为AI应用提供实时审核与多维度安全保障,确保合规性与数据隐私。

核心内容:
1. Azure AI内容安全插件的核心功能与优势
2. 插件支持的危害类别与严重性等级分析
3. 灵活的部署方式与自定义审核规则

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

作者:尤吉庆,微软应用解决方案工程师,dify 社区贡献者

Azure AI 内容安全容器插件现已正式上线 Dify 插件市场!这款强大的内容审核工具能够帮助开发者在构建 AI 应用时,自动检测和过滤用户输入及 AI 生成内容中的潜在有害信息,确保应用输出的安全性与合规性。

通过集成该插件,Dify 用户可以轻松实现:

  • 实时内容审核:在工作流中自动检测文本和图像中的不当内容

  • 多维度安全保障:覆盖仇恨言论、暴力、色情、自残等多个风险类别

  • 灵活的部署方式:支持本地容器化部署,满足数据隐私和合规要求

  • 自定义审核规则:通过 BlockList 功能精确控制特定内容的过滤

无论您是构建客服机器人、内容生成应用还是社交平台,该插件都能为您的 AI 应用增加一道可靠的安全防线。



1. Azure AI 内容安全

1.1. 概述

Azure AI 内容安全是一项 AI 服务,可检测用户输入和 AI 生成的有害内容。Azure AI 内容安全包括文本和图像 API,该服务提供了以下几种不同类型的分析:

1.2. 危害类别

Azure AI Content Safety 可识别四种不同类别的有害内容,分类可以是多标签的。例如,当文本通过文本审核模型时,它可以被归类为 Sexual  和 Violence。

1.3. 严重性等级

每个危害类别还附带一个严重性级别,用于显示被标记内容的严重性。

  • 文本:文本模型支持完整 0-7 严重性等级。如果用户指定,可以返回 0、2、4 和 6 的剪裁比例的严重性,每个相邻的级别都映射到一个级别。
  • 图像:图像模型支持完整 0-7 严重性等级的修剪版本。仅返回严重性 0、2、4 和 6。
  • 带文本的图像:多模态模型支持完整 0-7 严重性等级。如果用户指定,可以返回 0、2、4 和 6 的剪裁比例的严重性,每个相邻的级别都映射到一个级别。

1.4.  Azure 内容安全容器

通过容器可以在自己的环境中使用 Azure AI Content Safety 功能的子集,以满足特定的安全性和数据管理要求。下表列出了可用的 AI Content Safety Container 以及每个容器支持的功能。

Content Safety Container 处于公共预览版,不满足 Microsoft 的稳定性和支持要求。

1.5. 价格

Azure AI Content Safety 提供两种 SKU,一种按是 Standard SKU 按照实际请求的文本数量和图片数量进行计费,另一种是通过容器方式,完全部署在本地且不与互联网交互的 Commitment SKU。同时,对于 Standard SKU,也提供容器部署在本地,但需要与云端 Billing Endpoint 交互,按照一定间隔同步计费数据。详情如下:

1.6. Dify 插件

Azure AI Content Safety Container 已经被封装为 Dify 插件,并上架 Dify 官方 Marketplace。插件提供 TEXT 和 IMAGE 两种类型内容的审查能力。最新版本 v0.0.2 具备以下特性: 

  • 在单个工具中同时支持文本和图片内容审核; 

  • 支持自定义 API 端点和可选的身份验证请求头; 

  • 文本审核模式下支持利用 BlockList 进行更精确的文本内容筛选; 

  • 自动解析 API 响应并汇总展示文本和图像审查的违规详情; 

  • 输出明确的 ALLOW 或 DENY 检查结果; 

  • 额外输出用于自定义需求的原始 JSON 格式的 RawResults 结果;

2. 部署

2.1. 前置条件

在使用 Content Safety Containers 之前,必须满足以下先决条件:

  • Azure Global Subscription;
  • 在 Azure 上创建 standard (S) pricing tier 的 Content Safety resources;

2.2. 计费参数

Content Safety Container 在未连接到 Azure 进行计量的情况下无法运行,必须将容器配置为始终与计量服务通信以更新计费信息。容器启动需要三个主要参数,首先,Microsoft 软件许可条款必须具有 accept 值。此外,还需要端点 URL 和 API 密钥。

📢 Note

容器大约每 10~15 分钟报告一次使用情况。如果未在允许的时间范围内连接到 Azure,容器会继续运行,但在恢复到计费端点的连通性之前,容器不会提供服务。

默认会以 10~15 分钟时间内尝试连接 10 次,如果 10 次均失败,则容器将停止处理请求。

2.3.  主机要求

主机是基于 x64 架构,可以是本地的硬件/虚拟化,也可以是 Azure 中的 Docker 托管服务。下表描述了 Content  Safety Container 的建议规格, 该规格适用于文本和图像 Container。

Content Safety Container 可以在 CPU 上运行(仅 Text Container)。但如果要获取最佳性能,则需要 NVIDIA CUDA,该容器在 CUDA 11.8 和 CUDA 12.6 上进行了测试。容器要求的最低 GPU 规格是 NVIDIA  T4,建议使用 A100 以获得最佳性能。

2.4. 基准性能

下表显示了使用 NVIDIA T4 和 A100 在单卡 GPU 上每秒请求数 (RPS) 和延迟指标。但需要注意的是,即使使用相同的 GPU,性能也会根据 GPU 负载和环境的特定配置而波动,数据仅供参考。

1)Analyze Text

2)Analyze Image

2.5. 安装步骤

📢 Note

下述章节所有操作基于 Ubuntu 24.04,Security Type: Trusted launch virtual machines

1)安装 NVIDIA Driver

若在创建 Azure VM 时,选择了 Trusted launch virtual machines 作为 Security Type。则需要使用 Ubuntu 官方提供的 ubuntu-drivers 工具来安装 NVIDIA Driver,否则驱动将无法加载到内核中,导致检测不到驱动。

# 检查 Secure Boot 是否开启mokutil --sb-state
# 安装 ubuntu-driversapt update && apt install -y ubuntu-drivers-common
# 检查可用驱动版本(for servers)ubuntu-drivers list --gpgpu
# 安装驱动(CUDA 12.6 要求 CUDA Driver ≥560)ubuntu-drivers install --gpgpu nvidia:570-server
# 查看驱动版本cat /proc/driver/nvidia/version
# 安装 utilsapt install nvidia-utils-570-server
# 验证 nvidia-smi
# 升级驱动并清理旧版本(可选)ubuntu-drivers install --gpgpu nvidia:575-serverapt install nvidia-utils-575-serverrebootapt purge nvidia-driver-570 nvidia-kernel-common-570 nvidia-utils-535

2)安装 docker

# 刷新系统软件包列表apt update
# 安装 dockerapt install docker.io -y

3)安装 CUDA Toolkit

如上文所述,Content Safety Container 在 CUDA 11.8 和 12.6 上通过了测试,建议安装 CUDA 12.6。操作步骤如下:

# 下载 DEB 包wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
# 添加 NVIDIA 官方仓库密钥dpkg -i cuda-keyring_1.1-1_all.deb
# 刷新系统软件包列表apt update
# 查找可用 Toolkit 版本apt search cuda-toolkit
# 安装指定版本apt -y install cuda-toolkit-12-6
# 添加 nvcc 到 PATHecho 'export PATH=/usr/local/cuda-12.6/bin:$PATH' >> ~/.bashrcsource ~/.bashrc

4)安装 NVIDIA Container Toolkit

NVIDIA Container Toolkit 是一系列库和实用程序,借助这些库和程序来构建和运行 GPU 容器。

# 添加官方repocurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 刷新系统软件包列表apt update
# 安装export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1apt-get install -y \nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
# 重启 Dockersystemctl restart docker
# 验证docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi

5)获取 Endpoint 和 ApiKey

Portal 路径:Home / Content Safety / <your_content_safety_resource> / Resource Management / Key and Endpoint 

6)部署 Content Safety 容器

可在 Microsoft Container Registry 找到所有受支持的 Content Safety Text 和 Image 容器镜像,在  azure-cognitive-services/contentsafety 中,名为 text-analyze 和 image-analyze

Microsoft Container Registry:https://aka.ms/aacscontainermcr

# 部署 Content Safety Container - Text## 部署在 CPU 机器上(跳过步骤 1-3)docker run -itd -p 5000:5000 \-e CUDA_ENABLED=false \--restart always \mcr.microsoft.com/azure-cognitive-services/contentsafety/text-analyze:latest \Eula=accept \Billing="<Endpoint>" \ApiKey="<ApiKey>"
## 部署在 GPU 机器上docker run -itd -p 5000:5000 \--gpus all \--restart always \mcr.microsoft.com/azure-cognitive-services/contentsafety/text-analyze:latest \Eula=accept \Billing="<Endpoint>" \ApiKey="<ApiKey>"
# 部署 Content Safety Container - Image## Image 仅支持部署在 GPU 机器上docker run -itd -p 5000:5000 \--gpus all \--restart always \mcr.microsoft.com/azure-cognitive-services/contentsafety/image-analyze:latest \Eula=accept \Billing="<Endpoint>" \ApiKey="<ApiKey>"

7)验证状态

有几种方法可以验证容器是否正在运行。找到相关容器的 External IP address(外部 IP 地址)和端口,然后打开浏览器,使用下面 URL 来验证容器是否正在运行。

此外还可以在容器日志中看到上报计费数据的相关日志,如下:

  • Text Analyze

  • Image Analyze

8)使用 BlockList(仅支持文本)

Content Safety Container for Text Analysis 支持使用 BlockList,可以通过该功能自定义 BlockList 术语,并使用 CSV 文件管理这些阻止列表,也可以灵活地将多个 CSV 文件用于多个阻止列表。要在容器中使用 BlockList,使用如下命令:

BlockList:https://learn.microsoft.com/en-us/azure/ai-services/content-safety/how-to/use-blocklist

# 部署在 CPU 机器上(跳过步骤 1-3)docker run -itd -p 5000:5000 \-e CUDA_ENABLED=false \--restart always \-e BLOCKLIST_DIR=/tmp/blocklist \-v {/path/on/host}:/tmp/blocklist \mcr.microsoft.com/azure-cognitive-services/contentsafety/text-analyze:latest \Eula=accept \Billing="<Endpoint>" \ApiKey="<ApiKey>"
# 部署在 GPU 机器上docker run -itd -p 5000:5000 \--gpus all \--restart always \-e BLOCKLIST_DIR=/tmp/blocklist \-v {/path/on/host}:/tmp/blocklist \mcr.microsoft.com/azure-cognitive-services/contentsafety/text-analyze:latest \Eula=accept \Billing="<Endpoint>" \ApiKey="<ApiKey>"

在上面的命令中,将 {/path/on/host} 替换为主机上阻止列表文件夹的路径。此命令将主机中的阻止列表目录挂载到容器内的 BLOCKLIST_DIR=/tmp/blocklist 环境变量中。

📢 Note

Content Safety Container for Text Analysis 对阻止列表使用精确匹配方法。在匹配过程之前,黑名单中的所有项目都将转换为小写。这意味着,(例如)如果阻止列表中有 Contoso,则输入中的 Contoso 和 contoso 都被视为匹配项。

3. API 调用

3.1. APICall
1)示例代码-REST API

# Text Analyzecurl --location --request POST '<endpoint>/contentsafety/text:analyze?api-version=2024-09-01' \--header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \--header 'Content-Type: application/json' \--data-raw '{  "text""I hate you",  "categories": ["Hate""Sexual""SelfHarm""Violence"],  "blocklistNames": ["string"],  "haltOnBlocklistHit": true,  "outputType""EightSeverityLevels"}'
# Image Analyzecurl --location --request POST '<endpoint>/contentsafety/image:analyze?api-version=2024-09-01' \--header 'Content-Type: application/json' \--data-raw '{  "image": {    "content""base_64_string"  },  "categories": ["Hate""SelfHarm""Sexual""Violence"],  "outputType""FourSeverityLevels"}'


2)参数解释

  • Text Analyze

  • Image Analyze

3.2. Output

1)示例

# Text Analyze{  "blocklistsMatch": [    {      "blocklistName""string",      "blocklistItemId""string",      "blocklistItemText""string"    }  ],  "categoriesAnalysis": [    {      "category""Hate",      "severity": 2    },    {      "category""SelfHarm",      "severity": 0    },    {      "category""Sexual",      "severity": 0    },    {      "category""Violence",      "severity": 0    }  ]}
# Image Analyze{  "categoriesAnalysis": [    {      "category""Hate",      "severity": 2    },    {      "category""SelfHarm",      "severity": 0    },    {      "category""Sexual",      "severity": 0    },    {      "category""Violence",      "severity": 0    }  ] }


2)参数解释

4. 集成 Dify

4.1. 前置条件

1)部署 Content Safety Container

在使用 Content Safety Container Plugin 之前,请确保已按照前述章节正确设置并运行 Content Safety Container。并且在配置插件之前,请先验证容器是否可访问并响应 API 请求。

2)更新 Dify ENV

当用户在 Dify 聊天框中发送图片时, 会在 sys.files 中生成可用于访问该图片的 url(每张图片对应一个 url)。Content Safety Container Plugin 通过访问这些 url 来获取图像,并将其转换为 base64 格式,然后将其发送到图像分析 API 进行审核。因此,必须在 Dify 中设置  FILES_URL  或 CONSOLE_API_URL 才能生成相应的 URL。sys.files 的结构如下:

[  {    "dify_model_identity": "__dify__file__",    "id": null,    "tenant_id": "7720c6b6-73a5-457f-93a2-66075982fe02",    "type": "image",    "transfer_method": "local_file",    "remote_url": "https://upload.dify.ai/files/xxxxxxxx",    "related_id": "4763ef42-1bca-44d1-b12b-bee0e841b719",    "filename": "image_moderation_1.jpg",    "extension": ".jpg",    "mime_type": "image/jpeg",    "size": 39886,    "url": "https://upload.dify.ai/files/xxxxxxxx"  }]

4.2. 配置步骤

1) 获取插件

Content Safety Container Plugin 可以通过 Marketplace、GitHub 或 Local Package File 进行安装,按需选择。如果通过 Local Package File 方式安装,则会由于 difypkg 文件没有签名,导致安装报错,需要给 plugin-daemon 组件设置 FORCE_VERIFYING_SIGNATURE=false 以绕过检查:

Marketplace:https://marketplace.dify.ai/


GitHub:https://github.com/HeyJiqingCode/AzureAIContentSafetyContainer-DifyPlugin.git


Local Package File:https://github.com/HeyJiqingCode/AzureAIContentSafetyContainer-DifyPlugin/blob/dify

2)认证

在 Dify 导航页面,进入 [Tools] > [Azure AI Content Safety Container] > [To Authorize],然后填写 API Endpoint、API Version 和可选的请求头(比如 Azure API Management Subscription Key)。

3)添加节点

Content Safety Container Plugin 可以在 Chatflow 或 Workflow 中使用,并且可以同时对文本和图片内容进行审查。新建 Chatflow 或 Workflow,添加 Tools 节点,选择工具 Azure AI Content Safety Container 中的 Content Moderation 即可。示例如下:

配置示例:

  • API Endpoint: https://xxx.azure-api.net
  • API Version: 2024-05-01
  • Custom Header Key: Ocp-Apim-Subscription-Key
  • Custom Header Value: *******************************

4)配置参数

Content Safety Container Plugin 所有参数都设置为可选。后端会自动检测是否有文本或图像内容传入,并调用对应的 API 进行内容审核。若未传入内容,则不调用。参数说明如下:

- Text to Analyze:要分析的文本,选择 Dify 系统变量 sys.query 即可;

- Images to Analyze:要分析的图像文件,选择 Dify 系统变量 sys.files 即可;

- Text Blocklist Names:用于文本分析的阻止列表名称,多个名称用逗号分隔;

- Halt on Blocklist Hit:如果匹配到阻止列表,是否停止文本分析,建议设置为 false

📢 Note

被检测的图片最大尺寸不超过 7,200 x 7,200 像素,最小尺寸不低于 50 x 50 像素,单个图片文件大小不超过 4M。

4.3. 输出变量

Content Safety Container Plugin 提供多种输出结果,以满足不同场景需求,具体如下:

- CheckResult:最终检测结果(ALLOW、DENY 或 ERROR);

- Details:格式化违规详情,仅在 CheckResult 为 DENY 时才会输出;

- RawResults:原始、未经修改的响应,用于自定义需求场景;

RawResults 结构示例如下:

{  "text": {    "blocklistsMatch": [],    "categoriesAnalysis": [      {        "category": "Hate",        "severity": 6      }    ]  },  "image": [    {      "categoriesAnalysis": [        {          "category": "Sexual",          "severity": 4        }      ]    }  ]}

4.4. 效果展示

1)文本审核——有害类别检测

2)文本审核——有害类别 + BlockList 检测

3)图片审核——有害类别 + BlockList 检测

4)文本 + 图片审核——有害类别 + BlockList 检测

5. 参考文档

  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/overview
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/concepts/harm-categories
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/how-to/containers/container-overview
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/how-to/containers/install-run-container
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/how-to/containers/text-container
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/quickstart-text?tabs=visual-studio%2Clinux&pivots=programming-language-rest
  • https://learn.microsoft.com/en-us/azure/ai-services/content-safety/quickstart-image?tabs=visual-studio%2Clinux&pivots=programming-language-rest
  • https://docs.azure.cn/en-us/virtual-machines/linux/n-series-driver-setup#ubuntu
  • https://documentation.ubuntu.com/server/how-to/graphics/install-nvidia-drivers/#installing-the-user-space-drivers-and-the-driver-libraries
  • https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id7
  • https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_network
  • https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
  • https://github.com/HeyJiqingCode/AzureAIContentSafetyContainer-DifyPlugin
  • https://github.com/prompt-security/ps-fuzz/tree/main/ps_fuzz/attack_data
  • https://github.com/alex000kim/nsfw_data_scraper/tree/main/raw_data



🥳

如果你喜欢 Dify,欢迎:

  • 体验 Dify 云端版本:https://dify.ai/
  • 在 GitHub 上给我们点亮:支持我们的开源项

    https://github.com/langgenius/dify

  • 贡献代码,和我们一起打造更强大的 Dify:你的每一行代码都能让 Dify 更加完美。
  • 通过社交媒体和线下活动:分享 Dify 与你的使用心得,让更多人受益于这个强大的工具。
  • 我们正在招聘,简历请投至 joinus@dify.ai;
  • 职位详情见:https://langgenius.feishu.cn/wiki/Y1sTwr4TCiFjQHkgnv3cAiqRn2g?fromScene=spaceOverview

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询