Aller au contenu principal

Exemples de politiques de service

info

Bêta

Cette fonctionnalité est en bêta. Les administrateurs de compte peuvent contrôler l'accès à cette fonctionnalité depuis la page **Previews** de la console de compte. Voir Gérer les prévisualisations Databricks.

Ces exemples de politiques de service personnalisées couvrent des scénarios de gouvernance courants pour les modèles d'IA et les services MCP. Elles se répartissent en deux types de politiques personnalisées :

  • Politiques SQL déterministes : une fonction SQL qui prend une décision exacte basée sur des règles (un nom d'outil, une valeur d'argument, un mot-clé, une longueur). Utilisez-les lorsque la règle est précise et reproductible.
  • Politiques LLM-as-a-judge : un classificateur en langage naturel qu’un modèle d’évaluation applique à la requête ou à la réponse. Utilisez-les lorsque la vérification est sémantique (intention, sujet, ton) et qu’aucune règle exacte ne la couvre.

Pour connaître la procédure complète de création et d'association d'une politique, consultez Créer et associer une politique de service. Pour les champs event, la valeur de retour et le sous-ensemble SQL pris en charge, consultez Référence des fonctions de politique de service. Pour les garde-fous intégrés couvrant les IPI, le contenu dangereux, le jailbreak et les hallucinations sans code personnalisé, consultez Politiques de service intégrées.

Exemples de politiques SQL déterministes

Chaque exemple est une fonction définie par l'utilisateur (UDF) SQL que vous enregistrez dans Unity Catalog et que vous attachez à un service. La politique s'exécute aux deux points d'évaluation, de sorte que chaque fonction Branch sur event:type::string ('request' pour la phase d'entrée, ON CALL ; 'response' pour la phase de sortie, ON RESULT) et renvoie un ALLOW explicite pour chaque chemin qu'elle ne bloque pas.

remarque

Les politiques de service sont fail-closed (échec par fermeture) : un champ manquant, une fonction non prise en charge ou toute erreur d’évaluation entraîne DENY. Effectuez toujours un cast d’un chemin VARIANT avant de le comparer à une valeur littérale (par exemple, event:type::string = 'request'), et terminez chaque fonction par une Branch ALLOW explicite. Le corps de la politique prend uniquement en charge un sous-ensemble restreint de SQL. Voir SQL pris en charge.

Bloquer les requêtes contenant des mots-clés spécifiques

Cette politique bloque les requêtes adressées à un Model Service ou à un Model Provider Service dont le message contient un terme figurant sur une liste de blocage, tel qu’un nom de code de projet interne. Il met le message en minuscules avec LOWER afin que la correspondance ne soit pas sensible à la casse.

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;

Bloquer les demandes concernant des sujets restreints

Cette politique bloque les requêtes adressées à un Model Service ou à un Model Provider Service qui mentionnent des sujets sur lesquels l'assistant ne doit pas s'engager, identifiés par mot-clé. Il s'agit de la forme déterministe d'un bloc de sujet. Lorsque le sujet est nuancé et qu'une liste de mots-clés est trop imprécise, utilisez plutôt une politique LLM-as-a-judge.

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;
remarque

Le sous-ensemble SQL de la politique correspond aux sous-chaînes avec CONTAINS, LIKE, STARTSWITH et ENDSWITH; les expressions régulières (regexp_*) ne sont pas prises en charge. La correspondance de sous-chaîne ne peut pas valider un format qui dépend d’une structure ou d’une somme de contrôle, tel qu’un ID national ou un numéro de compte. Pour ces vérifications, utilisez un garde-fou intégré lorsqu'il y en a un. Voir SQL pris en charge.

Limiter la longueur du prompt

Cette politique refuse les requêtes adressées à un Model Service ou à un service de fournisseur de modèle dont le message dépasse une limite de caractères. Les prompts très longs sont souvent des dumps copiés-collés ou des tentatives de « prompt-stuffing », et ils augmentent la latence et les coûts.

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;

Exiger une approbation lorsqu’un agent agit au nom d’un utilisateur

Cette politique utilise le contexte d’acteur « on-behalf-of » (OBO) pour suspendre une action d’écriture en attente d’une approbation humaine lorsqu’un agent, plutôt qu’une personne, appelle un outil sensible sur un MCP Service . Le résultat ASK suspend l’appel jusqu’à ce qu’une personne l’approuve.

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;

