
← Tagasi blogisse
Piiratud LLM UX: kaheastmeline järeldus, SSE voog, struktureeritud maandamine ja toote piirid, mis hoiavad portfelli vestlust ausana.
Enamik portfelle lõpetab arenemise. Ma tahtsin, et see portfell käituks natuke nagu toode: i18n-esimene, jagatud kasutajaliides monorepos ja Lucas AI kiht, mis vastab esimese isiku kohta minu töö kohta – ainult struktureeritud kontekstist, mis on küpsetatud juurutusse. See postitus on mõeldud inseneridele, kes soovivad süsteemide pilti: järelduse kuju, voogedastus, maandamine ja selged mittekohustused – mitte ringkäik, kus failid elavad või kuidas käivitada kahvlit kohalikult.
Staatilised lehed on halvad järelküsimuste jaoks. Kui teie äri on otsus – ulatus, kompromissid, kuidas te tarnisite piirangute all – PDF ja kontaktvorm ei skaala uudishimu. Lucas AI on spetsiaalne sihtkoht (/[locale]/ai): küsige kogemuse, saidi või funktsiooni kohta ise, ilma et teeskleksite, et olen teisel pool traati reaalajas.
Brauser omab transkriptsiooni UI; server omab poliitikat ja kulu. Iga saatmine on POST /api/chat koos { message, locale } – pole manuseid, pole tööriistakõnesid, pole peidetud välju.
Käsitaja ehitab süsteemi, edastab Groq’i OpenAI-ühilduvale /v1/chat/completions, ja proksib ülesvoolu voo kui Server-Sent Events (SSE), nii et tokenid renderdavad järk-järgult ilma puhverdamata kogu lõpetamist serva mälus. See on sama muster, mida te kasutaksite mis tahes kiire järeldus API taga: käsitlege marsruuti kui õhukest adapterit, hoidke kliendi jaoks traadi formaat stabiilsena.
Maandamine toimub rakenduse koodis: trükitud karjäär objekt vormindatakse üks kord CONTEXT stringiks ja süstakse süsteemi sõnumisse. Seal on pole vektorandmebaasi ja pole otsingutetaotlust – mudel näeb ainult seda, mida sérialiseerisite, kui ehitasite viipa. See on võimsuse kompromiss (te ei saa vastata suvalistest dokumentidest) vahetuses prognoositava latentsuse, maksu ja auditi pinna eest.
llama-3.3-70b-versatile Groq-is (ülekatte GROQ_MODEL). Voog jääb sisse; marsruut lubab kuni 60s genereerimist – piisavalt hoolikaks vastuseks ilma serva muutmiseta piiramata töötajaks.llama-3.1-8b-instant (konfigureeritav kui CLASSIFIER_MODEL). See on eraldiseisev, mittevõrgustav kõne koos max_tokens: 5, temperature: 0, ja minimaalse süsteemi viipaga, mis kokkuvariseb otsuse üheks tokeniks: CAREER või OFF_TOPIC.Kui otsus on OFF_TOPIC, API ei kutsu suurt mudelit. See voogedastab fikseeritud, lokaliseeritud keeldumist kui SSE, nii et kliendi kooditee vastab “reaalsele” lõpetamisele – pole spetsiaalset UI haru lühisircuitamiseks. Kui klassifikaator vigu või aegub, käsitaja avab ja käivitab peamise mudeli ikkagi: odav värav ei tohi muutuda üheks tõrkepunktiks legitiimse liiklusega.
Väravat saab keelata hostis (serveri keskkonnas), kui te teadlikult aktsepteerite iga pöörde tabamust suure mudeliga – kasulik, kui väike lõpp on ebatervislik, kui te koormustate vastuse teed üksi või kui toote poliitika muutub ja te ajutiselt langetate väravat. See nupp elab väljaspool külastaja vaadet; see on ops-hoob, mitte funktsioonilipp UI-s.
Väljund eelarve: assistent max_tokens on piiratud (CHAT_MAX_TOKENS, klambitud 256–8192, vaikimisi 2048). See ühendab UX-i (“vastused peaksid lõppema”) pakkuja arve ühikökonoomikaga.
Iga taotlus kannab:
message: praegune kasutaja pööre, trimmitud, koos raske korgiga 2 000 tähemärki (kuritarvitamise ja viipa süstimise pinna vähendamine).locale: normaliseeritud toetatud saidi lokaliseerimisse. Süsteemi viip lõpeb Visitor locale: …, nii et mudel vastab saidikeeles, mitte selles keeles, mida UI kroonika võib kasutada.Mida me ei saada:
Niisiis on “mälu”: avaldatud CONTEXT + mis on veel nähtav kliendis. See on tahtlik piir: pole serveripoolset vestluse ajalugu, pole seadmeülest sünkroniseerimist, pole vestluste põhjal koolitust.
UI säilitab sõnumeid sessionStorage-is (lucas-ai-messages). Värskendamine samas vahekaardis hoiab keerme; uus vahekaart või seade alustab puhtalt. Seal on teine võti, lucas-ai-pending, mida kasutatakse, kui kasutaja ümber suunatakse pärast lokalisatsiooni lülitamist (rohkem allpool).
Kui GROQ_API_KEY puudub, marsruut ikkagi tagastab SSE: see voogedastab lokaliseeritud konfiguratsiooni vea stringi, nii et kest degenereerub ilma paigutuse äraviskamiseta.
Karjäärkorpus algab trükitud kirjetest – rollidest, virnadest, algatustest, mõõdikutest, kind (töö vs vabatahtlik vs haridus vs isiklik), ajavahemikest ja valikulisest narratiiviväljast. Vormindaja muudab selle üheks markdown-ilaadseks blokiks, mis on ümbritsetud selgete piiridega, nt:
--- CONTEXT (ground truth; do not contradict or extend beyond it) ---
…
--- End context ---
Mis sisse läheb, on sama oluline kui see, mis välja jääb:
kontekst / probleem / lahendus / mõju lugu lööki, kui soovite, et mudel räägiks tulemustest, mitte buzzwordidest.Peale pandud süsteem on range seadus: esimene isik, pole teesklemist olla reaalajas Slackis, pole juurdepääsu privaatsüsteemidele, pole kolmanda isiku “Lucas ütles…”, CONTEXT kui ainus faktuaalne allikas ja pole fabritseerimist pärast seda, mida CONTEXT avaldab juurutuse üksikasjade kohta.
See on see, kuidas muuta “ära hallutsineeri” vibeks testitavaks ulatuseks: mudel on sama tark kui pakett, mille te tarnite, ja pakett on versioonitud nagu kood.
Väikese mudeli töö on ainult marsruutimine, mitte abivalmidus. CAREER on defineeritud laiaks: taust, oskused, tarnitud töö, toote otsus, ja legitiimsed küsimused saidist endast – virnastamine, lokaliseerimistoru, kuidas assistent on ühendatud – niivõrd kui see teave eksisteerib CONTEXT-is. OFF_TOPIC püüab kõik muud (ilm, kodutöö, mitteseotud trivia).
“Meta” küsimuste käsitlemine sisseulatusena on tooteotsus: portfelli assistent peaks selgitama oma piire ilma kogu veebi avamata teadmisteallikaks.
Marsruudi lokaliseerimine juhib vastuse keelt (viipa kaudu). Kuid kasutajad mõnikord sisestavad teist keelt, jäädes samaks ingliskeelsele UI-le.
Saamisel käivitab klient franc-min sisendil (minimaalne pikkus ~15 tähemärki). Kui tuvastatud keel ei vasta praeguse lokaliseerimise oodatule ISO 639-3 vastavusse, ei postita seda vaikimisi API-le. See kuvab pakkumiskaardi: nupud router.push(/${targetLocale}/ai) vastavate lokaliseerimiste jaoks, pluss “jätka praeguses keeles”. Kui nad lülitavad lokaliseerimist, salvestab ta ootel oleva sõnumi sessionStorage-isse, navigeerib, seejärel autosaatmine pärast paigaldamist, et küsimus käivituks õige locale JSON kehas.
See on toote käitumine: ühtlustada saidi keel keelega, mida kasutaja tegelikult kirjutab, selle asemel, et sundida mudelit ära arvama või segada poliitikat.
Lucas AI on nav sihtkoht ja kodu sektsioon (märk, päis, CTA, näidisprompt) – mitte ujuv vidin lugemise voo kohal. Täispagina vestlus hoiab mustri opt-in ja väldib “üllatus copiloti” antipaatrit, kus generatiivne UI võitleb ülejäänud paigutuse tähelepanu eest.
llm_auth kliendile – pole toorest ülesvoolu keha (väldi võtme või mudeli vihjete lekkimist).Lucas AI ei ole üldine assistent, mis on langenud turunduslehele. See on ** kitsas toode**: üks faktide korpus, mille taga te seisate, üks voogedastuse vastuse tee, väike mudel, mis otsustab ainult “kas see on sisseulatus või mitte”, ja server, mis unustab iga pöörde tahtlikult. Eesmärk on prognoositav käitumine – mida saadetakse pakkuja, mida te maksate järeldus API-le taotluse kohta, ja mida külastaja võib lugeda faktuaalseks.
Kui te ehitate midagi sellist, on hoova mitte kõige suurema mudeli valimine. See on süsteemi sõnum ja CONTEXT käsitlemine nagu spetsifikatsioon – tavaline, faktuaalne, rea-auditav – mitte turunduskopi, ja otsustamine arhitektuuris, millal suur mudel on lubatud käivitada (näiteks ainult pärast teemaklassifikaatori väravat).