Tutorial: Adicionar proteções de políticas de serviço a um serviço modelo

Importante

As políticas de serviço estão em Beta. O Unity AI Gateway está geralmente disponível, mas as suas capacidades beta estão ativadas separadamente. Um administrador de conta deve ativar as funcionalidades beta do Unity AI Gateway na página de Pré-visualizações da consola de contas. Ver Gerir as pré-visualizações de Azure Databricks.

Este tutorial explica como adicionar guarda-corpos a um Serviço de Modelo, de duas formas complementares. No Azure Databricks, os guardrails são políticas de serviço. Um serviço modelo pode iniciar um modelo hospedado no Azure Databricks ou um fornecedor externo como OpenAI, Anthropic ou Google, e você governa ambos da mesma forma:

  • Políticas de serviço incorporadas (guardrails): verificações geridas, fornecidas pelo Azure Databricks, para riscos comuns como PII, conteúdos inseguros, tentativas de jailbreak e alucinações. Anexas um selecionando-o na interface, sem código para escrever.
  • Políticas de serviço personalizadas: Funções SQL que escreve para regras específicas da sua organização, como um nome de código confidencial de projeto ou um padrão de resposta banida.

Para conhecer os conceitos das políticas de serviço, as proteções integradas e a referência completa de criação, consulte Políticas de serviço para recursos protegíveis de IA, Criar e associar uma política de serviço e Referência das funções da política de serviço.

Pode associar ambos da mesma forma, a partir do separador Policies de um serviço de modelo na interface do Unity AI Gateway, e pode misturá-los. Azure Databricks avalia cada um em dois pontos:

  • A fase de entrada (ON CALL) antes de o sistema invocar o modelo.
  • A fase de saída (ON RESULT) após o modelo responder.

Na interface, seleciona a fase quando anexa a política. Uma política personalizada também pode restringir-se a uma fase, ramificando com base em event:type.

Cenário: A sua equipa expõe um LLM através de um Serviço de Modelos (main.default.team_chat) ao qual as aplicações e os agentes recorrem. Quer bloquear conteúdos inseguros ou prejudiciais com uma barreira gerida, bloquear qualquer prompt que mencione um projeto confidencial e bloquear respostas que contenham uma ligação insegura, tudo isto sem alterar o código da aplicação.

No final deste tutorial, terá:

  • Uma proteção integrada no serviço contra conteúdo inseguro.
  • Uma política de solicitação personalizada que bloqueia um nome de código confidencial na fase de entrada (ON CALL).
  • Uma política de resposta personalizada que bloqueia hiperligações inseguras na fase de saída (NO RESULTADO).
  • Os três foram anexados e verificados na área de testes do serviço de modelos.

Pré-requisitos

  • Um espaço de trabalho ativado para o Unity Catalog. Consulte Introdução ao Catálogo Unity.
  • As funcionalidades beta do Unity AI Gateway estão ativadas para a sua conta, o que ativa as políticas de serviço e as outras capacidades beta do Unity AI Gateway. Ver Gerir as pré-visualizações de Azure Databricks.
  • Um serviço de modelo para gerir e EXECUTE nele para que o possas testar. Para criar uma, consulte Criar e gerir APIs modelo (serviços modelo). Este tutorial utiliza main.default.team_chat.
  • MANAGE no Serviço Modelo, para anexar apólices.
  • CREATE FUNCTION No esquema onde crias as funções de política personalizadas (main.governance neste tutorial).
  • Para o guardrail incorporado: o modelo avaliador que executa a verificação do guardrail (o juiz do LLM) é pré-selecionado, pelo que não é necessária qualquer configuração. Se selecionares um avaliador diferente nas opções avançadas, tens de CAN_QUERY estar nele.

Passo 1: Aplique um corrimão de proteção incorporado

Os mecanismos de proteção integrados são verificações efetuadas por um juiz LLM. Seleciona-se um no menu do tipo Guardrail ; o serviço modelo de avaliador que executa a verificação (o juiz do LLM) é pré-selecionado para si. Os guarda-corpos disponíveis são:

  • Conteúdo Inseguro (system.ai.block_unsafe_content): nega conteúdo inseguro ou prejudicial.
  • Jailbreak (system.ai.block_jailbreak): bloqueia injeção de prompts e tentativas de jailbreak (apenas solicitações).
  • Alucinação (system.ai.block_hallucination): nega respostas alucinadas (apenas respostas).

