A situação
Um produto de wellness mental com três negócios lá dentro: uma subscrição para consumidores, um portal para empregadores vendido a empresas para os seus colaboradores e um marketplace onde os utilizadores marcam sessões de vídeo com profissionais. Por cima de tudo isso, um motor de recomendação que sugere o que uma pessoa deve fazer a seguir, a partir de como diz que se sente.
O terceiro é a razão pela qual vale a pena escrever sobre este projeto. Um motor de recomendação que sugere um exercício de respiração a alguém ligeiramente stressado é uma funcionalidade agradável. O mesmo motor a sugerir um exercício de respiração a alguém em crise é uma falha grave. A pergunta de engenharia não é como se constrói - é como sabes que não vai fazer isso.
O que construí
Um backend Django e DRF com uma aplicação React 18 à frente, entregues como um único sistema: subscrições e faturação, o portal para empregadores com a sua própria gestão de lugares, o marketplace de telemedicina sobre o Zoom Video SDK, as funcionalidades de comunidade, gamification e um back office administrativo completo para a equipa editorial.
O motor de recomendação
Um híbrido, não um modelo puro. De um check-in estruturado resulta uma avaliação por níveis do estado do sistema nervoso, e essa nota conduz uma amostragem ponderada de um catálogo, em vez de uma lista estática ordenada - por isso o contexto ganha à popularidade, e duas pessoas em estados diferentes nunca recebem a mesma resposta só porque um elemento está bem cotado em geral. Os slots de descoberta, com um cooldown, impedem o catálogo de colapsar sobre os mesmos vinte elementos, e o hot path contorna completamente o ORM, porque corre em cada ecrã.
Dois fornecedores de IA estão por trás de uma única abstração, comutáveis a partir do admin, com caching das respostas para manter o custo por utilizador previsível. A escolha do fornecedor é uma decisão de configuração, não de arquitetura - o que contou logo nesse mesmo ano, quando os preços mudaram.
Retrieval que se mantém ancorado
Cerca de trinta mil soluções distintas foram extraídas de uns noventa e cinco livros e indexadas para retrieval. A ancoragem é o objetivo todo: o sistema responde a partir desse corpus e não a partir da impressão geral de um modelo sobre conselhos de wellness. A ponderação pela adequação a situações de crise mantém as sugestões inadequadas longe dos estados graves, os limites de diversidade impedem uma única fonte de dominar, e um índice de nutrição em whitelist impede o modelo de derivar para conselhos médicos que não lhe compete dar.
O coach conversacional por cima tem memória persistente entre sessões, um controlador de cadência que empurra a conversa para uma ação concreta em vez de a deixar vaguear agradavelmente, e uma máquina de estados de moderação com três avisos para conteúdo que deve terminar a troca e passar o caso a alguém.
A parte de que mais me orgulho
Nada do que está acima vale seja o que for como simples afirmação. Por isso construí um harness Monte Carlo que gera utilizadores sintéticos com estados variados e adversariais e os faz passar pelo motor real.
Cento e vinte mil sessões em duas execuções, a verificar duas propriedades: que nenhuma sessão em estado de crise recebe alguma vez uma recomendação inadequada e que nenhum elemento do catálogo é inacessível - um cartão morto é conteúdo que alguém escreveu e que ninguém vai ver. Ambas se mantiveram.
O harness está exposto como uma ação de um só clique no admin, por isso a equipa editorial volta a executá-lo depois de cada alteração de conteúdo, em vez de esperar por um engenheiro. É essa a parte que faz dele uma propriedade de segurança e não uma captura de ecrã do dia do lançamento: é verificado pelas pessoas que o podem partir, exatamente no momento em que o poderiam partir.
Uma funcionalidade de IA que ninguém mediu não é uma funcionalidade. É um risco que ninguém pôs no preço e que por acaso dá bem em demo.
Comércio e conformidade
Subscrições Stripe com um motor bilingue de planos e descontos editável a partir do admin, faturação eletrónica com emissão automática e suspensão por atraso de pagamento, um motor de comissões para embaixadores em vários níveis, dez integrações com wearables por OAuth e scoring de leads que combina regras, um modelo e uma passagem por IA.
O que faria de outra maneira
Escreveria o harness de avaliação antes do motor, e não pouco depois. Construí o recomendador, depois construí a coisa que o demonstra - e perdi uma semana a alterar o recomendador para o poder testar. Se tivesse partido de «o que vou precisar de demonstrar sobre isto?», o desenho teria saído melhor e uma semana mais cedo.