Integrações Externas
Integrações Externas
Seção intitulada “Integrações Externas”O Valter se integra com diversos serviços externos. Cada integração é opcional para desenvolvimento local, mas pode ser obrigatória em staging ou produção. Esta página fornece o passo a passo de configuração para cada serviço.
Groq API
Seção intitulada “Groq API”O Groq oferece inferência LLM de alta velocidade, usada para classificação de documentos, extração factual e expansão de queries na busca híbrida.
O que habilita
Seção intitulada “O que habilita”POST /v1/factual/extract— extrai dados factuais estruturados de documentos jurídicos- Expansão de queries na busca híbrida — gera variantes semânticas das consultas do usuário para maior cobertura
Configuração
Seção intitulada “Configuração”-
Crie uma conta em console.groq.com e gere uma API key.
-
Defina as seguintes variáveis de ambiente:
VALTER_GROQ_API_KEY=gsk_your_key_hereVALTER_GROQ_ENABLED=true# Opcional: sobrescrever o modelo padrão# VALTER_GROQ_MODEL=qwen/qwen3-32b- Verifique iniciando a API e confirmando que os endpoints factuais respondem sem erros.
Sem Groq
Seção intitulada “Sem Groq”Quando o Groq não está configurado, o sistema opera normalmente com estas diferenças:
- Endpoints de extração factual retornam um erro indicando que o recurso está desabilitado
- A busca híbrida funciona sem expansão de queries (query única apenas)
- Nenhum custo de LLM é incorrido
Cloudflare R2
Seção intitulada “Cloudflare R2”O Cloudflare R2 oferece armazenamento de objetos compatível com S3 para artefatos de workflows (PDFs gerados, relatórios JSON). Substitui o armazenamento em sistema de arquivos local para deploys de produção.
Configuração
Seção intitulada “Configuração”-
No painel da Cloudflare, crie um bucket R2 e gere credenciais de API compatíveis com S3.
-
Defina as seguintes variáveis de ambiente:
VALTER_R2_ACCOUNT_ID=your_cloudflare_account_idVALTER_R2_ACCESS_KEY_ID=your_access_keyVALTER_R2_SECRET_ACCESS_KEY=your_secret_key# Opcional: sobrescrever padrões# VALTER_R2_BUCKET_NAME=valter-artifacts# VALTER_R2_PRESIGN_TTL_SECONDS=600- A URL do endpoint R2 é construída automaticamente a partir do account ID (
https://{account_id}.r2.cloudflarestorage.com). Sobrescreva comVALTER_R2_ENDPOINT_URLse necessário.
Rollout canário
Seção intitulada “Rollout canário”Use VALTER_R2_CANARY_PERCENT para migrar gradualmente o armazenamento de artefatos do disco local para o R2:
# Começar com 10% dos uploads indo para o R2VALTER_R2_CANARY_PERCENT=10
# Após validação, aumentar para 50%VALTER_R2_CANARY_PERCENT=50
# Migração completaVALTER_R2_CANARY_PERCENT=100O valor é limitado ao intervalo 0-100 internamente.
Quando as credenciais do R2 não estão definidas, todos os artefatos são armazenados localmente em VALTER_UPLOAD_STORAGE_PATH (padrão: data/datasets/uploads/raw). Este é o comportamento padrão e é adequado para desenvolvimento.
Neo4j Aura
Seção intitulada “Neo4j Aura”O Neo4j Aura é um serviço gerenciado de banco de dados de grafos. É o backend de grafo obrigatório para ambientes de staging e produção. O desenvolvimento local pode usar tanto o Neo4j Community Edition quanto o Aura.
Desenvolvimento local (Community Edition)
Seção intitulada “Desenvolvimento local (Community Edition)”- Execute o Neo4j localmente via Docker (não incluído no
docker-compose.ymlpor padrão):
docker run -d \ --name neo4j-dev \ -p 7474:7474 -p 7687:7687 \ -e NEO4J_AUTH=neo4j/neo4j_dev \ neo4j:5-community- Use as configurações de conexão padrão (nenhuma alteração no
.envnecessária):
VALTER_NEO4J_URI=bolt://localhost:7687VALTER_NEO4J_USERNAME=neo4jVALTER_NEO4J_PASSWORD=neo4j_devConfiguração do Aura (staging/produção)
Seção intitulada “Configuração do Aura (staging/produção)”-
Crie uma instância Aura em console.neo4j.io. Salve a URI de conexão, o usuário e a senha da tela de criação da instância.
-
Defina as variáveis de ambiente:
VALTER_NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.ioVALTER_NEO4J_USERNAME=neo4jVALTER_NEO4J_PASSWORD=your_aura_password- Valide a conexão:
make validate-auraRestrições de produção
Seção intitulada “Restrições de produção”Em produção (VALTER_ENV=production), a aplicação aplica:
VALTER_NEO4J_URInão pode apontar paralocalhostou127.0.0.1VALTER_NEO4J_PASSWORDnão pode ser um valor fraco (neo4j_dev,password,changeme, etc.)
Railway.app
Seção intitulada “Railway.app”O Railway hospeda os ambientes de produção e staging do Valter. Cada modo de runtime roda como um serviço Railway separado compartilhando o mesmo codebase.
Arquitetura de serviços
Seção intitulada “Arquitetura de serviços”| Serviço Railway | VALTER_RUNTIME | Propósito |
|---|---|---|
| API | api | Servidor da API REST |
| Worker | worker | Processador de jobs de ingestão em background |
| MCP Remote | mcp-remote | Servidor MCP HTTP para ChatGPT/Claude |
Configuração de deploy
Seção intitulada “Configuração de deploy”O deploy é configurado por dois arquivos:
railway.json— configurações de build e deploy específicas do RailwayDockerfile— definição da imagem de container
O entrypoint do container é scripts/start-command.sh, que lê VALTER_RUNTIME e inicia o processo apropriado. A variável $PORT do Railway é respeitada automaticamente.
Configurando um novo serviço Railway
Seção intitulada “Configurando um novo serviço Railway”- Conecte o repositório GitHub ao Railway.
- Crie três serviços a partir do mesmo repositório, cada um com um
VALTER_RUNTIMEdiferente. - Defina todas as variáveis de ambiente
VALTER_*necessárias no painel do Railway para cada serviço. Consulte Variáveis de Ambiente para a referência completa. - Garanta que
VALTER_ENV=productionpara serviços de produção.
Serviços remotos
Seção intitulada “Serviços remotos”Para deploys de produção, você pode descarregar embedding e reranking para serviços Railway dedicados:
VALTER_EMBEDDING_SERVICE_URL=https://your-embedding-service.up.railway.appVALTER_RERANKER_SERVICE_URL=https://your-reranker-service.up.railway.appIsso evita embutir o modelo de embedding de ~500 MB no container principal.
HuggingFace
Seção intitulada “HuggingFace”O Valter usa um modelo HuggingFace para gerar embeddings semânticos de documentos jurídicos. O modelo padrão é rufimelo/Legal-BERTimbau-sts-base, um modelo de domínio jurídico em português que produz vetores de 768 dimensões.
Baixando o modelo
Seção intitulada “Baixando o modelo”make download-modelIsso baixa o modelo do HuggingFace Hub e faz cache em ~/.cache/huggingface/. O download é de aproximadamente 500 MB e precisa ser feito apenas uma vez.
Sobrescrevendo o modelo
Seção intitulada “Sobrescrevendo o modelo”Para usar um modelo de embedding diferente, defina a variável de ambiente antes de baixar:
VALTER_EMBEDDING_MODEL=my-org/my-model make download-modelAlternativa de encoding remoto
Seção intitulada “Alternativa de encoding remoto”Se preferir não rodar o modelo localmente (ex.: em CI ou containers leves), defina VALTER_EMBEDDING_SERVICE_URL para apontar a um serviço de encoding remoto:
VALTER_EMBEDDING_SERVICE_URL=https://your-embedding-service.up.railway.appQuando esta variável está definida, o modelo local não é carregado e make download-model não é necessário. O mesmo se aplica ao reranker via VALTER_RERANKER_SERVICE_URL.