OpenGATE
Verificações determinísticas de fundamentação para respostas de RAG e QA de documentos: fatos obrigatórios presentes, todo número rastreável ao contexto e abstenção quando o contexto não puder responder. Sem juiz de LLM.
Documentação
Open Grounded AI Testing & Evaluation
Verificação determinística e ancorada em ouro para IA fundamentada em evidências — sem juiz LLM.
Início rápido · Arquitetura · Superfícies · Exemplos · Roteiro · Contribuição · Changelog
Evidência acima de plausibilidade. O OpenGATE verifica sistemas de IA que precisam justificar cada resposta a partir do material de origem — pipelines de RAG, ferramentas de QA documental, assistentes jurídicos e científicos. Ele responde a uma pergunta acima de tudo: o sistema consegue provar sua resposta a partir das evidências que recebeu?
A verificação é determinística — sem LLM-como-juiz, sem modelo avaliador, sem escala de veredito de seis pontos. Fatos obrigatórios devem estar presentes, cada número deve rastrear até a fonte, e quando o contexto não pode responder, o sistema deve se abster em vez de fabricar. Como é lógica pura, é reproduzível, gratuito e rápido o suficiente para rodar em cada resposta ou servir de portão em cada commit.
À medida que a IA avança para domínios de alto risco, a avaliação está se tornando tão fundamental quanto o teste automatizado no software tradicional. O OpenGATE transforma falhas de fundamentação em números que você pode acompanhar, e aplica um portão a cada mudança de prompt, modelo ou fluxo de trabalho contra uma linha de base — para que a confiabilidade não regrida silenciosamente.
Início rápido (60 segundos)
Nenhuma chave de API necessária — o pacote offline executa avaliadores determinísticos contra o conjunto de ouro incluído:
npx @pharmatools/opengate # run the offline evaluation suite
npx @pharmatools/opengate init # scaffold gold cases + HTTP config + a GitHub Action
OpenGATE — 39 case(s), online=false, adapter=refcheckr
✓ citation-detection PASS
perClaim_exactSetRate 100.0%
perClaim_jaccardMean 100.0%
supportedStyle_accuracy 100.0%
⊘ grounding SKIPPED — online scorer (pass --online)
Aponte opengate.http.json para seu endpoint e adicione --online --ci para aplicar o portão ao seu próprio sistema. Passo a passo completo: Começando.
Uma verificação, muitas superfícies
A mesma lógica determinística de fundamentação está disponível onde quer que sua stack esteja:
| Superfície | Instalação | Use para |
|---|---|---|
| CLI + framework | npx @pharmatools/opengate | Suíte de avaliação completa, adaptadores, portão de regressão |
| GitHub Action | uses: nickjlamb/opengate@v0 | Portão de CI plug-and-play em qualquer repositório |
| Pacote Python | pip install opengate-grounding | check_grounding(), portão pytest, DeepEval métrica |
| Servidor MCP | npx @pharmatools/opengate-mcp | Agentes que verificam suas próprias respostas inline |
| Imagem Docker | docker run pharmatools/opengate | Pipelines conteinerizados, somente CPU |
Arquitetura
Os avaliadores nunca falam diretamente com um sistema — eles o alcançam por meio de um pequeno adaptador, para que a metodologia viaje e apenas o conjunto de ouro mude. No ciclo de desenvolvimento, ele fica onde o CI fica: mude um prompt, modelo ou pipeline; o portão de regressão compara o novo scorecard com a linha de base — melhorado ou mantido faz deploy, regredido falha o build.
Por que não DeepEval?
Use ambos — evals medem, OpenGATE verifica. Frameworks de propósito geral como DeepEval e OpenAI Evals avaliam sistemas de IA amplamente, geralmente com um LLM julgando a saída. O OpenGATE verifica a promessa mais restrita e difícil: que cada resposta é fundamentada em evidências:
- Proveniência é primeira classe — a passagem citada realmente existe, verbatim, na fonte?
- Sem juiz LLM — as pontuações são verificações determinísticas contra ouro rotulado manualmente, então são reproduzíveis e gratuitas para rodar no CI; seu julgamento vive no conjunto de ouro, não em um modelo avaliador.
- Detecção de regressão é primeira classe — cada execução é comparada com uma linha de base por adaptador; uma queda falha o build.
Combine um framework geral para métricas de qualidade amplas com o OpenGATE para aplicar o portão na fundamentação.
Conceitos principais
Casos de ouro — casos de benchmark rotulados manualmente (datasets/cases/): texto-fonte, as afirmações que devem ser extraídas, as frases que não devem ser, e trechos de referência com vereditos conhecidamente corretos. Copie _template.json para adicionar um; formato em datasets/SCHEMA.md, regras de rotulagem em datasets/LABELING-GUIDE.md.
Avaliadores — um módulo por família de métrica (src/scorers/):
| Avaliador | Modo | Mede |
|---|---|---|
citation-detection | offline | conjunto de citações por afirmação com correspondência exata e Jaccard; precisão de estilo suportado |
claim-extraction | online | precisão / recall / F1 vs ouro; vazamento de não-afirmações; fidelidade (afirmação é verbatim da fonte) |
verdict-accuracy | online | precisão exata e de adjacência em escala de seis pontos; taxa de alucinação de passagem; consistência; latência e custo de tokens |
redaction | online | recall em identificadores de ouro com vazamentos como falhas nomeadas; sobre-redação; rastreamento de lacunas conhecidas |
simplification | online | fidelidade de reescritas: recall de âncora (fatos críticos sobrevivem), números fabricados, limites de comprimento |
retrieval | online | fidelidade de registros recuperados vs a autoridade: campos âncora + invariantes estruturais |
grounding | online | RAG genérico: recall de âncora de resposta, fabricação vs contexto, e abstenção. O caminho turnkey |
Avaliadores offline rodam sem chave de API — rápidos o suficiente para cada commit. Avaliadores online exercitam um sistema ao vivo por meio de um adaptador.
Scorecards — cada execução grava results/<timestamp>.json carimbado com o SHA do git, para que qualquer resultado seja reproduzível e auditável. Execuções por modelo carregam um rótulo run_model, transformando o diretório de resultados em uma comparação medida (precisão × alucinação × latência × custo).
Portão de regressão — --baseline salva uma referência; execuções posteriores imprimem deltas por métrica (▲/▼ em pontos percentuais) e --ci falha o build em qualquer queda. As linhas de base são por adaptador, para que o scorecard de um sistema não possa sobrescrever o de outro.
Relatório HTML — adicione --report (ou opengate report) para um dashboard autônomo: passou/falhou por avaliador, deltas vs linha de base, cada falha nomeada. Um arquivo, sem servidor, sem dependências.
Avaliando seu próprio sistema
Um adaptador é um arquivo: duas exportações base — onlineAvailable(), onlineConfigHint() — mais pelo menos uma capacidade completa (ex.: grounding → answer()). Os avaliadores verificam adapter.capabilities e pulam limpo através da fronteira; adaptadores são validados no carregamento com mensagens nomeando cada exportação ausente.
OPENGATE_ADAPTER=./adapters/my-system.mjs npm run eval:online
Para sistemas com backend REST, há um caminho sem código: o adaptador HTTP genérico incluído lê caminhos de endpoint e cabeçalhos de opengate.http.json (interpolação ${ENV}, captura integrada de latência/tokens). Contrato completo e um esqueleto mínimo: ADAPTERS.md.
Exemplos
- Avaliando um agente RAG com NIM — constrói um agente RAG em um modelo NVIDIA NIM e aplica o portão na fundamentação das respostas com OpenGATE, deterministicamente e sem juiz LLM. Inclui um notebook Python executável (
opengate-grounding) e um adaptador Node para o portão de CI.
Comprovado em produção
Quatro produtos PharmaTools rodam no OpenGATE no CI — quatro formatos de capacidade diferentes, um padrão de avaliação. Executado contra o conjunto de ouro do RefCheckr, o OpenGATE:
- revelou um modo de falha silenciosa de parsing afetando ~50% dos vereditos de múltiplas afirmações, eliminado com saída estruturada forçada (→ 0);
- reduziu pela metade a alucinação de passagem (5,8% → 2,4%) ao conduzir uma mudança medida no modelo de produção — uma decisão tomada com base em números, não em reputação;
- mantém a extração de afirmações em 0,91 F1 com 0,93 de recall na linha de base commitada (variação entre execuções 0,86–0,94 — o divisor é um LLM), e atualmente está falhando seu próprio portão: 2 não-afirmações conhecidas vazam para a extração na maioria das execuções, um problema aberto do divisor que o portão relata em vez de arredondar.
Redacta — capacidade de redação (prova de que a metodologia não é moldada para QA)
Redacta envolve o motor @pharmatools/redacta, avaliado contra notas clínicas sintéticas do Reino Unido com identificadores rotulados em ouro. Na primeira execução, a avaliação encontrou dois bugs reais do motor (frases de relação engolindo nomes aninhados; sobrenomes com apóstrofo descartados) — ambos corrigidos e confirmados (knownGap_closed: 2), depois promovidos a ouro. Scorecard atual: 100% de recall em 25 identificadores de ouro, 0 vazamentos, sem lacunas abertas.
npm install --no-save @pharmatools/redacta
node src/runner.mjs --online --adapter ./src/adapters/redacta.mjs
Patiently AI — capacidade de simplificação (fidelidade de paráfrase)
Patiently AI exercita a pontuação de fidelidade para texto que é paráfrase por design. A avaliação pegou o simplificador descartando especificidades críticas de segurança — uma dose de antibiótico desapareceu de um resumo de alta (recall de âncora 86%). Uma regra de preservação levou a próxima execução a 100% de recall de âncora, 0 fatos descartados, 0 números fabricados — uma medição por execução, não uma garantia: uma captura congelada exp-2 feita seis dias após a correção ainda contém uma faixa de referência correta, mas sem fonte, sinalizada por design (RESULTS.md §6). Essa cauda é o motivo pelo qual a avaliação agora aplica o portão no backend do Patiently no CI e reavalia o serviço ao vivo semanalmente, com fabricações falhando na primeira ocorrência.
node src/runner.mjs --online --adapter ./src/adapters/patiently.mjs
PubCrawl — capacidade de recuperação (a camada na qual tudo o mais se fundamenta)
PubCrawl não tem modelo — ele exercita a fidelidade de recuperação contra âncoras verificadas manualmente e invariantes estruturais, pegando regressões de parser (arrays de autores colapsados, vazamento de [object Object]) que envenenariam toda citação a jusante. O fato de o OpenGATE avaliar um sistema não-IA é o ponto: IA fundamentada em evidências só é tão confiável quanto a recuperação sob ela.
node src/runner.mjs --online --adapter ./src/adapters/pubcrawl.mjs
Metodologia completa e comparação de modelos: como o RefCheckr é avaliado.
Estrutura do projeto
opengate/
├── src/
│ ├── lib/ metrics + shared grounding core (single source of truth)
│ ├── scorers/ one file per metric family (7 scorers)
│ ├── adapters/ system-under-test boundary (refcheckr.mjs is the reference)
│ └── runner.mjs CLI: discover cases → score → report → snapshot → gate
├── datasets/ gold-labelled cases (39) + fixtures + schema
├── examples/ worked examples (NVIDIA NIM RAG)
├── mcp/ MCP server (@pharmatools/opengate-mcp)
├── python/ opengate-grounding (PyPI) + DeepEval metric
├── Dockerfile CPU-only image (pharmatools/opengate)
└── action.yml GitHub Action
Documentação
| Doc | O que contém |
|---|---|
| Começando | Do zero a um portão de CI para um sistema RAG genérico |
| ADAPTERS.md | O contrato do adaptador + um esqueleto mínimo |
| datasets/SCHEMA.md | Formato de caso de ouro |
| Roteiro | O que vem a seguir, e o caminho para 1.0 |
| Contribuição | Configuração de desenvolvimento, adicionando casos/adaptadores/avaliadores, fluxo de PR |
| Changelog | Histórico de versões |
Contribuição
Contribuições são bem-vindas — especialmente casos de ouro (novos domínios, estilos de citação), adaptadores (conecte seu sistema) e avaliadores (novas famílias de métricas). Veja CONTRIBUTING.md — incluindo suas expectativas de suporte e governança e divulgação de desenvolvimento assistido por IA; abra uma issue para discutir mudanças grandes. Interfaces podem ainda mudar antes da 1.0, e o semver sinalizará mudanças que quebram.
Citando o OpenGATE
Se você usar o OpenGATE em pesquisa, por favor cite-o — os metadados de citação estão em CITATION.cff (o botão "Cite this repository" do GitHub os usa).
Licença
MIT — porque frameworks de avaliação não deveriam ser caixas-pretas. Se uma avaliação influencia decisões de deploy, engenheiros deveriam poder inspecionar cada avaliador, métrica e benchmark.