你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

内容筛选

重要

内容筛选系统不应用于 Azure OpenAI 服务中的 Whisper 模型处理的提示和补全。 详细了解 Azure OpenAI 中的 Whisper 模型

Azure OpenAI 服务包括一个与核心模型协同工作的内容筛选系统。 该系统通过一系列分类模型来运行提示和补全,旨在检测和防止有害内容的输出。 内容筛选系统会在输入提示和输出补全中检测特定类别的潜在有害内容并对其采取措施。 API 配置和应用程序设计的变化可能会影响补全,从而影响筛选行为。

内容筛选模型针对以下语言进行了关于仇恨、性、暴力和自我伤害类别的专门训练和测试:英语、德语、日语、西班牙语、法语、意大利语、葡萄牙语和中文。 但是,该服务可以使用许多其他语言,但质量可能会有所不同。 在所有情况下,都应执行自己的测试,以确保它适用于你的应用程序。

除了内容筛选系统外,Azure OpenAI 服务还会执行监视操作,以检测表明可能在以违反适用产品条款的方式使用该服务的内容和/或行为。 如需详细了解和缓解与应用程序相关的风险,请参阅 Azure OpenAI 透明度说明。 如需详细了解系统如何处理与内容筛选和滥用情况监视相关的数据,请参阅 Azure OpenAI 服务的数据、隐私和安全性

以下部分提供了有关内容筛选类别、筛选严重性级别及其可配置性以及要在应用程序设计和实现中考虑的 API 方案的信息。

内容筛选类别

Azure OpenAI 服务中集成的内容筛选系统包含:

  • 用于检测和筛选有害内容的神经多类分类模型;这些模型涵盖了四个类别(仇恨、性、暴力和自残)的四个严重性级别(安全、低、中等、高)。 检测到的“安全”严重级别内容在注释中进行了标记,但不受筛选,也不可配置。
  • 其他可选分类模型,旨在检测越狱风险以及文本和代码的已知内容;这些模型是二进制分类器,用于标记用户或模型行为是否限定为越狱攻击或者与已知文本或源代码匹配。 这些模型的使用是可选的,但客户版权承诺范围可能需要使用受保护的材料代码模型。

有害类别

类别 说明
仇恨和公平 仇恨和公平相关的伤害指的是基于个人或身份群体的某些区别性属性(包括但不限于种族、民族、国籍、性别认同群体和表现、性取向、宗教、移民身份、残疾、个人外貌和体型)攻击或运用贬义性或歧视性语言的任何内容。 

公平涉及确保 AI 系统公平对待所有群体,而不会加剧现有的社会不平等。 与仇恨言论类似,公平相关的伤害取决于对身份群体的不同待遇。  
性指的是与以下方面相关的语言:解剖器官和生殖器、恋爱关系、以色情或情爱用语描述的行为、怀孕、身体上的性行为(包括被描述为攻击或违背个人意愿的强迫性暴力行为的行为)、卖淫、色情和虐待。  
暴力 暴力指的是与旨在伤害、损伤、损害或杀害某人或某物的肢体动作相关的语言,以及与武器、枪支和相关实体(例如,制成品、协会、法律等)相关的语言。
自残 自残指的是与故意伤害、损伤、损害某人身体或自杀的身体行为相关的语言。
越狱风险 越狱攻击是用户提示,旨在激怒生成式 AI 模型展示它训练的行为,以避免或打破系统消息中设置的规则。 这种攻击可以是复杂的角色扮演,也可以是对安全目标的微妙颠覆。
受保护的文本材料* 受保护的材料文本描述可由大型语言模型输出的已知文本内容(例如,歌词、文章、食谱和选定的网络内容)。
受保护的代码材料 受保护的材料代码描述与公共存储库中的一组源代码相匹配的源代码,这些源代码可由大型语言模型输出,而无需适当引用源存储库。

*如果你是文本材料的所有者,并且想要提交文本内容以进行保护,请 提交请求

文本内容

警告

本文档中的严重性定义选项卡包含可能对某些读者造成干扰的有害内容示例。

图像内容

警告

本文档中的严重性定义选项卡包含可能对某些读者造成干扰的有害内容示例。

可配置性(预览版)

默认内容筛选配置设置为在提示和完成的所有四个内容危害类别的中等严重性阈值下进行筛选。 这意味着,在中等严重性级别或高严重性级别检测到的内容将被筛选,而在低严重性级别检测到的内容则不会受到内容筛选器的筛选。 可配置性功能在预览中可用,允许客户分别调整提示和完成设置,以便按不同的严重性级别筛选每个内容类别的内容,如下表所示:

已筛选严重性 针对提示可配置 针对补全可配置 说明
低、中、高 最严格的筛选配置。 检测到的严重性级别为低、中和高的内容将被筛选。
中、高 默认设置。 检测到的严重性级别为低的内容不会被筛选,中和高的内容会被筛选。
检测到的严重性级别为低和中的内容不会被筛选。 仅筛选严重性级别为高的内容。
无筛选器 如果获得批准* 如果获得批准* 无论检测到的严重性级别如何,都不会筛选任何内容。 需要批准*

