你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure OpenAI 包括与核心模型一起使用的内容筛选系统,包括图像生成模型。 此系统通过一组分类模型运行提示和完成,这些模型旨在检测和防止有害内容的输出。 内容筛选系统会在输入提示和输出补全中检测特定类别的潜在有害内容并对其采取措施。 API 配置和应用程序设计的变化可能会影响补全,从而影响筛选行为。
重要
内容筛选系统适用于Azure 直接销售的所有模型,但不适用于由音频模型(如 Whisper)处理的提示和完成。 有关详细信息,请参阅 Azure OpenAI 中的音频模型。
除了内容筛选系统外,Azure OpenAI 还会执行监视操作,以检测表明可能在以违反适用产品条款的方式使用该服务的内容和行为。 如需详细了解和缓解与应用程序相关的风险,请参阅 Azure OpenAI 透明度说明。 有关如何处理内容筛选和滥用监视的数据的详细信息,请参阅 Azure OpenAI 的数据、隐私和安全性。
本节中的文章提供有关内容筛选类别、筛选严重性级别及其可配置性的信息,以及应用程序设计和实现中要考虑的 API 方案。
注释
我们不会出于内容筛选目的存储提示或补全。 我们不会在未经用户同意的情况下使用提示或完成来训练、重新训练或改进内容筛选系统。 有关详细信息,请参阅数据、隐私和安全性。
内容筛选器类型
Azure OpenAI 中集成的内容筛选系统包含:
- 旨在检测和筛选有害内容的神经多类分类模型。 这些模型涵盖四种严重性级别(安全、低、中、高)的四类(仇恨、性、暴力和自我伤害)。 检测到的“安全”严重级别内容在注释中进行了标记,但不受筛选,也不可配置。
- 其他可选分类模型,旨在检测文本和代码的越狱风险和已知内容。 这些模型是二进制分类器,可标记用户或模型行为是否符合越狱攻击的条件或与已知文本或源代码相匹配。 这些模型的使用是可选的,但客户版权承诺范围可能需要使用受保护的材料代码模型。
筛选类别
下表汇总了 Azure OpenAI 的内容筛选系统支持的风险类别。
| 类别 | DESCRIPTION |
|---|---|
| 仇恨和公平 | 与仇恨和公平相关的伤害是指任何基于个人或身份群体的某些区别性属性攻击或使用歧视性语言的内容。 这包括,但不限于:
|
| 性 | 性指的是与以下方面相关的语言:解剖器官和生殖器、恋爱关系与性行为、以色情或情爱用语描述的行为(包括被描述为攻击或违背个人意愿的强迫性暴力行为的情况)。 包括但不限于:
|
| 暴力 | 暴力是指与旨在伤害、损伤、损害或杀害某人或某物的肢体动作相关的语言,以及与武器、枪支和相关实体相关的语言。 这包括但不限于:
|
| 自我伤害 | 自残指的是与故意伤害、损伤、损害某人身体或自杀的身体行为相关的语言。 这包括但不限于:
|
| 用户指令攻击行为 | 用户提示攻击是一种用户提示,目的是诱使生成式 AI 模型表现出其训练时要避免的行为,或者打破系统消息中所设定规则。 这种攻击涵盖从复杂的角色扮演到对安全目标的微妙破坏等各种形式。 |
| 间接攻击 | 间接攻击(也称为间接提示攻击或跨域提示注入攻击)是一种潜在的漏洞,其中第三方会将恶意指令置于生成式 AI 系统可以访问和处理的文档中。 需要文档嵌入和格式设置。 |
| 有据性2 | 有据性检测指示大型语言模型 (LLM) 的文本响应是否以用户提供的源材料为依据。 无据性材料是指 LLM 生成的信息与源材料中的信息不符或不准确。 需要文档嵌入和格式设置。 |
| 受保护的文本材料1 | 受保护的材料文本描述可由大型语言模型输出的已知文本内容(例如,歌词、文章、食谱和选定的网络内容)。 |
| 代码保护材料 | 受保护的材料代码描述与公共存储库中的一组源代码相匹配的源代码,这些源代码可由大型语言模型输出,而无需适当引用源存储库。 |
| 个人身份信息(PII) | 个人身份信息(PII)是指可用于标识特定个人的任何信息。 PII 检测涉及分析 LLM 完成中的文本内容,并筛选返回的任何 PII。 |
1 如果你是文本材料的所有者,并且想要提交文本内容以进行保护,请提交请求。
2 在非流式处理方案中不可用;仅适用于流式处理方案。 以下区域支持有据性检测:美国中部、美国东部、法国中部和加拿大东部
方案详细信息
当内容筛选系统检测到有害内容时,你将在 API 调用中收到错误消息(如果提示内容被视为不当内容);或者响应中的 finish_reason 将为 content_filter,以表示筛选掉了部分补全内容。 生成应用程序或系统时,你需要考虑到这些会对 Completions API 返回的内容进行筛选的情况,这种筛选可能会导致内容不完整。 如何处理这些信息将取决于具体的应用程序。 该行为可以概括为以下几点:
- 被归类为筛选类别和严重性级别的提示将返回 HTTP 400 错误。
- 筛选内容时,非流式传输补全调用不会返回任何内容。
finish_reason的值被设置为 "content_filter"。 在极少数响应时间较长的情况下,可能会返回部分结果。 在这些情况下,会更新finish_reason。 - 对于流式传输补全调用,段会在补全后返回给用户。 服务会继续进行流式处理,直到达到停止令牌、长度,或者检测到分类为某个筛选类别和严重性级别的内容。
场景:你发送了非流式处理补全调用,要求提供多个输出;没有分类为某个筛选类别和严重性级别的内容
下表概述了内容筛选可能出现的各种方式:
| HTTP 响应代码 | 响应行为 |
|---|---|
| 200 | 当所有代代都按配置传递筛选器时,响应不包括内容审查详细信息。 每个生成的 finish_reason 都是 stop 或 length。 |
请求负载示例:
{
"prompt":"Text example",
"n": 3,
"stream": false
}
响应 JSON 示例:
{
"id": "example-id",
"object": "text_completion",
"created": 1653666286,
"model": "davinci",
"choices": [
{
"text": "Response generated text",
"index": 0,
"finish_reason": "stop",
"logprobs": null
}
]
}
场景:你的 API 调用请求多个响应 (N>1) 并至少有 1 个响应进行了筛选
| HTTP 响应代码 | 响应行为 |
|---|---|
| 200 | 被筛选的生成将具有 finish_reason 值 content_filter。 |
请求负载示例:
{
"prompt":"Text example",
"n": 3,
"stream": false
}
响应 JSON 示例:
{
"id": "example",
"object": "text_completion",
"created": 1653666831,
"model": "ada",
"choices": [
{
"text": "returned text 1",
"index": 0,
"finish_reason": "length",
"logprobs": null
},
{
"text": "returned text 2",
"index": 1,
"finish_reason": "content_filter",
"logprobs": null
}
]
}
场景:将不恰当的输入提示发送到补全 API(用于流式传输或非流式传输)
| HTTP 响应代码 | 响应行为 |
|---|---|
| 400 | 当提示按配置触发内容筛选器时,API 调用将失败。 修改提示,然后重试。 |
请求负载示例:
{
"prompt":"Content that triggered the filtering model"
}
响应 JSON 示例:
"error": {
"message": "The response was filtered",
"type": null,
"param": "prompt",
"code": "content_filter",
"status": 400
}
场景:你进行了流式处理补全调用;没有分类为某个筛选类别和严重性级别的输出内容
| HTTP 响应代码 | 响应行为 |
|---|---|
| 200 | 在这种情况下,调用流会返回完整的生成内容,并且对于每个生成的响应,finish_reason要么是length,要么是stop。 |
请求负载示例:
{
"prompt":"Text example",
"n": 3,
"stream": true
}
响应 JSON 示例:
{
"id": "cmpl-example",
"object": "text_completion",
"created": 1653670914,
"model": "ada",
"choices": [
{
"text": "last part of generation",
"index": 2,
"finish_reason": "stop",
"logprobs": null
}
]
}
场景:你进行了流式处理补全调用,要求提供多份补全内容,并且至少筛选掉了部分输出内容
| HTTP 响应代码 | 响应行为 |
|---|---|
| 200 | 对于给定的生成索引,生成的最后一个区块会包含一个非 null 的 finish_reason 值。 筛选生成时,该值为 content_filter。 |
请求负载示例:
{
"prompt":"Text example",
"n": 3,
"stream": true
}
响应 JSON 示例:
{
"id": "cmpl-example",
"object": "text_completion",
"created": 1653670515,
"model": "ada",
"choices": [
{
"text": "Last part of generated text streamed back",
"index": 2,
"finish_reason": "content_filter",
"logprobs": null
}
]
}
场景:内容筛选系统未在补全内容上运行
| HTTP 响应代码 | 响应行为 |
|---|---|
| 200 | 如果内容筛选系统出现故障或无法及时完成操作,请求仍将在不经过内容筛选的情况下完成。 可以通过在 content_filter_results 对象中查找错误消息,来确认筛选是否未被应用。 |
请求负载示例:
{
"prompt":"Text example",
"n": 1,
"stream": false
}
响应 JSON 示例:
{
"id": "cmpl-example",
"object": "text_completion",
"created": 1652294703,
"model": "ada",
"choices": [
{
"text": "generated text",
"index": 0,
"finish_reason": "length",
"logprobs": null,
"content_filter_results": {
"error": {
"code": "content_filter_error",
"message": "The contents are not filtered"
}
}
}
]
}
最佳做法
在应用程序的设计中,请考虑以下最佳做法,以提供积极的应用程序体验,同时最大程度地减少潜在危害:
- 确定您希望如何处理用户发送的提示中包含被过滤的类别和严重性级别的内容或以其他方式滥用应用程序的情形。
- 检查
finish_reason以查看是否已完成筛选。 - 检查
content_filter_results中是否没有错误对象(表示未运行内容筛选)。 - 如果在注释模式下使用受保护的材料代码模型,请在应用程序中显示代码时显示引文 URL。
相关内容
- 了解 内容筛选类别和严重性级别。
- 详细了解 支持 Azure OpenAI 的基础模型。
- 通过此表单申请修改后的内容筛选。
- Azure OpenAI 内容筛选由 Azure AI 内容安全提供支持。
- 详细了解和缓解与应用程序相关的风险:Azure OpenAI 模型的负责任 AI 做法概述。
- 详细了解如何处理与内容筛选和滥用监视相关的数据: Azure OpenAI 的数据、隐私和安全性。