Pitam za nešto protiv glavobolje. Agent mi ne kaže šta da uzmem. Kaže mi šta ova apoteka ima na polici, šta se u tome nalazi, i nudi da mi pozove farmaceuta.

To nije agent koji je oprezan. To je proizvod.

Većina demonstracija agenata je jedan model i jedan prompt. To drži dok odgovor ne mora da bude tačan. Bot za podršku koji pogreši pošalje te na pogrešnu stranicu pomoći. Agent u apoteci koji pogreši kaže čoveku da uzme lek.

Zato nijedna činjenica ovde ne dolazi iz modela. Zalihe, sastojci, interakcije — sve to dolazi iz baze. Posao modela je da postavi pravo pitanje i da zna kada da stane.

To je problem integracije, i o tome je reč.

Projekat je bio zadatak iz postupka zapošljavanja sa šest krugova (poseban tekst). Firma i njen zadatak ostaju neimenovani: ovo je referentna implementacija, a ne nečiji rad.

Sistemski prompt

Zove se sistemski prompt, ali se čita kao dokument o pravilima. Ima tri odeljka:

  1. Šta agent sme da kaže.
  2. Šta nikada ne sme da kaže.
  3. Koji podaci postoje u bazi, a nikada ne smeju da stignu do korisnika.

Treći odeljak je onaj koji ljudima treba. Prvi je onaj koji preskaču.

Agent može da vidi podatke o dobavljačima i nabavne cene, jer upituje istu bazu koju koristi apoteka. Zato mu se mora izričito reći: to što nešto možeš da vidiš nije dozvola da to izgovoriš.

Nekoliko pravila iz tog fajla:

  • Bez najava.
  • Bez medicinskih saveta.
  • Počni odmah odgovorom.
  • Najviše jedna do dve kratke rečenice.

Veći deo tog fajla govori o odbijanju, a ne o odgovaranju.

Šest alata

  1. Informacije o leku
  2. Naći nešto za simptom
  3. Proveriti zalihe
  4. Dobaviti alternative
  5. Proveriti interakcije
  6. Predati farmaceutu

Pet od njih su čitanja iz baze. Model nikada ne pogađa da li nečega ima na stanju. Poziva alat za zalihe, a on preko Prisme ide na PostgreSQL. Ako u redu piše nula, odgovor je nula. Ne postoji putanja na kojoj model sme da bude optimista oko zaliha.

Šesti je zanimljiv: predaja farmaceutu je alat, a ne rukovalac greškom. Većina agenata predaju tretira kao neuspeh — kao ono što se desi kada ništa nije radilo. Ovde je to sposobnost koju model bira kao i svaku drugu. A neki ulazi je pokreću odmah, pre nego što model uopšte dođe na red.

Dijagram · Šest alata i tri liste koje ograničavaju agenta
Dijagram · Šest alata i tri liste koje ograničavaju agenta21:9

Dva formata

Isti agent, isti alati, dva oblika izlaza.

Odgovor u četu ima strukturu: liste, podebljanja, doziranje u zasebnom redu. Glasovni odgovor nema ništa od toga, jer niko ne želi da mu se naglas čita lista sa tačkama.

To nije stilizovanje. To stoji u sistemskom promptu — što znači da model piše drugu rečenicu u zavisnosti od toga koji kanal je pitao.

U četu

„Šta pomaže kod glavobolje?" Agent ne razmišlja o farmakologiji. Poziva alat, dobija redove i izveštava šta postoji ovde.

„Imate li ibuprofen na stanju?" — „Interakcija između aspirina i ibuprofena?" — „Alternative za paracetamol?" Težina i preporuka takođe dolaze iz baze, a ne iz modela.

A onda rubni slučaj: „Od jutros me boli u grudima. Šta da uzmem?" Tu se pokreće predaja.

Glasom

Isti agent ispod. Mikrofon unutra, Deepgram pravi tekst, Claude odgovara, ElevenLabs to izgovara nazad. Četiri servisa u jednom obrtaju — i čuje se koliko to košta.

Tri jezika

Engleski, nemački i jedan jezik koji se piše zdesna nalevo. Treći je jedini koji traži pravi posao: raspored se ogleda, ne samo tekstovi. Svaki smer flex-a, svaka ikonica koja negde pokazuje, svaka margina koja je pretpostavila levu ivicu.

Sedam delova

DeoUloga
Next.js i ReactSučelje
API ruteBackend
PostgreSQLIzvor istine
PrismaPut unutra
ClaudeJedini deo koji zaključuje
Deepgram, ElevenLabsGovor unutra, govor napolje
DockerDa radi isto na mojoj mašini i na serveru

Izvor istine je shema: lekovi, sastojci, zalihe, interakcije. Obične tabele sa običnim kolonama.

Nema koraka pretraživanja i nema embedinga. Agent ne traži verovatan odgovor. On čita red.

A pravilo koje je sprečilo da ovo postane špageti jeste jedna rečenica:

Svaka komponenta ima tačno jedan posao, i tačno jedna od njih sme da improvizuje.

Baza nikada nije nesigurna. Govorni servisi nikada nisu kreativni. Model je jedino što improvizuje — i sme da improvizuje samo o formulaciji, nikada o činjenicama, jer svaka činjenica mora da se vrati kroz alat.

Povuci tu liniju rano, i ostatak integracije je vodoinstalaterski posao.

Tri granice

Demo koji ne imenuje svoje granice nije demo, nego reklama.

  1. Radi na unapred pripremljenom skupu podataka, ne na živim zalihama apoteke.
  2. Na drugom kraju predaje ne sedi niko. Predaja je stvarna; čovek nije.
  3. Nije medicinsko sredstvo. Nije sertifikovano, i ništa u njemu nije savet.

Tri pravila

Prvo: model sme da bude nesiguran oko reči, nikada oko činjenica. Svaka činjenica ide kroz alat.

Drugo: predaja je funkcija. Napravi je prvu, ne poslednju.

Treće: zapiši šta agent nikada ne sme da radi pre nego što zapišeš šta treba da radi. Zabrane su proizvod.

Zaključak

Nije poenta u apoteci. Poenta je da je pretvoriti pet servisa u jedan pošten odgovor problem granica, a ne problem modela.