Associe a proteção contra conteúdo inseguro ao serviço do seu modelo:

  1. Na barra lateral do espaço de trabalho, clique em AI Gateway.
  2. No separador Modelos , selecione o seu serviço de modelos (main.default.team_chat).
  3. Abra o separador Políticas e, em seguida, clique em Nova política.
  4. Introduza um Nome, como block-unsafe-content.
  5. Em “Aplicado a”, mantenha Todos os utilizadores da conta ou limite o âmbito da política a entidades específicas.
  6. Em Tipo de proteção, selecione Conteúdo não seguro.
  7. Defina Classificação para 1. A classificação define a ordem de avaliação: a classificação mais baixa é a primeira no pedido e a última na resposta.
  8. Em Fase, selecione tanto Guardrails de entrada (antes do modelo) como Guardrails de saída (depois do modelo), para que os guardrails sejam aplicados a solicitações e respostas.
  9. Clique em Criar política.

O guardrail utiliza um serviço modelo de avaliador pré-selecionado (o juiz LLM que executa a verificação). Para usar um modelo diferente, expanda Opções avançadas antes de criar a política; precisa de CAN_QUERY no modelo que selecionar.

Note

Depois de anexar ou alterar uma política num Serviço Modelo, permita um curto período para que a alteração entre em vigor antes de testar. Durante a versão beta das políticas de serviço, pode demorar alguns minutos a propagar-se.

Passo 2: Adicionar uma política de pedidos personalizada

As salvaguardas abrangem riscos comuns. Para uma regra específica da sua organização, elabore uma política personalizada. Uma política personalizada é um UDF SQL que toma (event VARIANT) e devolve uma decisão; leia o texto da mensagem de event:context.message, uma projeção independente da API da última mensagem do utilizador ou assistente.

Esta política nega qualquer pedido que mencione um nome de código confidencial do projeto. A event:type::string = 'request' verificação limita-o à fase de entrada (EM CHAMADA):

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 e lower fazem parte do subconjunto SQL suportado nos órgãos de políticas. Para a lista completa e as regras para a redação de uma função de política, consulte a referência da função de política de serviço.

Associe a função como uma política personalizada, limitada à fase do pedido:

  1. No separador Políticas do serviço modelo, clique em Nova política e insira um Nome, como block-codename.
  2. No tipo de proteção, selecione Personalizado.
  3. Clica em Função Personalizada, depois Selecionar a função e selecionar main.governance.block_confidential_codename.
  4. Em "Fase", selecione apenas Mecanismos de proteção de entrada (antes do modelo), porque esta é uma política de pedidos.
  5. Defina Classificação para 10, e depois clique em Criar política.

Passo 3: Adicionar uma política de resposta personalizada

Um modelo também pode devolver conteúdos que não queres que passem. Esta política nega uma resposta que contenha um link inseguro (um http:// URL ou um javascript: URI). event:type::string = 'response' A verificação restringe-a à fase de saída (ON RESULT), pelo que um utilizador que apenas mencione esses esquemas num pedido não a aciona à entrada:

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;

Associe a função como uma política personalizada, aplicada à fase de resposta:

  1. No separador Políticas , clique em Nova política e insira um Nome, como block-unsafe-links.
  2. Em Tipo de proteção, selecione Personalizado e, em seguida, selecione main.governance.block_unsafe_links em Função personalizada.
  3. Em Fase, selecione apenas Proteções de saída (após o modelo), porque esta é uma política de resposta.
  4. Defina Classificação para 20, e depois clique em Criar política.

Passo 4: Verificar

As três políticas aparecem agora no separador Políticas do serviço. Use o playground para confirmar que cada uma é acionada:

  1. Na página do serviço de modelos, clique em Chat no playground.
  2. Envie um prompt que solicite conteúdos inseguros ou prejudiciais. A barreira do conteúdo inseguro bloqueia-o, e a resposta relata que o conteúdo foi bloqueado pela política.
  3. Enviar Tell me about Project Aurora. A política de solicitações bloqueia-a pelo seguinte motivo: Não são permitidas solicitações sobre projetos confidenciais.
  4. Envie um prompt que faça o modelo devolver uma hiperligação http://. A política de resposta bloqueia-a na fase de resultado (NO RESULTADO) pelo motivo A resposta continha uma ligação insegura e foi bloqueada pela política.
  5. Envia um prompt normal. Retorna uma conclusão normal.

Para testar o serviço a partir das suas próprias aplicações ou scripts, em alternativa, consulte Consultar as APIs do modelo (serviços de modelo).

Limpeza

Quando terminares, remove as políticas no separador de Políticas : abre cada política que criaste e apaga-a. Depois, opcionalmente, elimina as funções personalizadas:

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

Passos seguintes