メインコンテンツまでスキップ

サービスポリシーの例

備考

ベータ版

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

これらのカスタムサービスポリシーの例は、AIモデルおよびMCPサービスにおける一般的なガバナンスシナリオを網羅しています。これらは、次の2種類のカスタムポリシーに分類されます。

  • 決定論的SQLポリシー : 正確でルールに基づいた決定(ツール名、引数値、キーワード、長さ)を行うSQL関数。ルールが正確で再現可能な場合、これらを使用します。
  • LLMジャッジポリシー :評価モデルがリクエストまたは応答に適用する自然言語分類器。チェックがセマンティック(意図、トピック、トーン)であり、正確なルールで捉えられない場合に使用します。

ポリシーの作成からアタッチまでのエンドツーエンドの手順については、「サービスポリシーの作成とアタッチ」を参照してください。eventフィールド、戻り値、およびサポートされているSQLサブセットについては、「サービスポリシー関数リファレンス」を参照してください。カスタムコードなしでPII、危険なコンテンツ、ジェイルブレイク、および幻覚をカバーする組み込みガードレールについては、「組み込みサービスポリシー」を参照してください。

確定的 SQL ポリシーの例

各例は、Unity Catalog に登録し、サービスにアタッチする SQL ユーザー定義関数 (UDF) です。ポリシーは両方の評価ポイントで実行されるため、各関数は event:type::string ('request' は ON CALL 用、'response' は ON RESULT 用) でBranchし、ブロックしないすべてのパスに対して明示的な ALLOW を返します。

注記

サービスポリシーは fail-closed です。フィールドの欠落、サポートされていない関数、または評価エラーが発生した場合、結果は DENY になります。VARIANT パスをリテラル(例:event:type::string = 'request')と比較する前に必ずキャストし、各関数の最後を明示的な ALLOW Branch で終了してください。ポリシー本文は、SQLの制限されたサブセットのみをサポートします。サポートされているSQLを参照してください。

特定のキーワードを含むリクエストをブロックします。

このポリシーは、メッセージに内部プロジェクトのコードネームなどのブロックリスト上の用語が含まれている モデルサービス または モデルプロバイダーサービス へのリクエストをブロックします。LOWERを使用してメッセージを小文字に変換するため、一致判定では大文字と小文字が区別されません。

