Azure OpenAI には、イメージ生成モデルを含むコア モデルと共に動作するコンテンツ フィルタリング システムが含まれています。 このシステムは、有害なコンテンツの出力を検出して防止するように設計された分類モデルのセットを使用して、プロンプトと完了の両方を実行することによって機能します。 コンテンツ フィルタリング システムは、入力プロンプトと出力入力候補の両方で、有害な可能性があるコンテンツの特定のカテゴリを検出してアクションを実行します。 API 設定の違いやアプリケーション設計の違いは、補完結果に影響を与え、そのためフィルター処理の動作にも影響を与える場合があります。
Von Bedeutung
コンテンツ フィルタリング システムは、Azure AI Foundry Models の Azure OpenAI の Whisper などオーディオ モデルで処理されるプロンプトや完了結果に対しては適用されません。 Azure OpenAI のオーディオ モデルの詳細を確認します。
Azure OpenAI では、コンテンツ フィルタリング システムに加えて、監視を実行して、該当する製品の使用条件に違反する可能性のある方法でサービスの使用を提案するコンテンツや動作を検出します。 アプリケーションに関連するリスクの理解と軽減策について詳しくは、「Azure OpenAI の透過性のためのメモ」をご覧ください。 コンテンツのフィルター処理と不正使用の監視のためにデータを処理する方法の詳細については、「 Azure OpenAI のデータ、プライバシー、セキュリティ」を参照してください。
このセクションの記事では、コンテンツ フィルタリング カテゴリ、フィルタリングの重大度レベルとその構成可能性、およびアプリケーションの設計と実装で考慮される API シナリオに関する情報を提供します。
注
コンテンツ フィルタリングを目的としたプロンプトや入力候補は保存されません。 コンテンツ フィルタリング システムをトレーニング、再トレーニング、または改善するためのプロンプトや入力候補が、同意なしに使用されることはありません。 詳細については、データ、プライバシー、およびセキュリティに関する記事を参照してください。
コンテンツ フィルターの種類
Azure OpenAI に統合されたコンテンツ フィルタリング システムには、次のものが含まれます。
- 有害なコンテンツの検出とフィルタリングを目的としたニューラルマルチクラス分類モデル。モデルは、4 つの重大度レベル (安全、低、中、高) の 4 つのカテゴリ (憎悪、性的、暴力、自傷行為) をカバーします。 '安全' という重大度レベルで検出されたコンテンツは注釈でラベル付けされますが、フィルタリングの対象ではなく、構成もできません。
- テキストとコードのための脱獄リスクと既知のコンテンツの検出を目的としたその他のオプションの分類モデルは、ユーザーまたはモデルの動作が脱獄攻撃として修飾するか、または既知のテキストまたはソース コードに一致するかどうかフラグを設定するバイナリ分類器です。 これらのモデルの使用は任意ですが、保護されたマテリアル コード モデルの使用は、カスタマー著作権コミットメント(Customer Copyright Commitment)の適用範囲が要求される場合があります。
フィルターカテゴリー
次の表は、Azure OpenAI のコンテンツ フィルタリング システムでサポートされるリスク カテゴリをまとめたものです。
カテゴリ | 説明 |
---|---|
ヘイトと公平性 | ヘイトと公平性に関連する危害とは、そのグループの特定の差別化属性に基づいて個人または ID グループを攻撃する、あるいはそのグループに関して差別的な言葉を使用するコンテンツを指します。 たとえば、次のようなものが挙げられます。
|
性的 | 性的とは、解剖学的臓器や生殖器、恋愛関係、性行為、性愛的または情愛的な用語で描写された行為 (暴行または意志に反した強制的な性的暴力行為として描写されたものを含む) に関連する言葉を表します。 たとえば、次のようなものが挙げられます。
|
暴力 | 暴力は、人や何かに苦痛を与える、傷つける、損傷を与える、殺害することを意図した物理的行為に関連する言葉、武器、銃器などを表します。 これには、次のようなものが含まれますが、これに限定されるものではありません。
|
自傷行為 | 自傷行為とは、故意に自分の体に苦痛を与える、傷つける、損傷を与える、または自殺を意図した物理的な行為に関連する言葉を表します。 これには、次のようなものが含まれますが、これに限定されるものではありません。
|
ユーザー プロンプト攻撃 | ユーザー プロンプト攻撃は、システム メッセージに設定されたルールを回避または破るようにトレーニングされた動作を生成 AI モデルに示させる目的で設計されたユーザー プロンプトです。 こうした攻撃は、複雑なロールプレイから安全目標の巧妙な破壊まで、さまざまです。 |
間接攻撃 | 間接攻撃 (別名、間接プロンプト攻撃またはクロスドメイン プロンプトインジェクション攻撃) は、生成 AI システムがアクセスして処理できるドキュメント内に、第三者が悪意のある命令を配置する潜在的な脆弱性です。 ドキュメントの埋め込みと書式設定が必要です。 |
根拠性2 | 根拠性検出は、大規模言語モデル (LLM) のテキスト応答が、ユーザーが提供するソース資料を根拠としているかどうかをフラグ付けします。 根拠のない資料とは、LLM がソース資料に含まれていない、事実に基づかない情報または不正確な情報を生成する場合を指します。 ドキュメントの埋め込みと書式設定が必要です。 |
テキストの保護されたマテリアル1 | 保護済み素材テキストは、大規模言語モデルによって出力される可能性のある既知のテキスト コンテンツ (曲の歌詞、記事、レシピ、一部の Web コンテンツなど) を記述するものです。 |
コード用の保護マテリアル | 保護済み素材コードは、ソース リポジトリを適切に引用することなく大規模言語モデルによって出力される可能性のある、パブリック リポジトリからの一連のソース コードと一致するソース コードを記述するものです。 |
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 Content Safety を使用しています。
- アプリケーションに関連するリスクの理解と軽減策について詳しくは、「Azure OpenAI モデルの責任ある AI プラクティスの概要」をご覧ください。
- コンテンツのフィルター処理と不正使用の監視に関連したデータの処理方法の詳細については 、Azure OpenAI のデータ、プライバシー、セキュリティに関するページを参照してください。