Important
サービスポリシーは ベータ版です。 Unity AI Gatewayは一般に利用可能ですが、ベータ機能は別途有効化されています。 アカウント管理者は、アカウントコンソールのプレビューページからUnity AI Gatewayのベータ機能をオンにする必要があります。 Manage Azure Databricks プレビューを参照してください。
このチュートリアルでは、 モデルサービスにガードレールを追加する方法を、2つの補完的な方法で解説します。 Azure Databricksでは、ガードレールはサービスポリシーです。 モデル サービスは、Azure Databricksホスト型モデルまたは OpenAI、Anthropic、Google などの外部プロバイダーの前に配置でき、両方を同じ方法で管理します。
- 組み込みのサービス ポリシー (ガードレール): Azure Databricks が提供するマネージド チェックであり、PII、危険なコンテンツ、ジェイルブレイクの試行、ハルシネーションなどの一般的なリスクに対応します。 これをアタッチするには、UI で選択します。書き込むコードはありません。
- カスタム サービス ポリシー: 機密プロジェクトのコード名や禁止応答パターンなど、組織に固有のルールに対して記述する SQL 関数。
サービス ポリシーの概念、組み込みのガードレール、および完全なオーサリング リファレンスについては、「 AI セキュリティ保護可能なリソースのサービス ポリシー」、 サービス ポリシーの作成とアタッチ、 およびサービス ポリシー関数のリファレンスを参照してください。
Unity AI Gateway UI のモデル サービスの [ ポリシー ] タブから、両方を同じ方法でアタッチし、それらを混在させることができます。 Azure Databricksはそれぞれを2つのポイントで評価します:
- モデルを呼び出す前の入力フェーズ(ON CALL)です。
- モデルが応答した後の出力位相(ON RESULT)です。
UI では、ポリシーをアタッチするときにフェーズを選択します。 カスタム ポリシーは、 event:typeで分岐することで、1 つのフェーズにスコープを設定することもできます。
シナリオ: チームは、アプリとエージェントが呼び出すモデル サービス (main.default.team_chat) を通じて LLM を公開します。 管理されたガードレールで安全でないまたは有害なコンテンツをブロックし、機密プロジェクトに言及するプロンプトをブロックし、安全でないリンクを含む応答もブロックしたいのです。すべてアプリケーションコードを変更しずに。
このチュートリアルの終わりまでに、次の内容が得られました。
- サービスに組み込まれた安全でない内容のガードレール。
- 入力フェーズ(ON CALL)で機密コードネームをブロックするカスタムリクエストポリシーです。
- 出力フェーズ(ON RESULT)で安全でないリンクをブロックするカスタムレスポンスポリシー。
- 3 つすべてがモデル サービスのプレイグラウンドからアタッチされ、検証されています。
前提条件
- Unity カタログで有効になっているワークスペース。 Unity カタログについて始めに知っておくべきことを参照してください
- アカウントで有効になっている Unity AI Gateway ベータ機能により、サービスポリシーやその他のUnity AI Gateway Beta機能が有効になります。 Manage Azure Databricks プレビューを参照してください。
- ガバナンス対象とするモデル サービスと、そこでテストを実行するための
EXECUTE権限。 作成方法については、「 モデルAPI(モデルサービス)を作成および管理」をご覧ください。 このチュートリアルでは、main.default.team_chatを使用します。 - Model Service で
MANAGEを使用して、ポリシーを関連付けます。 - カスタム ポリシー関数を作成するスキーマ (このチュートリアルでは
CREATE FUNCTION) に対するmain.governance権限。 - 組み込みのガードレールの場合: ガードレールのチェックを実行するエバリュエーター モデル (LLM ジャッジ) が事前に選択されているため、セットアップは必要ありません。
[詳細オプション] で別のエバリュエーターを選択した場合は、
CAN_QUERYする必要があります。
手順 1: 組み込みのガードレールを適用する
組み込みのガードレールはマネージドの LLM ジャッジ チェックです。 [ガードレールタイプ]メニューから選択します。チェックを実行するエバリュエーター モデル サービス (LLM ジャッジ) が事前に選択されます。 使用可能なガードレールは次のとおりです。
-
安全でないコンテンツ (
system.ai.block_unsafe_content): 安全でないコンテンツまたは有害なコンテンツを拒否します。 -
脱獄 (
system.ai.block_jailbreak): プロンプトの挿入と脱獄の試行を拒否します (要求のみ)。 -
ハルキュレーション (
system.ai.block_hallucination): 幻覚応答を拒否します (応答のみ)。
unsafe-content ガードレールをお使いのモデルサービスに追加してください:
- ワークスペースのサイドバーで、[ AI Gateway] をクリックします。
- [ モデル ] タブで、モデル サービス (
main.default.team_chat) を選択します。 - [ポリシー] タブ を 開き、[ 新しいポリシー] をクリックします。
-
などの
block-unsafe-contentを入力します。 - [ 適用対象] で、[ すべてのアカウント ユーザー] を保持するか、ポリシーのスコープを特定のプリンシパルに設定します。
- ガードレールタイプで「危険なコンテンツ」を選択します。
-
[ランク] を [
1] に設定します。 Rank は評価順序を設定します。最も低いランクは要求で最初に実行され、最後に応答が実行されます。 - [ フェーズ] で、 入力ガードレール (モデルの前) と 出力ガードレール (モデルの後) の両方を選択します。そのため、ガードレールは要求と応答で実行されます。
- [ ポリシーの作成] をクリックします。
ガードレールは、事前に選択された エバリュエーター モデル サービス (チェックを実行する LLM ジャッジ) を使用します。 別のモデルを使用するには、ポリシーを作成する前に [詳細設定] オプション を展開します。選択したモデルに CAN_QUERY が必要です。
Note
モデル サービスでポリシーをアタッチまたは変更した後、テストする前に変更を有効にする時間を短くします。 サービスポリシーベータ版中は、配信に数分かかることがあります。
手順 2: カスタム要求ポリシーを追加する
ガードレールは一般的なリスクをカバーします。 組織に固有のルールについては、カスタム ポリシーを記述します。 カスタム ポリシーは、 (event VARIANT) を受け取り、決定を返す SQL UDF です。最後のユーザーまたはアシスタント メッセージの API に依存しないプロジェクションである event:context.messageからメッセージ テキストを読み取ります。
このポリシーは、機密プロジェクトコード名に言及する要求を拒否します。
event:type::string = 'request'チェックは入力フェーズ(オンコール)に制限します:
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 サブセットの一部です。 ポリシー関数を記述するための完全な一覧と規則については、「 サービス ポリシー関数リファレンス」を参照してください。
要求フェーズにスコープを設定して、関数をカスタム ポリシーとしてアタッチします。
- モデル サービスの [ポリシー] タブで、[新しいポリシー] をクリックし、を入力します。
- [ガードレールタイプ]で、[カスタム]を選択します。
- [ カスタム関数]、[ 関数の選択] の順にクリックし、
main.governance.block_confidential_codenameを選択します。 - [フェーズ] で、入力ガードレール (モデルの前) のみを選択します。これは要求ポリシーであるためです。
-
[ランク] を [
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;
応答フェーズにスコープを設定して、関数をカスタム ポリシーとしてアタッチします。
- [ポリシー] タブで、[新しいポリシー] をクリックし、を入力します。
-
[Guardrail type]\(ガードレールの種類\) で[Custom]\(カスタム\) を選択し、[Custom function]\(
main.governance.block_unsafe_links\) でを選択します。 - [フェーズ] で、出力ガードレール (モデルの後) のみを選択します。これは応答ポリシーであるためです。
-
[ランク] を [
20] に設定し、[ポリシーの作成] をクリックします。
手順 4: 確認する
3 つのポリシーすべてがサービスの [ポリシー] タブに表示されるようになりました。プレイグラウンドを使用して、それぞれがトリガーされることを確認してください。
- モデル サービス ページ で、[プレイグラウンドでチャット] をクリックします。
- 安全でないまたは有害なコンテンツを求めるプロンプトを送信してください。 安全でないコンテンツのガードレールがブロックし、回答ではポリシーによってコンテンツがブロックされたと報告されています。
- send
Tell me about Project Aurora.要求ポリシーは、機密プロジェクトに関する要求が許可されていない理由でブロックします。 - モデルが
http://リンクを返すように求めるプロンプトを送信します。 レスポンスポリシーは出力フェーズ(ON RESULT)でレスポンスが不安全なリンクを含み、ポリシーによってブロックされた理由でブロックします。 - 通常のプロンプトを送信します。 正常終了を返します。
自分のアプリやスクリプトからサービスをテストするには、「 Query model API(model services)」を参照してください。
クリーンアップ
完了したら、[ ポリシー] タブ でポリシーを削除します。作成した各ポリシーを開き、削除します。 次に、必要に応じてカスタム関数を削除します。
DROP FUNCTION IF EXISTS main.governance.block_confidential_codename;
DROP FUNCTION IF EXISTS main.governance.block_unsafe_links;