Pour savoir comment Databricks transmet l’invite d’approbation ASK à un agent externe, consultez Rédiger une politique de décision.

Bloquer les réponses qui exposent des URL internes

Cette politique s'exécute lors de la phase de sortie (ON RESULT) : elle inspecte la réponse du modèle sur un Model Service ou un Model Provider Service et bloque les réponses qui font référence à un hôte interne uniquement. Parce qu'elle se ramifie sur event:type::string = 'response', elle évalue la réponse plutôt que la demande.

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;

Bloquer un appel d’outil par ses arguments

Cette politique inspecte les arguments d’un outil et bloque les appels ciblant une ressource protégée, tout en autorisant tous les autres appels. Il s’applique à un service MCP . L’exemple publié deny a GitHub push bloque un outil par son nom ; celui-ci va un niveau plus loin et vérifie la valeur d’un argument.

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;

Restreindre un outil sensible aux agents approuvés

Cette politique restreint un outil d’écriture sensible sur un service MCP aux agents approuvés. Un appel push_files effectué pour le compte d’un utilisateur n’est autorisé que si l’ID client OAuth de l’agent agissant (event:context.actor.context.client_id) figure sur la liste approuvée ; tout le reste est autorisé. Si l’ID client est manquant ou nul, l’appel est également refusé, de sorte que la porte reste fermée en cas d’échec. Les appels non effectués pour le compte d’un agent sont transmis à ALLOW, laissant l’accès ordinaire régi par les autorisations.

