Cómo se carga la configuración
La configuración es un diccionario simple que carga un ConfigSource (consulta
agent_lab/core/config.py) y que se vincula al contenedor de DI. create_app() selecciona una
fuente mediante default_config_source(), exactamente en este orden; gana la primera coincidencia:
| # | Condición (variable de entorno definida) | Fuente activa |
|---|---|---|
| 1 | VAULT_K8S_ROLE |
KubernetesVaultConfigSource: Vault mediante el token proyectado de la ServiceAccount del pod |
| 2 | DOCKER |
YamlConfigSource("config-docker.yml") |
| 3 | TESTING |
YamlConfigSource("config-test.yml") |
| 4 | DEVELOPING |
YamlConfigSource("config-dev.yml") |
| 5 | (ninguna de las anteriores) | VaultConfigSource: lee VAULT_URL / VAULT_TOKEN |
Puedes sustituir la selección en cada aplicación:
app = create_app(config_source=YamlConfigSource("config.yml")) # explicitClaves de configuración
El diccionario que debe devolver la fuente activa. Los valores por defecto que se muestran proceden de
config-dev.yml (desarrollo); la aplicación de referencia incluye config-dev.yml,
config-test.yml y config-docker.yml con exactamente esta estructura.
| Clave | Finalidad | Valor de ejemplo |
|---|---|---|
api_base_url |
URL base pública de esta API (se usa para los enlaces de las respuestas) | http://localhost:8000 |
cdp_url |
Endpoint de Chrome headless (CDP) para agentes web (WebAgentBase) |
http://localhost:9222 |
auth.enabled |
Monta el middleware de autenticación y las rutas /auth cuando vale true |
false |
auth.url |
URL base de Keycloak | https://auth.example.com |
auth.realm |
Nombre del realm de Keycloak | agent-lab |
auth.client_id |
ID de cliente OIDC | agent-lab-api |
auth.client_secret |
Secreto de cliente OIDC | … |
broker.url |
URL de Redis para las actualizaciones de estado pub/sub de operaciones largas | redis://localhost:6379/0 |
db.url |
PostgreSQL: datos relacionales | postgresql://postgres:postgres@localhost:5432/agent_lab |
db.vectors |
PostgreSQL: base de datos de embeddings de pgvector | postgresql://postgres:postgres@localhost:5432/agent_lab_vectors |
db.checkpoints |
PostgreSQL: base de datos de checkpoints de LangGraph (memoria del agente) | postgresql://postgres:postgres@localhost:5432/agent_lab_checkpoints |
vault.url |
Dirección de Vault (también se reescribe para que los servicios puedan leer secretos) | http://localhost:8200 |
vault.token |
Token de Vault | dev-only-token |
static.enabled |
Sirve una compilación de SPA (false cuando no existe compilación del frontend) |
false |
static.directory |
Directorio que contiene la compilación de la SPA | static/frontend/browser |
static.index_file |
Archivo de reserva de la SPA | index.html |
static.mount_path |
Punto de montaje de la SPA | / |
static es especial: las fuentes YAML lo configuran explícitamente, mientras que la fuente de Vault
lo deriva de una convención en el código: se habilita cuando existe una compilación de SPA en STATIC_DIR.
Carga de secretos de Vault
VaultConfigSource lee un único secreto KV-v2 (motor secret, ruta app_secrets
por defecto) y lo asigna a las claves anteriores:
| Clave del secreto | Se asigna a |
|---|---|
api_base_url |
api_base_url |
cdp_url |
cdp_url |
auth_enabled → auth.enabled |
auth.enabled |
auth_url → auth.url |
auth.url |
auth_realm → auth.realm |
auth.realm |
auth_client_id → auth.client_id |
auth.client_id |
auth_client_secret → auth.client_id |
auth.client_secret |
broker_url |
broker.url |
db_url |
db.url |
db_vectors |
db.vectors |
db_checkpoints |
db.checkpoints |
Cómo aprovisionar esa carga (Docker Compose de desarrollo, Kubernetes, Terraform) se explica en Secretos con Vault y en la Guía de despliegue.
Variables de entorno
Selección de la fuente de configuración
| Variable | Valor por defecto | Finalidad |
|---|---|---|
DEVELOPING |
(sin definir) | Selecciona config-dev.yml (depuración en el IDE) |
TESTING |
(sin definir) | Selecciona config-test.yml (batería de pruebas) |
DOCKER |
(sin definir) | Selecciona config-docker.yml (Compose) |
VAULT_URL |
(sin definir) | Dirección de Vault para la fuente por defecto |
VAULT_TOKEN |
(sin definir) | Token de Vault para la fuente por defecto |
VAULT_ENGINE_PATH |
secret |
Punto de montaje KV-v2 |
VAULT_SECRET_PATH |
app_secrets |
Ruta del secreto |
VAULT_K8S_ROLE |
(sin definir) | Rol de autenticación de Kubernetes en Vault; habilita la fuente de K8s y tiene prioridad |
STATIC_DIR |
static/frontend/browser |
Dónde se busca la compilación de la SPA |
Observabilidad
| Variable | Valor por defecto | Finalidad |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
(sin definir: trazas desactivadas) | URL base del colector OTLP/HTTP; trazas → /v1/traces, métricas → /v1/metrics, logs → /v1/logs |
SERVICE_NAME |
Agent-Lab |
Nombre del recurso de OTel |
SERVICE_VERSION |
snapshot |
Versión del recurso de OTel |
LANGFUSE_HOST |
(sin definir) | URL base de Langfuse; junto con las dos claves siguientes, habilita el backend de Langfuse |
LANGFUSE_PUBLIC_KEY |
(sin definir) | Clave pk-lf-… de Langfuse |
LANGFUSE_SECRET_KEY |
(sin definir) | Clave sk-lf-… de Langfuse |
LANGWATCH_ENDPOINT |
(sin definir) | Endpoint de LangWatch; junto con la clave siguiente, habilita el backend de LangWatch |
LANGWATCH_API_KEY |
(sin definir) | Clave de API de LangWatch |
Si falta alguna variable de Langfuse, el backend de Langfuse se desactiva sin avisar y la aplicación arranca igualmente (lo mismo ocurre con LangWatch). Detalles y punto de extensión: Observabilidad.
Autenticación e integraciones
| Variable | Valor por defecto | Finalidad |
|---|---|---|
AZURE_CLIENT_ID / AZURE_CLIENT_SECRET / AZURE_TENANT_ID |
(sin definir) | Credenciales de Microsoft Entra ID para /auth/exchange |
EMBEDDINGS_ENDPOINT |
(sin definir) | Servicio de embeddings que usan los agentes de recuperación |
OPENAI_API_KEY |
(sin definir) | OpenAI (entrada de audio de las notas de voz; juez por defecto de las simulaciones) |
Simulaciones (solo en la batería de pruebas)
| Variable | Valor por defecto | Finalidad |
|---|---|---|
SIMULATION_LLM_MODEL |
(obligatoria) | Etiqueta del modelo que ejecuta los agentes sometidos a prueba (p. ej., qwen3:30b) |
SIMULATION_LLM_API_BASE |
(obligatoria) | Endpoint compatible con OpenAI que sirve ese modelo |
SIMULATION_LLM_API_KEY |
dummy-key |
Clave de API del endpoint, si es necesaria |
SIMULATION_JUDGE_MODEL |
openai/gpt-5-nano |
ID de modelo de litellm que usa el LLM como juez |
SIMULATION_JUDGE_API_BASE |
valor por defecto del proveedor | Endpoint personalizado compatible con OpenAI para el juez |
SIMULATION_JUDGE_API_KEY |
valor por defecto del proveedor | Clave de API del endpoint personalizado del juez |
Consulta Pruebas y simulaciones para ver cómo se utilizan.
Fuentes de configuración personalizadas
Implementa la ABC ConfigSource y pásala a create_app(config_source=...); resulta
útil para AWS Secrets Manager, despliegues basados solo en variables de entorno o para envolver otra
fuente:
from agent_lab import ConfigSource, create_app
class MyConfigSource(ConfigSource):
def load(self) -> dict:
return {
"api_base_url": "https://api.example.com",
"db": {"url": "postgresql://…", "vectors": "…", "checkpoints": "…"},
"auth": {"enabled": True, "url": "…", "realm": "…", "client_id": "…", "client_secret": "…"},
"broker": {"url": "redis://…"},
# … remaining keys as in the table above
}
app = create_app(config_source=MyConfigSource())Las fuentes incluidas (YamlConfigSource, VaultConfigSource,
KubernetesVaultConfigSource) y default_config_source() se exportan todas desde el
paquete de nivel superior agent_lab.