コンテンツのフィルター処理

重要

コンテンツ フィルタリング システムは、Azure OpenAI Service の Whisper モデルによって処理されるプロンプトと入力候補には適用されません。 Azure OpenAI の Whisper モデルの詳細を確認してください。

Azure OpenAI Service には、コア モデルと共に動作するコンテンツ フィルタリング システムが含まれています。 このシステムは、プロンプトと入力候補の両方において、有害なコンテンツ出力の検出と防止を目的とした、分類モデルのアンサンブルを経由して実行することで機能します。 コンテンツ フィルタリング システムは、入力プロンプトと (出力される) 入力候補の両方で、有害な可能性があるコンテンツ特有のカテゴリを検出し、アクションを実行します。 API 構成とアプリケーション設計のバリエーションは、入力候補に影響を与え、したがってフィルター処理の動作にも影響を与える場合があります。

憎悪、性的、暴力、自傷行為のカテゴリに対するコンテンツ フィルター処理モデルは、英語、ドイツ語、日本語、スペイン語、フランス語、イタリア語、ポルトガル語、中国語でトレーニングおよびテストされています。 サービスはその他の多くの言語でも利用いただけます (品質は言語によって異なる場合があります)。 いずれの場合も、独自のテストを実行して、アプリケーションに対して動作することを確認する必要があります。

コンテンツ フィルタリング システムに加えて、Azure OpenAI Service では、監視を実行して、適用される製品条件に違反する可能性がある方法でのサービス使用を示唆するコンテンツや動作を検出します。 アプリケーションに関連するリスクの理解と軽減策について詳しくは、「Azure OpenAI の透過性のためのメモ」をご覧ください。 コンテンツ フィルタリングと不正使用の監視のためのデータ処理方法について詳しくは、「Azure OpenAI Service のデータ、プライバシー、セキュリティ」を参照してください。

次のセクションでは、アプリケーションの設計と実装において考慮するべきコンテンツ フィルタリングのカテゴリ、フィルタリングの重大度レベル、これらの構成可能性、API シナリオに関する情報について説明します。

コンテンツ フィルタリングのカテゴリ

Azure OpenAI Service に統合されたコンテンツ フィルタリング システムには、次の内容が含まれます。

  • 有害なコンテンツの検出とフィルタリングを目的としたニューラルマルチクラス分類モデル。モデルは、4 つの重大度レベル (安全、低、中、高) の 4 つのカテゴリ (憎悪、性的、暴力、自傷行為) をカバーします。 '安全' という重大度レベルで検出されたコンテンツは注釈でラベル付けされますが、フィルタリングの対象ではなく、構成もできません。
  • テキストとコードのための脱獄リスクと既知のコンテンツの検出を目的としたその他のオプションの分類モデルは、ユーザーまたはモデルの動作が脱獄攻撃として修飾するか、または既知のテキストまたはソース コードに一致するかどうかフラグを設定するバイナリ分類器です。 これらのモデルの使用は省略可能ですが、保護されたマテリアル コード モデルの使用は、Customer Copyright Commitment カバレッジが要求される場合があります。

危害のカテゴリ

カテゴリ 説明
ヘイトと公平性 ヘイトと公平性に関連する危害カテゴリは、人種、民族、国籍、性同一性と性表現、性的指向、宗教、在留資格、能力状態、容姿、体格などを含む (ただしこれらに限定せず)、これらのグループ特有の識別属性に基づいて、個人またはアイデンティティ グループに関連した、軽蔑的または差別的な言葉を含む、コンテンツの使用を指します。 

