チュートリアル: サービス ポリシーを使用してモデル サービスにガードレールを実装する

Important

この機能は ベータ版です。 アカウント管理者は、アカウント コンソール の [プレビュー ] ページからこの機能へのアクセスを管理できます。 Manage Azure Databricks プレビューを参照してください。

このチュートリアルでは、2 つの補完的な方法で 、モデル サービスにガードレールを実装する方法について説明します。 Azure Databricksでは、サービス ポリシーを使用してガードレールを実装します。 モデル サービスは、Azure Databricksホスト型モデルまたは OpenAI、Anthropic、Google などの外部プロバイダーの前に配置でき、両方を同じ方法で管理します。

  • 組み込みのサービス ポリシー (ガードレール): Azure Databricks が提供するマネージド チェックであり、PII、危険なコンテンツ、ジェイルブレイクの試行、ハルシネーションなどの一般的なリスクに対応します。 これをアタッチするには、UI で選択します。書き込むコードはありません。
  • カスタム サービス ポリシー: 機密プロジェクトのコード名や禁止応答パターンなど、組織に固有のルールに対して記述する SQL 関数。

サービス ポリシーの概念、組み込みのガードレール、および完全なオーサリング リファレンスについては、「 AI セキュリティ保護可能なリソースのサービス ポリシー」、 サービス ポリシーの作成とアタッチおよびサービス ポリシー関数のリファレンスを参照してください

Unity AI Gateway UI のモデル サービスの [ ポリシー ] タブから、両方を同じ方法でアタッチし、それらを混在させることができます。 Azure Databricksは、それぞれ ON CALL (モデルを呼び出す前) と ON RESULT (モデルが応答した後) の 2 つのポイントで評価します。 UI では、ポリシーをアタッチするときにフェーズを選択します。 カスタム ポリシーは、 event:typeで分岐することで、1 つのフェーズにスコープを設定することもできます。

シナリオ: チームは、アプリとエージェントが呼び出すモデル サービス (main.default.team_chat) を通じて LLM を公開します。 マネージド ガードレールを使用して個人を特定できる情報 (PII) をブロックし、機密プロジェクトに言及するプロンプトをブロックし、安全でないリンクを含む応答をすべてアプリケーション コードを変更せずにブロックする必要があります。

このチュートリアルの終わりまでに、次の内容が得られました。

  • サービスに組み込まれたPII保護機能。
  • ON CALL で機密コード名をブロックするカスタム要求ポリシー。
  • ON RESULT で安全でないリンクをブロックするカスタム応答ポリシー。
  • 3 つすべてがモデル サービスのプレイグラウンドからアタッチされ、検証されています。

前提条件

  • Unity カタログで有効になっているワークスペース。 Unity カタログについて始めに知っておくべきことを参照してください
  • お客様のアカウントで有効になっている Unity AI Gateway プレビュー Manage Azure Databricks プレビューを参照してください。
  • ガバナンス対象とするモデル サービスと、そこでテストを実行するための EXECUTE 権限。 作成するには、 モデル サービスの作成と管理に関するページを参照してください。 このチュートリアルでは、 main.default.team_chatを使用します。
  • Model Service で 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): プロンプトの挿入と脱獄の試行を拒否します (要求のみ)。
  • ハルキュレーション (system.ai.block_hallucination): 幻覚応答を拒否します (応答のみ)。

PII ガードレールをモデル サービスにアタッチします。

  1. ワークスペースのサイドバーで、[ AI Gateway] をクリックします。
  2. [ モデル ] タブで、モデル サービス (main.default.team_chat) を選択します。
  3. [ポリシー] タブ 開き、[ 新しいポリシー] をクリックします。
  4. などのblock-piiを入力します。
  5. [ 適用対象] で、[ すべてのアカウント ユーザー] を保持するか、ポリシーのスコープを特定のプリンシパルに設定します。
  6. [ガードレールタイプ] で、[PII ブロッキング] を選択します。
  7. [ランク] を [1] に設定します。 Rank は評価順序を設定します。最も低いランクは要求で最初に実行され、最後に応答が実行されます。
  8. [ フェーズ] で、 入力ガードレール (モデルの前)出力ガードレール (モデルの後) の両方を選択します。そのため、ガードレールは要求と応答で実行されます。
  9. [ ポリシーの作成] をクリックします。