SQL
CREATE OR REPLACE FUNCTION main.governance.restrict_push_to_approved_agents(
event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN
CASE
WHEN event:type::string = 'request'
AND event:context.tool.name::string = 'push_files'
AND event:context.actor.context.is_on_behalf_of::boolean = true
AND (
event:context.actor.context.client_id IS NULL
OR event:context.actor.context.client_id::string NOT IN ('release-bot', 'ci-deployer')
)
THEN to_variant_object(named_struct('result', 'DENY', 'reason', 'Only approved agents can call the push_files tool on this service.'))
ELSE to_variant_object(named_struct('result', 'ALLOW', 'reason', ''))
END;

Pour affiner davantage la règle, combinez la vérification de l’agent avec une valeur d’argument, telle que Bloquer un appel d’outil par ses arguments, par exemple pour autoriser l’envoi uniquement vers un repository spécifique. Cet exemple utilise le même contexte d’acteur « au nom de » que Exiger une approbation lorsqu’un agent agit au nom d’un utilisateur, mais renvoie DENY pour un agent non approuvé au lieu de ASK.

Exemples de politique LLM-as-a-judge

Une politique LLM-as-a-judge utilise un modèle d'évaluation pour classer la requête ou la réponse en fonction de critères que vous décrivez en langage naturel. Utilisez-le pour des vérifications sémantiques qu'une règle déterministe ne peut pas exprimer, comme déterminer si un message est hors sujet ou si une réponse reste professionnelle.

Pour en créer un, suivez la procédure attach a policy, mais dans Guardrail type , sélectionnez Custom , puis définissez Type sur LLM-as-a-judge . Saisissez votre classificateur dans le champ Prompt et sélectionnez un Evaluator model service (vous avez besoin de CAN QUERY sur le modèle que vous choisissez).

Vous rédigez les critères de classification. Databricks ajoute un contrat de sortie structuré à votre invite, afin que l'évaluateur renvoie une décision JSON (un booléen flagged et un score confidence) plutôt que du texte libre. N'écrivez pas ALLOW ou DENY dans l'invite, et ne spécifiez pas de format de sortie. Lorsque l'évaluateur signale un contenu, Databricks bloque l'interaction. Databricks encapsule également le contenu en cours d'évaluation et demande à l'évaluateur de le traiter comme des données non fiables plutôt que comme des instructions à suivre.

remarque

Les exemples de cette section s'exécutent sur des services de modèles et bloquent le contenu signalé. Pour suspendre une interaction en attente d'une approbation humaine au lieu de la bloquer, utilisez le résultat ASK, qui s'applique aux services MCP. Voir Exiger une approbation lorsqu'un agent agit au nom d'un utilisateur.

Rédiger des prompts de juge efficaces

Les invites sur cette page sont des points de départ. Adaptez chacune d’entre elles au domaine de votre assistant et testez-la sur un trafic réaliste et pertinent avant de vous fier à elle pour bloquer.

Le tableau suivant répertorie les bonnes pratiques qui rendent un prompt de juge plus fiable.

Bonne pratique

Description

Définissez clairement les critères de MARQUAGE et de NON-MARQUAGE.

Décrivez le contenu à signaler, puis le contenu à laisser tel quel. Chaque exemple ici associe une condition « signaler si » à une limite « ne pas signaler » ; une invite qui ne liste que ce qu’il faut signaler a tendance à signaler excessivement.

Fournissez un élément de départage pour les cas limites.

Indiquez comment classer le contenu situé entre les deux listes, par exemple si un cadre éducatif ou fictif exempte des détails autrement interdits, afin que l’évaluateur ne tranche pas ces cas de manière incohérente.

Décrivez l'intention, pas seulement les mots-clés ou les techniques.

Signalez ce qu’un message tente de faire, et non la simple présence d’un mot ou d’une technique. Le jeu de rôle ou une chaîne encodée ne constitue pas un jailbreak en soi ; exigez une tentative d’obtention de contenu non autorisé.

Privilégiez une solution intégrée lorsque cela est possible, et veillez à ce que les critères personnalisés restent ciblés.

Pour un risque déjà couvert par un garde-fou intégré, tel que les IPI, le contenu dangereux ou le déverrouillage, utilisez l'élément intégré au lieu de le décrire à nouveau dans un prompt personnalisé. La superposition de politiques reste possible, et certaines équipes le font délibérément, mais cela ajoute une évaluation et un coût redondants et rend plus difficile l'identification de la politique ayant bloqué une interaction donnée.

Déployez d’abord en mode Logs et tenez compte du non-déterminisme.

Attachez la politique en mode Logs , qui enregistre le verdict sans bloquer, et examinez ses faux positifs et négatifs sur un trafic réaliste dans le périmètre avant de passer en mode Enforce . L’examen de ces verdicts nécessite l’activation des tables d’inférence sur le service ; sans elles, une politique en mode Logs s’évalue toujours, mais il n’y a rien que vous puissiez inspecter. L’évaluateur est un modèle, de sorte que la même entrée peut occasionnellement obtenir des verdicts différents, et une invite qui signale agressivement le contenu limite produit des faux positifs à l’échelle de la montée en charge.

Bonne pratique

Description

Définissez clairement les critères de MARQUAGE et de NON-MARQUAGE.

Décrivez le contenu à signaler, puis le contenu à laisser tel quel. Chaque exemple ici associe une condition « signaler si » à une limite « ne pas signaler » ; une invite qui ne liste que ce qu’il faut signaler a tendance à signaler excessivement.

Fournissez un élément de départage pour les cas limites.

Indiquez comment classer le contenu situé entre les deux listes, par exemple si un cadre éducatif ou fictif exempte des détails autrement interdits, afin que l’évaluateur ne tranche pas ces cas de manière incohérente.

Décrivez l'intention, pas seulement les mots-clés ou les techniques.

Signalez ce qu’un message tente de faire, et non la simple présence d’un mot ou d’une technique. Le jeu de rôle ou une chaîne encodée ne constitue pas un jailbreak en soi ; exigez une tentative d’obtention de contenu non autorisé.

Privilégiez une solution intégrée lorsque cela est possible, et veillez à ce que les critères personnalisés restent ciblés.

Pour un risque déjà couvert par un garde-fou intégré, tel que les IPI, le contenu dangereux ou le déverrouillage, utilisez l'élément intégré au lieu de le décrire à nouveau dans un prompt personnalisé. La superposition de politiques reste possible, et certaines équipes le font délibérément, mais cela ajoute une évaluation et un coût redondants et rend plus difficile l'identification de la politique ayant bloqué une interaction donnée.

Déployez d’abord en mode Logs et tenez compte du non-déterminisme.

Attachez la politique en mode Logs , qui enregistre le verdict sans bloquer, et examinez ses faux positifs et négatifs sur un trafic réaliste dans le périmètre avant de passer en mode Enforce . L’examen de ces verdicts nécessite l’activation des tables d’inférence sur le service ; sans elles, une politique en mode Logs s’évalue toujours, mais il n’y a rien que vous puissiez inspecter. L’évaluateur est un modèle, de sorte que la même entrée peut occasionnellement obtenir des verdicts différents, et une invite qui signale agressivement le contenu limite produit des faux positifs à l’échelle de la montée en charge.

Maintenir un assistant sur le sujet

Cette politique de phase d’entrée (ON CALL) s’exécute sur un Model Service . Il signale les demandes qui sortent du champ d’application pris en charge par l’assistant, afin qu’un assistant conçu pour un usage spécifique ne soit pas utilisé comme un chatbot généraliste.

Invite :

Vous examinez les messages envoyés à un assistant de support client qui ne peut aider qu'avec les produits, les commandes, la facturation et le support de compte de l'entreprise. Signalez le message s'il demande quelque chose en dehors de ce périmètre, comme une aide générale au codage, la rédaction d'essais, des questions triviales sans rapport ou l'utilisation de l'assistant comme chatbot polyvalent. Ne signalez pas une question authentique sur le produit ou le support.

Appliquer un ton professionnel

Cette politique de phase de sortie (ON RESULT) s’exécute sur un Model Service . Il signale les réponses non conformes à la marque ou non professionnelles, en complément du garde-fou block_unsafe_content intégré, qui cible les contenus dangereux plutôt que le ton.

Invite :

Vous examinez les réponses rédigées par un assistant accessible au public. Signalez la réponse si elle est impolie, sarcastique, dédaigneuse, condescendante, contient des termes grossiers ou si elle pouvait embarrasser l'entreprise si un client la voyait. Ne signalez pas une réponse qui est professionnelle, respectueuse et conforme à l'image de marque.

Conseils réglementés de Block

Cette politique de phase de sortie (ON RESULT) s’exécute sur un Model Service . Il signale les réponses qui donnent des conseils réglementés individualisés, en les distinguant des informations générales sans caractère consultatif, ce qu'une règle basée sur des mots-clés ne peut pas faire de manière fiable.

Invite :

Vous examinez les réponses rédigées par un assistant de services financiers. Signalez la réponse si elle fournit des conseils personnalisés en matière d'investissement, de fiscalité ou de droit, ou une recommandation spécifique à une personne. Ne signalez pas une réponse qui fournit uniquement des informations générales sur le produit, des éléments éducatifs ou du contenu sans caractère de conseil.

Cet exemple bloque les réponses signalées. La mise en attente d'une interaction pour approbation humaine au lieu de son blocage utilise le résultat ASK, qui s'applique aux services MCP, comme dans Exiger une approbation lorsqu'un agent agit au nom d'un utilisateur.

Exemples de LLM-as-a-judge multi-tours

Les exemples LLM-as-a-judge ci-dessus évaluent le dernier message seul. Certains risques ne sont visibles qu'à travers un échange, lorsque le dernier message semble correct mais que la conversation récente ne l'est pas. Une politique multi-turn LLM-as-a-judge donne à l'évaluateur une fenêtre sur les messages les plus récents au lieu du seul dernier message.

Pour l’activer, joignez la politique en tant que politique de juge LLM et définissez le champ Fenêtre de conversation sur le nombre de messages récents que l’évaluateur doit recevoir, ou sélectionnez Évaluer toute la conversation . L’évaluation multi-tour s’applique uniquement à la phase d’entrée (ON CALL) sur les services de modèles et les services de fournisseur de modèles ; elle n’est pas disponible pour la phase de sortie ou sur les services MCP. Rédigez le prompt pour juger les messages récents ensemble, et non uniquement le dernier.

La fenêtre de conversation compte les messages individuels de tout rôle (système, utilisateur, assistant et outil), et non les paires d’échanges ; ainsi, une fenêtre de 6 couvre les six derniers messages, et une fenêtre de 1 équivaut à une évaluation par message unique. Pour une fenêtre supérieure à un, l’évaluateur reçoit les messages récents ainsi que le dernier message de l’utilisateur issu de la requête ; le tour actuel est donc toujours évalué en tenant compte du contexte récent.

Évaluer toute la conversation envoie chaque message de la demande actuelle, et non un historique de session conservé sur le serveur : Databricks ne conserve aucun état de conversation entre les demandes. Il n'applique aucune limite de taille, de sorte qu'une longue conversation peut dépasser la fenêtre de contexte du modèle d'évaluation et échouer à l'évaluation, ce qui refuse la requête, car les politiques échouent par défaut (fail closed). Une fenêtre plus grande ajoute également un coût en jetons et de la latence. Préférez une fenêtre numérique bornée suffisamment grande pour capturer le modèle que vous vérifiez, et réservez Évaluer toute la conversation aux échanges courts.

remarque

L'évaluation à plusieurs tours est fenêtrée et non basée sur l'état. L'évaluateur ne voit que les messages présents dans la demande actuelle, et Databricks ne conserve aucun état entre les demandes. Dans cette fenêtre, une politique peut agir sur un tour précédent, mais elle ne peut pas utiliser d'informations ayant disparu de la demande ni maintenir un score cumulé entre les demandes. Il ne peut pas implémenter de contrôles limités à la session, tels que « une fois que cet agent a lu des données sensibles, bloquer ses autres outils pour le reste de la session ».

Pour les risques de jailbreak et de contenu dangereux , utilisez les garde-fous intégrés Jailbreak et Contenu dangereux, que vous pouvez également exécuter sur les messages récents en définissant une fenêtre de conversation . Réservez un juge multi-tours personnalisé pour les politiques spécifiques à un domaine que les juges intégrés ne couvrent pas. Consultez les sections suivantes pour des exemples de politiques spécifiques à un domaine.

Détecter une conversation qui s'éloigne du sujet

Cette politique de phase d’entrée (ON CALL) s’exécute sur un Model Service ou un Service de fournisseur de modèles . Il s’agit de la forme multi-tours de Maintenir un assistant sur le sujet: elle signale une conversation qui est sortie du périmètre pris en charge par l’assistant sur plusieurs tours, même lorsque le dernier message semble acceptable pris isolément.

Invite :

Vous examinez les tours les plus récents d'une conversation avec un assistant de support client qui ne peut aider qu'avec les produits, les commandes, la facturation et le support de compte de l'entreprise. Signalez la conversation si l'échange récent est sorti de ce cadre, par exemple vers de l'aide au codage général, la rédaction d'essais ou des questions triviales sans rapport, même lorsque le dernier message semble en soi pouvoir être dans le cadre. Ne signalez pas une conversation qui reste dans le cadre des sujets pris en charge.

Signaler une discussion sur un projet confidentiel au fil des échanges

Cette politique de phase d'entrée (ON CALL) s'exécute sur un Service de modèle ou un Service de fournisseur de modèles . Il s'agit du complément sémantique multi-tours du bloc de nom de code par mot-clé déterministe : il signale une conversation qui cherche à obtenir des informations ou discute d'un projet interne confidentiel, même lorsque le dernier message ne le nomme pas. Adaptez la description de ce qui est considéré comme confidentiel pour votre organisation.

Invite :

Vous examinez les tours les plus récents d’une conversation avec un assistant interne. Signalez la conversation si les messages récents sollicitent ou discutent de détails concernant un projet interne confidentiel non publié, tel que sa feuille de route, ses données financières ou son nom de code, même lorsque le dernier message ne nomme pas le projet à lui seul. Ne signalez pas les questions générales concernant des produits commercialisés ou les informations publiques de l’entreprise.

Signaler une demande orientée vers des conseils réglementés

Cette politique en phase d’entrée (ON CALL) s’exécute sur un Service de modèle ou un Service de fournisseur de modèles . Il s’agit du complément multi-tours en phase de requête à Bloquer les conseils réglementés, qui vérifie une réponse unique : il signale une conversation orientant l’assistant vers la fourniture de conseils réglementés individualisés, afin que l’assistant puisse rediriger avant de répondre.

Invite :

Vous examinez les tours les plus récents d'une conversation avec un assistant de services financiers qui peut ne partager que des informations générales et éducatives. Signalez la conversation si les messages récents visent à obtenir des conseils personnalisés en matière d'investissement, de fiscalité ou de droit, ou une recommandation spécifique pour la situation propre à l'utilisateur, même lorsque le dernier message semble être une question d'ordre général. Ne signalez pas une conversation qui reste sur des informations générales et non consultatives.

Connexes