Apps SDK je praktična opcija ako vam uskoro treba tok rada u ChatGPT-u ili ako ondje želite isprobati svoje alate prije ulaganja u prilagođeni skup tehnologija za agente. Ako morate imati potpunu kontrolu nad svakim korakom ponašanja agenta, obično nije.
Odaberite Apps SDK kada ChatGPT treba biti glavno sučelje i želite alate uz manje elemente korisničkog sučelja, bez izrade cjelovitog proizvoda za razgovor. Odaberite vlastiti skup tehnologija za agente kada vam treba stroga kontrola nad tokom, memorijom, upitima i operacijama zapisivanja.
Apps SDK odgovara proizvodima koji spajaju razgovor s nekoliko kratkih koraka u korisničkom sučelju. Brže isporučujete, ali se odričete dijela kontrole.
Nama su pomogli jasni alati, jasno ponašanje widgeta i jasni naredni koraci. Tok smo razradili oslanjajući se na njih, a ne na LLM. Model je bio najkorisniji kada je objašnjavao ishode koje je sistem već odabrao.
U nastavku: kako odabrati, a zatim šta je funkcionisalo, a šta nije.
Većina timova i dalje provodi pilot-projekte umjetne inteligencije ili je primjenjuje u sporedne svrhe s malim rizikom i malom mogućom koristi. Malo njih isporučuje proizvod ključan za poslovanje koji korisnici upotrebljavaju svake sedmice. ChatGPT Apps SDK jedan je od načina da premostite taj jaz ako vam je cilj ući u ChatGPT, umjesto da sami gradite cijelog asistenta.
Naša saznanja potiču iz projekta za klijenta čiji su zahtjevi upućivali na ChatGPT kao glavno sučelje i brzo rješenje koje nije zahtijevalo finansiranje potpuno prilagođenog proizvoda za razgovor.
Apps SDK odgovarao je tim zahtjevima jer je klijentu trebalo sljedeće:
Bez izrade i hostovanja posebnog proizvoda za razgovor — željeli su doseg unutar ChatGPT-a, a ne još jedno samostalno sučelje asistenta.
Razgovor uz malo korisničko sučelje prilagođeno zadatku — nekoliko usmjerenih koraka u widgetu, a ne drugi cjelovit proizvod unutar toka rada.
Ponašanje pozadinskog sistema dostupno putem MCP alata — standardno pozivanje alata, a ne prilagođeno okruženje agenta kojim se u potpunosti upravlja.
Otkrivanje unutar ChatGPT-a — korisnici trebaju pronaći tok rada ondje gdje već rade.
Te smo odluke potvrđivali s klijentom tokom razvoja. I dalje vrijedi ovaj kompromis: kada ChatGPT hostuje sesiju, vi ne upravljate vanjskim izvršnim okruženjem. Usmjeravate ga, ali nemate potpunu kontrolu.
Aplikacija izrađena pomoću Apps SDK-a povezuje tri stvari:
Izvršno okruženje za agente u ChatGPT-u
Vaše MCP alate
Korisničko sučelje vašeg widgeta
Tok u praksi:
Korisnik zatraži nešto od ChatGPT-a.
ChatGPT može pozvati jedan od vaših MCP alata.
Vaš server vraća strukturirani rezultat alata.
ChatGPT čita taj rezultat i odlučuje o narednom koraku: dodatnim pozivima alata, odgovoru korisniku ili oboma. Ako ste tom alatu pridružili widget, on se može prikazati u ovom krugu razgovora.
Korisnik nastavlja u razgovoru ili widgetu (dodatnim tekstom, odabirom ili pozivom alata koji pokreće widget). Time se nit ažurira; ChatGPT pokreće novi krug, a koraci 2–4 ponavljaju se dok se zadatak ne završi.
Upravo je ta kombinacija razgovora, pozadinskih radnji i kratkih koraka u korisničkom sučelju suština. To ujedno znači da su najosjetljiviji dijelovi prijelazi između razgovora, alata i korisničkog sučelja.
Ne morate od nule praviti sučelje za razgovor, povezivanje alata, obrasce autentifikacije ni okvir widgeta. Mnogim proizvodima to znatno skraćuje razvoj pa se možete usredotočiti na domensku logiku i zaštitne mehanizme.
Razvoj unutar ChatGPT-a nije isto što i pokretanje vlastitog agenta. Najteži dio projekta nisu bili trikovi s upitima. Bilo je potrebno dovoljno jasno definirati alate, widgete i naredne korake kako bi model i korisničko sučelje ostali usklađeni.
Apps SDK nudi drukčiji oblik proizvoda od uobičajenog frontenda, ali važno je znati za koje je scenarije idealan.
Koristite Apps SDK kada želite
Brzo isporučiti tok rada u ChatGPT-u.
Prepustiti ChatGPT-u da hostuje razgovor.
Spojiti prirodni jezik s nekoliko usmjerenih koraka u korisničkom sučelju.
Izbjeći izradu vlastitog sučelja za razgovor, okruženja za agente i mehanizma za otkrivanje.
Ova posljednja tačka važna je kada vaši korisnici već rade u ChatGPT-u.
Izradite vlastitog agenta kada vam treba
Fiksni tok korak po korak koji možete nametnuti u kodu.
Prilagođeno korisničko sučelje i tok potvrde kojima u potpunosti upravljate.
Vlastiti model memorije i stanja.
Ponašanje koje mora biti predvidljivo pri svakom pokretanju.
Tragovi izvršavanja, zapisnici i metrike agenta.
Ako su planer, sistemski upiti i cjelokupan tok rada vaš proizvod, prilagođeni skup tehnologija obično je bolji izbor.
Pitanje | ChatGPT Apps SDK | Vaši agenti |
|---|---|---|
Gdje se odvija korisničko iskustvo? | Unutar ChatGPT-a | U vašem proizvodu |
Ko upravlja koracima razgovora? | ChatGPT, usmjeren vašim alatima i korisničkim sučeljem | Vaš agentski sistem |
Koliko korisničkog sučelja izrađujete? | Namjenski widgeti u razgovoru | Koliko god vam treba |
Koliku kontrolu imate nad upitima? | Posrednu | Potpunu |
Koliko je lako napraviti fiksne, ponovljive tokove? | Zahtijeva pažljivo osmišljavanje | Lakše ih je nametnuti u kodu |
Vrijeme do prve isporuke | Često brže | U početku često sporije |
Rad na platformi za koji ste odgovorni | Manje | Više |
Prostor za kasniju promjenu smjera | Manje | Više |
Tokom našeg projekta stalno smo se vraćali riječi kontrola: s jedne strane brzina i poznato okruženje, a s druge djelimična kontrola nad izvršnim okruženjem. Klijent je prihvatio taj kompromis kada je susret s korisnicima u ChatGPT-u stavio ispred upravljanja cijelim tehnološkim skupom.
Idealan tok zvuči jednostavno: korisnik pita, alat se pokrene, podaci se vrate, a widget se prikaže kada treba nešto odabrati.
U praksi su problem bili prijelazi. Widget nije ukras. Čim se pojavi na ekranu, mijenja ono što model vidi i radi u narednom koraku. Radnje widgeta tretirajte kao imenovane događaje, a ne kao neodređeni razgovor.
Tehnološki skup na projektu bio je jednostavan: FastMCP, Pydantic, React i TypeScript. Njihova integracija nije bila problem. Pravi posao bio je uskladiti model, alate i korisničko sučelje oko onoga što slijedi.
Učinite svaki prijelaz očiglednim
Prestali smo tretirati rezultate alata kao neobrađene podatke iz pozadinskog sistema. Svaki rezultat postao je jasno definiran prijelaz.
Dobar rezultat alata:
Daje widgetu ono što mu treba za prikaz.
Daje ChatGPT-u strukturirane činjenice na kojima može zasnovati odgovor.
Kada to tok zahtijeva, navodi šta treba uslijediti kako model ne bi morao nagađati.
Radnje widgeta ne bi trebale slati neodređen tekst natrag u nit. Trebaju navesti šta je korisnik učinio i šta treba uslijediti.
Pouzdanost se povećala čim su prijelazi postali jasni.
Model slijedi kratke i jasne upute kada se nalaze u izlazu alata i radnjama widgeta.
U nastavku je mala Pydantic struktura koju smo koristili. Polje output sadrži strukturirane podatke potrebne widgetu kada ga prikažete i činjenice koje ChatGPT treba koristiti u sesiji. Polje agent_directions sadrži kratku uputu o tome šta asistent treba sljedeće uraditi. Polje Reason nije obavezno.
Python
Neka widgeti budu mali
Widgeti koji su funkcionisali obrađivali su jednu odluku, a zatim vraćali kontrolu. Kratke liste, potvrde ili sažet ekran za pregled radili su bolje nego pretvaranje widgeta u malu aplikaciju. Malo logike u widgetu, poput jednostavne provjere valjanosti ili fiksnog narednog koraka, ipak je pomagalo kada smo željeli determinističniji tok.
Treće lice u porukama widgeta
Prestali smo pisati naknadne poruke widgeta kao da ih šalje korisnik („I selected…“, „I confirmed…“). Pisali smo ih kao kratke izvještaje o tome šta je korisnik uradio („The user selected…“, „The user confirmed…“). Isprobali smo ovaj pristup jer je ChatGPT poruke widgeta dodavao kao poruke alata, a ne kao poruke korisnika.
Direktne radnje kada je naredni korak očigledan
Ako dugme jasno podrazumijeva naredni poziv alata, bolje je funkcionisalo da ga widget pokrene direktno nego da se zahtijeva još jedan krug razgovora. To vrijedi samo ako narednom pozivu alata nisu potrebni ulazni podaci iz ChatGPT-a.
To je pomoglo u provođenju determinističkih tokova i smanjilo kašnjenje izbjegavanjem dodatnog kruga razgovora.
Obrada grešaka
Kada poziv alata nije uspio, iz alata smo vraćali odgovarajuće MCP kodove grešaka i kratke, jasne poruke. ChatGPT je tako imao stvarne informacije o neuspjelim pozivima pa je mogao objasniti problem korisniku i/ili odabrati razuman naredni korak.
Upravljanje kontekstom alata
Stanje sesije čuvali smo na svom serveru. ChatGPT uz pozive alata šalje kontekst ograničen na sesiju; u FastMCP-u smo svakom alatu dali parametar Context kako bi obrađivač mogao čitati i ažurirati to stanje.
Stabilni ID-ovi i raniji rezultati čuvali su se u sesiji umjesto da od ChatGPT-a tražimo da ih pri svakom pozivu ponovo prosljeđuje kao argumente alata.
Kada bi se pojavile petlje pozivanja alata, mogli smo prepoznati duple pozive i vratiti jasnu grešku kroz rezultat alata.
Zapisnici sesija ostajali su kod nas radi otklanjanja grešaka i podrške.
U početku bismo prikazali widget, pretpostavili da je model „shvatio“ i čekali odgovarajući naknadni poziv alata. Ponekad bi se to dogodilo. Često ne bi.
Bez jasnog prijelaza ChatGPT bi mogao sažeti sadržaj kada smo željeli radnju, tražiti od korisnika da ponovi odabir ili nastaviti planirati kada je trebao stati.
Rješenje je bilo izričito navesti naredni korak u strukturiranim izlazima i podacima widgeta, umjesto nadati se da će ga model zaključiti.
Pokušali smo domišljato rasporediti odgovore između izlaza alata, skrivenih metapodataka i teksta razgovora, u skladu s dokumentacijom za Apps SDK. Međutim, u widgetima nismo mogli čitati skrivene metapodatke. Zato ovo nismo mogli koristiti.
Dokumentacija za Apps SDK opisuje alate koje možete izostaviti s agentove liste alata kako ih on ne bi birao, a ipak ih pozivati iz widgeta. Kada smo vidljivost postavili samo za aplikaciju, ti alati više nisu bili dostupni ni iz widgeta, a ne samo agentu. Nismo uspjeli postaviti sistem tako da agent ne vidi alat, a widget ga i dalje vidi.
Tišina ili općenita poruka „uspješno“ kada se ništa korisno nije dogodilo bile su gore od jasne greške. Zato smo neuspjehe alata i widgeta tretirali kao punopravne izlaze: ako se korak nije mogao nastaviti, to smo jasno naveli i vratili izričitu grešku, umjesto da korisnici gledaju widget koji se prikazao, ali ih nije odveo dalje. Time smo poboljšali upotrebljivost i povećali pouzdanost ponašanja modela.
Ako vam je cilj tok rada u ChatGPT-u uz manje prilagođenog rada na platformi, Apps SDK je praktičan način da to postignete. Dio kontrole mijenjate za brzinu i mogućnost da korisnike dosegnete ondje gdje već rade.
Ako morate upravljati svakom granom toka, korisničkim sučeljem i odlukom o svakom koraku, od početka planirajte vlastiti skup tehnologija za agente. Vjerovatno ćete prerasti razvoj isključivo unutar ChatGPT-a.
Apps SDK možete koristiti i za pokretanje svog MCP servera unutar ChatGPT-a prije nego što sami izradite razgovor, autentifikaciju i povezivanje agenta, a zatim prijeći na vlastiti skup tehnologija kada to proizvod bude zahtijevao.
Sljedeći korak za timove u istoj situaciji: odaberite jedan tok rada s jasnim ishodom, zapišite prijelaze između razgovora, alata i widgeta, a zatim temeljito testirajte ponovne pokušaje i greške prije nego što uložite mnogo vremena u podešavanje upita.