Lucas AI ehitamine: portfelli muutmine tooteks

← Tagasi blogisse

23. aprill 20264 min lugemine

Lucas AI ehitamine: portfelli muutmine tooteks

Lucas AI süsteemi disain: kihilised viiped, leksikaalne otsing, seansimälu, token eelarved ja eel-lendav klassifikaator piiratud portfelli vestlus pinnal.

toodeaiarhitektuurfrontend

See sait on portfell, kuid Lucas AI pind on tahtlikult ehitatud nagu väike toode: spetsiaalne /{locale}/ai kogemus, ettearvatav kulutus ja vastused, mis jäävad esimeses isikus ainult struktureeritud kontekstist - mitte üldine assistent veebimastaabiga ambitsioonidega.

See postitus on tehniline sügav sukeldumine sellesse, kuidas see süsteem on ühendatud: mis pannakse kokku iga päringu jaoks, miks see on kihiline selliselt ja millised piirangud on tahtlikud.

Probleem

Staatilised portfellid vastavad ühekordsetele küsimustele hästi ja ebaõnnestuvad sügavuses. Järgnevate küsimuste vastused (“kuidas sa selle ulatuse määrasid?”, “milline viru oli selle rolli jaoks?”) kas kaovad PDF-idesse või sunnivad inimest sekkuma.

Naivsed vestlusintegratsioonid parandavad interaktsioonimudelit, kuid loovad uusi tõrkeid: piiramatu kontekst, leiutatud tööandjad, vaikne ulatuse laienemine ja iga küsimus, mis on seotud suurima mudeliga, mida te olete üles seadnud. Portfell ei vaja avatud maailma vestlusbotti; sellele on vaja kitsast liidest koos auditeeritava faktibaasiga.

Lucas AI asub selles lõhes: piiratud UX, piiratud teadmised, selged piirid selle kohta, mida “Lucas” võib väita.

Süsteemi disaini ülevaade

Lõpust lõpuni on saatmine ikka veel POST /api/chat JSONiga (message, locale, valikuline sessionSummary / recentTurns). Marsruut omab poliitikat ja kulutust; brauser omab transkriptsiooni UI-d ja klient-poolsed püsivust (sessionStorage).

Kihid, täpsuse järjekorras:

  1. Sisendi valideerimine — tühjad sõnumid tagasi lükatud; kasutaja tekst on kõvasti piiratud 2000 tähemärgiga, et piirata kuritarvitamist ja viipa süstimis pinna.
  2. Eel-lendav klassifikaator (valikuline) — väike Groq vestlus lõpetamine (llama-3.1-8b-instant vaikimisi), mitte-voog, max_tokens: 5, temperature: 0, ühe sõna otsus: OFF_TOPIC vs jätka. Kui OFF_TOPIC, API tagastab mock SSE koos lokaliseeritud keeldumisega, nii et kliendi tee vastab normaalsele voolule. Klassifikaatori vea või aegumise korral käitaja avab ja käivitab põhimudeli - odavad väravad ei tohiks tellida legitiimset liiklust. Hostid võivad määrata CHAT_SKIP_CLASSIFIER, et see kõne täielikult ära jätta, kui koormustesti või kui poole võrra teenusepakkuja kõnede vähendamine on väärt, et kaotada kiirtee.
  3. Viipa kokkupanekbuildChatPrompt koostab süsteemi sõnum; põhimudel saab süsteemi + praeguse kasutaja sõnum (mitte mitme sõnumiga vestluse transkriptsiooni traadil).
  4. Põhikõne lõpetamine — voog POST …/v1/chat/completions (vaikimisi llama-3.3-70b-versatile Groqil, ülekirjutamine GROQ_MODEL), vastus proksitud kui SSE kliendile. max_tokens on piiratud CHAT_MAX_TOKENS (256–8192, vaikimisi 2048) seob UX-i ühiku majandusega.
  5. Kliendi järjepidevus — UI hoiab sõnumeid ja veeru seansikokkuvõtet sessionStorage-is; iga päring võib lisada kärbitud kokkuvõtte ja viilu hiljutisi pöördeid, nii et server jätkab järjepidevust ilma vestlust salvestamata serveripoolselt.

