Skip to main content
专为 Microsoft Foundry 和 Azure AI Content Safety 设计的中间件。了解更多关于中间件的信息。 这些中间件类位于 langchain-azure-ai 包中,并从 langchain_azure_ai.agents.middleware 导出。
Azure AI Content Safety 中间件目前在上游标记为实验性。随着 Azure AI Content Safety 和 LangChain 中间件支持的不断成熟,API 接口预计会持续演进。

概述

中间件描述
文本审核扫描输入和输出文本中的有害内容及黑名单匹配项
图像审核使用 Azure AI Content Safety 图像分析功能扫描图像输入和输出
提示词防护检测直接和间接的提示词注入尝试
受保护材料检测受版权保护或其他受保护的文本或代码
事实依据性根据事实依据源评估模型输出并标记幻觉

功能特性

  • 针对有害内容和自定义黑名单的文本审核。
  • 针对数据 URL 和公共 HTTP(S) 图像输入的图像审核。
  • 使用 Prompt Shield 进行提示词注入检测。
  • 针对文本和代码的受保护材料检测。
  • 针对检索到的上下文对生成答案的事实依据性评估。
  • 自定义 context_extractor 钩子,以将筛选和评估适配到您的智能体状态。

设置

要使用 Azure AI Content Safety 中间件,请安装集成包,配置 Azure AI Foundry 项目端点或 Azure Content Safety 端点之一,并提供凭据。

安装

安装该包:
pip install -U langchain-azure-ai

凭据

用于身份验证时,通过 credential 参数传入 DefaultAzureCredential() 或 API 密钥字符串。使用 Foundry 项目需要借助 Microsoft Entra ID 进行身份验证。
初始化凭据
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

实例化

该中间件支持两种端点样式:
  • 通过 AZURE_CONTENT_SAFETY_ENDPOINT 访问 Azure Content Safety 资源端点
  • 通过 AZURE_AI_PROJECT_ENDPOINT 访问 Azure AI Foundry 项目端点
如果两者均可用,请优先使用 project_endpoint,因为它为基于 Azure AI Foundry 的工作流提供了更好的默认值。在大多数设置中,您可以一次性设置环境变量,并在每次实例化中间件时省略 endpointproject_endpoint
配置端点
import os

os.environ["AZURE_AI_PROJECT_ENDPOINT"] = "https://<resource>.services.ai.azure.com/api/projects/<project>"
langchain_azure_ai.agents.middleware 导入并配置您的中间件。
初始化中间件
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import AzureContentModerationMiddleware

middleware = AzureContentModerationMiddleware(
    project_endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
    credential=DefaultAzureCredential(),
    categories=["Hate", "Violence"],
    exit_behavior="error",
)

与智能体配合使用

按顺序将中间件传递给 create_agent。您可以将 Azure AI 中间件与内置中间件结合使用。
带中间件的智能体
from azure.identity import DefaultAzureCredential
from langchain.agents import create_agent
from langchain_azure_ai.agents.middleware import AzureContentModerationMiddleware

agent = create_agent(
    model="azure_ai:gpt-4.1",
    middleware=[
        AzureContentModerationMiddleware(
            project_endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
            credential=DefaultAzureCredential(),
            categories=["Hate", "Violence"],
            exit_behavior="error",
        )
    ],
)
如果已设置 AZURE_AI_PROJECT_ENDPOINT,通常在实例化时可以省略 project_endpoint

Azure AI Content Safety

文本审核

使用 AzureContentModerationMiddleware 在智能体运行前筛选最后的 HumanMessage,并在运行后筛选最后的 AIMessage。此中间件使用 Azure AI Content Safety 危害检测功能,还可以检查您在资源中配置的自定义黑名单。 文本审核适用于以下场景:
  • 在模型调用前拦截有害的用户输入
  • 在模型输出到达最终用户之前进行筛选
  • 在受监管或企业级部署中强制执行自定义黑名单
  • 组合具有不同类别和方向设置的多次审核流程
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import AzureContentModerationMiddleware

middleware = AzureContentModerationMiddleware(
    project_endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
    credential=DefaultAzureCredential(),
    categories=["Hate", "SelfHarm", "Sexual", "Violence"],
    severity_threshold=4,
    exit_behavior="error",
    apply_to_input=True,
    apply_to_output=True,
)
categories
list[str] | None
要分析的危害类别。有效值为 'Hate''SelfHarm''Sexual''Violence'。默认为所有四个类别。
severity_threshold
int
default:"4"
触发配置行为的最低严重程度评分,范围从 06
exit_behavior
string
default:"error"
可选值包括 'error''continue''replace'
apply_to_input
bool
default:"True"
是否在智能体运行前筛选最后的 HumanMessage
apply_to_output
bool
default:"True"
是否在智能体运行后筛选最后的 AIMessage
blocklist_names
list[str] | None
在您的 Azure Content Safety 资源中配置的自定义黑名单名称。
context_extractor
Callable | None
可选的可调用对象,用于从智能体状态和运行时中提取待筛选的文本。