ガードレールは、事前に選択された エバリュエーター モデル サービス (チェックを実行する LLM ジャッジ) を使用します。 別のモデルを使用するには、ポリシーを作成する前に [詳細設定] オプション を展開します。選択したモデルに CAN_QUERY が必要です。

Note

モデル サービスでポリシーをアタッチまたは変更した後、テストする前に変更を有効にする時間を短くします。 ベータ期間中は、反映されるまでに数分かかる場合があります。

手順 2: カスタム要求ポリシーを追加する

ガードレールは一般的なリスクをカバーします。 組織に固有のルールについては、カスタム ポリシーを記述します。 カスタム ポリシーは、 (event VARIANT) を受け取り、決定を返す SQL UDF です。最後のユーザーまたはアシスタント メッセージの API に依存しないプロジェクションである event:context.messageからメッセージ テキストを読み取ります。

このポリシーは、機密プロジェクトコード名に言及する要求を拒否します。 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 サブセットの一部です。 ポリシー関数を記述するための完全な一覧と規則については、「 サービス ポリシー関数リファレンス」を参照してください

要求フェーズにスコープを設定して、関数をカスタム ポリシーとしてアタッチします。

  1. モデル サービスの [ポリシー] タブで、[新しいポリシー] をクリックし、を入力します。
  2. [ガードレールタイプ]で、[カスタム]を選択します
  3. [ カスタム関数]、[ 関数の選択] の順にクリックし、 main.governance.block_confidential_codenameを選択します。
  4. [フェーズ] で、入力ガードレール (モデルの前) のみを選択します。これは要求ポリシーであるためです。
  5. [ランク] を [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;

応答フェーズにスコープを設定して、関数をカスタム ポリシーとしてアタッチします。

  1. [ポリシー] タブ、[新しいポリシー] をクリックし、を入力します。
  2. [Guardrail type]\(ガードレールの種類\) で[Custom]\(カスタム\) を選択し、[Custom function]\(main.governance.block_unsafe_links\) でを選択します。
  3. [フェーズ] で、出力ガードレール (モデルの後) のみを選択します。これは応答ポリシーであるためです。
  4. [ランク] を [20] に設定し、[ポリシーの作成] をクリックします。

手順 4: 確認する

3 つのポリシーすべてがサービスの [ポリシー] タブに表示されるようになりました。プレイグラウンドを使用して、それぞれがトリガーされることを確認してください。

  1. モデル サービス ページ で、[プレイグラウンドでチャット] をクリックします。
  2. PII ガードレールが要求をブロック My SSN is 123-45-6789, store it. など、PII を含むプロンプトを送信すると、構造化エラーが発生します。
  3. send Tell me about Project Aurora. 要求ポリシーは、機密プロジェクトに関する要求が許可されていない理由でブロックします。
  4. モデルが http:// リンクを返すように求めるプロンプトを送信します。 応答ポリシーは、応答に安全でないリンクが含まれ、ポリシーによってブロックされた理由で ON RESULT でそれをブロックします。
  5. 通常のプロンプトを送信します。 正常終了を返します。

代わりに、独自のアプリまたはスクリプトからサービスをテストするには、「 モデル サービスのクエリ」を参照してください。

クリーンアップ

完了したら、[ ポリシー] タブ でポリシーを削除します。作成した各ポリシーを開き、削除します。 次に、必要に応じてカスタム関数を削除します。

DROP FUNCTION IF EXISTS main.governance.block_confidential_codename;
DROP FUNCTION IF EXISTS main.governance.block_unsafe_links;

次のステップ