Kontekst
Brytyjski fintech AI, kontrakt B2B objęty NDA. Ta strona opisuje wzorce, których używam, a nie system klienta: bez opisu ich produktu, bez architektury, bez liczb.
Ogólny problem: długie, nieuporządkowane wejście, na przykład transkrypcja, ma się stać wynikiem, na którym człowiek może polegać. Część to proza, którą człowiek czyta i edytuje, część to dane strukturalne, które pobiera inny system, a każdy klient chce swojego wyniku trochę inaczej.
Problem
Wywołania modelu są wolne, kosztują, czasem zawodzą i nie dają dwa razy tej samej odpowiedzi. A wynikowi wciąż trzeba móc zaufać, zanim ktokolwiek na jego podstawie zadziała.
Wzorzec
01 · Wejście
Wszystko, co dotyczy jednego wejścia, to jedno zadanie, więc udaje się albo zawodzi w całości.
- 01 · Wejście Wszystko, co dotyczy jednego wejścia, to jedno zadanie, więc udaje się albo zawodzi w całości.
- 02 · Kroki Definicja wyniku klienta staje się grafem kroków. Niezależne kroki działają równolegle, wspólna praca wykonuje się raz, a odpowiedzi modelu przychodzą z cache, gdy zapytanie jest takie samo.
- 03 · Szkice Proza dla ludzi, ścisłe schematy tylko tam, gdzie wynik czyta maszyna.
- 04 · Człowiek Nic nie opuszcza systemu, dopóki człowiek tego nie poprawi albo nie zaakceptuje.
Decyzje i kompromisy
-
Jeden graf na wejście, a nie kolejka na krok
Jedno wejście to jedno zadanie. W jego obrębie kroki działają jako graf w procesie: niezależne kroki równolegle, wspólna praca tylko raz.
KOMPROMIS Nie ma retry na poziomie kroku: gdy zadanie zawiedzie, całe zadanie uruchamia się ponownie. Retry działa za to na poziomie wywołania modelu, bo tam jest niemal każda awaria.
-
Cache całych odpowiedzi modelu
Każda odpowiedź modelu jest zapisywana pod hashem zapytania. Zadanie uruchomione ponownie albo przetworzone jeszcze raz odpowiada na kroki, które już się wykonały, z cache i płaci tylko za resztę.
KOMPROMIS Cache trafia tylko przy identycznych zapytaniach: zmień jedno słowo w prompcie albo model i każdy krok chybia. Trzyma też wrażliwe treści, więc wpisy wygasają, co ogranicza, jak długo ponowne uruchomienia są tanie.
-
Typowany wynik tylko tam, gdzie czyta go maszyna
Wynik, który pobiera inny system, używa ścisłych schematów. Wynik, który ludzie czytają i edytują, zostaje prozą.
KOMPROMIS Proza wymaga kodu, który ją parsuje i sprawdza, zamiast gwarancji schematu, a wszystko, co później ma się stać polem, najpierw przechodzi do części typowanej.
-
Człowiek w pętli domyślnie
Wszystko, co pisze model, jest szkicem, dopóki człowiek tego nie poprawi albo nie zaakceptuje.
KOMPROMIS Ceną jest czas człowieka przy każdym wyniku. To ustawienie domyślne, a nie reguła: klient, który ufa swoim wynikom, może je wyłączyć i bierze na siebie odpowiedzialność.
-
Wynik, który zdefiniują nie-inżynierowie
To, co produkuje pipeline, to dane, a nie kod: klienci definiują własne sekcje w edytorze, z wersjami i możliwością powrotu do poprzedniej.
KOMPROMIS Definicja to uporządkowana lista sekcji, a nie dowolny graf, więc nikt nie zbuduje zepsutego pipeline’u, ale nowy rodzaj kroku wciąż wymaga inżyniera.
Case study: edytor szablonów no-code
Wyniki
Na produkcji i w codziennym użyciu. System klienta, jego wolumeny i wyniki pomijam ze względu na NDA.
Stack
- Node.js
- TypeScript
- AWS
- LLMs