* 只有已批准修改内容筛选的客户才具有完整的内容筛选控制,并且可以部分或完全关闭内容筛选器。 内容筛选控制不适用于 DALL-E(预览)或 GPT-4 Turbo with Vision(预览)的内容筛选器。 使用此表格申请修改的内容筛选器:Azure OpenAI 受限访问评审:修改的内容筛选器 (microsoft.com)

客户负责确保集成 Azure OpenAI 的应用程序符合行为准则

内容筛选配置在 Azure AI Studio 中的资源中创建,并且可以与部署相关联。 请在此处详细了解可配置型

方案详细信息

当内容筛选系统检测到有害内容时,你将在 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_reasoncontent_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_result 对象中查找错误消息来确定是否应用了筛选。

示例请求有效负载:

{
    "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_result": {
                "error": {
                    "code": "content_filter_error",
                    "message": "The contents are not filtered"
                }
            }
        }
    ]
}

批注

内容筛选器

如下面的代码片段所示,启用注释后,将通过 API 返回类别(仇恨和公平、性、暴力和自残)的以下信息:

  • 内容筛选类别(仇恨、性、暴力、自残)
  • 每个内容类别中的严重性级别(安全、低、中或高)
  • 筛选状态(true 或 false)。

可选模型

可选模型可以在注释(在标记但未筛选内容时返回信息)或筛选模式(在标记并筛选内容时返回信息)中启用。

如以下代码片段所示,启用注释后,API 将返回可选模型越狱风险、受保护材料文本和受保护材料代码的以下信息:

  • 类别 (越狱、受保护的材料文本、受保护的材料代码)、
  • 已检测(True 或 False)、
  • 已筛选(True 或 False)。

对于受保护的材料代码模型,API 将返回以下附加信息:

  • 在其中找到代码片段的公共 GitHub 存储库的示例引文
  • 存储库的许可证。

在应用程序中显示代码时,强烈建议应用程序也显示注释中的示例引文。 对于客户版权承诺范围,也可能需要遵守引用的许可证。

注释目前在 GA API 版本 2024-02-01 以及从 2023-06-01-preview 预览版开始的补全和聊天补全(GPT 模型)的所有预览版本中可用。 以下代码片段演示了如何使用注释:

# os.getenv() for the endpoint and key assumes that you are using environment variables.

import os
from openai import AzureOpenAI
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-03-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") 
    )

response = client.completions.create(
    model="gpt-35-turbo-instruct", # model = "deployment_name".
    prompt="{Example prompt where a severity level of low is detected}" 
    # Content that is detected at severity level medium or high is filtered, 
    # while content detected at severity level low isn't filtered by the content filters.
)

print(response.model_dump_json(indent=2))

输出

{ 
  "choices": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "protected_material_code": { 
          "citation": { 
            "URL": " https://github.com/username/repository-name/path/to/file-example.txt", 
            "license": "EXAMPLE-LICENSE" 
          }, 
          "detected": true,
          "filtered": false 
        }, 
        "protected_material_text": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "finish_reason": "stop", 
      "index": 0, 
      "message": { 
        "content": "Example model response will be returned ", 
        "role": "assistant" 
      } 
    } 
  ], 
  "created": 1699386280, 
  "id": "chatcmpl-8IMI4HzcmcK6I77vpOJCPt0Vcf8zJ", 
  "model": "gpt-35-turbo-instruct", 
  "object": "text.completion",
  "usage": { 
    "completion_tokens": 40, 
    "prompt_tokens": 11, 
    "total_tokens": 417 
  },  
  "prompt_filter_results": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "jailbreak": { 
          "detected": false, 
          "filtered": false 
        }, 
        "profanity": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "prompt_index": 0 
    } 
  ]
} 

如需详细了解 Azure OpenAI 的推理 REST API 终结点以及如何创建聊天和补全内容,请按照 Azure OpenAI 服务 REST API 参考指南中的说明进行操作。 使用从 2023-06-01-preview 开始的任何预览版 API 以及 GA API 版本 2024-02-01 时,都会返回所有场景的注释。

示例场景:输入提示中包含分类为某个筛选类别和严重性级别的内容,且该提示将发送到 Completions API

{
    "error": {
        "message": "The response was filtered due to the prompt triggering Azure Content management policy. 
                   Please modify your prompt and retry. To learn more about our content filtering policies
                   please read our documentation: https://go.microsoft.com/fwlink/?linkid=21298766",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400,
        "innererror": {
            "code": "ResponsibleAIPolicyViolation",
            "content_filter_result": {
                "hate": {
                    "filtered": true,
                    "severity": "high"
                },
                "self-harm": {
                    "filtered": true,
                    "severity": "high"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered":true,
                    "severity": "medium"
                }
            }
        }
    }
}

