Apresentamos o Galvanize 2: mais ataques detetados, muito menos alarmes falsos

John Silver7 min de leitura

Galvanize 2

Atualização (12 out.): o Galvanize 2 já está ativo na verificação cloud da zn.

Um detetor de injeção de prompts tem duas funções. Tem de detetar ataques e tem de deixar em paz tudo o resto. Para um agente de IA, a segunda função importa tanto como a primeira. Os agentes lêem documentos longos, READMEs, registos e saídas de ferramentas o dia inteiro. Um detetor que sinaliza um documento legítimo pára o agente a meio de um trabalho real. Depois de algumas dessas paragens, as pessoas desligam-no, e então já não deteta nada.

O nosso modelo anterior, o Galvanize-60M, chumbou nesse teste. No nosso conjunto de documentos longos benignos, sinalizou cerca de 66% deles como ataques. O Galvanize 2 sinaliza 4,1%, e além disso deteta mais ataques do que o modelo que substitui.

Este artigo descreve o que mudou, os resultados (incluindo onde o modelo é mais fraco), como medimos e o que isto significa se usar o zn-gate.

O que mudou

O Galvanize 2 é ajustado a partir do Horizon-Labs/prompt-injection-guard-small (Apache-2.0). Tem cerca de 141 M de parâmetros e é multilingue. Partimos do modelo da Horizon porque já é um detetor aberto sólido, com uma taxa baixa de alarmes falsos. Ajustámo-lo com a nossa própria mistura de dados públicos e internos de injeção de prompts, orientada para o que os agentes de programação realmente veem.

Obrigado à Horizon Labs por publicar o modelo em aberto, com as suas fontes de treino e a sua suíte de avaliação. O Galvanize 2 não existiria sem esse trabalho.

O Galvanize 2 é publicado com a mesma licença, Apache-2.0: https://huggingface.co/usezn/Galvanize-2.

Resultados

O nosso conjunto de teste reservado

O nosso conjunto de teste reservado tem 3.309 exemplos em várias línguas. Nenhum foi usado no treino. Com o nosso limiar de serviço de 0,662:

Galvanize-60M (anterior) Galvanize 2
Taxa de deteção (recall) 66,9% 83,4%
Taxa de falsos positivos 6,4% 0,81%
AUROC 0,899 0,993
Documentos benignos longos sinalizados ~66% 4,1%

O modelo novo deteta mais ataques e gera cerca de um oitavo dos alarmes falsos.

Alarmes falsos: modelo anterior vs Galvanize 2

Recall por língua no mesmo conjunto: inglês 88%, português 87%, russo 83%, alemão 82%, espanhol 82%, italiano 76%.

Também o testámos contra ataques novos que geramos internamente contra o nosso próprio detetor. Em 601 exemplos novos, nenhum visto no treino, o Galvanize 2 deteta 67,2%. Estes ataques foram gerados para passar pelo nosso modelo anterior, por isso a sua pontuação abaixo de 3% é esperada por construção. A referência mais justa é o modelo de onde partimos: o Horizon small, com a mesma taxa de falsos positivos, deteta 65,6%. O alemão é a língua mais fraca nesse conjunto, com cerca de 50%.

O benchmark público

Para comparar com outros detetores abertos, corremos a Horizon-Labs/prompt-injection-eval-suite no Hugging Face. Reportamos a média macro dos 10 conjuntos usados na ficha do modelo Horizon. Corremos cada modelo nós próprios, com o mesmo protocolo (ver "Como medimos").

Modelo Média macro
Horizon base (308 M) 0,902
Galvanize 2 (limiar 0,5) 0,894
Horizon small (141 M) 0,887
Horizon large 0,884
Galvanize 2 (limiar 0,662, como servido) 0,870
deepset 0,784
Wolf Defender 0,765
ProtectAI v2 0,622
NeuralTrust small 0,535
Galvanize-60M (anterior) 0,521

O Galvanize 2 não é o modelo melhor classificado nesta média: o Horizon base, maior, pontua mais alto. Está na mesma faixa dos detetores abertos mais fortes que testámos, e representa um salto grande face ao nosso modelo anterior.

Benchmark público de injeção de prompts, média macro

