
Marco de evaluación conductual automatizado para LLMs que genera diversos escenarios de prueba para sondear la sicofancia, el sesgo y otros comportamientos relevantes para la seguridad con configuraciones de semilla reproducibles.
[!IMPORTANT] Bloom tiene un nuevo hogar. Ahora es desarrollado y mantenido por Meridian Labs y vive en meridianlabs-ai.github.io/petri_bloom — todas las nuevas funcionalidades y correcciones llegarán allí.
Este repositorio está congelado en su última versión independiente y no recibirá actualizaciones. Los usuarios existentes pueden seguir usándolo como se documenta a continuación, pero los nuevos proyectos deben empezar desde la versión de Meridian Labs.
Bloom genera suites de evaluación que prueban LLMs para comportamientos específicos (adulación, autopreservación, sesgo político, etc.). Dada una configuración "semilla" que describe el comportamiento objetivo y los parámetros de evaluación, Bloom produce diversos escenarios de prueba, ejecuta conversaciones con el modelo objetivo y puntúa los resultados. La suite de evaluación crece de manera diferente según cómo se siembre—a diferencia de los benchmarks fijos, las evaluaciones de Bloom deben citarse con su configuración semilla completa para la reproducibilidad.
# Con pip
pip install git+https://github.com/safety-research/bloom.git
# O con uv
uv pip install git+https://github.com/safety-research/bloom.git
# 1. Inicializar un espacio de trabajo (crea configuración a partir de valores por defecto incluidos)
bloom init
# 2. Agrega tus claves API a .env, luego cárgalas
source .env
# 3. Ejecutar el pipeline de evaluación
bloom run bloom-data
Esto crea:
./
├── .env # Claves API (agrega tus claves aquí)
├── bloom-data/ # Directorio de configuración
│ ├── seed.yaml # Config principal (editar para personalizar)
│ ├── models.json # Mapeos de IDs de modelos
│ ├── behaviors.json # Definiciones de comportamientos
│ └── ...
└── bloom-results/ # Salida (creada en la primera ejecución)
Usa --debug para salida detallada, o establece debug: true en seed.yaml.
Edita bloom-data/seed.yaml para personalizar tu evaluación:
| Parámetro | Descripción |
|---|---|
behavior.name | Comportamiento objetivo (ej., "adulación", "autopreservación") |
behavior.examples | Transcripciones de ejemplo para guiar la generación (opcional) |
ideation.num_scenarios | Número de escenarios base a generar |
ideation.variation_dimensions | Lista de dimensiones a variar por escenario (ej., ["ruido", "presión_emocional"]) |
rollout.target | Modelo a evaluar |
rollout.modality | "conversación" o "simenv" (con llamadas a herramientas) |
Consulta bloom-data/seed.yaml para la referencia completa de parámetros con documentación en línea.
Las dimensiones de variación permiten generar variaciones dirigidas de cada escenario base para probar qué tan estable es un comportamiento bajo diferentes condiciones. Cada dimensión especificada en variation_dimensions debe tener una descripción en behaviors.json:
# seed.yaml
ideation:
num_scenarios: 5
variation_dimensions:
- noise
- emotional_pressure
Esto genera 5 escenarios base más 2 variaciones cada uno = 15 evaluaciones en total.
Especifica los modelos usando cualquiera de estos formatos:
# ID directo de LiteLLM (recomendado)
rollout:
target: "anthropic/claude-sonnet-4-20250514"
# O nombre corto de bloom-data/models.json
rollout:
target: "claude-sonnet-4"
Consulta proveedores de LiteLLM para proveedores compatibles.
Ejecuta etapas individuales:
bloom understanding bloom-data
bloom ideation bloom-data
bloom rollout bloom-data
bloom judgment bloom-data
Los resultados se guardan en bloom-results/{nombre_comportamiento}/. Visualiza las transcripciones con el visor interactivo:
npx @isha-gpt/bloom-viewer --port 8080 --dir ./bloom-results
Para experimentos a gran escala, usa configuraciones de sweep desde examples/sweeps/:
# Crear un sweep (devuelve un ID de sweep)
wandb sweep examples/sweeps/self-preferential-bias.yaml
# Ejecutar bloom como agente de sweep
wandb agent <sweep-id>
La configuración del sweep especifica bloom sweep como comando. Esto lee parámetros de wandb.config en lugar de un archivo local. Usa bloom sweep --debug para salida detallada.
Prueba modelos de forma interactiva y guarda transcripciones:
bloom chat --system-prompt "Eres un asistente útil" --model claude-sonnet-4
Las transcripciones se guardan en bloom-results/manual/ por defecto. Usa --reasoning-effort (low, medium, high) para modelos de razonamiento extendido.
Para evaluar múltiples modelos en escenarios idénticos:
resume: "run_id", resume_stage: "rollout"rollout.target como un parámetro del sweepBloom soporta razonamiento extendido para modelos Claude y la serie o de OpenAI. Establece reasoning_effort en "low", "medium" o "high". Requiere temperature: 1.0.
Línea de comandos (después de la instalación):
# Usando el comando bloom
bloom run bloom-data
# O como módulo de Python
python -m bloom run bloom-data
Como biblioteca:
from bloom.core import run_pipeline
from bloom.utils import load_config
# Cargar configuración y ejecutar pipeline completo
config = load_config("bloom-data/seed.yaml")
run_pipeline(config=config)
# O ejecutar etapas individuales
from bloom.stages.step1_understanding import run_understanding
from bloom.stages.step2_ideation import run_ideation
run_understanding(config=config)
run_ideation(config=config)
git clone https://github.com/safety-research/bloom.git
cd bloom
# Con uv (recomendado)
uv sync
# O con pip
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Opcionalmente, instala hooks de pre-commit para linting, formateo y verificación de tipos:
uvx pre-commit install # o: pip install pre-commit && pre-commit install
Las pruebas utilizan respuestas de API simuladas para verificar el pipeline sin hacer llamadas reales a la API:
pytest tests/ -v
# Lint y formateo
ruff check src/ --fix
ruff format src/
# Verificación de tipos (requiere ty: https://github.com/astral-sh/ty)
ty check
Si usas uvx, antepone los comandos con uvx (ej., uvx ruff check src/).
bloom/
├── src/bloom/ # Paquete principal
│ ├── cli.py # Punto de entrada CLI
│ ├── core.py # Orquestación del pipeline
│ ├── utils.py # Utilidades
│ ├── data/ # Datos incluidos (comportamientos, modelos, esquemas, plantillas)
│ ├── stages/ # Implementaciones de las etapas del pipeline
│ ├── prompts/ # Generación de prompts
│ └── orchestrators/ # Orquestación de conversaciones
├── tests/ # Suite de pruebas con fixtures
├── examples/sweeps/ # Configuraciones de sweep para W&B
└── pyproject.toml