Exemplos de políticas de serviço
Beta
Este recurso está em Beta. Administradores da conta podem controlar o acesso a este recurso na página **Prévias** do console da conta. Consulte Gerenciar prévias do Databricks.
Estes exemplos de políticas de serviço personalizadas cobrem cenários comuns de governança para modelos de AI e serviços MCP. Eles se enquadram em dois tipos de política personalizada:
- Políticas SQL determinísticas : uma função SQL que toma uma decisão exata baseada em regras (um nome de ferramenta, um valor de argumento, uma palavra-chave, um comprimento). Utilize-as quando a regra for precisa e repetível.
- Políticas de LLM como juiz : um classificador de linguagem natural que um modelo avaliador aplica à solicitação ou resposta. Use-os quando a verificação for semântica (intenção, tópico, tom) e nenhuma regra exata a capture.
Para o procedimento de ponta a ponta para criar e anexar uma política, consulte Criar e anexar uma política de serviço. Para os campos event, o valor de retorno e o subconjunto SQL compatível, consulte Referência de função de política de serviço. Para as guardrails integradas que cobrem PII, conteúdo inseguro, jailbreak e alucinação sem código personalizado, consulte Políticas de serviço integradas.
Exemplos de política SQL determinística
Cada exemplo é uma função definida pelo usuário (UDF) SQL que você registra no Unity Catalog e anexa a um serviço. A política entra em execução em ambos os pontos de avaliação, portanto, cada função Branch em event:type::string ('request' para ON CALL, 'response' para ON RESULT) e retorna um ALLOW explícito para cada caminho que não bloqueia.
As políticas de serviço são fail-closed : um campo ausente, uma função não compatível ou qualquer erro de avaliação resulta em DENY. Sempre converta um caminho VARIANT antes de compará-lo a um literal (por exemplo, event:type::string = 'request') e termine cada função com uma branch ALLOW explícita. O corpo da política oferece suporte apenas a um subconjunto restrito de SQL. Consulte SQL compatível.
Bloquear solicitações que contenham palavras-chave específicas
Esta política bloqueia solicitações para um Serviço de modelo ou Serviço de provedor de modelos cuja mensagem contenha qualquer termo em uma lista de bloqueio, como um codinome de projeto interno. Ele converte a mensagem para minúsculas com LOWER para que a correspondência não diferencie maiúsculas de minúsculas.
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;
Bloquear solicitações sobre tópicos restritos
Esta política bloqueia solicitações a um Model serviço ou Model Provider serviço que mencionem tópicos nos quais o assistente não deve se envolver, correspondidos por palavra-chave. Esta é a forma determinística de um bloco de tópico. Quando o tópico é sutil e uma lista de palavras-chave é muito imprecisa, use uma política de LLM-como-juiz em vez disso.
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;
O subconjunto SQL da política corresponde a substrings com CONTAINS, LIKE, STARTSWITH e ENDSWITH; expressões regulares (regexp_*) não são suportadas. A correspondência de substring não pode validar um formato que dependa de estrutura ou de uma soma de verificação, como um ID nacional ou um número de account. Para essas verificações, use um guardrail integrado onde um se aplique. Consulte SQL suportado.
Limitar o comprimento do prompt
Esta política nega solicitações a um Model serviço ou Model Provider serviço cuja mensagem excede um limite de caracteres. Prompts muito longos são frequentemente despejos colados ou tentativas de prompt-stuffing, e eles aumentam a latência e o custo.
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;
Exigir aprovação quando um agente agir em nome de um usuário
Esta política usa o contexto de ator em nome de (OBO) para reter uma ação de gravação para aprovação humana quando um agente, em vez de uma pessoa, chama uma ferramenta sensível em um Serviço MCP . O resultado ASK pausa a chamada até que uma pessoa a aprove.
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;
Para saber como o Databricks entrega o prompt de aprovação ASK a um agente externo, consulte Write a decision policy.
Bloquear respostas que exponham URLs internas
Esta política entra em execução em ON RESULT: ela inspeciona a resposta do modelo em um Serviço de Modelo ou Serviço de Provedor de Modelo e bloqueia respostas que fazem referência a um host interno. Como ele faz Branch em event:type::string = 'response', ele avalia a resposta em vez da solicitação.
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;
Bloquear uma chamada de ferramenta por seus argumentos
Esta política inspeciona os argumentos de uma ferramenta e bloqueia chamadas que visam um recurso protegido, enquanto permite todas as outras chamadas. Isso se aplica a um serviço MCP . O exemplo publicado negar um push do GitHub bloqueia uma ferramenta pelo nome; este vai um nível mais fundo e verifica um valor de argumento.
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;
Permitir apenas ferramentas aprovadas
Esta política é uma lista de permissões default-deny para um MCP serviço : ela permite um conjunto fixo de ferramentas somente leitura e bloqueia todas as outras chamadas de ferramenta. Default-deny é o padrão mais seguro porque uma ferramenta adicionada ao servidor posteriormente é bloqueada até que você a adicione à lista.
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;
Exemplos de política LLM-como-juiz
Uma política de LLM-as-a-judge usa um modelo avaliador para classificar a solicitação ou resposta em relação a critérios descritos por você em linguagem natural. Use-o para verificações semânticas que uma regra determinística não consegue expressar, como se uma mensagem está dentro do tópico ou se uma resposta permanece profissional.
Para criar um, siga o procedimento anexar uma política, mas em Tipo de guardrail selecione Personalizado e, em seguida, defina Tipo como LLM-as-a-judge . Insira seu classificador no campo Prompt e selecione um serviço de modelo de avaliador (você precisa de CAN QUERY no modelo que escolher).
Você escreve apenas os critérios que descrevem o que sinalizar . O Databricks anexa um contrato de saída estruturada ao seu prompt, para que o avaliador retorne uma decisão JSON (um booleano flagged e uma pontuação confidence) em vez de texto livre. Não escreva ALLOW ou DENY no prompt e não especifique um formato de saída. Quando o avaliador sinaliza conteúdo, o Databricks bloqueia a interação.
Os exemplos nesta seção estão em execução em serviços de modelo e bloqueiam conteúdo sinalizado. Para manter uma interação para aprovação humana em vez de bloqueá-la, use o resultado ASK, que se aplica a serviços MCP. Consulte Exigir aprovação quando um agente atua em nome de um usuário.
Manter um assistente no tópico
Esta política é executada ON CALL em um serviço de modelo . Ele sinaliza solicitações que estão fora do escopo suportado pelo assistente, para que um assistente criado para um propósito não seja usado como um chatbot de propósito geral.
Prompt:
Você está revisando mensagens enviadas a um assistente de suporte ao cliente que pode ajudar apenas com produtos, pedidos, faturamento e suporte de account da empresa. Sinalize a mensagem se ela solicitar algo fora desse escopo, como ajuda geral com programação, redação de ensaios, curiosidades não relacionadas ou uso do assistente como um chatbot de uso geral. Não sinalize uma pergunta genuína sobre o produto ou suporte.
Aplicar um tom profissional
Esta política está em execução ON RESULT em um Model serviço . Ele sinaliza respostas que não estão alinhadas à marca ou que não são profissionais, complementando o guardrail block_unsafe_content integrado, que tem como alvo conteúdo prejudicial em vez de tom.
Prompt:
Você está revisando respostas redigidas por um assistente voltado ao público. Sinalize a resposta se ela for rude, sarcástica, desdenhosa, condescendente, usar linguagem de baixo calão ou se puder constranger a empresa caso um cliente a veja. Não sinalize uma resposta que seja profissional, respeitosa e alinhada à marca.
Bloquear conselhos regulamentados
Esta política está em execução ON RESULT em um Model serviço . Ele sinaliza respostas que fornecem conselhos regulamentados individualizados, distinguindo-as de informações gerais e não consultivas, o que uma regra de palavra-chave não consegue fazer de forma confiável.
Prompt:
Você está revisando respostas redigidas por um assistente de serviços financeiros. Sinalize a resposta se ela fornecer aconselhamento individualizado sobre investimentos, impostos ou questões jurídicas, ou uma recomendação específica para uma pessoa. Não sinalize uma resposta que forneça apenas informações gerais sobre o produto, conteúdo educacional ou conteúdo não consultivo.
Este exemplo bloqueia respostas sinalizadas. Manter uma interação para aprovação humana em vez de bloqueá-la usa o resultado ASK, que se aplica a serviços MCP, conforme em Exigir aprovação quando um agente atua em nome de um usuário.