Anthropic je 15. jula omogućio razvijačima da instrukciju sa nivoa operatera ubace usred razgovora sa modelom Claude, a da pritom ne ponište već keširani deo prompta i ne plate ponovnu obradu cele istorije poruka. Funkcija se zove sistemske poruke usred razgovora (mid-conversation system messages) i, kako navodi dokumentacija kompanije, dostupna je na Claude API-ju, preko Amazon Bedrocka i Google Clouda, na modelima Fable 5, Mythos 5 i Opus 4.8. Za njeno korišćenje nije potrebno posebno beta zaglavlje.
Reč je o naizgled sitnoj tehničkoj izmeni u načinu na koji se šalju zahtevi jezičkom modelu. U praksi, ona dotiče jedan od najskupljih delova rada sa velikim modelima, koliko puta se ista istorija razgovora obrađuje i naplaćuje.
Šta se tačno menja
Sistemske instrukcije, odnosno pravila i kontekst koje aplikacija zadaje modelu, tradicionalno stoje u polju system na samom vrhu zahteva, ispred svih poruka. Ta pozicija je dobra za keširanje prompta, jer se stabilan početak zahteva čuva i u narednim koracima čita iz keša umesto da se iznova obrađuje. Problem nastaje kada aplikacija tek usred duge sesije shvati da modelu treba dodati novo pravilo. Svaka izmena polja system menja sam početak prompta i, prema objašnjenju Anthropica, poništava keš za sve što dolazi posle njega.
Sistemske poruke usred razgovora zaobilaze taj trošak. Umesto da menja vrh zahteva, razvijač dodaje poruku sa ulogom system na mesto u razgovoru gde nova instrukcija postaje relevantna, najčešće na kraj istorije. Keširani deo ostaje bajt po bajt isti, pa se i dalje čita iz keša, a nova poruka se obrađuje kao sveži unos i zadržava težinu sistemske instrukcije, a ne običnog korisničkog teksta.
Zašto je keširanje prompta bitno
Keširanje prompta je mehanizam kojim model čuva prethodno obrađen deo razgovora i naplaćuje ga po znatno nižoj ceni od pune obrade. Anthropic navodi da se prefiks zahteva hešira redom: prvo definicije alata, zatim polje system, pa poruke. Pogodak u keš zahteva da se taj prefiks poklopi sa nedavnim zahtevom u potpunosti, do tačke prekida keša. Pošto polje system stoji na samom početku, i najmanja promena, čak i dodavanje jedne rečenice, proizvodi drugačiji heš, pa model promašuje keš za sistemski prompt i sve keširane poruke posle njega.
Za aplikacije koje vode duge, agentske sesije sa desetinama koraka, to nije zanemarljiv trošak. Svaka izmena pravila usred posla značila bi ponovnu obradu, i ponovno plaćanje, kompletne istorije. Sistemske poruke usred razgovora tu istoriju ostavljaju netaknutom.
Gde funkcija ima najviše smisla
Anthropic u dokumentaciji navodi nekoliko tipičnih situacija. Prva je promena politike ili ponašanja usred duge sesije, na primer nalog da model od tog trenutka sav SQL piše kao parametrizovan upit. Druga je ubacivanje konteksta koji mora da ima sistemsku težinu, poput podsetnika o roku ili promene u dostupnosti alata. Treća su promene stanja koje aplikacija sama primeti, na primer da su se fajlovi na disku promenili, da je korisnik uključio automatsko odobravanje ili da je preostali budžet tokena pao ispod praga.
Poseban slučaj tiče se agentskih petlji. Kada korisnik napiše novu poruku dok model još izvršava alate za prethodni zahtev, aplikacija tu poruku može da prosledi kao sistemsku, odmah posle rezultata alata. Model tada novi unos uklapa u posao koji već radi, umesto da ga tretira kao potpuno nov zadatak i prekine tekuću petlju.
Razlika u odnosu na običnu korisničku poruku je u prioritetu. Poruka sa ulogom system tretira se kao da dolazi od operatera aplikacije, dok se korisnička poruka tretira kao glas krajnjeg korisnika. Kada su u sukobu, sistemske instrukcije imaju prednost. Anthropic ipak upozorava da je model treniran da odbija naloge koji rade protiv korisnika, pa savetuje da se sadržaj sistemske poruke formuliše kao činjenica o promeni stanja, a ne kao naredba tipa "ignoriši šta je korisnik rekao".
Ograničenja i pravila postavljanja
Funkcija dolazi sa nizom pravila o tome gde poruka sme da stoji. Sistemska poruka ne može da bude prva u nizu, mora da sledi neposredno posle korisničke poruke ili posle poruke asistenta koja se završava rezultatom serverskog alata, i mora ili da bude poslednja ili da je prati poruka asistenta. Ne sme da stoji između poziva alata i rezultata tog alata. Svako drugo mesto, kako navodi kompanija, vraća grešku 400.
Anthropic izričito upozorava i da sistemska poruka nije mesto za nepouzdan sadržaj. Model sadržaj sistemske poruke tretira kao instrukciju operatera i sledi je, pa se sirovi izlaz alata, dohvaćeni dokumenti ili tekst sa veba ne smeju stavljati direktno u nju. Takav sadržaj, poručuju iz kompanije, treba da ostane u blokovima tool_result, jer bi ga sistemska poruka inače podigla na nivo ovlašćenja operatera i otvorila prostor za ubacivanje zlonamernih instrukcija.
Vredi napomenuti i šta funkcija ne pokriva. Nije dostupna na modelu Sonnet 5, za koji Anthropic i dalje preporučuje klasično polje system. Takođe, sama poruka ne stvara keš, nego samo čuva postojeći. Ušteda postoji jedino ako je keširanje prethodno uključeno preko polja cache_control i ako razgovor pređe minimalnu dužinu potrebnu za keširanje.
Šta to znači za one koji grade agente
Za razvijače koji na Claudeu grade agente, uključujući timove u regionu koji rade sa API-jem po potrošnji, promena je pre svega praktična. Duge sesije sa alatima, u kojima se pravila i kontekst menjaju u hodu, dosad su ili plaćale ponovnu obradu istorije ili gurale nova pravila u korisničke poruke, gde imaju slabiji prioritet. Sistemske poruke usred razgovora nude treći put, zadržavanje operaterskog prioriteta bez troška promašenog keša.
Funkcija se uklapa u širi pravac u kojem se alati za gradnju agenata pomeraju ka jeftinijim i predvidljivijim dugim sesijama. Koliko će uštede doneti u konkretnim aplikacijama, zavisiće od toga koliko često se pravila menjaju i koliko je razgovor dugačak u trenutku izmene.
Često postavljana pitanja
Šta su sistemske poruke usred razgovora?
To je mogućnost da se instrukcija sa ulogom system doda usred razgovora sa modelom, na kraj istorije poruka, umesto da se menja polje system na vrhu zahteva. Instrukcija se primenjuje od tog mesta nadalje i ima prioritet operatera.
Zašto se time izbegava ponovni trošak keša?
Zato što keširani deo prompta ostaje nepromenjen. Pošto se nova poruka dodaje posle keširanog dela, heš tog dela se ne menja, model ga i dalje čita iz keša, a naplaćuje se samo obrada nove poruke.
Na kojim modelima i platformama funkcija radi?
Prema dokumentaciji Anthropica, dostupna je na modelima Fable 5, Mythos 5 i Opus 4.8, na Claude API-ju, preko Amazon Bedrocka i Google Clouda. Nije dostupna na modelu Sonnet 5. Za korišćenje nije potrebno beta zaglavlje.
Sme li u sistemsku poruku da se stavi bilo kakav sadržaj?
Ne. Anthropic upozorava da sadržaj sistemske poruke model tretira kao instrukciju operatera. Sirovi izlaz alata, dohvaćene dokumente i tekst sa veba treba držati u blokovima tool_result, jer bi njihovo stavljanje u sistemsku poruku otvorilo prostor za zlonamerno ubacivanje instrukcija.
