Pular para o conteúdo

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.

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.

  • 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
  1. Crie uma conta em console.groq.com e gere uma API key.

  2. Defina as seguintes variáveis de ambiente:

Terminal window
VALTER_GROQ_API_KEY=gsk_your_key_here
VALTER_GROQ_ENABLED=true
# Opcional: sobrescrever o modelo padrão
# VALTER_GROQ_MODEL=qwen/qwen3-32b
  1. Verifique iniciando a API e confirmando que os endpoints factuais respondem sem erros.

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

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.

  1. No painel da Cloudflare, crie um bucket R2 e gere credenciais de API compatíveis com S3.

  2. Defina as seguintes variáveis de ambiente:

Terminal window
VALTER_R2_ACCOUNT_ID=your_cloudflare_account_id
VALTER_R2_ACCESS_KEY_ID=your_access_key
VALTER_R2_SECRET_ACCESS_KEY=your_secret_key
# Opcional: sobrescrever padrões
# VALTER_R2_BUCKET_NAME=valter-artifacts
# VALTER_R2_PRESIGN_TTL_SECONDS=600
  1. A URL do endpoint R2 é construída automaticamente a partir do account ID (https://{account_id}.r2.cloudflarestorage.com). Sobrescreva com VALTER_R2_ENDPOINT_URL se necessário.

Use VALTER_R2_CANARY_PERCENT para migrar gradualmente o armazenamento de artefatos do disco local para o R2:

Terminal window
# Começar com 10% dos uploads indo para o R2
VALTER_R2_CANARY_PERCENT=10
# Após validação, aumentar para 50%
VALTER_R2_CANARY_PERCENT=50
# Migração completa
VALTER_R2_CANARY_PERCENT=100

O 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.

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.

  1. Execute o Neo4j localmente via Docker (não incluído no docker-compose.yml por padrão):
Terminal window
docker run -d \
--name neo4j-dev \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/neo4j_dev \
neo4j:5-community
  1. Use as configurações de conexão padrão (nenhuma alteração no .env necessária):
Terminal window
VALTER_NEO4J_URI=bolt://localhost:7687
VALTER_NEO4J_USERNAME=neo4j
VALTER_NEO4J_PASSWORD=neo4j_dev
  1. 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.

  2. Defina as variáveis de ambiente:

Terminal window
VALTER_NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io
VALTER_NEO4J_USERNAME=neo4j
VALTER_NEO4J_PASSWORD=your_aura_password
  1. Valide a conexão:
Terminal window
make validate-aura

Em produção (VALTER_ENV=production), a aplicação aplica:

  • VALTER_NEO4J_URI não pode apontar para localhost ou 127.0.0.1
  • VALTER_NEO4J_PASSWORD não pode ser um valor fraco (neo4j_dev, password, changeme, etc.)

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.

Serviço RailwayVALTER_RUNTIMEPropósito
APIapiServidor da API REST
WorkerworkerProcessador de jobs de ingestão em background
MCP Remotemcp-remoteServidor MCP HTTP para ChatGPT/Claude

O deploy é configurado por dois arquivos:

  • railway.json — configurações de build e deploy específicas do Railway
  • Dockerfile — 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.

  1. Conecte o repositório GitHub ao Railway.
  2. Crie três serviços a partir do mesmo repositório, cada um com um VALTER_RUNTIME diferente.
  3. 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.
  4. Garanta que VALTER_ENV=production para serviços de produção.

Para deploys de produção, você pode descarregar embedding e reranking para serviços Railway dedicados:

Terminal window
VALTER_EMBEDDING_SERVICE_URL=https://your-embedding-service.up.railway.app
VALTER_RERANKER_SERVICE_URL=https://your-reranker-service.up.railway.app

Isso evita embutir o modelo de embedding de ~500 MB no container principal.

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.

Terminal window
make download-model

Isso 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.

Para usar um modelo de embedding diferente, defina a variável de ambiente antes de baixar:

Terminal window
VALTER_EMBEDDING_MODEL=my-org/my-model make download-model

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:

Terminal window
VALTER_EMBEDDING_SERVICE_URL=https://your-embedding-service.up.railway.app

Quando 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.