← Projetos

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
Por que aqui o risco é outro

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 primeiro guardrail

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.

Medida é tipada, e o filtro é duro

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.

O que a prova de conceito encontrou

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.

O que a prova de conceito produziu

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.

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

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

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

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

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

O que isso prova e o que não prova

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.