Konteksti strateegia

Disain väldib “saada kõik alati”. Täieliku struktureeritud profiili sissekirjutamine igale päringule skaleerub halvasti: token maksumus kasvab koos korpusega, ebarelevantsed küsimused maksavad ebarelevantsed faktid ja te lähenete teenusepakkuja piiridele, kui profiil kasvab.

Selle asemel:

  • systemPrompt (corePromptText.ts) — stabiilsed reeglid: esimene isik, läbipaistvus (“ei kirjuta reaalajas”), maandumise reeglid, kestuse matemaatika reeglid, lokaliseerimise käitumine. Hoitakse minimal ja fikseeritud, nii et prefiksi vahemälu (kus pakkuja deduubleerib avamisteksti) on võimalus aidata.
  • Dünaamilised CONTEXT fragmendid — lisatakse pärast jagatud prefiksit, selgelt piiritletud (--- CONTEXT (canonical / FAQ) ---, seansimälu, toodud väljavõtted) ja suletud --- End CONTEXT fragments --- pluss Visitor locale: … rida, nii et mudel vastab saidikeeles.

Süsteemi üksikasjad

Kavatsus marsruutimine (odav) vs ulatuse värav (LLM)

On olemas kaks erinevat “marsruutimise” ideed virnas; nende segamine kaotab disaini.

Heuristiline kavatsus (routeIntent in router.ts) ei ole LLM-kõne. See on märksõna- ja regex-põhine klassifitseerimine jämedatesse ämbriteks (recruiter, engineering, project, blog, portfolio_meta, navigation_contact, conversational, general). See kavatsus ainult mõjutab leksikaalset tükkide hindamist - latentsus jääb tasaseks, maksumus on null.

Näited:

  • “Kuidas ma saan teiega ühendust / tööle / CV” → navigation_contact — suurendab kontakti-adjacent käitumist kaudselt läbi tükkide publikud.
  • “Next.js / i18n / Groq / SSE / Lucas AI API” → portfolio_meta — suurendab portfolio_* domeene selectChunks-is.
  • “Töökogemus / staaž / meeskonna suurus” → recruiter — suurendab duration, strengths, rekruiteri märgistatud tükke.
  • Lühike “hi / thanks” → conversational — väldib üle-fetchimist rasketest kogemustest.

Valikuline otsing (mitte embedding RAG)

“RAG” viitab sageli embeddingitele ja vektor andmebaasile. See implementatsioon ei kasuta neid. Otsing on leksikaalne: tokeniseerida kasutaja sõnum sõnasetteks, hinnata iga tükki märksõna tabamuste + alajaotuse ülekatte järgi tükitekstis, lisada kavatsuspõhiseid tõukeid (nt rekruiteri publikatsioonimärgid, portfolio_meta tõukab portfolio_* domeene), sorteerida, seejärel võtta parimad tükid alla kõvade piiride.

Kokkuvõte

Lucas AI on parim lugeda kui tootepinda spetsifikatsiooniga: lucasPersonalContext objekt ja tuletatud tükid on leping, süsteem on seadus, token eelarved on valvur, ja klassifikaator pluss off-topic voo tee määratlevad mida toode keeldub olemast.

Kui te ehitate midagi sarnast, on hoob mitte suurim üldine mudel - see on otsustamine, mis siseneb viibale iga pöörde jaoks ja seda mõõdetakse. Portfell ei vaja lõpmatut konteksti; sellele on vaja ausaid, piiratud vastuseid - ja arhitektuuri, mis on piisavalt igav, et neid hoida.

Peamised punktid

Kokkuvõttes on Lucas AI süsteem ehitatud spetsiaalselt selleks, et pakkuda tõhusaid ja täpseid vastuseid piiratud ulatuses. Selle disain põhineb mitmel põhikäsitul: kihilised viiped, leksikaalne otsing, seansimälu ja token eelarved. Süsteem on üles ehitatud olema auditeeritav, et tagada vastuste kvaliteet ja usaldusväärsus.