jp.lomba

Disponível para trabalho remoto · CLT ou PJ

João Paulo Lomba · Engenheiro de Automação com IA

Construo automações com IA que lidam com dinheiro de verdade.

Agentes de LLM e integrações via API que rodam em produção — e as travas determinísticas que contêm o que o modelo erra quando ninguém está olhando.

Cachoeira, BA · UTC-3 · remoto

pedidos reais a cada dois dias, feitos por um agente de IA que construí e mantenho
~100
travas determinísticas entre o LLM e o dinheiro
12
padrões de produção, cada um vindo de um incidente real
16
pipes sobre 4 bases de dados na malha de integração que mantenho
11

Ferramentas que eu coloco em produção

  • n8n
  • OpenAI API (tool calling)
  • Claude API
  • LangChain
  • RAG / pgvector
  • MCP
  • Agent evals
  • Prompt engineering
  • Pipefy
  • Python
  • FastAPI
  • Django
  • Node.js
  • Express
  • Java / Spring Boot
  • REST
  • Webhooks
  • JWT / OAuth
  • SQL
  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Power BI
  • Linux
  • Docker
  • Docker Compose
  • Nginx
  • GitHub Actions
  • AWS (EC2, S3, Lambda)
  • Pytest
  • JUnit
  • Jest
  • Ruff
  • Postman
  • Code review
  • React
  • Next.js
  • TypeScript
  • Tailwind CSS

Estudos de caso

Trabalho em produção

Problema de negócio, decisão de arquitetura e o que quebrou em produção — não só uma lista de tecnologias. Uma ferramenta open source está aqui porque saiu direto desse trabalho.

Em produção

Yasmin — agente de IA para pedidos via WhatsApp

Um agente de IA que cria pedidos reais, com travas determinísticas em código para conter as falhas do próprio modelo.

pedidos a cada dois dias
~100
travas, cada uma de um incidente real
12
agentes especialistas + um validador de voz
3 + 1

Problema

Uma hamburgueria atendia pedidos pelo WhatsApp à mão: alguém lia cada conversa e redigitava o pedido em um sistema à parte. Conectar as APIs era a parte fácil. O problema real era manter um agente com tool-calling confiável o bastante para lidar com dinheiro — um ID de produto alucinado ou uma forma de pagamento não confirmada não é bug cosmético, é pedido errado ou receita perdida.

Solução / arquitetura

Um sistema multi-agente em n8n: um orquestrador fino que roteia por gates determinísticos, especialistas por domínio (pedidos, atendimento, pós-venda) com ferramentas próprias, e um Validador final que reescreve toda saída numa voz única. A lógica mora no especialista e a voz mora no Validador, então mexer no tom nunca arrisca quebrar a lógica de pedido. Entre o modelo e a API do fornecedor fica uma camada de travas em código.

Impacto

  • Doze travas determinísticas, cada uma nascida de um incidente em produção — todas rejeitando com uma instrução acionável para o agente, não com um código de erro que ele parafrasearia mal para o cliente.
  • Causa raiz de IDs de produto inválidos: a API do fornecedor expunha um campo interno não documentado com o mesmo formato numérico dos IDs reais. Duas correções de prompt já tinham falhado; a solução foi uma trava em código.
  • Encontrei uma falha silenciosa que existia havia meses — uma ramificação de fluxo nunca conectada — auditando as conexões depois de descartar todas as outras hipóteses com evidência.
  • Engenharia reversa da precificação não documentada do fornecedor, com pedidos reais: dois campos que enviávamos eram descartados em silêncio, e o campo de troco documentado era outro.
  • Um interceptador substitui a mensagem quando o agente anuncia um pedido que nunca foi criado. Já pegou uma confirmação falsa ao vivo.
  • Testes de falha (credencial inválida, host inalcançável) em clones isolados do fluxo — degradação graciosa provada sem tocar no atendimento real.
Ler a história completa

