Két üzenet, két szerep
Amikor egy appból hívjuk a modellt, a prompt jellemzően nem egyetlen tömb, hanem két jól elkülönülő rész. Az egyik a rendszerüzenet, a másik a felhasználói üzenet. A rendszerüzenet adja a keretet. Ebben mondjuk meg, ki legyen a modell, milyen hangnemben válaszoljon, mit tehet és mit nem, milyen formában adja vissza az eredményt. A felhasználói üzenet ezzel szemben az adott, konkrét kérés, amit éppen kezelni kell. A kettő együtt megy a modellhez, de más a súlyuk és más a szerepük.
A hasznos kép az, hogy a rendszerüzenet a munkaköri leírás, a felhasználói üzenet pedig a napi feladat. A munkaköri leírás nem változik minden kérésnél, a feladat viszont igen. Ha egy ügyfélszolgálati asszisztenst építesz, a rendszerüzenet rögzíti, hogy udvarias, tényszerű, és csak a cég termékeiről beszél. A felhasználói üzenet pedig az, amit az adott vevő éppen kérdez.
Egy beszélgetés során ez a két szerep szépen kiegészül egymással. A rendszerüzenet végig változatlan marad, és minden fordulóban megadja a keretet, miközben a felhasználói üzenetek egymás után érkeznek, mindig az aktuális kérdéssel. Ha az alkalmazás a korábbi váltásokat is megőrzi és visszaküldi, akkor a modell úgy tud válaszolni, mintha emlékezne a beszélgetésre, pedig valójában minden alkalommal az app rakja össze elé a teljes képet. A rendszerüzenet stabil háttere és a felhasználói üzenetek sora együtt adja azt a folytonos élményt, amit egy jó asszisztenstől elvárunk.
Miért ez a felület
A hagyományos szoftverben a felhasználó gombokkal és mezőkkel érintkezik a programmal, a program pedig pontos utasításokkal irányítja a gépet. Egy nyelvi modellnél a helyzet más. A modellt nem parancsokkal, hanem nyelvvel irányítjuk. Ezért a prompt lesz az a felület, amin keresztül a fejlesztő megmondja a modellnek, mit várunk tőle. Ez a felület sokkal rugalmasabb egy klasszikus beállítási képernyőnél, de éppen ezért gondosabb tervezést is igényel.
A gyakorlatban a rendszerüzenet egy termékdöntéssé válik. Itt dől el, hogy a modell mennyire óvatos, mikor mond nemet, milyen hosszan válaszol, és mit tesz, ha nincs elég információja. Ezek nem apró stilisztikai kérdések, hanem az alkalmazás viselkedésének a magja. Egy jól megírt rendszerüzenet ugyanolyan fontos, mint egy jól megírt függvény, és ugyanúgy érdemes verziózni, tesztelni és finomítani.
Éppen ezért a promptot nem egyszer megírjuk és elfelejtjük, hanem karbantartjuk. Ahogy az alkalmazás fejlődik, a rendszerüzenet is változik, és minden változás hatással van arra, hogyan viselkedik a termék. Hasznos, ha a különböző promptváltozatokat elmentjük, összehasonlítjuk, és valós példákon próbáljuk ki, mielőtt élesbe kerülnek. Ami az egyik megfogalmazásban tökéletesen működik, az egy apró átírás után váratlanul elronthat egy korábban jó esetet. A prompt tehát él, és a fejlesztés részeként kezelendő, nem statikus szövegként.
Rendszerüzenet
- Ki legyen a modell, milyen szerepben
- Milyen hangnem és stílus elvárt
- Mit tehet és mit nem
- Milyen formában adja a választ
- Ritkán változik, a keretet adja
Felhasználói üzenet
- Az adott, konkrét kérés
- A tényleges kérdés vagy feladat
- A feldolgozandó szöveg vagy adat
- Kérésenként más és más
- A keretben értelmeződik
A biztonság is itt kezdődik
Ha a felhasználó szabadon írhat a modellnek, akkor előbb vagy utóbb valaki megpróbálja majd kijátszani a szabályokat. Beírhat olyat, hogy felejtsd el a korábbi utasításokat, és tegyél valami mást. Ezt a jelenséget prompt injekciónak hívjuk. A rendszerüzenet ad némi védelmet, de önmagában nem elég erős fal. A fejlesztőnek úgy kell terveznie, hogy a felhasználói szöveget mindig gyanakvással kezelje, és a fontos szabályokat ne csak a promptban, hanem a kód szintjén is érvényesítse. Amit igazán nem akarunk megengedni, azt ne a modell jóindulatára bízzuk.
Ebből fakad egy egészséges alapállás. A rendszerüzenet irányt ad, de a modell nem tévedhetetlen, és a felhasználó nem mindig jóhiszemű. A jó AI alkalmazás ezt a kettőt eleve beépíti a felépítésébe, nem utólag foltozza be.
Milyen a jó rendszerüzenet
A tapasztalat néhány visszatérő elvet mutat. Az első a konkrétság. A modell nem tudja kitalálni, mit értünk pontosan azon, hogy legyen tömör vagy legyen barátságos, ezért érdemes megmondani, mit jelent ez a mi esetünkben. Ha rövid választ kérünk, mondjuk meg, körülbelül milyen hosszban gondolkodunk. Ha egy adott hangnemet szeretnénk, adjunk rá egy rövid példát. A jól megfogalmazott elvárás sokkal többet ér, mint egy homályos jó tanács.
A második elv, hogy a modellt fel kell készíteni a nehéz esetekre is. Mit tegyen, ha nem tudja a választ, ha a kérdés kívül esik a hatáskörén, vagy ha hiányzik egy fontos adat. Ha ezt nem mondjuk meg, a modell hajlamos lesz kitölteni az űrt egy magabiztos, de kitalált válasszal. Sokkal jobb, ha előre megkérjük, hogy ilyenkor inkább jelezze a bizonytalanságot, vagy kérdezzen vissza. Egy őszinte nem tudom gyakran értékesebb, mint egy meggyőzően hangzó tévedés.
A harmadik elv az egyszerűség. Kísértő minden lehetséges szabályt belezsúfolni a rendszerüzenetbe, de a túlterhelt prompt épp az ellenkezőjét éri el. A modell figyelme megoszlik, és a fontos utasítások elvesznek a sok kevésbé fontos között. Érdemes a néhány igazán lényeges szabályt élesen kiemelni, a többit pedig elhagyni. A jó rendszerüzenet nem attól erős, hogy hosszú, hanem attól, hogy világos, és a benne szereplő minden mondatnak megvan a maga súlya.
Két üzenet határozza meg a modell viselkedését. A rendszerüzenet a tartós keret, a felhasználói üzenet a mindenkori kérés. Aki appot épít, az a rendszerüzenetet nem szövegnek tekinti, hanem a termék egyik legfontosabb, gondosan karbantartott részének.
Workshop
AI Transformation Day
Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.
Érdekel a program →