专为 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 的工作流提供了更好的默认值。在大多数设置中,您可以一次性设置环境变量,并在每次实例化中间件时省略 endpoint 或 project_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,
)
要分析的危害类别。有效值为 'Hate'、'SelfHarm'、'Sexual' 和 'Violence'。默认为所有四个类别。
触发配置行为的最低严重程度评分,范围从 0 到 6。
可选值包括 'error'、'continue' 或 'replace'。
是否在智能体运行前筛选最后的 HumanMessage。
是否在智能体运行后筛选最后的 AIMessage。
在您的 Azure Content Safety 资源中配置的自定义黑名单名称。
可选的可调用对象,用于从智能体状态和运行时中提取待筛选的文本。
图像审核
当您的智能体处理视觉内容时,请使用 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,
)
触发配置行为的最低严重程度评分,范围从 0 到 6。
可选值包括 'error' 或 'continue'。
是否筛选最新 HumanMessage 中的图像。
可选的可调用对象,用于从智能体状态和运行时中提取图像。
提示词防护
使用 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,
)
可选值包括 'error'、'continue' 或 'replace'。
是否在智能体运行前筛选最新的 HumanMessage。
是否在智能体运行后筛选最新的 AIMessage。
可选的可调用对象,用于从智能体状态和运行时中提取用户提示词和事实依据文档。
受保护材料
使用 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="检测到受保护材料。请提供更高阶的摘要。",
)
要筛选的内容类型:'text' 或 'code'。
可选值包括 'error'、'continue' 或 'replace'。
可选的可调用对象,用于从智能体状态和运行时中提取文本。
事实依据性
使用 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",
)
分析领域。支持的值包括 'Generic' 和 'Medical'。
task
string
default:"Summarization"
分析的任务类型。支持的值包括 'Summarization' 和 'QnA'。
可选值包括 'error' 或 'continue'。
可选的可调用对象,用于从智能体状态和运行时中提取答案、事实依据源以及可选的问题。
API 参考
有关完整的公共 API,请参阅 langchain_azure_ai.agents.middleware 中的中间件导出,以及 langchain_azure_ai.agents.middleware.content_safety 中的底层 Content Safety 中间件包。
通过这些文档 连接至 Claude、VSCode 等,并通过 MCP 获取实时答案。