
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.
Código que acompaña a un envío de artículo anónimo. El repositorio separa el defensor APEX, la normalización de datos de referencia, los manifiestos de capacidades confiables 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 APEX, enlaces tipados, recibos, comprobaciones 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 referencia en una única interfaz BenchmarkCase |
benchmark/registry/ | Registro de capacidades confiables y manifiestos específicos de cada benchmark |
baseline/<name>/ | Una implementación o integración en 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 ejecución no se
incluyen como vendor. 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 las herramientas.
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 del benchmark es 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 usa apex-benchmark-registry-v2. Un paquete almacena capability_units deduplicadas,
entornos reutilizables y enlaces de casos explícitos. 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, las Skills y agent_visible_surface.
Las entradas de origen auditadas exactas 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 checkouts upstream locales, 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 comprobaciones 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, ejecute también las comprobaciones de anonimato en ANONYMITY.md. No deben añadirse al envío credenciales, archivos de resultados, rutas específicas de la máquina, remotos de Git ni metadatos de autor.