Os resultados mais fortes estão nos conjuntos benignos difíceis. Estes contêm texto que parece suspeito mas não é um ataque: palavras-gatilho, pedidos ousados mas inofensivos. Exatidão com limiar 0,662; quanto mais alto, menos alarmes falsos:

Conjunto Galvanize-60M Galvanize 2
NotInject 0,537 0,982
OR-Bench-hard-1k 0,203 0,999
XSTest 0,270 1,000

No NotInject e no OR-Bench-hard-1k, o Galvanize 2 tem a pontuação mais alta de todos os detetores da nossa comparação.

Conjuntos benignos difíceis: exatidão por modelo

Onde é mais fraco

Com o nosso limiar de serviço de 0,662 (com 0,5 entre parênteses):

  • Conjunto de teste da deepset: F1 0,723 (0,812). O modelo da deepset pontua 0,992 no seu próprio conjunto de teste.
  • BIPIA, injeções escondidas em emails, tabelas e código: F1 0,601 (0,670).
  • Jailbreaks da Simsonsun: recall 0,741 (0,817).

Parte da diferença entre os dois limiares é uma escolha nossa, explicada abaixo. Parte é real: as injeções colocadas em conteúdo estruturado, e alguns estilos de jailbreak, continuam a ser mais difíceis para o modelo.

Como medimos

Descontaminação. Antes de pontuar, removemos cada linha do benchmark que coincidisse com os nossos dados de treino por hash exato, por hash do texto normalizado ou por hash dos seus primeiros 200 caracteres. Todos os modelos foram pontuados no mesmo subconjunto descontaminado. Por isso, e pelo truncamento descrito abaixo, os nossos números para outros modelos diferem dos que aparecem nas respetivas fichas.

A mesma entrada que em produção. O texto é achatado em espaços e truncado aos primeiros 512 tokens, exatamente como a verificação cloud faz ao servir. Tudo o que vem depois dos primeiros 512 tokens não é pontuado.

Dados reservados. O nosso conjunto de teste reservado e o nosso conjunto de documentos longos benignos nunca foram usados no treino.

Dois limiares. Publicamos resultados a 0,5 e a 0,662. Servimos a 0,662, um limiar calibrado nos nossos próprios dados de desenvolvimento. Abdica de algum recall para não bloquear utilizadores legítimos, porque um alarme falso interrompe trabalho real. Se correr o modelo você mesmo e um ataque não detetado lhe custar mais do que um alarme falso, use 0,5.

Serviço. Servimos o modelo em precisão total. Num servidor de CPU com 8 threads, corre com uma mediana de cerca de 34 ms por pedido.

O script do benchmark e os resultados completos estão no repositório do modelo: https://huggingface.co/usezn/Galvanize-2/tree/main/benchmark.

O que significa para utilizadores do zn-gate

O zn-gate é uma camada de segurança local e de código aberto para agentes de programação com IA (npm install zn-gate ou pip install zn-gate). Valores secretos, como chaves de API, tokens e chaves privadas, são removidos na sua máquina antes de qualquer chamada à cloud, e a saída das ferramentas nunca é enviada. A verificação cloud opcional recebe o texto dos prompts apenas depois da redação.

O Galvanize 2 está disponível hoje no Hugging Face e é agora o modelo por defeito por trás da verificação cloud da zn (api.usezn.com). Não precisa de alterar nada: se tiver a verificação cloud ativada, recebe o novo modelo automaticamente. As equipas também obtêm observabilidade e um registo de cada decisão. Existe um plano gratuito.

O que se segue

  • Alemão e as outras línguas mais fracas. O alemão é a língua mais fraca em ataques novos, com cerca de 50%, e é a primeira coisa em que estamos a trabalhar.
  • Um ciclo contínuo. Cada falha que encontrarmos, nos nossos testes ou nos relatos dos utilizadores, torna-se dados de treino para a versão seguinte.
  • Scripts de benchmark abertos, para que qualquer pessoa possa reproduzir os números públicos deste artigo.

Ligações

Se encontrar um input em que o Galvanize 2 se engana, num sentido ou noutro, escreva para security@usezn.com. Esses relatos são exatamente aquilo em que a versão seguinte é treinada.

— John Silver

Atualizado a 14 de outubro de 2026: a redação sobre o tratamento de dados foi revista para descrever o que o pacote e a API fazem hoje.

Share