Záznamy rozhodnutí
Záznamy rozhodnutí
Krátké záznamy rozhodnutí, která formovala tento kód: kontext, zvažované možnosti, co bylo zvoleno a co to stojí. Psané tak, aby recenzent viděl proč, nejen co. Rozhodnutí, které bylo později nahrazeno, tu zůstává s označením — i historie je součástí záznamu.
ADR 0001Oprávnění se vynucují před modelem, v SQLOdpovědi píše model nad dokumenty s různým okruhem čtenářů; otázka je, kde má žít řízení přístupu. Rozhodnutí: v SQL — jedno pravidlo viditelnosti v každém dotazu, který čte kusy (vektory, slova, statistiky slov, slovník překlepů), bez výjimky i pro majitele firmy, ověřené nad skutečným Postgresem během s vynuceným selháním. Cena: spojení s přístupovými pravidly v každém dotazu a každý nový způsob čtení kusů musí použít stejnou funkci.ADR 0002Samotné vektorové vyhledávání nestačí: hybridní vyhledávání s filtrem relevanceČistě vektorové vyhledávání minulo krátký záznam, na který se otázka ptala v jiném tvaru slova — relevantní i nesouvisející kusy ležely ve stejném úzkém pásmu vzdáleností. Rozhodnutí: hybridní vyhledávání, vektor a fulltext sloučené přes Reciprocal Rank Fusion, pak filtr relevance, který vyžaduje doklad. Cena: víc dotazů na otázku a prahy svázané s jedním embeddingovým modelem; párování slov později nahradilo 0006.ADR 0003Citace jsou zdroj pravdy; bez dokladu „nevím“Výpis všech vyhledaných kusů jako zdrojů přeháněl doklad a ze slabého kontextu i tak vznikaly plynulé odpovědi. Rozhodnutí: model cituje názvy dokumentů v [závorkách]; zdroji se stanou jen přesně citované dokumenty, jeden na dokument, a bez dokladu se model nevolá. Cena: zapomenuté závorky znamenají žádné zdroje — bezpečné selhání — názvy musejí být rozlišitelné a „nevím“ je vidět.ADR 0004Produkt neběží přes osobní předplatné AIPosílat provoz produktu přes osobní předplatné chatu je rychlé, ale mimo jeho podmínky, dává data zákazníků do osobního účtu a nedává žádnou kontrolu nad provozem. Rozhodnutí: API poskytovatele za obchodních podmínek s klíči pro každé prostředí; embeddingy zůstávají lokální a model sedí za jedinou funkcí, takže vlastní provoz zůstává výměnou. Cena: skutečná cena za volání od prvního dne a správa klíčů pro každé prostředí.ADR 0005Nasazovací brány při pochybnosti zavírajíKouřový test, který se nedostal ke službě, i kontrola, která ověřovala jen vykreslení stránky, pustily rozbité nasazení ven jako „nebyla hlášena chyba“. Rozhodnutí: brány při pochybnosti zavírají — každá očekávaná kontrola musí projít, kontrola, která neproběhla, selhala, kontroly ověřují obsah a jako první běží záměrně selhávající případ; v tomto kódu to v CI dělá scripts/gate.py. Cena: víc planých poplachů a pomalejší kontroly; správné nasazení občas čeká na opravenou bránu.ADR 0006Klíče lemma + kmen nahrazují kmeny z předponČtyřpísmenné předpony selhávaly oběma směry: falešné shody (Pavlovi ~ pavlač, pesto šlo najít, pes ne) a míjená střídání hlásek (psa → pes, lišce, dne). Rozhodnutí: klíče lemma + kmen spočítané jednou v Pythonu a uložené v indexu, předpona jen jako pojistka s poloviční vahou, relevance vážená podle idf, oprava překlepů podle vlastního slovníku tazatele, negativní testy jako plnohodnotné. Cena: závislosti na slovníku a stemmeru s ověřenými licencemi, klíče pro každý nastavený jazyk a lemmatizace při nahrání.