チュートリアル: ガードレールとサービスポリシーを使用してモデルサービスのコンテンツをモデレートする
ベータ版
この機能はベータ版です。アカウント管理者は、アカウントコンソールの [プレビュー] ページからこの機能へのアクセスを管理できます。Databricksのプレビューを管理するを参照してください。
このチュートリアルでは、モデルサービスでのやりとりのコンテンツを2つの相補的な方法でモデレートする方法について説明します。モデルサービスは、Databricksがホストするモデル、またはOpenAI、Anthropic、Googleなどの 外部 プロバイダーに対応でき、どちらも同じ方法で管理できます。
- **組み込みのガードレール**:PII、危険なコンテンツ、ジェイルブレイクの試行、ハルシネーションなどの一般的なリスクに対する、Databricksが提供するマネージドチェックです。UI で選択することでアタッチできます。コードを記述する必要はありません。
- **カスタムサービスポリシー**: 機密プロジェクトのコードネームや禁止された応答パターンなど、組織固有のルールに対応するために作成するSQL関数。
どちらも Unity AI Gateway UI のモデルサービスの ポリシー タブから同じ方法でアタッチでき、混在させることもできます。Databricksは、それぞれを2つの時点 (モデルを呼び出す前の ON CALL と、モデルの応答後の ON RESULT ) で評価します。UIでは、ポリシーをアタッチする際にフェーズを選択します。カスタムポリシーは、event:typeで分岐することで、単一のフェーズにスコープを設定することもできます。
**シナリオ:** チームは、アプリやエージェントが呼び出すモデルサービス () を介してLLMを公開します。main.default.team_chatマネージドガードレールで個人を特定できる情報(PII)をブロックし、機密プロジェクトに言及するプロンプトをブロックし、安全でないリンクを含む応答をブロックしたい場合は、アプリケーションコードを変更する必要はありません。
このチュートリアルを完了すると、次のことが可能になります。
- サービス上の組み込み PII ガードレール。
- ON CALL で機密のコード名をブロックするカスタムリクエストポリシー。
- ON RESULT で安全でないリンクをブロックするカスタム応答ポリシー。
- モデルサービスPlaygroundから、3つすべてが添付され、検証済みです。
前提条件
- Unity Catalog が有効になっているワークスペース。Unity Catalog の概要を参照してください。
- Unity AI Gateway のプレビューはあなたのアカウントで有効になっています。「Databricks プレビューの管理」を参照してください。
- 管理し、
EXECUTEを使ってテストできるモデルサービス。作成するには、モデルサービスの作成と管理を参照してください。このチュートリアルではmain.default.team_chatを使用します。 MANAGEポリシーをアタッチするには、モデルサービス上で。CREATE FUNCTIONカスタムポリシー関数を作成するスキーマ上(このチュートリアルではmain.governance)。- 組み込みのガードレールの場合:ガードレールのチェックを実行する評価モデル(LLMジャッジ)は事前に選択されているため、セットアップは不要です。**詳細オプション**で別の評価モデルを選択した場合、その評価モデルには
CAN_QUERYが必要です。
ステップ1: 組み込みガードレールを適用する
組み込みのガードレールは、マネージドLLMジャッジチェックです。 ガードレールタイプ メニューからいずれかを選択します。チェックを実行する評価者モデルサービス (LLMジャッジ) は、あらかじめ選択されています。利用可能なガードレールは次のとおりです。
- PII ブロッキング (
system.ai.block_pii): PII を含むコンテンツを拒否します。 - 安全でないコンテンツ (
system.ai.block_unsafe_content): 安全でないまたは有害なコンテンツを拒否します。 system.ai.block_jailbreakジェイルブレイク(脱獄)(): プロンプトインジェクションとジェイルブレイク(脱獄)の試み(リクエストのみ)を拒否します。- Hallucination (
system.ai.block_hallucination):ハルシネーションを伴う応答を拒否します (応答のみ)。
PIIガードレールをモデルサービスにアタッチします:
- ワークスペースのサイドバーで、[ AI Gateway ] をクリックします。
- モデル タブで、モデルサービス (
main.default.team_chat) を選択します。 - [ ポリシー ]タブを開き、[ 新しいポリシー ]をクリックします。
block-piiなどの 名前 を入力します。- 適用先 の下で、 すべてのアカウントユーザー を維持するか、ポリシーを特定のプリンシパルにスコープ設定します。
- Guardrail type で、 PII Blocking を選択します。
- **ランク**を
1に設定します。ランクによって評価順序が決まります。最も低いランクがリクエスト時に最初に実行され、レスポンス時に最後に実行されます。 - フェーズ で、 入力ガードレール (モデルの前) と 出力ガードレール (モデルの後) の両方を選択すると、ガードレールはリクエストと応答で実行されます。
- 「 ポリシーの作成 」をクリックします。
ガードレールは、事前に選択された 評価モデルサービス (チェックを実行するLLMジャッジ)を使用します。CAN_QUERY別のモデルを使用するには、ポリシーを作成する前に**詳細オプション**を展開します。選択したモデルには が必要です。
モデルサービスにポリシーをアタッチまたは変更した後、テストする前に変更が有効になるまでしばらくお待ちください。ベータ期間中、伝播には数分かかる場合があります。
ステップ2: カスタムリクエストポリシーを追加する
ガードレールは一般的なリスクをカバーします。組織固有のルールについては、カスタムポリシーを作成してください。カスタムポリシーは、(event VARIANT) を受け取り、決定を返す SQL UDF です;event:context.message から、最後のユーザーまたはアシスタントメッセージの API に依存しないプロジェクションであるメッセージテキストを読み取ります。
このポリシーは、機密プロジェクトのコードネームが記載されているリクエストをすべて拒否します。event:type::string = 'request' のチェックにより、ON CALL に限定されます:
CREATE OR REPLACE FUNCTION main.governance.block_confidential_codename(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND contains(lower(event:context.message::string), 'project aurora')
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Requests about confidential projects are not permitted.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
contains およびlowerは、ポリシー本体でサポートされているSQLサブセットの一部です。ポリシー関数作成の全リストとルールについては、サービスポリシー関数リファレンスを参照してください。
関数をカスタムポリシーとしてリクエストフェーズにスコープ設定してアタッチします:
- モデルサービスの [ポリシー] タブで、 [新しいポリシー] をクリックし、 [名前] (例:
block-codename)を入力します。 - **ガードレールタイプ**で、**カスタム**を選択します。
- 「カスタム関数」をクリックし、次に「関数の選択」をクリックして、
main.governance.block_confidential_codenameを選択します。 - フェーズ の下で、これはリクエストポリシーであるため、 入力ガードレール (モデルの前) のみを選択してください。
- **Rank**を
10に設定し、**ポリシーを作成**をクリックします。
ステップ3:カスタム応答ポリシーを追加する
モデルは、通過させたくないコンテンツを返すこともできます。このポリシーは、安全でないリンク(http:// URLまたはjavascript: URI)を含むレスポンスを拒否します。event:type::string = 'response'のチェックはON RESULTに限定されるため、プロンプトでそれらのスキームを単に言及するユーザーが入力時にトリガーされることはありません。
CREATE OR REPLACE FUNCTION main.governance.block_unsafe_links(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'response'
AND (contains(lower(event:context.message::string), 'http://')
OR contains(lower(event:context.message::string), 'javascript:'))
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Response contained an insecure link and was blocked by policy.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
関数をカスタムポリシーとして、応答フェーズにスコープを設定してアタッチします:
- ポリシー タブで、 新しいポリシー をクリックし、
block-unsafe-linksなどの 名前 を入力します。 - ガードレールタイプ で**カスタム**を選択し、**カスタム関数**の下で
main.governance.block_unsafe_linksを選択します。 - フェーズ で、 出力ガードレール (モデルの後) のみを選択します。これは応答ポリシーであるためです。
- **Rank**を
20に設定し、**ポリシーを作成**をクリックします。
ステップ4:確認
3 つのポリシーはすべて、サービスの ポリシー タブに表示されるようになりました。各項目が起動していることを確認するには、プレイグラウンドを使用します。
- モデルサービスページで、 Playgroundでチャット をクリックします。
My SSN is 123-45-6789, store it.のような PII を含むプロンプトを送信すると、PII ガードレールがリクエストをブロックし、構造化エラーを受け取ります。Tell me about Project Aurora.を送信します。リクエストポリシーは、「機密プロジェクトに関するリクエストは許可されていません。」という理由でブロックします。- モデルが
http://リンクを返すプロンプトを送信します。レスポンスポリシーは、「レスポンスに安全でないリンクが含まれていたため、ポリシーによってブロックされました。」という理由で、ON RESULTでブロックします。 - 通常のプロンプトを送信します。正常に完了します。
代わりに独自のアプリまたはスクリプトからサービスをテストするには、「モデルサービスをクエリする」を参照してください。
クリーンアップ
完了したら、 [ポリシー] タブでポリシーを削除します。作成した各ポリシーを開いて削除します。その後、必要に応じてカスタム関数をドロップします:
DROP FUNCTION IF EXISTS main.governance.block_confidential_codename;
DROP FUNCTION IF EXISTS main.governance.block_unsafe_links;