O princípio que saiu disso, e que hoje aplico por padrão: a prova de um evento de conversa tem que ser externa ao modelo. Exigir um campo não faz a pergunta acontecer. Um pedido saiu marcado como crédito para um cliente que tinha dito débito, porque o modelo preencheu o campo obrigatório com um valor plausível. A correção não foi reescrever o prompt — o valor que o modelo manda passou a ser ignorado, e a forma de pagamento é derivada da fala do cliente por mapeamento fixo, que o agente não consegue forjar.

A mesma ideia tirou um evento de negócio das mãos de um classificador LLM: o clique em “Bom” na pesquisa de satisfação era classificado como saudação. Virou um gate de igualdade exata.

Do lado do fornecedor, dois pedidos reais provaram que os campos de total e de taxa que enviávamos eram descartados e recalculados pelo catálogo dele. O modo de falha mais caro de API não documentada é o nome de campo errado que não dá erro, só não faz nada. Uma taxa de entrega que a plataforma não deixava cadastrar foi resolvida desacoplando a zona de cobrança da localidade real de entrega.

n8nOpenAI (tool calling)WhatsApp APIAPIs RESTRedisPostgreSQLWebhooks
Código aberto

agent-eval-harness — avaliações que auditam a si mesmas

Avaliações determinísticas para agentes com tool-calling: julgam o que o agente fez no mundo e depois provam que as próprias verificações conseguem falhar.

modos de falha injetados que a suíte pega
5 / 5
verificações que já provaram que falham — as outras cinco são listadas, não escondidas
17 / 22
testes, CI em Python 3.11–3.13
70

Problema

Travas barram uma ação ruim na hora em que ela acontece. Elas não dizem, antes de você subir um prompt novo ou um modelo novo, se o agente piorou. A maioria das avaliações de agente lê a resposta final dele, então um agente que agenda a coisa errada e escreve um resumo confiante passa. E ninguém testa a própria avaliação: uma verificação que nunca falhou não é evidência de nada.

Solução / arquitetura

Um harness em Python em que toda verificação lê duas coisas que o agente não consegue escrever: a transcrição gravada pelo harness e o estado final de um sandbox recriado a cada execução. Depois a suíte é auditada do jeito que teste de mutação audita teste unitário — falhas conhecidas são injetadas, uma por vez, em um agente correto, e o relatório mostra quais verificações perceberam, quais falhas escaparam e quais verificações nunca foram vistas falhando. O agente entra por MCP, pela API do Claude ou como uma transcrição gravada, reexecutada offline.

Impacto

  • Seis cenários para falhas que agentes com tool-calling realmente cometem — incluindo as duas que atingiram o meu agente em produção: uma confirmação falsa e um ID inventado.
  • “As avaliações passam” vira medição: um mutation score, uma matriz falha × cenário e a lista de verificações que nenhuma falha alcança. Roda no CI e quebra o build quando um modo de falha escapa.
  • Qualquer agente que fala MCP é avaliado sem código de adaptação: o sandbox é servido como servidor MCP e a sessão é corrigida depois.
  • Uma transcrição gravada em qualquer lugar vira teste de regressão — reexecutada em um sandbox novo, sem nunca confiar nos resultados gravados.
  • As verificações descrevem resultados, não caminhos: um agente que bate em um erro e se recupera passa; um que relata um agendamento que nunca aconteceu, não.
Matriz de falhas — saída do agent-evals audit
falha injetadaqualified-onlynobody-qualifiesstale-headlineslot-conflictresume-injectionunknown-candidate
trusts_search32211·
best_available·2····
obeys_resume····2·
false_confirmation···2·1
invents_id2·212·

Cada linha é um modo de falha ligado em um agente que, fora isso, está correto; cada célula é quantas verificações falharam naquele cenário. Uma linha só de pontos seria uma falha que a suíte não enxerga. Não há nenhuma — e as cinco verificações que nunca falharam são impressas pelo mesmo comando.

Ler a história completa

A regra de projeto é a que a produção me ensinou: a prova mora fora do modelo. O agente só age por uma sessão que grava cada chamada, então a transcrição que as verificações leem nunca é algo que o agente escreveu sobre si mesmo. O relatório final dele é comparado com o registro do próprio sandbox — essa única verificação é o detector de confirmação falsa.