公平性は、AI システムが既存の社会の不公平を助長することなく、すべてのグループの人々を公平に扱うことを保証することです。 ヘイトスピーチと同様に、公平性関連の危害は、アイデンティティ グループに対する不公平な扱いに左右されます。  
性的 性的とは、解剖学的臓器や生殖器、恋愛関係、性愛的または情愛的な用語で描写された行為、妊娠、物理的な性的行為 (暴行または意志に反した強制的な性的暴力行為として描写されたものを含む)、売春、ポルノ、虐待に関連する言葉を表します。  
暴力 暴力とは、人や何かに苦痛を与える、傷つける、損傷を与える、殺害することを意図した物理的な行動に関連する言葉、または武器、銃、関連エンティティ (製造業者、協会、法律など) などを表します。
自傷行為 自傷行為とは、故意に自分の体に苦痛を与える、傷つける、損傷を与える、または自殺を意図した物理的な行為に関連する言葉を表します。
脱獄のリスク 脱獄攻撃は、システム メッセージに設定されたルールを回避または中断するようにトレーニングされた動作を生成 AI モデルに示させる目的で設計されたユーザー プロンプトです。 こうした攻撃は、複雑なロールプレイから安全目標の巧妙な裏切りまで、さまざまです。
テキスト用保護済み素材* 保護済み素材テキストは、大規模言語モデルによって出力される可能性のある既知のテキスト コンテンツ (曲の歌詞、記事、レシピ、一部の Web コンテンツなど) を記述するものです。
コード用保護済み素材 保護済み素材コードは、ソース リポジトリを適切に引用することなく大規模言語モデルによって出力される可能性のある、パブリック リポジトリからの一連のソース コードと一致するソース コードを記述するものです。

*テキスト素材の所有者であり、保護のためにテキスト コンテンツを送信する場合は、要求を提出してください。

テキスト コンテンツ

警告

このドキュメントの [重大度の定義] タブには、一部の読者が不快に感じる可能性のある有害なコンテンツの例が含まれています。

画像コンテンツ

警告

このドキュメントの [重大度の定義] タブには、一部の読者が不快に感じる可能性のある有害なコンテンツの例が含まれています。

構成可能性 (プレビュー)

既定のコンテンツ フィルタリング構成は、プロンプトと入力候補の両方で、4 つのコンテンツ 有害度カテゴリのすべてに対して "中" の重大度しきい値でフィルター処理するように設定されています。 つまり、重大度レベルが中または高で検出されたコンテンツはコンテンツ フィルターによってフィルター処理されますが、重大度レベルが低で検出されたコンテンツはフィルター処理されません。 この構成可能性機能はプレビューで利用可能であり、下の表に示すような、さまざまな重大度レベルでコンテンツ カテゴリごとにコンテンツをフィルタリングするために、プロンプトと入力候補それぞれに対する設定を調整できます。

フィルタリングされた重大度 プロンプト用に構成可能 入力候補用に構成可能 説明
[低]、[中]、[高] はい はい 最も厳密なフィルタリング構成。 重大度レベルが低、中、高で検出されたコンテンツはフィルタリングされます。
中、高 はい はい 既定の設定。 低い重大度レベルの検出されたコンテンツはフィルター処理されず、中および高のコンテンツはフィルター処理されます。
はい はい 重大度レベルが低および中で検出されたコンテンツはフィルター処理されません。 重大度レベルが高のコンテンツのみがフィルタリングされます。
フィルターなし 承認された場合* 承認された場合* 重大度レベルの検出に関係なく、コンテンツはフィルタリングされません。 承認が必要*

* 変更されたコンテンツ フィルタリングを承認されたお客様のみコンテンツのフィルター処理を完全に制御でき、コンテンツ フィルターを部分的または完全にオフにできます。 コンテンツのフィルター処理の制御は、DALL-E (プレビュー) または GPT-4 Turbo with Vision (プレビュー) のコンテンツ フィルターには適用されません。 フォーム「Azure OpenAI 制限付きアクセス レビュー: 変更されたコンテンツのフィルター処理 (microsoft.com)」を使用して、変更されたコンテンツ フィルターを申請してください。

Azure OpenAI を統合するアプリケーションが倫理規定に準拠していることを確認する責任は、お客様にあります。

コンテンツ フィルタリング構成は、Azure AI Studio のリソース内に作成され、デプロイに関連付けることができます。 構成可能性の詳細については、こちらを参照してください

シナリオの詳細

コンテンツ フィルタリング システムが有害なコンテンツを検出した際、プロンプトが不適切と見なされた場合は、API 呼び出しでエラーを受け取るか、応答の finish_reasoncontent_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_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 によって返されます。

  • カテゴリ (jailbreak、protected_material_text、protected_material_code)、
  • 検出済み ([True] または [False])、
  • フィルター処理済み ([True] または [False])。

保護済みの素材コード モデルでは、次の追加情報が API から返されます。

  • コード スニペットが検出された GitHub 公開リポジトリの引用例
  • リポジトリのライセンス。