内容流式处理

本部分介绍 Azure OpenAI 内容流式处理体验和选项。 通过审批,你可以选择在生成内容时从 API 接收内容,而不是等待已验证的内容区块通过内容筛选器。

默认

内容筛选系统已集成并默认为所有客户启用。 在默认流式处理方案中,完成内容会被缓冲,内容筛选系统在缓冲的内容上运行。如果内容不违反内容筛选策略(Microsoft 的默认或自定义用户配置),则内容会返回给用户,否则会立即被阻止,返回内容筛选错误,而不返回有害的完成内容,具体取决于内容筛选配置。 重复此过程,直到流结束。 内容在返回给用户之前根据内容筛选策略进行了全面审查。 在这种情况下,内容不是按标记返回,而是以相应缓冲区大小的“内容区块”形式返回。

异步的已修改筛选器

已获准使用已修改内容筛选器的客户可以选择异步的已修改筛选器作为附加选项,它提供新的流式处理体验。 在这种情况下,内容筛选器异步运行,完成内容会立即返回,提供流畅的按标记流式处理体验。 没有内容被缓冲,这样就可以实现零延迟。

客户必须意识到,虽然该功能改善了延迟,但它会在涉及模型输出的较小部分的安全性和实时审查方面带来弊端。 由于内容筛选器是异步运行的,因此内容审核消息和违反策略信号会出现延迟现象,这意味着本来会立即筛选的有害内容的某些部分可能会显示给用户。

注释:注释和内容审核消息会在流式处理期间持续返回。 我们强烈建议在应用中使用注释并实施额外的 AI 内容安全机制,例如编辑内容或为用户返回额外的安全信息。

内容筛选信号:内容筛选错误信号有延迟。 如果出现违反策略的情况,则会在它可用时立即返回它,并停止流。 内容筛选信号保证在约 1,000 个字符的违反策略内容窗口内。

访问异步的已修改筛选器需要获准使用已修改的内容筛选。 可在此处找到该应用程序。 若要在 Azure OpenAI Studio 中启用它,请按照内容筛选器操作指南中的说明创建新的内容筛选配置,并在“流式处理”部分选择“异步的已修改筛选器”。

内容筛选模式比较

比较 流式处理 - 默认设置 流式处理 - 异步的已修改筛选器
状态 GA 公共预览版
资格 所有客户 批准使用已修改的内容筛选的客户
如何启用 默认启用,无需执行任何操作 批准使用已修改的内容筛选的客户可以直接在 Azure OpenAI Studio 中配置它(作为内容筛选配置的一部分,应用于部署级别)
模态和可用性 文本;所有 GPT 模型 文本;除 gpt-4-vision 之外的所有 GPT 模型
流式处理体验 内容被缓冲并以区块的形式返回 零延迟(无缓冲,筛选器异步运行)
内容筛选信号 即时筛选信号 延迟筛选信号(增量最多为大约 1,000 个字符)
内容筛选配置 支持默认的和任何客户定义的筛选器设置(包括可选模型) 支持默认的和任何客户定义的筛选器设置(包括可选模型)

注释和示例响应

提示注释消息

这与默认注释相同。

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

完成标记消息

完成消息会立即转发。 不先进行任何审核,并且最初不提供任何注释。

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

注释消息

文本字段将始终为空字符串,表示没有新标记。 注释仅与已发送标记相关。 可能有多个注释消息引用相同的标记。

"start_offset""end_offset" 是文本中的低粒度偏移(提示开头为 0),用于标记注释与哪个文本相关。

"check_offset" 表示已经过完全审核的文本量。 它是未来注释的 "end_offset" 值的独占性下限。 它是非递减的。

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

示例响应流(通过筛选器)

下面是使用异步的已修改筛选器的真实聊天完成响应。 注意提示注释是如何保持不变状态的;发送完成标记时不带注释;新的注释消息在没有标记的情况下发送,改为与某些内容筛选器偏移相关联。

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

示例响应流(被筛选器阻止)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

重要

当针对某个提示触发了内容筛选并且在响应中收到了 "status": 400 时,由于服务对提示进行了评估,因此可能会对此请求收费。 当收到了 "status":200 以及 "finish_reason": "content_filter" 时,也会产生费用。 在这种情况下,提示没有任何问题,但检测到模型生成的响应违反了内容筛选规则,导致响应被筛选。

最佳实践

在应用程序的设计中,请考虑以下最佳做法,以提供积极的应用程序体验,同时最大程度地减少潜在危害:

  • 确定你希望如何处理用户发送的提示中包含分类为某个筛选类别和严重性级别的内容或者用户滥用应用程序的情况。
  • 检查 finish_reason 以查看是否已完成筛选。
  • 检查 content_filter_result 中是否没有错误对象(表示未运行内容筛选)。
  • 如果在注释模式下使用受保护的材料代码模型,请在应用程序中显示代码时显示引文 URL。

后续步骤