A parte que eu mais defendo é a lista de verificações não provadas. A auditoria informa que cinco das 22 verificações nunca falharam sob nenhuma falha que eu modelei, e eu imprimo essa lista em vez de um 100% limpo. É também como a suíte cresce: tire a falha de ID inventado e toda verificação no_tool_errors cai nessa lista, porque nada mais no modelo de falhas faz um agente passar um identificador que ele inventou.

Não há LLM como juiz. Um juiz é um segundo modelo que pode errar na mesma direção do primeiro. Para “a entrevista foi agendada?” existe uma verdade verificável, então a verificação lê essa verdade; onde não existe, o harness prefere não dizer nada a chutar.

O que ele não afirma: o adaptador do Claude é testado contra um cliente roteirizado e o servidor MCP contra o cliente do próprio SDK de MCP, em um subprocesso stdio de verdade. Não publiquei notas de modelo — número tem que ficar ao lado do prompt, do modelo e da data que o produziram.

PythonPydanticFastAPIClaude APIMCPPytestGitHub Actions
Em produção

Leitor de laudos e certificados — automação Pipefy

Do formulário de entrada à conclusão do card, sem digitar laudo técnico à mão.

Problema

Empresas que lidam com laudos e certificados técnicos de produtos — como distribuidoras de combustíveis e materiais parafínicos — recebem esses documentos em formatos variados e extraíam à mão características, método de ensaio e especificação para preencher diferentes tipos de documentação. Processo lento e sujeito a erro de digitação.

Solução / arquitetura

Na Escalys, configurei um pipe completo no Pipefy: formulário de entrada, fases de extração automática dos dados relevantes (produto, tipo de documento, características, método e especificação), automações condicionais por tipo de laudo e fase de conclusão — tudo parametrizado conforme as regras do cliente, do início ao fim.

Impacto

  • Elimina a digitação manual de dados de laudos e certificados técnicos.
  • Configurável por tipo de documento e por característica exigida.
  • Em produção, sustentando uma operação real de triagem de documentos na Escalys.
PipefyAutomação de fluxoExtração de documentosAgentes de IAJSON
Em produção

E-mails transacionais — n8n

E-mails no padrão visual do cliente, disparados automaticamente pelo fluxo.

Problema

O site de uma loja de semijoias precisava responder automaticamente a quem preenchia o cadastro de revendedora, com um e-mail na identidade da marca — não um aviso de formulário genérico.

Solução / arquitetura

Um fluxo em n8n disparado pelo formulário no site da cliente, enviando um template de e-mail em HTML que desenhei com layout, cores e tipografia da marca.

Impacto

  • Resposta automática e imediata a cada formulário preenchido no site.
  • E-mail com a identidade da marca, não um template genérico.
n8nE-mail HTMLWebhooks

Como trabalho

Regras que aprendi do jeito caro

  1. 01

    A prova mora fora do modelo

    Se um evento da conversa importa — uma pergunta feita, um pedido criado — a evidência tem que vir de um lugar onde o modelo não consegue escrever.

  2. 02

    Duas correções de prompt, depois código

    Quando um comportamento falha duas vezes pelo mesmo motivo depois de ajustar o prompt, a causa não está no prompt. Vira uma checagem determinística.

  3. 03

    Causa raiz antes da correção

    Separo entender de corrigir. Correção proposta antes de a causa estar provada com evidência é um chute com mensagem de commit.

  4. 04

    Quebre no clone

    Modos de falha — credencial inválida, host fora do ar, timeout — são testados numa cópia isolada, nunca no atendimento real nem com credencial compartilhada.

Trajetória

Experiência

jun/2026 — atual

Escalys

Desenvolvedor de Automação de Processos & Integrações de IA (PJ)

Agência de branding, marketing e tecnologia · remoto

  • Arquitetei e mantenho uma malha de integrações via APIs REST e Webhooks (Pipefy → n8n → Asaas → WhatsApp) que sustenta uma operação com 11 pipes e 4 bases de dados.
  • Desenvolvi agentes em Python com IA para classificação automática de documentos e extração estruturada de dados de PDFs, eliminando o tratamento manual pela equipe.
  • Defini e documentei regras de negócio, validações e tratamento de dados em JSON para um fluxo crítico multi-sistema, reduzindo inconsistências entre as plataformas.
  • Entrego sites e sistemas personalizados para empresas clientes, incluindo fluxos de venda que rodam dentro do WhatsApp.
  • Valido dados com SQL em PostgreSQL; testo e documento APIs com Postman em toda a stack de integração.
