Iza prompta: Izgradnja AI baze znanja vašeg backenda
Većina AI značajki započinje upitom, a završava incidentom u produkciji. Dio koji nedostaje rijetko je domišljatije sročena rečenica. To je pozadinska baza znanja koja može pružiti pouzdan, ograničen i aktualan kontekst kada zahtjev stigne.
Za PHP aplikaciju ta baza znanja nije prijepis razgovora s chatbotom zalijepljen u tablicu. To je sustav: unos sadržaja, normalizacija, pohrana, dohvaćanje, autorizacija, promatranje rada i jasan ugovor između vaše aplikacije i modela. Promatranje toga kao pozadinske infrastrukture mijenja pitanja koja postavljate. Umjesto „Što bi upit trebao reći?” pitajte „Koje zapise ovaj korisnik smije vidjeti, koliko su svježi i možemo li objasniti zašto su dohvaćeni?”
Započnite od zadatka, a ne od modela
AI asistent trebao bi imati usko definiran, koristan zadatak. „Odgovaraj na pitanja o našem proizvodu” zvuči razumno, ali skriva važne arhitektonske odluke. Bolja definicija određuje publiku, dopušteno znanje, očekivanu radnju i granicu odgovornosti.
Primjerice, interni asistent za podršku može odgovarati na temelju odobrenih članaka pomoći i bilješki o izdanjima proizvoda. Može sažeti trenutačnu konfiguraciju računa samo kada je zaposlenik koji šalje zahtjev ovlašten pregledavati taj račun. Ne bi trebao zaključivati o statusu naplate iz nepovezanog teksta niti nesiguran odgovor predstavljati kao potvrđenu činjenicu.
Ta definicija postaje politika dohvaćanja. Ona pozadinskom sustavu govori koje izvore indeksirati, koji su metapodaci važni i kada aplikacija mora odbiti odgovoriti. Model može proizvesti tečan tekst iz slabog konteksta. Vaš pozadinski sustav mora spriječiti da slab kontekst postane odgovor koji djeluje samouvjereno.
Znanje modela kao dokumenti i metapodaci
Zadržite izvorni izvor istine tamo gdje pripada: u CMS-u, bazi podataka, sustavu za prijave, repozitoriju ili spremištu objekata. AI baza znanja trebala bi biti izvedeni model za čitanje optimiziran za dohvaćanje. To razdvajanje olakšava ponovno indeksiranje, reviziju i brisanje.
Svaki indeksirani dio treba više od sadržaja. Metapodaci su način na koji pozadinski sustav dohvaćanje pretvara u kontroliranu operaciju.
- Identitet izvora: stabilni ID dokumenta i URL izvora ili interna referenca.
- Verzioniranje: sažetak sadržaja, vrijeme ažuriranja izvora i vrijeme indeksiranja.
- Opseg: tenant, proizvod, lokalizacija, publika i razina vidljivosti.
- Životni ciklus: objavljeno, zamijenjeno novijom verzijom, arhivirano ili obrisano.
- Podrijetlo: odjeljak ili stranica iz koje je dio stvoren.
Segmentiranje zaslužuje promišljen dizajn. Dijeljenje isključivo prema broju znakova može odvojiti upozorenje od postupka na koji se odnosi. Dijeljenje samo prema naslovima može stvoriti dijelove koji su preveliki i neodređeni. Počnite sa semantičkim odjeljcima, zadržite kontekst naslova i upotrijebite umjereno preklapanje kada odjeljak morate podijeliti. Spremite naslov uz svaki dio kako bi dohvaćeni tekst ostao razumljiv izvan izvorne stranice.
Izgradite unos kao ponovljiv proces
Indeksiranje bi trebalo biti idempotentan pozadinski tijek rada, a ne HTTP zahtjev koji se pokreće kada urednik klikne Objavi. Pouzdan proces dohvaća izvorni sadržaj, pretvara ga u normalizirani tekst, provjerava ga, dijeli na dijelove, obogaćuje metapodacima, stvara pretražive prikaze i zapisuje dobivene zapise.
U PHP-u obrađivač zahtjeva može staviti posao u red čekanja i brzo vratiti odgovor. Radnik zatim može obraditi dokument s pravilima ponovnog pokušaja primjerenima pogrešci. Prolazne mrežne pogreške mogu se ponoviti uz postupno povećavanje čekanja. Neispravne oznake izvornog sadržaja treba zabilježiti radi ispravka, a ne ponavljati zauvijek. Izbrisani izvor trebao bi ukloniti ili deaktivirati svoje indeksirane dijelove.
$document = $sourceRepository->find($documentId);
if ($document === null || $document->isArchived()) {
$knowledgeRepository->removeBySourceId($documentId);
return;
}
$text = $normalizer->toPlainText($document->body());
$chunks = $chunker->split($text, $document->title());
$knowledgeRepository->replaceSource(
sourceId: $document->id(),
contentHash: hash('sha256', $text),
chunks: $chunks,
metadata: [
'tenant_id' => $document->tenantId(),
'visibility' => $document->visibility(),
'updated_at' => $document->updatedAt()->format(DATE_ATOM),
],
);
Važan je detalj replaceSource, a ne točan naziv metode. Ponovna obrada dokumenta trebala bi se svesti na jedan aktualni skup dijelova. Izbjegavajte indeksiranje koje samo dodaje sadržaj, osim ako imate i izričitu, testiranu strategiju za zamjenu starog sadržaja novijim.
Dohvaćanje je prije svega problem autorizacije
Semantičko pretraživanje, pretraživanje ključnih riječi i hibridno rangiranje mogu biti korisni. Nijedno nije sigurno ako se filtriranje odvija nakon dohvaćanja. Ograničenja tenanta i vidljivosti primijenite u samom upitu za dohvaćanje. Rezultat koji se mora odbaciti nakon što je dohvaćen već je prešao granicu koju nije smio prijeći.
Praktičan tijek dohvaćanja izgleda ovako:
- Autentificirajte pozivatelja i izgradite opseg dohvaćanja koji uzima u obzir dozvole.
- Pretražujte samo aktivne dijelove unutar tog opsega.
- Rangirajte mali skup kandidata pomoću leksičkih, semantičkih ili hibridnih signala.
- Primijenite prag relevantnosti i uklonite gotovo identične odlomke.
- Modelu pošaljite odabrane odlomke, njihove citate i upute za zadatak.
- Vratite odgovor s referencama na izvore koje klijent može prikazati.
Nemojte forsirati odgovor kada je dohvaćanje loše. Korisna je izravna zamjenska opcija: recite da dostupno znanje ne podržava pouzdan odgovor, a zatim ponudite uži upit ili put eskalacije čovjeku. To nije neuspjeh modela. To je ispravan odgovor na nedostatne dokaze.
Neka upiti budu sažeti, a ugovori izričiti
Upit bi trebao izražavati ponašanje, a ne sadržavati cijelu vašu bazu znanja. Modelu dajte sažetu ulogu, korisnikov zahtjev, dohvaćeni kontekst i pravila izlaza. Zahtijevajte da razlikuje potkrijepljene činjenice od neizvjesnosti te citate koji odgovaraju dostavljenim dijelovima.
Upotrijebite strukturirani izlaz kada vašoj aplikaciji treba predvidljivo rukovanje. Primjerice, krajnja točka za odgovor može očekivati answer, citations i needs_escalation. Provjerite odgovor modela prije nego što ga vratite. Ako raščlanjivanje JSON-a ne uspije ili se citati pozivaju na nepoznate dijelove, zabilježite događaj i upotrijebite sigurnu zamjensku opciju umjesto da klijentu proslijedite neispravno oblikovan izlaz.
Dohvaćeni sadržaj također tretirajte kao nepouzdane podatke. Dokument može sadržavati tekst koji izgleda kao upute modelu. Jasno razgraničite kontekst i recite modelu da je kontekst dokaz, a ne autoritet nad ponašanjem sustava. To neće riješiti svaki rizik od ubacivanja uputa u upit, ali uspostavlja ispravnu granicu povjerenja u dizajnu vaše aplikacije.
Upravljajte njime kao i bilo kojom drugom pozadinskom ovisnošću
Kvalitetu AI-ja teško je poboljšati kada su zahtjevi neprozirni. Bilježite upit za dohvaćanje, ID-jeve odabranih dokumenata, ocjene rangiranja kada su dostupne, identifikatore zahtjeva modelu, latenciju, pogreške i status konačnog odgovora. Zaštitite osjetljiv sadržaj u zapisnicima; često su identifikatori i mjerenja dovoljni za otklanjanje poteškoća.
Mjerite proces odvojeno od krajnje točke za razgovor. Kašnjenje indeksiranja, neuspjeli poslovi, zastarjeli dijelovi, prazna dohvaćanja, odbijanja autorizacije, vremenska ograničenja modela i stope zamjenskih odgovora upućuju na različite probleme. Spor odgovor mogu uzrokovati filtriranje baze podataka, dohvaćanje, zaključivanje modela ili ponavljajući uzvodni poziv. Jedna objedinjena metrika „AI latencije” rijetko omogućuje djelovanje.
Pažljivo predmemorirajte. Predmemorirajte stabilne rezultate dohvaćanja samo kada je opseg dozvola dio ključa predmemorije. Generirane odgovore predmemorirajte samo kada se podudaraju pitanje, relevantne verzije izvora, lokalizacija i kontekst autorizacije. Predmemorija odgovora koja zanemaruje verzije dokumenata potajno poslužuje zastarjele smjernice nakon ažuriranja.
Trajna prednost je povjerenje
Najvrjednija AI značajka nije ona koja zvuči najljudskije. To je ona koja dohvaća prave informacije za pravu osobu, pokazuje odakle potječu, priznaje kada dokazi nedostaju i ostaje ispravna kako se temeljni sustav mijenja.
Upiti će se razvijati, modeli će se mijenjati, a metode rangiranja poboljšavati. Dobro dizajnirana baza znanja tim promjenama daje stabilan temelj. Izgradite taj temelj kao održiv pozadinski sustav i vaš AI sloj postaje korisna sposobnost proizvoda, a ne krhka demonstracija.