Situația
Un produs de wellness mental cu trei business-uri înăuntru: un abonament pentru consumatori, un portal pentru angajatori vândut companiilor pentru oamenii lor și un marketplace unde utilizatorii își rezervă ședințe video cu practicieni. Peste toate astea, un motor de recomandare care sugerează ce ar trebui să facă o persoană mai departe, pornind de la cum spune că se simte.
Al treilea e motivul pentru care merită să scriu despre proiectul ăsta. Un motor de recomandare care sugerează un exercițiu de respirație cuiva ușor stresat e o funcționalitate plăcută. Același motor sugerând un exercițiu de respirație cuiva aflat în criză e o eroare gravă. Întrebarea de inginerie nu e cum îl construiești - e cum știi că nu va face asta.
Ce am construit
Un backend Django și DRF cu o aplicație React 18 în față, livrate ca un singur sistem: abonamente și facturare, portalul pentru angajatori cu propria gestiune de locuri, marketplace-ul de telemedicină pe Zoom Video SDK, funcțiile de comunitate, gamification și un back office administrativ complet pentru echipa editorială.
Motorul de recomandare
Un hibrid, nu un model pur. Dintr-un check-in structurat rezultă un grad al stării sistemului nervos, iar gradul ăla conduce o eșantionare ponderată dintr-un catalog, în loc de o listă statică ordonată - așa că contextul bate popularitatea, și doi oameni în stări diferite nu primesc niciodată același răspuns doar pentru că un element e în general bine notat. Sloturile de descoperire, cu un cooldown, împiedică prăbușirea catalogului pe aceleași douăzeci de elemente, iar hot path-ul ocolește complet ORM-ul, pentru că rulează pe fiecare ecran.
Doi furnizori de AI stau în spatele unei singure abstracții, comutabili din admin, cu caching pe răspunsuri ca să țin costul pe utilizator predictibil. Alegerea furnizorului e o decizie de configurare, nu una de arhitectură - ceea ce a contat chiar în același an, când s-au schimbat prețurile.
Retrieval care rămâne ancorat
Aproximativ treizeci de mii de soluții distincte au fost extrase din vreo nouăzeci și cinci de cărți și indexate pentru retrieval. Ancorarea e tot rostul: sistemul răspunde din corpusul ăla, nu din impresia generală a unui model despre sfaturile de wellness. Ponderarea după potrivirea în situații de criză ține sugestiile nepotrivite departe de stările severe, plafoanele de diversitate împiedică o singură sursă să domine, iar un index de nutriție pe whitelist împiedică modelul să alunece în sfaturi medicale pe care nu are de ce să le dea.
Coach-ul conversațional de deasupra are memorie persistentă între sesiuni, un controler de cadență care împinge conversația spre o acțiune concretă în loc s-o lase să hoinărească plăcut, și o mașină de stări de moderare cu trei avertismente pentru conținutul care ar trebui să încheie schimbul și să predea mai departe.
Partea de care sunt cea mai mândră
Nimic din ce e mai sus nu valorează nimic ca simplă afirmație. Așa că am construit un harness Monte Carlo care generează utilizatori sintetici cu stări variate și adversariale și îi trece prin motorul real.
O sută douăzeci de mii de sesiuni în două rulări, verificând două proprietăți: că nicio sesiune în stare de criză nu primește vreodată o recomandare nepotrivită și că niciun element din catalog nu e inaccesibil - un card mort e conținut pe care l-a scris cineva și pe care nu-l va vedea nimeni. Amândouă au ținut.
Harness-ul e expus ca o acțiune cu un singur click în admin, așa că echipa editorială îl rulează din nou după fiecare modificare de conținut, în loc să aștepte un inginer. Asta e partea care îl face o proprietate de siguranță, nu o captură de ecran din ziua lansării: e verificat de oamenii care îl pot strica, exact în momentul în care l-ar putea strica.
O funcționalitate de AI pe care n-a măsurat-o nimeni nu e o funcționalitate. E un risc pe care nu l-a pus nimeni în preț și care se întâmplă să dea bine în demo.
Comerț și conformitate
Abonamente Stripe cu un motor bilingv de planuri și discounturi editabil din admin, e-facturare cu emitere automată și suspendare la restanță, un motor de comisioane pentru ambasadori pe mai multe niveluri, zece integrări cu wearables prin OAuth și scoring de lead-uri care combină reguli, un model și o trecere prin AI.
Ce aș face altfel
Aș scrie harness-ul de evaluare înaintea motorului, nu la scurt timp după. Am construit motorul de recomandare, apoi lucrul care îl demonstrează - și am pierdut o săptămână modificând motorul ca să-l pot testa. Dacă porneam de la „ce va trebui să demonstrez despre asta?”, design-ul ar fi ieșit mai bine și cu o săptămână mai devreme.