OpenGATE
Verificaciones de fundamentación deterministas para respuestas de RAG y QA sobre documentos: hechos requeridos presentes, cada número trazable al contexto, y abstención cuando el contexto no puede responder. Sin juez LLM.
Documentación
Evaluación y Pruebas de IA Fundamentada en Evidencia (Open Grounded AI Testing & Evaluation)
Verificación determinista y anclada en datos de referencia para IA fundamentada en evidencia — sin juez LLM.
Inicio rápido · Arquitectura · Superficies · Ejemplos · Hoja de ruta · Contribuciones · Registro de cambios
Evidencia sobre plausibilidad. OpenGATE verifica sistemas de IA que deben justificar cada respuesta a partir de material fuente — pipelines RAG, herramientas de preguntas y respuestas sobre documentos, asistentes legales y científicos. Responde una pregunta por encima de todo: ¿puede el sistema probar su respuesta a partir de la evidencia que se le dio?
La verificación es determinista — sin LLM como juez, sin modelo calificador, sin escala de veredicto de seis puntos. Los hechos requeridos deben estar presentes, cada número debe poder rastrearse hasta la fuente, y cuando el contexto no puede responder, el sistema debe abstenerse en lugar de inventar. Como es lógica pura, es reproducible, gratuita y lo suficientemente rápida para ejecutarse en cada respuesta o como compuerta en cada commit.
A medida que la IA se adentra en dominios de alto riesgo, la evaluación se está volviendo tan fundamental como lo son las pruebas automatizadas en el software tradicional. OpenGATE convierte las fallas de fundamentación en números que puedes rastrear, y aplica una compuerta a cada cambio de prompt, modelo o flujo de trabajo contra una línea base — para que la confiabilidad no pueda retroceder silenciosamente.
Inicio rápido (60 segundos)
No se necesita clave API — el conjunto offline ejecuta puntuadores deterministas contra el conjunto de referencia incluido:
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)
Apunta opengate.http.json a tu endpoint y agrega --online --ci para aplicar la compuerta a tu propio sistema. Tutorial completo: Cómo empezar.
Una verificación, muchas superficies
La misma lógica determinista de fundamentación se distribuye dondequiera que viva tu stack:
| Superficie | Instalación | Úsalo para |
|---|---|---|
| CLI + framework | npx @pharmatools/opengate | Suite de evaluación completa, adaptadores, compuerta de regresión |
| Acción de GitHub | uses: nickjlamb/opengate@v0 | Compuerta CI lista para usar en cualquier repositorio |
| Paquete de Python | pip install opengate-grounding | check_grounding(), compuerta pytest, métrica DeepEval |
| Servidor MCP | npx @pharmatools/opengate-mcp | Agentes que verifican sus propias respuestas en línea |
| Imagen Docker | docker run pharmatools/opengate | Pipelines contenedorizados, solo CPU |
Arquitectura
Los puntuadores nunca hablan directamente con un sistema — lo alcanzan a través de un pequeño adaptador, de modo que la metodología viaja y solo cambia el conjunto de referencia. En el ciclo de desarrollo se ubica donde se ubica CI: cambia un prompt, modelo o pipeline; la compuerta de regresión compara el nuevo cuadro de puntuación contra la línea base — mejora o mantiene despliega, regresión falla la compilación.
¿Por qué no DeepEval?
Usa ambos — los evals miden, OpenGATE verifica. Los frameworks de propósito general como DeepEval y OpenAI Evals evalúan sistemas de IA ampliamente, generalmente con un LLM juzgando la salida. OpenGATE verifica la promesa más estrecha y difícil: que cada respuesta esté fundamentada en evidencia:
- La procedencia es de primera clase — ¿la cita citada realmente existe, palabra por palabra, en la fuente?
- Sin juez LLM — las puntuaciones son verificaciones deterministas contra datos de referencia etiquetados a mano, por lo que son reproducibles y gratuitas de ejecutar en CI; tu juicio vive en el conjunto de referencia, no en un modelo calificador.
- La detección de regresiones es de primera clase — cada ejecución se compara contra una línea base por adaptador; una caída falla la compilación.
Combina un framework general para métricas de calidad amplias con OpenGATE para aplicar la compuerta a la fundamentación.
Conceptos centrales
Casos de referencia — casos de referencia etiquetados a mano (datasets/cases/): texto fuente, las afirmaciones que deben extraerse, las oraciones que no deben extraerse, y fragmentos de referencia con veredictos conocidos y correctos. Copia _template.json para agregar uno; formato en datasets/SCHEMA.md, reglas de etiquetado en datasets/LABELING-GUIDE.md.
Puntuadores — un módulo por familia de métricas (src/scorers/):
| Puntuador | Modo | Mide |
|---|---|---|
citation-detection | offline | coincidencia exacta y Jaccard del conjunto de citas por afirmación; precisión de estilo admitido |
claim-extraction | online | precisión / recuperación / F1 vs. referencia; fuga de no-afirmaciones; fidelidad (la afirmación es palabra por palabra de la fuente) |
verdict-accuracy | online | precisión exacta y de adyacencia en una escala de seis puntos; tasa de alucinación de pasajes; consistencia; latencia y costo de tokens |
redaction | online | recuperación de identificadores de referencia con fugas como fallas nombradas; sobre-redacción; seguimiento de brechas conocidas |
simplification | online | fidelidad de reescrituras: recuperación de anclas (los hechos críticos sobreviven), números fabricados, límites de longitud |
retrieval | online | fidelidad de registros recuperados vs. la autoridad: campos ancla + invariantes estructurales |
grounding | online | RAG genérico: recuperación de anclas de respuesta, fabricación vs. contexto, y abstención. La ruta llave en mano |
Los puntuadores offline se ejecutan sin clave API — lo suficientemente rápidos para cada commit. Los puntuadores online ejercitan un sistema en vivo a través de un adaptador.
Cuadros de puntuación — cada ejecución escribe results/<timestamp>.json sellado con el SHA de git, de modo que cualquier resultado sea reproducible y auditable. Las ejecuciones por modelo llevan una etiqueta run_model, convirtiendo el directorio de resultados en una comparación medida (precisión × alucinación × latencia × costo).
Compuerta de regresión — --baseline guarda una referencia; las ejecuciones posteriores imprimen deltas por métrica (▲/▼ en puntos porcentuales) y --ci falla la compilación ante cualquier caída. Las líneas base son por adaptador, de modo que el cuadro de puntuación de un sistema no puede afectar al de otro.
Informe HTML — agrega --report (o opengate report) para un panel autocontenido: aprobado/fallido por puntuador, deltas vs. línea base, cada falla nombrada. Un archivo, sin servidor, sin dependencias.
Evaluando tu propio sistema
Un adaptador es un archivo: dos exportaciones base — onlineAvailable(), onlineConfigHint() — más al menos una capacidad completa (p. ej., grounding → answer()). Los puntuadores verifican adapter.capabilities y se omiten limpiamente a través del límite; los adaptadores se validan al cargarse con mensajes que nombran cada exportación faltante.
OPENGATE_ADAPTER=./adapters/my-system.mjs npm run eval:online
Para sistemas respaldados por REST hay una ruta sin código: el adaptador HTTP genérico incluido lee rutas de endpoint y encabezados de opengate.http.json (interpolación ${ENV}, captura integrada de latencia/tokens). Contrato completo y un esqueleto mínimo: ADAPTERS.md.
Ejemplos
- Evaluando un agente RAG impulsado por NIM — construye un agente RAG en un modelo NVIDIA NIM y aplica la compuerta a la fundamentación de sus respuestas con OpenGATE, de manera determinista y sin juez LLM. Incluye un notebook de Python ejecutable (
opengate-grounding) y un adaptador Node para la compuerta CI.
Probado en producción
Cuatro productos de PharmaTools se ejecutan en OpenGATE en CI — cuatro formas de capacidad diferentes, un estándar de evaluación. Ejecutado contra el conjunto de referencia de RefCheckr, OpenGATE:
- sacó a la superficie un modo de falla silenciosa de análisis que afectaba ~50% de los veredictos de múltiples afirmaciones, eliminado con salida estructurada forzada (→ 0);
- redujo a la mitad la alucinación de pasajes (5.8% → 2.4%) al impulsar un cambio medido en el modelo de producción — una decisión tomada con números, no con reputación;
- mantiene la extracción de afirmaciones en 0.91 F1 con 0.93 de recuperación en la línea base comprometida (variación entre ejecuciones 0.86–0.94 — el divisor es un LLM), y actualmente está fallando su propia compuerta: 2 no-afirmaciones conocidas se filtran en la extracción en la mayoría de las ejecuciones, un problema abierto del divisor que la compuerta reporta en lugar de redondear.
Redacta — capacidad de redacción (prueba de que la metodología no está moldeada para QA)
Redacta envuelve el motor @pharmatools/redacta, puntuado contra notas clínicas sintéticas del Reino Unido con identificadores etiquetados como referencia. En su primera ejecución, la evaluación encontró dos errores reales del motor (frases de relación que se tragaban nombres anidados; apellidos con apóstrofo omitidos) — ambos corregidos y confirmados (knownGap_closed: 2), luego promovidos a referencia. Cuadro de puntuación actual: 100% de recuperación en 25 identificadores de referencia, 0 fugas, sin brechas abiertas.
npm install --no-save @pharmatools/redacta
node src/runner.mjs --online --adapter ./src/adapters/redacta.mjs
Patiently AI — capacidad de simplificación (fidelidad de la paráfrasis)
Patiently AI ejercita la puntuación de fidelidad para texto que es paráfrasis por diseño. La evaluación detectó que el simplificador omitía detalles críticos de seguridad — una dosis de antibiótico desapareció de un resumen de alta (recuperación de anclas 86%). Una regla de preservación llevó la siguiente ejecución a 100% de recuperación de anclas, 0 hechos omitidos, 0 números fabricados — una medición por ejecución, no una garantía: una captura congelada de exp-2 hecha seis días después de la corrección aún contiene un rango de referencia correcto pero sin fuente, marcado por diseño (RESULTS.md §6). Esa cola es la razón por la que la evaluación ahora aplica la compuerta al backend de Patiently en CI y re-puntúa el servicio en vivo semanalmente, con fabricaciones fallando en la primera ocurrencia.
node src/runner.mjs --online --adapter ./src/adapters/patiently.mjs
PubCrawl — capacidad de recuperación (la capa sobre la que todo lo demás se fundamenta)
PubCrawl no tiene modelo — ejercita la fidelidad de recuperación contra anclas verificadas a mano e invariantes estructurales, detectando regresiones del analizador (matrices de autores colapsadas, fuga de [object Object]) que envenenarían cada cita posterior. Que OpenGATE puntúe un sistema que no es IA es el punto: la IA fundamentada en evidencia solo es tan confiable como la recuperación que la sustenta.
node src/runner.mjs --online --adapter ./src/adapters/pubcrawl.mjs
Metodología completa y comparación de modelos: cómo se evalúa RefCheckr.
Estructura del proyecto
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
Documentación
| Doc | Qué contiene |
|---|---|
| Cómo empezar | De cero a una compuerta CI para un sistema RAG genérico |
| ADAPTERS.md | El contrato del adaptador + un esqueleto mínimo |
| datasets/SCHEMA.md | Formato de casos de referencia |
| Hoja de ruta | Qué sigue, y el camino a 1.0 |
| Contribuciones | Configuración de desarrollo, agregar casos/adaptadores/puntuadores, flujo de PR |
| Registro de cambios | Historial de versiones |
Contribuciones
Las contribuciones son bienvenidas — especialmente casos de referencia (nuevos dominios, estilos de cita), adaptadores (conecta tu sistema) y puntuadores (nuevas familias de métricas). Consulta CONTRIBUTING.md — incluyendo sus expectativas de soporte y gobernanza y la divulgación de desarrollo asistido por IA; abre un issue para discutir cambios grandes. Las interfaces pueden cambiar antes de 1.0, y semver señalará cambios disruptivos.
Citando OpenGATE
Si usas OpenGATE en investigación, por favor cítalo — los metadatos de cita están en CITATION.cff (el botón "Cite this repository" de GitHub lo usa).
Licencia
MIT — porque los frameworks de evaluación no deberían ser cajas negras. Si una evaluación influye en decisiones de despliegue, los ingenieros deberían poder inspeccionar cada puntuador, métrica y referencia.