Prova de conceito · Varejo de material de construção
Toda frase que o atendente de uma loja diz é uma oferta.
Um atendente por mensagem sobre o catálogo de 13.312 produtos de uma loja de materiais de construção, rodado como prova de conceito com o dono. O objetivo nunca foi a demonstração. Era descobrir quais frases a coisa não pode ter permissão de dizer.
- Papel
- Product lead e construção
- Stack
- Python · índice invertido em memória · agente com ferramentas
- Status
- Prova de conceito validada · cliente anonimizado a pedido dele
Um chatbot errado num site é constrangedor. Numa loja, ele vincula.
O Código de Defesa do Consumidor trata informação suficientemente precisa veiculada por qualquer meio como vinculante ao fornecedor e integrante do contrato. Quando um atendente que fala pela loja afirma um preço, uma voltagem ou uma capacidade, a loja responde por aquilo. Não sou advogado e isso merece um, mas a direção é clara o bastante para projetar em cima dela.
E existe uma segunda exposição que não tem nada a ver com lei. Recomendar um equipamento pelo tamanho do ambiente é conselho técnico: superdimensionar um calefator superaquece a sala, subdimensionar uma bomba entrega ao cliente uma pressão que ele pagou e não vai ter. Errar nisso custa mais caro que uma resposta ruim.
O modelo nunca vê o catálogo.
A construção óbvia em 2026 é uma base vetorial com uma cadeia de recuperação. A tentativa anterior foi por esse caminho, numa ferramenta de workflow, e morreu em timeout — porque colocar treze mil linhas perto de um prompt não é estratégia de recuperação.
Então o catálogo fica inteiramente fora do modelo. Treze mil produtos carregam na memória atrás de um índice invertido e respondem em um a cinco milissegundos. Sem banco — treze mil linhas cabem na RAM, e o Postgres só ganha o lugar dele quando houver concorrência de verdade. O modelo recebe oito linhas e redige uma resposta em volta delas.
A parte difícil nunca foi o índice, foi o vocabulário. O cadastro é escrito em abreviação de ERP e o cliente fala a língua do balcão: vergalhão está arquivado sob um nome de produto que ninguém pronuncia, e pedreiro pedindo "bailarina" quer serra copo. Uma camada de sinônimos carrega essa distância, e o lado direito de cada mapeamento precisa existir no cadastro real — senão o mapeamento é uma mentira com cara de conserto.
25mm nunca devolve 32mm. Melhor dizer que não temos.
Toda medida é lida como valor mais dimensão, então 18 litros de tinta nunca é comparado com 18mm de cano. Polegada é mantida como dimensão separada de milímetro de propósito: um quarto de polegada de tubo é 20mm, um quarto de polegada de vergalhão é 6,3mm, e juntar as duas colocava a barra errada em primeiro lugar.
O campo de unidade do ERP tem 136 valores distintos, então ele é repetido literalmente e nunca interpretado. Confundir a lata de 0,9 litro com a de 3,6 não é erro de arredondamento, é discussão no balcão.
A recuperação parou de mentir. O redator não.
Tirar o modelo da recuperação funcionou: ao longo das sessões, a busca não devolveu o produto errado. O que isso expôs é que a superfície restante — transformar oito linhas numa frase — inventa exatamente onde o cadastro é silencioso. Quatro comportamentos, todos observados:
Afirmou especificações que não existem
Perguntado sobre detalhe de uma bomba, descreveu o tipo de motor, o uso indicado e uma voltagem de alimentação. Nada disso está no cadastro, que tem descrição, preço e estoque. No dia seguinte, perguntado diretamente pela voltagem, o mesmo atendente respondeu corretamente que ela não está no sistema. Mesma pergunta, respostas opostas, e a inventada veio primeiro.
Leu uma descrição em vez de um campo
Um produto nomeado com quatro estágios e dois cavalos de potência virou, na resposta, uma bomba de quatro cavalos — e esse número inventado foi usado em seguida para comparar modelos para o cliente. O número nunca foi um campo; era uma string que o modelo interpretou.
Concordou primeiro e conferiu depois
Um cliente mencionou uma linha de produto de que tinha ouvido falar. O atendente explicou como funciona, endossou como boa opção, e só então buscou e descobriu que a loja não vende. O endosso já tinha sido dito.
Quando a ferramenta falhou, improvisou
A ferramenta de dimensionamento deu erro em duas tentativas. Em vez de parar, o atendente produziu uma recomendação própria. É exatamente a falha que a ferramenta existe para impedir.
Cinco guardrails, escritos a partir de quatro falhas.
Essa é a entrega. Não uma demonstração que impressionou alguém — uma especificação do que o atendente precisa ser impedido de fazer, cada linha rastreável a algo que ele de fato fez.
- 01
Fundamentação, conferida de forma determinística
A resposta só pode afirmar atributos presentes nas linhas recuperadas. Imposto duas vezes: como contrato no prompt, e como conferência depois da geração, que extrai as afirmações e compara com o payload. A conferência é determinística de propósito — eu já construí um painel de avaliação julgado por modelo e vi ele aprovar quase tudo, inclusive o output ruim. Modelo perguntando a modelo se ele alucinou herda o problema que deveria pegar.
- 02
Atributo tipado, nunca string interpretada
Estágio, potência e voltagem viram campos tipados na indexação, do mesmo jeito que as medidas já são, e o redator recebe campo em vez de descrição para ler. O padrão já existe no sistema — é por ele que polegada e milímetro são dimensões separadas — e só não tinha sido estendido aos atributos enterrados no nome do produto.
- 03
Buscar antes de afirmar
Nenhuma afirmação sobre o que a loja tem, ou sobre como um produto nomeado funciona, antes de uma recuperação ter voltado no mesmo turno. Ordem imposta no laço do agente, não pedida no prompt.
- 04
Ferramenta que falha para
Se a ferramenta de dimensionamento der erro, o atendente diz que não consegue conferir agora e oferece uma pessoa. Ele não substitui pelo próprio julgamento a ferramenta cuja razão de existir é que o julgamento dele não basta.
- 05
Recomendação dimensionada fica na faixa validada
Recomendação guiada por área do ambiente ou número de pontos é conselho com consequência física, então ela é limitada: devolver o menor equipamento que cobre o requisito, recusar fora da faixa validada, e escalar em vez de extrapolar.
E um que não é guardrail
Guardar o que foi mostrado ao cliente.
Preço, disponibilidade e especificação como foram apresentados, com carimbo de hora. Não por analytics — porque quando o cliente chega no balcão com outro número na mão, esse registro é a única coisa que resolve.
A leitura honesta
Isso foi uma prova de conceito, rodada com o dono e não com o público, e anonimizada a pedido dele. Não tem número de receita nem implantação para apontar. Os guardrails acima são a especificação que o exercício produziu; nem todos estão construídos.
O que ele mostra é uma decisão que a maioria não tomaria — manter a ferramenta da moda fora justamente da parte do sistema onde todo mundo a coloca hoje — e depois a disciplina de ir procurar onde a decisão não foi longe o bastante, em vez de parar numa demonstração que funcionou.
Pensando em colocar um atendente na frente dos seus clientes?
A conversa útil costuma ser sobre quais frases ele nunca pode ter permissão de dizer.