Foundry ポータルまたは REST API を使用して、Microsoft Foundry でモデルのデプロイとエージェントのガードレールを作成、構成、管理する方法について説明します。
ガードレールの概念、リスク、および介入ポイントの背景については、 ガードレールとコントロールの概要を参照してください。
前提 条件
Azure サブスクリプション。 無料で作成します。
プロジェクト内の少なくとも 1 つのモデル 配置。
Azure AI リソースでのFoundry Account Owner ロールまたはそれ以上。
重要
Foundry RBAC ロールの名前が最近変更されました。 Foundry User, Foundry Owner, Foundry Account Owner、および Foundry Project Manager は、以前は、AZURE AI ユーザー、Azure AI 所有者、Azure AI アカウント所有者、および AZURE AI Project Manager という名前でした。 名前の変更がロールアウトされている間、以前の名前が表示される場合があります。ロール ID とコア アクセス許可は、名前の変更によって変更されません。
可用性
利用可能なリージョンを参照してください。
Foundry でガードレールを作成する
- Foundry に移動し、プロジェクトに移動します。
- 右上のメニューで [ ビルド ] を選択します。
- 左側のナビゲーションから [ガードレール ] ページを選択します。
- 右上にある [ガードレールの作成 ] を選択します。 ガードレール ウィザードが開き、手順 1: コントロールの追加が表示されます。
ガードレールにコントロールを追加する
新しいガードレールを作成すると、既定のコントロールが右側のウィンドウに表示されます。
ドロップダウン メニューからリスクを選択します。
介入ポイントとアクションの選択: 推奨される介入ポイントとそのリスクに対するアクションが表示されます。 1 つまたは複数の介入ポイントと 1 つのアクションを選択して、コントロールを構成します。
メモ
一部の介入ポイントは、その介入ポイントで適用できない場合は、リスクに対して使用できません。 たとえば、定義上、ユーザー入力攻撃は、ユーザー入力に追加される悪意のあるコンテンツです。 そのため、そのリスクは、その介入ポイントでのみスキャンできます。
[ コントロールの追加] を選択します。 コントロールが右側のテーブルに追加されます。
ガードレールからコントロールを削除する
コントロールを削除するには:
- 削除するコントロールを選択します。
- [ 削除] を選択します。
メモ
一部のコントロールは、変更されたコンテンツ のフィルター処理が承認された管理対象のお客様のみが削除できます。 変更されたコンテンツのフィルター処理の詳細を確認します。
ガードレール内のコントロールを編集する
コントロールを編集するには、コントロールの削除と新しいコントロールの追加、または既存のコントロールのオーバーライドの 2 つの方法があります。 後者は、ユーザーの入力と出力に対する暴力、ヘイト、性的、自傷行為のコントロールなど、削除できないコントロールを編集する唯一の方法です。
コントロールをオーバーライドして編集するには:
- 編集する必要があるコントロールと同じリスクを選択します。
- 必要に応じて、コントロールまたは介入ポイントとアクションの構成を変更します。
- [ コントロールの追加] を選択します。
- ポップアップで、既存のコントロールをオーバーライドするための確認が求められます。 [ 確認] を選択します。
エージェントとモデルにガードレールを割り当てる
必要に応じてコントロールを追加、編集、削除した後:
- [次へ] を選択して、「手順 2: エージェントやモデルにガードレールを割り当てる」に進みます。
- [ エージェントの追加] または [モデルの追加] を選択して、このプロジェクトのエージェントとモデルの一覧を表示します。
- モデルまたはエージェントを選択します。 以前に割り当てられたエージェントとモデルの選択を解除して、このガードレールを削除し、Microsoft既定値を再割り当てすることもできます。
- [保存] を選択して確定します。 成功通知が表示されます。
ガードレールの確認と名前付け
- [ 次へ ] を選択して、手順 3: 確認に進みます。
- このガードレールに追加されたコントロールと、割り当てられているモデルやエージェントを確認します。
- ガードレールに名前を付けるか、自動的に割り当てられた名前のままにします。
- 作成 を選択します。 ガードレールは[ ガードレール ]ページの一覧に表示され、選択したモデルとエージェントに適用されます。
既存のガードレールを編集する
右上のメニューで [ ビルド ] を選択します。
左側のナビゲーションから [ガードレール ] ページを選択します。
ガードレールの一覧からガードレールを見つけます。 名前を直接選択するか、行を選択して詳細ウィンドウで [編集] を選択します。
メモ
Microsoft Default.V2 などの既定のガードレールは編集できません。
ガードレールの作成と同じ手順に従って、コントロールを編集、追加、または削除します。エージェントやモデルの割り当てまたは再割り当て。必要に応じてガードレールの名前を変更します。
ガードレールを割り当てる
ガードレールをモデルまたはエージェントに割り当てるには、次の 2 つのパスがあります。
オプション 1: ガードレールを編集する
- 右上のメニューで [ ビルド ] を選択します。
- 左側のナビゲーションから [ガードレール ] ページを選択します。
- ガードレールの一覧からガードレールを見つけます。 名前を直接選択するか、行を選択して詳細ウィンドウで [編集] を選択します。
- [手順 1: コントロールの追加] で [ 次へ ] を選択し、割り当て手順に進みます。
- ガードレールの割り当てを更新するには、[ エージェントの追加 ] または [モデルの追加 ] を選択し、必要に応じてモデルやエージェントの選択と選択解除を行います。
オプション 2: モデルまたはエージェントを編集する
- 右上のメニューで [ ビルド ] を選択します。
- 左側のナビゲーションで [エージェント ] または [モデル ] を選択します。
- 更新するエージェントまたはモデルを選択します。
- エージェントプレイグラウンドまたはチャットプレイグラウンドの左側のパネルに 、ガードレール のセクションが表示されます。
- [ガードレール] セクションの下部にある [ 管理 ] を選択します。
- [ 新しいガードレールを割り当てる] を選択します。
- このプロジェクトで使用できるガードレールを参照します。
- ポップアップの左側にある一覧から目的のガードレールを選択します。
- [ 割り当て] を選択して、エージェントまたはモデルのガードレール割り当てを更新します。 新しいガードレールはすぐに有効になります。
ガードレールを削除する
モデルまたはエージェントが割り当てられていないガードレールを削除するには
- 右上のメニューで [ ビルド ] を選択します。
- 左側のナビゲーションから [ガードレール ] ページを選択します。
- ガードレールの一覧でガードレールを探し、その行を選択します。
- 右側にパネルが表示されます。 パネルの上部にある [ 削除 ] を選択します。
モデルまたはエージェントが割り当てられているガードレールを削除するには
- モデルやエージェントを別のガードレールに再割り当てするか、このガードレールからそれらを削除して、Microsoft既定のガードレールに再割り当てします。
- 指示に従って、 モデルまたはエージェントが割り当てられていないガードレールを削除します。
ガードレールのテスト
特定のガードレールの動作をテストするには:
右上のメニューで [ ビルド ] を選択します。
左側のナビゲーションから [ガードレール ] ページを選択します。
ガードレールの一覧でガードレールを探し、その行を選択します。
右側にパネルが表示されます。 パネル の上部にある [プレイグラウンドで試す ] を選択します。
メモ
そのボタンが表示されない場合は、最初にこのガードレールをモデルまたはエージェントに割り当てます。 ガードレールを割り当てると、安全性とセキュリティの動作がすぐに変わるため、非運用モデルまたはエージェントをテストに使用します。
プレイグラウンドで、モデルまたはエージェントにクエリを送信します。
アクションとして "注釈とブロック" を持つコントロールがトリガーされると、どのリスクが検出され、どの介入ポイントに関する詳細が含まれるメッセージがチャットに表示されます。
REST API を使用してガードレールを構成する
Azure AI Services REST API では、ガードレールは RAI ポリシー — Azure Resource Manager内のリソース レベル のオブジェクトとして表されます。
ガードレールを作成または更新する
RAI ポリシー - 作成または更新操作を使用して、ガードレールを作成または更新します。 リスク カテゴリ、重大度レベル、ブロックするか注釈を付けるかを含む、要求本文のコントロール (コンテンツ フィルター ルール) を指定します。
モデル デプロイにガードレールを割り当てる
ガードレールを割り当てるには、展開で raiPolicyName プロパティを設定します。
展開 - 作成または更新操作を使用し、展開プロパティにガードレール名を含めます。
注釈を扱う
Foundry には、要求のガードレールの結果を理解するのに役立つ注釈が用意されています。 注釈は、コンテンツのブロックを無効にしたフィルターや重大度レベルでも有効にすることができます。
標準ガードレール注釈
注釈が有効になっている場合、API を介して、嫌い、性的、暴力、自傷のカテゴリに関する次の情報が返されます。
- リスクカテゴリ (ヘイト、性的、暴力、自傷行為)
- 各コンテンツ カテゴリ内の重大度レベル (安全、低、中、高)
- フィルター処理の状態 (true または false)
省略可能なモデル注釈
オプションのモデル注釈は、注釈モード (コンテンツにフラグが設定されているがフィルター処理されていない場合は情報を返します) またはフィルター モード (コンテンツにフラグが設定され、フィルター処理されたときに情報を返す) に設定できます。
| モデル | 出力 |
|---|---|
| ユーザー プロンプト攻撃 | - 検出された(true または false) - フィルター処理 (true または false) |
| 間接攻撃 | - 検出された(true または false) - フィルター処理 (true または false) |
| 保護された素材テキスト | - 検出された(true または false) - フィルター処理 (true または false) |
| 保護された材料コード | - 検出された(true または false) - フィルター処理 (true または false) - コード スニペットが見つかったパブリック GitHub リポジトリの引用例 - リポジトリのライセンス |
| 個人を特定できる情報 (PII) | - 検出された(true または false) - フィルター処理 (true または false) - 編集済み (true または false) |
| 安定性 | - 検出された(true または false) - フィルター処理 (true または false、詳細あり) - (注釈モードのみ)詳細:(完了終了オフセット、完了開始オフセット) |
重要
アプリケーションでコードを表示するときは、注釈からの引用例もアプリケーションに表示することを強くお勧めします。 お客様の著作権コミットメントの対象範囲には、引用されたライセンスへの準拠が必要な場合もあります。
API バージョンの互換性
次の表は、各 API バージョンでの注釈モードの可用性を示しています。
| フィルター カテゴリ | 2024-10-01-プレビュー | 2024年2月1日 GA | 2024-04-01-preview | 2023-10-01-プレビュー | 2023-06-01-preview | 2025-01-01 プレビュー |
|---|---|---|---|---|---|---|
| コア コンテンツ カテゴリ | ||||||
| 嫌悪 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 暴力 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 性的 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 自傷行為 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| プロンプト保護 | ||||||
| ユーザー プロンプト攻撃のプロンプト シールド | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 間接的な攻撃に対するプロンプト シールド | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 保護された材料とその他の機能 | ||||||
| 保護された素材テキスト | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 保護された材料コード | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 個人を特定できる情報 (PII) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 不適切な表現のブロックリスト | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| カスタム ブロックリスト | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| 基盤性¹ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
¹ ストリーミング以外のシナリオでは使用できません。ストリーミング シナリオでのみ使用できます。
API バージョンの選択
- 運用環境のデプロイの場合: 安定性とサポートには、最新の GA バージョン (2024-02-01) を使用します。
- PII 検出の場合: 2025-01-01-preview 以降を使用します。
- 接地検出の場合: 2025-01-01-preview 以降を使用します。
- 間接攻撃検出の場合: 2024-04-01-preview 以降を使用します。
プレビュー API バージョンには最新の機能が含まれていますが、重大な変更が加えられる可能性があります。 デプロイする前に、運用環境以外の環境でプレビュー機能を常にテストしてください。
コード例
次のコード スニペットは、さまざまなプログラミング言語でガードレール注釈を表示する方法を示しています。
メモ
これらの例では、Completions API を使用します。 Responses API を呼び出すときにフィルター処理されたコンテンツを検出して処理するには、「 ガードレールとコンテンツのフィルター処理を処理する」を参照してください。
依存関係のインストール
コード例を実行する前に、必要なライブラリをインストールします。
pip install openai>=1.0.0
注釈の表示
# 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 を使用するすべてのシナリオで返されます。
プロンプトへのドキュメント埋め込み
ガードレールは、システム入力、ユーザー入力、AI アシスタントの出力など、プロンプトのさまざまな要素を区別できる場合にパフォーマンスが向上します。 検出機能を強化するには、次の推奨される方法に従ってプロンプトを書式設定する必要があります。
Chat Completions API の既定の動作
Chat Completions API は定義によって構成されます。 入力はメッセージの一覧で構成され、それぞれにロールが割り当てられます。
安全システムは、この構造化形式を解析し、次の動作を適用します。
最新の "ユーザー" コンテンツでは、次のカテゴリのリスクが検出されます。
- 嫌悪
- 性的
- 暴力
- 自傷行為
- プロンプト シールド (省略可能)
メッセージ配列の例:
[
{"role": "system", "content": "Provide some context and/or instructions to the model."},
{"role": "user", "content": "Example question goes here."},
{"role": "assistant", "content": "Example answer goes here."},
{"role": "user", "content": "First question/message for the model to actually respond to."}
]
プロンプトにドキュメントを埋め込む
ガードレールは、最後のユーザー コンテンツの検出に加えて、プロンプト シールド ( 間接プロンプト攻撃検出と接地検出) を使用して、コンテキスト ドキュメント内の特定のリスクの検出もサポートします。 次のドキュメント区切り記号を使用して、ドキュメント (取得した Web サイト、電子メールなど) である入力の部分を識別する必要があります。
""" <documents> *insert your document content here* </documents> """
これを行うと、タグ付けされたドキュメントで次のオプションを検出できます。
- 間接攻撃 (省略可能)
- 接地検出
チャット完了メッセージ配列の例:
[
{"role": "system", "content": "Provide some context and/or instructions to the model."},
{"role": "user", "content": "First question/message for the model to actually respond to, including document context. \"\"\" <documents>\n*insert your document content here*\n</documents> \"\"\""}
]
JSON エスケープ
検出のために未検証のドキュメントにタグを付ける場合は、ドキュメントコンテンツを JSON エスケープして、Azure AI 安全システムによる解析を成功させる必要があります。
たとえば、次の電子メール本文を参照してください。
Hello José,
I hope this email finds you well today.
JSON エスケープでは、次のように表示されます。
Hello Jos\u00E9,\nI hope this email finds you well today.
チャット完了コンテキストでエスケープされたテキストは、次のように読み取られます。
[
{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n Hello Jos\\u00E9,\\nI hope this email finds you well today. \n</documents> \"\"\""},
{"role": "user", "content": "First question/message for the model to respond to"}
]
要求時にガードレール構成を指定する
モデルのデプロイ レベルのガードレールに加えて、要求ヘッダーを使用して各 API 呼び出しの要求時にカスタム ガードレールを指定できます。
curl --request POST \
--url 'URL' \
--header 'Content-Type: application/json' \
--header 'api-key: API_KEY' \
--header 'x-policy-id: CUSTOM_CONTENT_FILTER_NAME' \
--data '{
"messages": [
{
"role": "system",
"content": "You are a creative assistant."
},
{
"role": "user",
"content": "Write a poem about the beauty of nature."
}
]
}'
要求レベルのガードレール構成は、特定の API 呼び出しのデプロイ レベルの構成をオーバーライドします。
重要
要求時のガードレール仕様は、イメージ入力 (画像とのチャット) シナリオでは使用できません。 このような場合は、既定のガードレールが使用されます。
存在しない構成が指定されている場合は、次のエラー メッセージが返されます。
{
"error": {
"code": "InvalidContentFilterPolicy",
"message": "Your request contains invalid content filter policy. Please provide a valid policy."
}
}
ベスト プラクティス
ガードレールを構成するときは、次のプラクティスに従います。
- 運用環境の前にテストする: 運用環境のデプロイに変更を適用する前に、プレイグラウンドを使用してガードレールの動作をテストします。
- 制限を開始し、緩和する: 重大度のしきい値を大きくして開始し、許容可能な動作を確認した後でのみ下方向に調整します。
- 構成のレッド チームテストを行う: レッド チーム テストやストレス テスト、分析を実施して、モデル、アプリケーション、デプロイ シナリオに固有の潜在的な問題を特定します。
- 変更後の測定: ガードレールを実装または更新した後、測定プロセスを繰り返して有効性を確認します。
- パフォーマンスへの影響を監視する: Guardrail 処理では、介入ポイントあたり約 50 ~ 100 ミリ秒の待機時間が追加されます。 高スループットのシナリオの場合は、基本的な制御のみを使用して開始し、待機時間メトリックを監視します。
責任ある AI の完全なガイダンスについては、「 責任ある AI の概要」を参照してください。
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| ガードレールを削除できない | 最初にガードレールからすべてのモデルとエージェントを再割り当てまたは削除します。 「ガードレールを削除する」を参照してください。 |
| コントロールを編集または削除できない | ユーザーの入力と出力に対する一部のコントロール(暴力、ヘイト、性的、自傷行為)は、オーバーライドのみ可能で、削除することはできません。 「 コントロールの編集」を参照してください。 |
| ガードレールの変更が有効にならない | ガードレールが正しいモデルまたはエージェントに割り当てられているかどうかを確認します。 エージェントの場合、エージェントのガードレールが、モデルのガードレールよりも優先されます。 |
| "InvalidContentFilterPolicy" エラー |
x-policy-id ヘッダーのガードレール名が既存のガードレールと一致しません。
[Guardrails] ページで名前を確認します。 |
| Default.V2 ガードレールを編集できません | Microsoft既定のガードレールは変更できません。 代わりにカスタム ガードレールを作成します。 |