SQL
CREATE OR REPLACE FUNCTION main.governance.block_codenames(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND (
CONTAINS(LOWER(event:context.message::string), 'projectfalcon')
OR CONTAINS(LOWER(event:context.message::string), 'bluewidget')
OR CONTAINS(LOWER(event:context.message::string), 'codename-atlas')
)
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Your request references a restricted internal or competitor codename.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

制限されたトピックに関するリクエストをブロック

このポリシーは、キーワードによって一致する、アシスタントが関与すべきではないトピックに言及した Model サービス または Model Provider サービス へのリクエストをブロックします。これはトピックブロックの確定的形式です。トピックが微妙でキーワードリストでは不十分な場合は、代わりに LLMをジャッジとするポリシーを使用してください。

SQL
CREATE OR REPLACE FUNCTION main.governance.deny_restricted_topics(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND (
CONTAINS(LOWER(event:context.message::string), 'lawsuit')
OR CONTAINS(LOWER(event:context.message::string), 'legal advice')
OR CONTAINS(LOWER(event:context.message::string), 'investment advice')
)
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'This assistant does not handle legal or investment topics.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;
注記

ポリシーSQLサブセットは、CONTAINSLIKESTARTSWITH、およびENDSWITHを使用した部分文字列で一致しますが、正規表現(regexp_*)はサポートされていません。部分文字列の一致では、マイナンバーやアカウント番号のように、構造やチェックサムに依存する形式を検証することはできません。これらのチェックについては、該当する場合は組み込みガードレールを使用してください。サポートされているSQLを参照してください。

プロンプトの長さを制限する

このポリシーは、メッセージが文字数制限を超える Model サービス または Model Provider サービス へのリクエストを拒否します。非常に長いプロンプトは、多くの場合、貼り付けられたダンプやプロンプトスタッフィングの試みであり、レイテンシーとコストを増加させます。

SQL
CREATE OR REPLACE FUNCTION main.governance.deny_oversized_prompt(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND LENGTH(event:context.message::string) > 8000
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Your prompt exceeds the 8000-character limit for this service.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

エージェントがユーザーの代理として行動する場合に承認を要求する

このポリシーは、人ではなくエージェントが MCPサービス 上で機密ツールを呼び出す際に、代理(OBO)アクターコンテキストを使用して書き込みアクションを保持し、人の承認を待ちます。ASKの結果は、人が承認するまで呼び出しを一時停止します。

SQL
CREATE OR REPLACE FUNCTION main.governance.ask_when_agent_writes(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND event:context.actor.context.is_on_behalf_of::boolean = true
AND event:context.tool.name::string IN ('create_issue', 'push_files', 'merge_pull_request')
THEN to_variant_object(named_struct('result', 'ASK', 'reason', 'An agent is attempting a write action on your behalf. Please confirm.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

DatabricksがどのようにしてASKの承認プロンプトを外部エージェントに配信するかについては、「決定ポリシーの作成」を参照してください。

内部URLを公開する応答をブロックする

このポリシーは ON RESULT でランします。 Model サービス または Model Provider サービス 上のモデルの応答を検査し、内部専用ホストを参照する回答をブロックします。event:type::string = 'response' で Branch するため、リクエストではなくレスポンスを評価します。

SQL
CREATE OR REPLACE FUNCTION main.governance.block_internal_links_in_response(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'response'
AND (
CONTAINS(LOWER(event:context.message::string), 'wiki.internal.example.com')
OR CONTAINS(LOWER(event:context.message::string), 'admin.example.com')
)
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'The response was blocked because it referenced an internal-only URL.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

引数に基づいてツール呼び出しをブロック

このポリシーはツールの引数を検査し、保護されたリソースを対象とする呼び出しをブロックする一方で、それ以外のすべての呼び出しを許可します。これは MCPサービス に適用されます。公開されている GitHub プッシュの拒否 の例ではツール名でブロックしますが、この例ではさらに一歩踏み込んで引数の値をチェックします。

SQL
CREATE OR REPLACE FUNCTION main.governance.block_protected_repo(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND event:context.tool.arguments.repo::string = 'prod-infra'
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Actions on the prod-infra repository are not permitted through the agent.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

承認済みのツールのみを許可

このポリシーは、 MCP サービス に対するdefault拒否の許可リストです。固定された読み取り専用ツールのセットのみを許可し、それ以外のすべてのツール呼び出しをブロックします。default拒否は、後からサーバーに追加されたツールがリストに追加されるまでブロックされるため、より安全なパターンです。

SQL
CREATE OR REPLACE FUNCTION main.governance.tool_allowlist(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND event:context.tool.name::string NOT IN ('search_issues', 'get_file_contents', 'list_commits')
THEN to_variant_object(named_struct('result', 'DENY', 'reason', CONCAT('Tool is not on the approved allowlist for this service: ', event:context.tool.name::string)))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

ジャッジとしてのLLMポリシーの例

LLM-as-a-judgeポリシーは、評価モデルを使用して、自然言語で記述した基準に基づいてリクエストまたはレスポンスを分類します。メッセージがトピックに沿っているか、レスポンスが専門的であるかなど、決定論的なルールでは表現できないセマンティックチェックに使用します。

作成するには、ポリシーの添付手順に従いますが、 ガードレールタイプカスタム を選択し、 タイプLLM-as-a-judge に設定します。 プロンプト フィールドに分類器を入力し、 評価者モデルサービス を選択します(選択したモデルにCAN QUERYが必要です)。

フラグを立てる対象 を説明する基準のみを記述します。Databricksはプロンプトに構造化出力コントラクトを付加するため、評価器は自由形式のテキストではなく、JSON形式の決定(flaggedのBooleanとconfidenceのスコア)を返します。プロンプトには ALLOWDENY を記述せず、出力形式も指定しないでください。評価器がコンテンツにフラグを立てると、Databricksはそのインタラクションをブロックします。

注記

このセクションの例はモデルサービス上でランされ、フラグが付けられたコンテンツをブロックします。インタラクションをブロックするのではなく、人間による承認のために保留にするには、MCPサービスに適用されるASK結果を使用してください。エージェントがユーザーの代理として行動する場合の承認の要求を参照してください。

アシスタントのトピックを維持する

このポリシーは、 モデルサービス 上でオンコールでランされます。アシスタントのサポート範囲外のリクエストにはフラグが立てられるため、特定の目的で構築されたアシスタントが汎用チャットボットとして使用されることはありません。

プロンプト:

会社の製品、注文、請求、およびアカウントのサポートのみを支援するカスタマーサポートアシスタントに送信されたメッセージをレビューしています。一般的なコーディングのヘルプ、エッセイの作成、無関係なトリビア、またはアシスタントを汎用チャットボットとして使用するなど、その範囲外のことを要求するメッセージにはフラグを立ててください。正当な製品またはサポートに関する質問にはフラグを立てないでください。

プロフェッショナルな口調を強制する

このポリシーは、 モデルサービス 上のON RESULTでランされます。これは、ブランドイメージにそぐわない応答やプロフェッショナルでない応答にフラグを立て、トーンではなく有害なコンテンツを対象とする組み込みの block_unsafe_content ガードレールを補完します。

プロンプト:

公開されているアシスタントが作成した回答をレビューしています。無礼、皮肉、冷淡、高圧的、冒とく的な表現が含まれている場合、または顧客が目にした場合に会社が恥をかくような内容である場合は、その応答にフラグを立てます。プロフェッショナルで敬意を払い、ブランドイメージに沿った回答にはフラグを立てないでください。

規制対象のアドバイスをブロック

このポリシーは、 Model サービス 上の ON RESULT でランされます。これは、個別化された規制対象の助言を提供する応答にフラグを立て、キーワードルールでは確実に識別できない一般的な非助言情報と区別します。

プロンプト:

金融サービスアシスタントによって作成された回答をレビューしています。個別化された投資、税務、または法的な助言、あるいは特定の個人への推奨事項を提供する応答にはフラグを立ててください。一般的な製品情報、教育、または助言ではないコンテンツのみを提供する応答にはフラグを立てないでください。

この例では、フラグが付けられた応答をブロックします。インタラクションをブロックする代わりに人間の承認を待機させるにはASKの結果を使用します。これは、エージェントがユーザーに代わって行動する場合に承認を要求するにあるように、MCPサービスに適用されます。

関連