
Marco de defensa para la seguridad de agentes LLM que compila contratos de tareas, valida manifiestos de capacidades y verifica efectos mediante comprobaciones de prueba PLANT/WRAP contra casos de ataque de referencia.
El repositorio separa el defensor APEX, la normalización de datos de referencia, los manifiestos de capacidades de confianza y las integraciones de métodos de comparación para que cada capa pueda inspeccionarse de forma independiente.
python -m venv .venv
source .venv/bin/activate
pip install -e '.[test]'
export PYTHONPATH="$PWD/src:$PWD"
Los componentes respaldados por modelos leen OPENAI_API_KEY y la opcional
OPENAI_BASE_URL del entorno. Copie .env.example solo como referencia;
el código no lee archivos de credenciales locales.
| Ruta | Responsabilidad |
|---|---|
src/apex/defender/ | Contratos de tareas de APEX, vinculaciones tipadas, recibos, verificaciones de prueba, PLANT, WRAP y manejo de continuación |
src/apex/core/ | Protocolo compartido, tipos de resultados, agregación y límite de modelo neutral respecto al proveedor |
benchmark/adapter/ | Conversión de solo lectura de las versiones de benchmark en una única interfaz BenchmarkCase |
benchmark/registry/ | Registro de capacidades de confianza y manifiestos específicos de cada benchmark |
baseline/<name>/ | Una implementación o integración de tiempo de ejecución por método de comparación |
tests/ | Invariantes del repositorio y comprobaciones unitarias rápidas |
Consulte STRUCTURE.md para conocer el flujo de componentes y los puntos de extensión.
Los descriptores de casos congelados compactos para los seis benchmarks se incluyen en
benchmark/data/. Los repositorios upstream completos y los sandboxes de tiempo de ejecución no
se incluyen en el repositorio. Pasar None selecciona los datos empaquetados; un data_root
explícito aún puede sobrescribirlo.
from benchmark.adapter import adapter_for
adapter = adapter_for("scr", None)
attack_cases = list(adapter.cases("attack"))
El adaptador posee los identificadores de caso, las etiquetas de división, las etiquetas de suite, la elegibilidad y la carga útil presentada al entorno de ejecución del benchmark. No altera el contenido del benchmark ni registra la autoridad de la herramienta.
from benchmark.registry import module_for
registry = module_for("mcptox")
environment_plan = registry.load("12306-mcp")
Los manifiestos de capacidades se mantienen separados de los adaptadores de conjuntos de datos porque el texto de los benchmarks es una entrada de episodio no confiable, mientras que un manifiesto describe el límite de ejecución propiedad del operador disponible antes del episodio.
Cada benchmark/registry/data/<benchmark>/manifest.json es un artefacto de registro final que utiliza apex-benchmark-registry-v2. Un bundle almacena capability_units deduplicadas, entornos reutilizables y vinculaciones de casos explícitas. Por lo tanto, un benchmark con cientos de casos no duplica un manifiesto de Tool idéntico cientos de veces. Cada unidad conserva el esquema exacto de entrada/salida, effect, observation, effect_return, el rol de recibo y las anotaciones tipadas. Cada entorno registra por separado las fuentes, los Skills y agent_visible_surface.
Las entradas de origen exactas auditadas de la implementación del experimento se conservan en benchmark/registry/source/. El paso de compilación normaliza y deduplica esos registros existentes; no infiere nueva semántica de capacidades a partir de los prompts del benchmark. Regenera todos los artefactos finales con:
pip install -e '.[registry]'
python scripts/build_registry_manifests.py
python scripts/audit_registry_coverage.py
Para actualizar los descriptores de casos empaquetados desde las copias locales de los repositorios upstream, ejecute:
python scripts/import_benchmark_data.py \
--research-root <research-checkout> \
--scr-root <SCR_Bench-checkout>
El importador de SCR verifica el commit fijado antes de derivar su índice compacto de exposición de casos/Skills.
TaskContractor compila la solicitud de usuario confiable en un contrato de tarea.Las verificaciones deterministas permanecen independientes del modelo objetivo. Los roles respaldados por modelos envían candidatos tipados que deben pasar el mismo límite de validación.
baseline/registry.py define los 13 métodos de comparación. Cada método tiene una carpeta dedicada con el nombre del método y un punto de entrada implementation.py. Las dependencias con su propio entorno de ejecución se importan de forma diferida para que el núcleo de APEX y los adaptadores de datos puedan probarse sin instalar todos los entornos de benchmark.
python -m compileall -q src benchmark baseline tests
pytest
Antes de la publicación, ejecuta también las comprobaciones de anonimato en ANONYMITY.md. No deben añadirse a la entrega credenciales, archivos de resultados, rutas específicas de la máquina, remotos de Git ni metadatos del autor.