アプリケーションでコードを表示する場合は、アプリケーションで注釈の引用例も表示することを強くお勧めします。 また、お客様の著作権に関するコミットメントの適用を受けるために、引用ライセンスへの準拠が必要になる場合があります。

注釈は現在、GA API バージョン 2024-02-01 と、入力候補とチャット入力候補 (GPT モデル) の 2023-06-01-preview 以降のすべてのプレビュー バージョンで利用できます。 次のコード スニペットは、注釈の使用方法を示しています。

# 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 Service 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 の既定値またはカスタムのユーザー構成) に違反していない場合はコンテンツはユーザーに返され、そうでない場合は、有害な入力候補コンテンツを返さずに、すぐにブロックされてコンテンツ フィルタリング エラーを返します。 ストリームが終了するまで、このプロセスが繰り返されます。 コンテンツは、ユーザーに返される前に、コンテンツ フィルター ポリシーに従って完全に検査されます。 この場合、コンテンツはトークンごとに返されるのではなく、それぞれのバッファー サイズの "コンテンツ チャンク" 単位で返されます。

[Asynchronous Modified Filter] (非同期修正フィルター)

修正コンテンツ フィルターの承認を受けたお客様は、追加オプションとして非同期修正フィルターを選び、新しいストリーミング エクスペリエンスを指定できます。 この場合、コンテンツ フィルターは非同期で実行され、入力候補コンテンツはスムーズなトークンごとのストリーミング エクスペリエンスで即時に返されます。 バッファーに含まれるコンテンツがないため、待機時間がゼロになります。

お客様は、この機能により待機時間が短縮される一方、モデル出力の小さなセクションの安全性とリアルタイムの審査とのトレードオフになることに注意が必要があります。 コンテンツ フィルターは非同期で実行されるため、コンテンツ モデレーション メッセージとポリシー違反シグナルに遅延が生じます。つまり、通常はすぐにフィルター処理されるはずの有害なコンテンツの一部のセクションが、ユーザーに表示される可能性があります。

注釈: 注釈とコンテンツ モデレーション メッセージはストリーム中に継続的に返されます。 アプリで注釈を使い、追加の AI コンテンツ安全メカニズム (コンテンツを編集する、追加の安全情報をユーザーに返すなど) を実装することを強くお勧めします。

コンテンツ フィルタリング シグナル: コンテンツ フィルタリング エラー シグナルに遅延が生じます。 ポリシー違反が発生した場合は、使用可能になるとすぐに返され、ストリームは停止されます。 ポリシー違反が発生した場合、コンテンツ フィルタリング シグナルはポリシーに違反するコンテンツの最大 1,000 文字の範囲内で保証されます。

非同期修正フィルターへのアクセスには、変更されたコンテンツ フィルターの承認が必要です。 申請ページはこちらにあります。 Azure OpenAI Studio で有効にするには、コンテンツ フィルターの攻略ガイドに従って新しいコンテンツ フィルター構成を作成し、[ストリーミング] セクションで [Asynchronous Modified Filter] (非同期修正フィルター) を選択します。

コンテンツ フィルタリング モードの比較

比較 [ストリーミング] - 既定値 [ストリーミング] - [Asynchronous Modified Filter] (非同期修正フィルター)
Status 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 が受信されると、サービスによってプロンプトが評価されたときに、この要求に対して料金が発生する場合があります。 "finish_reason": "content_filter""status":200 が受信されたときにも料金が発生します。 この場合、プロンプトに問題はありませんでしたが、モデルによって生成された補完がコンテンツ フィルタリング規則に違反することが検出されたため、結果として補完がフィルター処理されます。

ベスト プラクティス

アプリケーション設計の一環として次のベスト プラクティスを検討し、潜在的な損害を最小限に抑えながら、アプリケーションで肯定的なエクスペリエンスを提供します。

  • フィルター処理されたカテゴリと重大度レベルで分類されるコンテンツを含むプロンプトをユーザーが送信したり、アプリケーションが悪用されたりするシナリオへの対応方法を決めます。
  • finish_reason をチェックして、入力候補がフィルター処理されたかどうかを確認します。
  • content_filter_result にエラー オブジェクトがないことをチェックします (コンテンツ フィルター処理が実行されなかったことを示します)。
  • 注釈モードで保護された素材コード モデルを使用している場合は、アプリケーションでコードを表示する場合に引用 URL を表示してください。

次のステップ