Como a configuração é carregada
A configuração é um dicionário simples carregado por um ConfigSource (consulte
agent_lab/core/config.py) e vinculado ao container de DI. create_app() seleciona
uma fonte por meio de default_config_source(), exatamente nesta ordem — a primeira
correspondência vence:
| # | Condição (variável de ambiente definida) | Fonte ativa |
|---|---|---|
| 1 | VAULT_K8S_ROLE |
KubernetesVaultConfigSource — Vault via o token projetado da ServiceAccount do pod |
| 2 | DOCKER |
YamlConfigSource("config-docker.yml") |
| 3 | TESTING |
YamlConfigSource("config-test.yml") |
| 4 | DEVELOPING |
YamlConfigSource("config-dev.yml") |
| 5 | (nenhuma das anteriores) | VaultConfigSource — lê VAULT_URL / VAULT_TOKEN |
Você pode sobrescrever a seleção por aplicação:
app = create_app(config_source=YamlConfigSource("config.yml")) # explicitChaves de configuração
O dicionário que a fonte ativa deve retornar. Os valores padrão mostrados vêm de
config-dev.yml (desenvolvimento); a aplicação de referência inclui config-dev.yml,
config-test.yml e config-docker.yml exatamente com este formato.
| Chave | Finalidade | Valor de exemplo |
|---|---|---|
api_base_url |
URL base pública desta API (usada em links nas respostas) | http://localhost:8000 |
cdp_url |
Endpoint do Chrome headless (CDP) para agentes web (WebAgentBase) |
http://localhost:9222 |
auth.enabled |
Monta o middleware de autenticação e as rotas /auth quando true |
false |
auth.url |
URL base do Keycloak | https://auth.example.com |
auth.realm |
Nome do realm do Keycloak | agent-lab |
auth.client_id |
Client id OIDC | agent-lab-api |
auth.client_secret |
Client secret OIDC | … |
broker.url |
URL do Redis para atualizações de status via pub/sub em operações longas | redis://localhost:6379/0 |
db.url |
PostgreSQL — dados relacionais | postgresql://postgres:postgres@localhost:5432/agent_lab |
db.vectors |
PostgreSQL — banco de dados de embeddings pgvector | postgresql://postgres:postgres@localhost:5432/agent_lab_vectors |
db.checkpoints |
PostgreSQL — banco de dados de checkpoints do LangGraph (memória dos agentes) | postgresql://postgres:postgres@localhost:5432/agent_lab_checkpoints |
vault.url |
Endereço do Vault (também gravado de volta para que os serviços possam ler segredos) | http://localhost:8200 |
vault.token |
Token do Vault | dev-only-token |
static.enabled |
Serve um build de SPA (false quando não existe build de frontend) |
false |
static.directory |
Diretório que contém o build da SPA | static/frontend/browser |
static.index_file |
Arquivo de fallback da SPA | index.html |
static.mount_path |
Ponto de montagem da SPA | / |
static é um caso especial: as fontes YAML o configuram explicitamente, enquanto a
fonte Vault o deriva de uma convenção de código — ativado quando existe um build de SPA
em STATIC_DIR.
Payload de segredos do Vault
O VaultConfigSource lê um único segredo KV-v2 (engine secret, caminho app_secrets
por padrão) e o mapeia para as chaves acima:
| Chave do segredo | Mapeada para |
|---|---|
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 |
Como provisionar esse payload (Docker Compose de desenvolvimento, Kubernetes, Terraform) é explicado em Segredos com Vault e no guia de implantação.
Variáveis de ambiente
Seleção da fonte de configuração
| Variável | Padrão | Finalidade |
|---|---|---|
DEVELOPING |
(não definida) | Seleciona config-dev.yml (depuração na IDE) |
TESTING |
(não definida) | Seleciona config-test.yml (suíte de testes) |
DOCKER |
(não definida) | Seleciona config-docker.yml (Compose) |
VAULT_URL |
(não definida) | Endereço do Vault para a fonte padrão |
VAULT_TOKEN |
(não definida) | Token do Vault para a fonte padrão |
VAULT_ENGINE_PATH |
secret |
Ponto de montagem do KV-v2 |
VAULT_SECRET_PATH |
app_secrets |
Caminho do segredo |
VAULT_K8S_ROLE |
(não definida) | Role de autenticação Kubernetes do Vault; ativa a fonte K8s e tem precedência |
STATIC_DIR |
static/frontend/browser |
Onde o build da SPA é procurado |
Observabilidade
| Variável | Padrão | Finalidade |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
(não definida — tracing desativado) | URL base do collector OTLP/HTTP; traces → /v1/traces, métricas → /v1/metrics, logs → /v1/logs |
SERVICE_NAME |
Agent-Lab |
Nome do recurso OTel |
SERVICE_VERSION |
snapshot |
Versão do recurso OTel |
LANGFUSE_HOST |
(não definida) | URL base do Langfuse; junto com as duas chaves abaixo, ativa o backend Langfuse |
LANGFUSE_PUBLIC_KEY |
(não definida) | Chave pk-lf-… do Langfuse |
LANGFUSE_SECRET_KEY |
(não definida) | Chave sk-lf-… do Langfuse |
LANGWATCH_ENDPOINT |
(não definida) | Endpoint do LangWatch; junto com a chave abaixo, ativa o backend LangWatch |
LANGWATCH_API_KEY |
(não definida) | Chave de API do LangWatch |
Se qualquer variável do Langfuse estiver ausente, o backend Langfuse é desativado silenciosamente e a aplicação continua inicializando (o mesmo vale para o LangWatch). Detalhes e o ponto de extensão: Observabilidade.
Autenticação e integrações
| Variável | Padrão | Finalidade |
|---|---|---|
AZURE_CLIENT_ID / AZURE_CLIENT_SECRET / AZURE_TENANT_ID |
(não definida) | Credenciais do Microsoft Entra ID para /auth/exchange |
EMBEDDINGS_ENDPOINT |
(não definida) | Serviço de embeddings usado pelos agentes de recuperação |
OPENAI_API_KEY |
(não definida) | OpenAI (entrada de áudio dos memos de voz; padrão do juiz das simulações) |
Simulações (somente na suíte de testes)
| Variável | Padrão | Finalidade |
|---|---|---|
SIMULATION_LLM_MODEL |
(obrigatória) | Tag do modelo que executa os agentes sob teste (por exemplo, qwen3:30b) |
SIMULATION_LLM_API_BASE |
(obrigatória) | Endpoint compatível com a OpenAI que serve esse modelo |
SIMULATION_LLM_API_KEY |
dummy-key |
Chave de API do endpoint, se necessária |
SIMULATION_JUDGE_MODEL |
openai/gpt-5-nano |
id de modelo do litellm usado pelo LLM como juiz |
SIMULATION_JUDGE_API_BASE |
padrão do provedor | Endpoint personalizado compatível com a OpenAI para o juiz |
SIMULATION_JUDGE_API_KEY |
padrão do provedor | Chave de API do endpoint personalizado do juiz |
Consulte Testes e simulações para ver como elas são consumidas.
Fontes de configuração personalizadas
Implemente a ABC ConfigSource e passe-a para create_app(config_source=...) — útil
para AWS Secrets Manager, implantações baseadas apenas em variáveis de ambiente ou para
encapsular outra fonte:
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())As fontes incluídas (YamlConfigSource, VaultConfigSource,
KubernetesVaultConfigSource) e default_config_source() são todas exportadas pelo
pacote de nível superior agent_lab.