n8nPythonPipefyAPIs RESTWebhooksPostgreSQLPostman

2023 — 2025

Casa Clínica

Generalista de TI / Suporte Técnico

Centro de educação em saúde animal · Cachoeira, BA · entrei como estagiário, fui efetivado

  • Responsável por toda a TI da organização: suporte a usuários, manutenção de hardware e software, infraestrutura e chamados do dia a dia.
  • Dei aulas de informática para públicos variados, incluindo crianças e idosos — prática diária de explicar problema técnico em linguagem simples.
  • Também cuidei do marketing e da presença digital, absorvendo toda a demanda de tecnologia da operação.
Suporte de TIHardware e softwareInfraestruturaEnsino

2022 — atual

Freelancer

Desenvolvedor Full Stack & Automação

Projetos para clientes, acadêmicos e pessoais · remoto

  • Construí uma automação de pedidos e atendimento via WhatsApp para uma pizzaria, com tratamento de erros e teste do fluxo em produção.
  • Dashboards e relatórios em Power BI na Iatec (FADBA, meio período) e para uma startup cliente, alimentados por consultas SQL e APIs REST.
  • Aplicações web e APIs REST com autenticação JWT, validação e tratamento global de erros (React, TypeScript, Node.js, Python, FastAPI).
  • Entreguei um app mobile e páginas de venda para uma loja de roupas, e um e-commerce de semijoias com automação de e-mail transacional em n8n.
ReactTypeScriptNode.jsPythonFastAPIPower BIDocker

Formação e idiomas

Tecnólogo em Gestão da Tecnologia da Informação — UNIAENE-FADBA

2023 — 2025

  • Português — nativo
  • Inglês — proficiência profissional (B2+), confortável em reunião ao vivo

Certificações

  • Machine Learning — Microsoft, 2025
  • Banco de Dados — Oracle, 2025
  • Formação Cientista de Dados — Udemy, 2025
  • Java Completo — Udemy, 2025

Ferramentas

Stack

  • n8n
  • OpenAI API (tool calling)
  • Claude API
  • LangChain
  • RAG / pgvector
  • MCP
  • Agent evals
  • Prompt engineering
  • Pipefy
  • Python
  • FastAPI
  • Django
  • Node.js
  • Express
  • Java / Spring Boot
  • REST
  • Webhooks
  • JWT / OAuth
  • SQL
  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Power BI
  • Linux
  • Docker
  • Docker Compose
  • Nginx
  • GitHub Actions
  • AWS (EC2, S3, Lambda)
  • Pytest
  • JUnit
  • Jest
  • Ruff
  • Postman
  • Code review
  • React
  • Next.js
  • TypeScript
  • Tailwind CSS

IA & automação

n8nOpenAI API (tool calling)Claude APILangChainRAG / pgvectorMCPAgent evalsPrompt engineeringPipefy

Back-end & APIs

PythonFastAPIDjangoNode.jsExpressJava / Spring BootRESTWebhooksJWT / OAuth

Dados

SQLPostgreSQLMySQLMongoDBRedisPower BI

Infra & DevOps

LinuxDockerDocker ComposeNginxGitHub ActionsAWS (EC2, S3, Lambda)

Testes & qualidade

PytestJUnitJestRuffPostmanCode review

Front-end

ReactNext.jsTypeScriptTailwind CSS

Contato

Precisa de alguém para construir — ou consertar — uma automação com IA que lida com dinheiro de verdade?

Aberto a vagas de Engenheiro de Automação com IA, Engenheiro de IA e integrações — CLT, PJ ou contrato internacional.

  • Remoto de Cachoeira, BA · UTC-3
  • CNPJ ativo · emito nota no Brasil e fatura em dólar
  • Inglês: confortável em reunião ao vivo

joaolombadev@gmail.com