Az Apps SDK praktikus választás, ha hamarosan szüksége van egy munkafolyamatra a ChatGPT-ben, vagy ott szeretné kipróbálni eszközeit, mielőtt egyedi ügynök-infrastruktúrába fektetne. Ha az ügynök működésének minden lépését kézben kell tartania, általában nem ez a megfelelő választás.
Válassza az Apps SDK-t, ha a ChatGPT lesz az elsődleges felület, és eszközöket, valamint kisebb felületi elemeket szeretne egy teljes chatalkalmazás fejlesztése nélkül. Építsen saját ügynök-infrastruktúrát, ha szorosan kézben kell tartania a folyamatot, a memóriát, az utasításokat és az írási műveleteket.
Az Apps SDK olyan termékekhez illik, amelyek a chatet néhány rövid felületi lépéssel ötvözik. Gyorsabban szállíthat, de némi irányításról lemond.
Nálunk az egyértelmű eszközök, a widgetek világos működése és a pontos következő lépések váltak be. A folyamat meghatározását ezekre, nem pedig az LLM-re bíztuk. A modell akkor bizonyult a leghasznosabbnak, amikor a rendszer által már kiválasztott eredményeket magyarázta el.
Az alábbiakban először a választást, majd a bevált és a sikertelen megoldásokat mutatjuk be.
A legtöbb csapat még mindig csak MI-kísérleti projekteket futtat, vagy alacsony kockázatú és hozamú periférikus területeken alkalmaz MI-t. Kevesen vezetnek be olyan üzletileg kritikus terméket, amelyet a felhasználók hetente használnak. A ChatGPT Apps SDK segíthet áthidalni ezt a szakadékot, ha a cél a ChatGPT-n belüli megjelenés, nem pedig egy teljes asszisztens saját fejlesztése.
Tapasztalataink egy ügyfélprojektből származnak, ahol a követelmények alapján a ChatGPT volt az elsődleges felület, és olyan gyors megoldás kellett, amelyhez nem kellett teljesen egyedi chatalkalmazást finanszírozni.
Az Apps SDK azért felelt meg ennek, mert az ügyfélnek a következőkre volt szüksége:
Ne kelljen külön chatalkalmazást fejleszteni és üzemeltetni – a ChatGPT-n belül akarták elérni a felhasználókat, nem egy újabb önálló asszisztensfelületet létrehozni.
Chat és néhány feladatspecifikus felületi elem – pár célzott widgetlépés, nem pedig egy második teljes termék a munkafolyamaton belül.
MCP-eszközökön keresztül elérhető háttérrendszeri működés – szabványos eszközhívások, nem pedig teljes egészében saját, egyedi ügynök-futtatókörnyezet.
Felfedezhetőség a ChatGPT-ben – a felhasználók ott találkozzanak a munkafolyamattal, ahol már eleve dolgoznak.
A fejlesztés során az ügyféllel közösen ellenőriztük e döntések helyességét. A kompromisszum azonban változatlan: ha a munkamenetet a ChatGPT futtatja, a külső futtatókörnyezet nem az Öné. Befolyásolhatja, de nem irányíthatja teljesen.
Egy Apps SDK-alkalmazás három dolgot kapcsol össze:
A ChatGPT ügynök-futtatókörnyezete
Az Ön MCP-eszközei
Az Ön widgetfelülete
A folyamat a gyakorlatban:
A felhasználó kér valamit a ChatGPT-től.
A ChatGPT meghívhatja az egyik MCP-eszközt.
A szerver strukturált eszközeredményt küld vissza.
A ChatGPT beolvassa az eredményt, és dönt a következő lépésről: további eszközhívásokról, a felhasználónak adott válaszról vagy mindkettőről. Ha widgetet társított az eszközhöz, az ebben a körben jelenhet meg.
A felhasználó a chatben vagy a widgetben folytatja a műveletet: további szöveget ír, választ, vagy a widgetből eszközhívást indít. Ezzel frissül a beszélgetésszál; a ChatGPT új kört indít, és a 2–4. lépés a feladat befejezéséig ismétlődik.
Éppen a chat, a háttérrendszeri műveletek és a rövid felületi lépések ilyen ötvözése a lényeg. Ez azt is jelenti, hogy a sérülékeny pontok a chat, az eszközök és a felület közötti átadások.
Nem kell a nulláról újraalkotnia a chatfelületet, az eszközkapcsolatokat, a hitelesítési mintákat vagy a widget keretét. Ez sok terméknél jelentősen lerövidíti a fejlesztést, így az üzleti logikára és a védőkorlátokra összpontosíthat.
A ChatGPT-n belüli fejlesztés nem ugyanaz, mint saját ügynököt futtatni. A projekt nehéz része nem az utasítások trükkös megfogalmazása volt. Az eszközöket, a widgeteket és a következő lépéseket kellett olyan egyértelművé tenni, hogy a modell és a felület összhangban maradjon.
Az Apps SDK a megszokott frontendtől eltérő termékfelépítést kínál, ezért fontos tudni, mely helyzetekben ideális.
Használja az Apps SDK-t, ha a következőket szeretné:
Gyorsan bevezetni egy ChatGPT-munkafolyamatot.
A beszélgetés futtatását a ChatGPT-re bízni.
A természetes nyelvet néhány célzott felületi lépéssel ötvözni.
Elkerülni saját chatfelület, ügynökkonténer és felfedezési megoldás fejlesztését.
Ez az utolsó szempont különösen fontos, ha felhasználói már eleve a ChatGPT-ben dolgoznak.
Építsen saját ügynököt, ha a következőkre van szüksége:
Kódban kikényszeríthető, kötött, lépésről lépésre haladó folyamat.
Teljes egészében saját, egyedi felület és megerősítési folyamat.
Saját memória- és állapotmodell.
Minden futtatáskor kiszámítható működés.
Nyomkövetések, naplók és mérőszámok az ügynökhöz.
Ha a tervező, a rendszerutasítások és a teljes munkafolyamat alkotják a terméket, általában az egyedi infrastruktúra a jobb választás.
Kérdés | ChatGPT Apps SDK | Saját ügynökök |
|---|---|---|
Hol érhető el a felhasználói élmény? | A ChatGPT-n belül | A saját termékében |
Ki irányítja a beszélgetés lépéseit? | A ChatGPT, az Ön eszközei és felülete által vezérelve | Az Ön ügynökalapú rendszere |
Mekkora felületet kell fejlesztenie? | Célzott widgeteket a chatben | Bármekkorát, amekkorára szüksége van |
Mennyire irányíthatók az utasítások? | Közvetetten | Teljesen |
Mennyire könnyű kötött, megismételhető folyamatokat létrehozni? | Gondos tervezést igényel | Kódban könnyebben kikényszeríthető |
Az első bevezetésig eltelt idő | Gyakran rövidebb | Kezdetben gyakran hosszabb |
Saját felelősségű platformmunka | Kevesebb | Több |
Lehetőség a későbbi irányváltásra | Kisebb | Nagyobb |
A projekt során újra és újra az irányítás kérdése került elő: az egyik oldalon a gyorsaság és az ismerős környezet, a másikon a futtatókörnyezet részleges tulajdonlása állt. Az ügyfél ezt a kompromisszumot fogadta el, amikor a teljes infrastruktúra birtoklása helyett azt helyezte előtérbe, hogy a felhasználókat a ChatGPT-ben érje el.
Az ideális folyamat egyszerűnek hangzik: a felhasználó kérdez, az eszköz lefut, az adatok visszaérkeznek, és amikor dönteni kell, megjelenik a widget.
A gyakorlatban az átadások okozták a nehézséget. A widget nem puszta díszítés. Amint megjelenik a képernyőn, megváltoztatja, mit lát és mit tesz ezután a modell. A widget műveleteit ne kötetlen chatként, hanem névvel ellátott eseményekként kezelje.
A projekt technológiai infrastruktúrája egyszerű volt: FastMCP, Pydantic, React és TypeScript. Ezek integrálása nem okozott gondot. A valódi feladat az volt, hogy a modell, az eszközök és a felület ugyanúgy értelmezzék a következő lépést.
Tegyen minden átadást egyértelművé
Többé nem kezeltük az eszközeredményeket nyers háttérrendszeri adatcsomagként. Minden visszatérési érték átadási ponttá vált.
Egy jól felépített eszközeredmény:
Biztosítja a widget megjelenítéséhez szükséges adatokat.
Strukturált tényeket ad a ChatGPT-nek a válasz elkészítéséhez.
Ha a folyamat megkívánja, megadja a következő lépést is, így a modellnek nem kell találgatnia.
A widget műveletei ne homályos megfogalmazású szöveget küldjenek vissza a beszélgetésszálba. Pontosan jelezzék, mit tett a felhasználó, és mi következzen ezután.
Az egyértelmű átadásokkal nőtt a megbízhatóság.
A modell követi a rövid, egyértelmű utasításokat, ha azok az eszköz kimenetében és a widget műveleteiben szerepelnek.
Az alábbiakban egy általunk használt, egyszerű Pydantic-sémát mutatunk be. Az output mező tartalmazza a widget megjelenítéséhez szükséges strukturált adatokat, valamint azokat a tényeket, amelyeket a ChatGPT-nek használnia kell a munkamenetben. Az agent_directions mező egy rövid sort tartalmaz arról, mit tegyen ezután az asszisztens. A Reason mező nem kötelező.
Python
Tartsa kicsiben a widgeteket
A bevált widgetek egyetlen döntést kezeltek, majd visszaadták az irányítást. A rövid listák, megerősítések és tömör ellenőrzőképernyők jobban működtek, mint amikor a widgetből minialkalmazást próbáltunk készíteni. Némi widgetbe épített logika – például egyszerű ellenőrzés vagy kötött következő lépés – akkor is hasznos volt, amikor kiszámíthatóbb folyamatot akartunk.
Harmadik személyű widgetüzenetek
A widgetből érkező üzeneteket már nem a felhasználó chatüzeneteiként írtuk meg (“I selected…,” “I confirmed…”). Ehelyett rövid jelentéseket írtunk arról, mit tett a felhasználó (“The user selected…,” “The user confirmed…”). Azért próbáltuk ki ezt a megközelítést, mert a ChatGPT a widgetüzeneteket felhasználói üzenetek helyett eszközüzenetként adta hozzá.
Közvetlen műveletek, ha egyértelmű a következő lépés
Ha egy gomb egyértelműen meghatározza a következő eszközhívást, jobban működött, ha a widget közvetlenül indította el, mint ha újabb chatkört kényszerítettünk ki. Ez csak akkor alkalmazható, ha a következő eszközhíváshoz nincs szükség a ChatGPT-től származó bemenetre.
Ez segített kikényszeríteni a determinisztikus folyamatokat, és az újabb chatkör elhagyásával a késleltetést is csökkentette.
Hibakezelés
Ha egy eszközhívás sikertelen volt, az eszközből a megfelelő MCP-hibakódokat és rövid, közérthető üzeneteket küldtük vissza. Így a ChatGPT valódi információt kapott a sikertelen hívásokról, ezért elmagyarázhatta a problémát a felhasználónak, és/vagy észszerű következő lépést választhatott.
Az eszközkörnyezet kezelése
A munkamenet állapotát a saját szerverünkön tároltuk. A ChatGPT az eszközhívásokkal együtt elküldi a munkamenethez tartozó környezetet; a FastMCP-ben minden eszköznek adtunk egy Context paramétert, hogy a kezelő olvashassa és frissíthesse ezt az állapotot.
A stabil azonosítókat és a korábbi eredményeket a munkamenetben tároltuk, ahelyett, hogy a ChatGPT-vel minden híváskor újból átadattuk volna őket eszközargumentumként.
Ha eszközhívási hurkok alakultak ki, észlelni tudtuk az ismétlődő hívásokat, és egyértelmű hibát küldhettünk vissza az eszközeredményben.
A munkamenetnaplókat a saját rendszerünkben tartottuk hibakeresési és támogatási célokra.
Kezdetben megjelenítettünk egy widgetet, feltételeztük, hogy a modell „érti”, majd vártuk a megfelelő következő eszközhívást. Néha megtörtént. Gyakran viszont nem.
Egyértelmű átadás nélkül a ChatGPT összefoglalhatott, amikor műveletet vártunk, megkérhette a felhasználót a választása megismétlésére, vagy tovább tervezhetett, amikor már meg kellett volna állnia.
A megoldás az volt, hogy a strukturált kimenetekben és a widget adatcsomagjaiban pontosan megadtuk a következő lépést, ahelyett, hogy a modell következtetésére hagyatkoztunk volna.
Az Apps SDK dokumentációját követve megpróbáltuk ötletesen felosztani a válaszokat az eszköz kimenete, a rejtett metaadatok és a chatszöveg között. A widgetekből azonban nem tudtuk kiolvasni a rejtett metaadatokat. Ezért ezt a megoldást nem tudtuk használni.
Az Apps SDK dokumentációja szerint bizonyos eszközök kihagyhatók az ügynök eszközlistájáról, így az nem választja ki őket, miközben a widgetből továbbra is meghívhatók. Amikor a láthatóságot csak az alkalmazásra állítottuk, ezek az eszközök nemcsak az ügynök, hanem a widget számára is elérhetetlenné váltak. Nem sikerült olyan beállítást találnunk, amelyben az ügynök nem, a widget viszont láthatta az eszközt.
Ha semmi hasznos nem történt, a csend vagy az általános „sikeres” üzenet rosszabb volt az egyenes hibajelzésnél. Ezért az eszköz- és widgethibákat teljes értékű kimenetként kezeltük: ha egy lépés nem folytatható, ezt közérthetően jeleztük, és egyértelmű hibát küldtünk vissza, ahelyett, hogy a felhasználót egy megjelenő, de továbblépést nem kínáló widget előtt hagytuk volna. Ez javította a használhatóságot, és megbízhatóbbá tette a modell működését.
Ha kevesebb egyedi platformfejlesztéssel szeretne munkafolyamatot létrehozni a ChatGPT-ben, az Apps SDK praktikus megoldás. A gyorsaságért és azért, hogy a felhasználókat a megszokott munkakörnyezetükben érje el, némi irányításról mond le.
Ha a folyamat minden ágát, a felületet és az egyes lépésekről szóló döntéseket is kézben kell tartania, már a kezdetektől saját ügynök-infrastruktúrával tervezzen. Valószínűleg idővel kinövi a kizárólag ChatGPT-n belüli fejlesztést.
Az Apps SDK-val az MCP-szervert a ChatGPT-ben is futtathatja, mielőtt saját maga építené ki a chatet, a hitelesítést és az ügynök kapcsolati infrastruktúráját, majd a termék igényeinek növekedésekor saját infrastruktúrára válthat.
A hasonló helyzetben lévő csapatok következő lépése: válasszanak egy világos eredményű munkafolyamatot, írják le a chat, az eszközök és a widgetek közötti átadásokat, majd alaposan teszteljék az újrapróbálkozásokat és a hibákat, mielőtt sok időt fordítanának az utasítások finomhangolására.