图像审核

当您的智能体处理视觉内容时,请使用 AzureContentModerationForImagesMiddleware。它从最新的输入或输出消息中提取图像,并使用 Azure AI Content Safety 图像分析 API 对其进行筛选。 此中间件支持:
  • Base64 数据 URL,例如 data:image/png;base64,...
  • 公共 HTTP(S) 图像 URL
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import (
    AzureContentModerationForImagesMiddleware,
)

middleware = AzureContentModerationForImagesMiddleware(
    endpoint="https://<resource>.cognitiveservices.azure.com/",
    credential=DefaultAzureCredential(),
    categories=["Hate", "SelfHarm", "Sexual", "Violence"],
    severity_threshold=4,
    exit_behavior="error",
    apply_to_input=True,
    apply_to_output=False,
)
categories
list[str] | None
要分析的图像危害类别。默认为所有四个支持的类别。
severity_threshold
int
default:"4"
触发配置行为的最低严重程度评分,范围从 06
exit_behavior
string
default:"error"
可选值包括 'error''continue'
apply_to_input
bool
default:"True"
是否筛选最新 HumanMessage 中的图像。
apply_to_output
bool
default:"False"
是否筛选最新 AIMessage 中的图像。
context_extractor
Callable | None
可选的可调用对象,用于从智能体状态和运行时中提取图像。

提示词防护

使用 AzurePromptShieldMiddleware 检测用户提示词和可选辅助文档中的提示词注入。默认情况下仅筛选输入,因为提示词注入通常是输入侧攻击,但您也可以启用输出筛选。
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import AzurePromptShieldMiddleware

middleware = AzurePromptShieldMiddleware(
    project_endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
    credential=DefaultAzureCredential(),
    exit_behavior="continue",
    apply_to_input=True,
    apply_to_output=False,
)
exit_behavior
string
default:"error"
可选值包括 'error''continue''replace'
apply_to_input
bool
default:"True"
是否在智能体运行前筛选最新的 HumanMessage
apply_to_output
bool
default:"False"
是否在智能体运行后筛选最新的 AIMessage
context_extractor
Callable | None
可选的可调用对象,用于从智能体状态和运行时中提取用户提示词和事实依据文档。

受保护材料

使用 AzureProtectedMaterialMiddleware 检测受保护的内容,例如受版权保护的文本或代码。此中间件可同时筛选最新的用户输入和最新的模型输出。
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import AzureProtectedMaterialMiddleware

middleware = AzureProtectedMaterialMiddleware(
    endpoint="https://<resource>.cognitiveservices.azure.com/",
    credential=DefaultAzureCredential(),
    type="code",
    exit_behavior="replace",
    apply_to_input=False,
    apply_to_output=True,
    violation_message="检测到受保护材料。请提供更高阶的摘要。",
)
type
string
default:"text"
要筛选的内容类型:'text''code'
exit_behavior
string
default:"error"
可选值包括 'error''continue''replace'
apply_to_input
bool
default:"True"
是否筛选最新的 HumanMessage
apply_to_output
bool
default:"True"
是否筛选最新的 AIMessage
context_extractor
Callable | None
可选的可调用对象,用于从智能体状态和运行时中提取文本。

事实依据性

使用 AzureGroundednessMiddleware 评估模型响应是否基于智能体可用的上下文。与此页面上的其他中间件类不同,事实依据性在模型生成后运行,并根据支持源检查生成的答案。 默认情况下,事实依据性会从当前对话中收集来源,包括系统内容、工具输出以及附加到模型响应的相关注释。
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.agents.middleware import AzureGroundednessMiddleware

middleware = AzureGroundednessMiddleware(
    project_endpoint="https://<resource>.services.ai.azure.com/api/projects/<project>",
    credential=DefaultAzureCredential(),
    domain="Generic",
    task="QnA",
    exit_behavior="continue",
)
domain
string
default:"Generic"
分析领域。支持的值包括 'Generic''Medical'
task
string
default:"Summarization"
分析的任务类型。支持的值包括 'Summarization''QnA'
exit_behavior
string
default:"error"
可选值包括 'error''continue'
context_extractor
Callable | None
可选的可调用对象,用于从智能体状态和运行时中提取答案、事实依据源以及可选的问题。

API 参考

有关完整的公共 API,请参阅 langchain_azure_ai.agents.middleware 中的中间件导出,以及 langchain_azure_ai.agents.middleware.content_safety 中的底层 Content Safety 中间件包。