Apps SDK yra praktiškas pasirinkimas, jei greitai reikia darbo eigos ChatGPT aplinkoje arba jei prieš investuodami į nuosavą agentų technologijų rinkinį norite joje išbandyti savo įrankius. Tačiau paprastai jis netinka, jei turite valdyti kiekvieną agento veikimo etapą.
Rinkitės Apps SDK, kai ChatGPT turi būti pagrindinė sąsaja, o jums reikia įrankių ir nedidelių UI elementų, bet nenorite kurti viso pokalbių produkto. Rinkitės nuosavą agentų technologijų rinkinį, kai reikia griežtai valdyti eigą, atmintį, užklausas ir duomenų įrašymą.
Apps SDK tinka produktams, kuriuose pokalbiai derinami su keliais trumpais UI veiksmais. Produktą išleidžiate greičiau, tačiau atsisakote dalies kontrolės.
Mums pasiteisino aiškūs įrankiai, aiški valdiklių elgsena ir aiškūs tolesni veiksmai. Darbo eigą grindėme šiais dalykais, o ne LLM. Modelis buvo naudingiausias aiškinant sistemos jau pasirinktus rezultatus.
Toliau aptarsime, kaip pasirinkti, o tada – kas pasiteisino ir kas ne.
Dauguma komandų vis dar vykdo bandomuosius DI projektus arba taiko DI šalutinėms, nedidelės rizikos ir naudos užduotims. Tik nedaugelis išleidžia verslui itin svarbų produktą, kuriuo naudotojai naudojasi kas savaitę. ChatGPT Apps SDK – vienas iš būdų sumažinti šį atotrūkį, jei norite veikti ChatGPT aplinkoje, o ne patys kurti visą asistentą.
Šias pamokas išmokome dirbdami su klientu, kurio reikalavimai numatė ChatGPT kaip pagrindinę sąsają ir greitą sprendimą, nereikalaujantį finansuoti visiškai individualaus pokalbių produkto.
Apps SDK atitiko šią užduotį, nes klientui reikėjo:
Nekurti ir neadministruoti atskiro pokalbių produkto – klientas norėjo pasiekti naudotojus ChatGPT aplinkoje, o ne kurti dar vieną savarankiško asistento sąsają.
Pokalbių ir nedidelių, konkrečioms užduotims skirtų UI elementų – kelių tikslingų veiksmų valdikliuose, o ne dar vieno visaverčio produkto darbo eigoje.
Per MCP įrankius pasiekiamos serverio funkcijos – standartinio įrankių iškvietimo, o ne visiškai nuosavos agento vykdymo aplinkos.
Atradimo ChatGPT aplinkoje – naudotojai turėtų rasti darbo eigą ten, kur jau dirba.
Kurdami šiuos pasirinkimus tikrinome kartu su klientu. Vis dėlto tenka susitaikyti su kompromisu: kai sesija vykdoma ChatGPT, išorinė vykdymo aplinka nėra jūsų valdoma. Galite ją nukreipti, bet ne visiškai valdyti.
Apps SDK programa sujungia tris dalykus:
ChatGPT agento vykdymo aplinką
Jūsų MCP įrankius
Jūsų valdiklių UI
Kaip praktiškai vyksta procesas:
Naudotojas ko nors paprašo ChatGPT.
ChatGPT gali iškviesti vieną iš jūsų MCP įrankių.
Jūsų serveris grąžina struktūrizuotą įrankio rezultatą.
ChatGPT perskaito rezultatą ir pasirenka kitą veiksmą: papildomus įrankių iškvietimus, atsakymą naudotojui arba abu. Jei su tuo įrankiu susiejote valdiklį, šiame etape jis gali būti parodytas.
Naudotojas tęsia darbą pokalbyje arba valdiklyje: įveda papildomą tekstą, pasirenka parinktį arba inicijuoja įrankio iškvietimą iš valdiklio. Taip atnaujinama pokalbio gija; ChatGPT pradeda kitą etapą, o 2–4 veiksmai kartojami, kol užduotis baigiama.
Būtent toks pokalbių, serverio veiksmų ir trumpų UI etapų derinys yra šio sprendimo esmė. Tai taip pat reiškia, kad pažeidžiamiausios vietos yra perdavimai tarp pokalbio, įrankių ir UI.
Nereikia nuo nulio kurti pokalbių UI, įrankių sąsajų, tapatybės nustatymo modelių ar valdiklių karkaso. Daugeliui produktų tai gerokai sutrumpina kūrimo laiką, todėl galite sutelkti dėmesį į srities logiką ir apsaugos priemones.
Kurti ChatGPT aplinkoje nėra tas pats, kas vykdyti nuosavą agentą. Sudėtingiausia projekto dalis nebuvo užklausų gudrybės. Reikėjo pakankamai aiškiai apibrėžti įrankius, valdiklius ir tolesnius veiksmus, kad modelis ir UI veiktų darniai.
Apps SDK suteikia kitokią produkto formą nei įprasta naudotojo sąsaja, todėl svarbu žinoti, kokiems scenarijams jis tinkamiausias.
Rinkitės Apps SDK, kai norite
Greitai išleisti ChatGPT darbo eigą.
Leisti ChatGPT vykdyti pokalbį.
Derinti natūraliąją kalbą su keliais tikslingais UI veiksmais.
Nekurti nuosavos pokalbių sąsajos, agento aplinkos ir atradimo mechanizmo.
Pastarasis aspektas svarbus, kai jūsų naudotojai jau nuolat dirba ChatGPT aplinkoje.
Kurkite nuosavą agentą, kai reikia
Fiksuotos nuoseklios eigos, kurią galima užtikrinti programiniu kodu.
Visiškai jūsų valdomos individualios UI ir patvirtinimo eigos.
Nuosavo atminties ir būsenos modelio.
Elgsenos, kuri turi būti nuspėjama kiekvieną kartą.
Agento trasavimo duomenų, žurnalų ir metrikų.
Jei planavimo priemonė, sistemos užklausos ir visa darbo eiga yra jūsų produktas, paprastai labiau tinka individualus technologijų rinkinys.
Klausimas | ChatGPT Apps SDK | Jūsų agentai |
|---|---|---|
Kur naudojamas sprendimas? | ChatGPT aplinkoje | Jūsų produkte |
Kas vykdo pokalbio etapus? | ChatGPT, nukreipiamas jūsų įrankių ir UI | Jūsų agentinė sistema |
Kiek UI reikia sukurti? | Tikslingi pokalbio valdikliai | Tiek, kiek reikia |
Kiek kontroliuojate užklausas? | Netiesiogiai | Visiškai |
Kaip lengva įgyvendinti fiksuotas, kartojamas eigas? | Reikia kruopščiai suprojektuoti | Lengviau užtikrinti programiniu kodu |
Laikas iki pirmojo leidimo | Dažnai trumpesnis | Pradžioje dažnai ilgesnis |
Jūsų valdoma platformos dalis | Mažesnė | Didesnė |
Galimybė vėliau keisti kryptį | Mažesnė | Didesnė |
Dirbant su klientu nuolat kartojosi žodis „kontrolė“: vienoje pusėje – sparta ir pažįstama platforma, kitoje – tik dalinė vykdymo aplinkos kontrolė. Klientas sutiko su šiuo kompromisu, nes galimybė pasiekti naudotojus ChatGPT aplinkoje jam buvo svarbesnė už viso technologijų rinkinio kontrolę.
Ideali eiga atrodo paprasta: naudotojas pateikia užklausą, įrankis ją įvykdo, grąžinami duomenys, o prireikus pasirinkti parodomas valdiklis.
Praktiškai daugiausia sunkumų kėlė perdavimai. Valdiklis nėra vien puošmena. Atsiradęs ekrane jis pakeičia tai, ką modelis mato ir daro toliau. Valdiklio veiksmus laikykite įvardytais įvykiais, o ne laisvos formos pokalbiu.
Projekte naudotas technologijų rinkinys buvo paprastas: FastMCP, Pydantic, React ir TypeScript. Juos integruoti nebuvo sunku. Sunkiausia buvo užtikrinti, kad modelis, įrankiai ir UI vienodai suprastų, kas vyks toliau.
Kiekvieną perdavimą padarykite aiškų
Nustojome laikyti įrankių rezultatus neapdorotais serverio duomenimis. Kiekvienas grąžintas rezultatas tapo perdavimu.
Tinkamas įrankio rezultatas:
Suteikia valdikliui pateikimui reikalingus duomenis.
Suteikia ChatGPT struktūrizuotų faktų, kuriais galima grįsti atsakymą.
Kai to reikia darbo eigai, nurodo tolesnį veiksmą, kad modeliui nereikėtų spėlioti.
Valdiklio veiksmai neturėtų siųsti į pokalbio giją neaiškaus teksto. Juose turėtų būti nurodyta, ką padarė naudotojas ir kas turi vykti toliau.
Aiškiai apibrėžus perdavimus, patikimumas padidėjo.
Modelis laikosi trumpų ir aiškių instrukcijų, kai jos pateikiamos įrankio išvestyje ir valdiklio veiksmuose.
Toliau pateikiama nedidelė mūsų naudota Pydantic struktūra. Lauke output saugomi valdikliui parodyti reikalingi struktūrizuoti duomenys ir faktai, kuriuos ChatGPT turi naudoti sesijoje. Lauke agent_directions pateikiama trumpa eilutė, nurodanti, ką asistentas turi daryti toliau. Laukas Reason neprivalomas.
Python
Valdikliai turi būti nedideli
Pasiteisinę valdikliai buvo skirti vienam sprendimui, o tada grąžindavo valdymą. Trumpi sąrašai, patvirtinimai ar glaustas peržiūros ekranas veikė geriau nei bandymas valdiklį paversti miniatiūrine programa. Šiek tiek logikos valdiklyje, pavyzdžiui, paprastas tikrinimas ar fiksuotas tolesnis veiksmas, vis tiek padėjo, kai norėjome labiau deterministinės eigos.
Trečiasis asmuo valdiklių pranešimuose
Nustojome rašyti valdiklio tęsinius kaip naudotojo pokalbio žinutes („I selected…“, „I confirmed…“). Juos rašėme kaip trumpus pranešimus apie naudotojo veiksmus („The user selected…“, „The user confirmed…“). Šį metodą išbandėme todėl, kad ChatGPT valdiklio pranešimus pridėdavo kaip įrankio, o ne naudotojo pranešimus.
Tiesioginiai veiksmai, kai kitas žingsnis akivaizdus
Jei mygtukas aiškiai nurodo kitą įrankio iškvietimą, geriau leisti valdikliui jį inicijuoti tiesiogiai, užuot pradėjus dar vieną pokalbio etapą. Tai tinka tik tada, kai kitam įrankio iškvietimui nereikia ChatGPT įvesties duomenų.
Tai padėjo užtikrinti deterministines eigas ir sumažino delsą, nes nereikėjo papildomo pokalbio etapo.
Klaidų tvarkymas
Nepavykus iškviesti įrankio, iš jo grąžindavome tinkamus MCP klaidų kodus ir trumpus, aiškius pranešimus. Tada ChatGPT gaudavo konkrečią informaciją apie nepavykusį iškvietimą ir galėdavo paaiškinti problemą naudotojui ir (arba) pasirinkti tinkamą tolesnį veiksmą.
Įrankių konteksto valdymas
Sesijos būseną saugojome savo serveryje. Su įrankių iškvietimais ChatGPT siunčia sesijos kontekstą; FastMCP aplinkoje kiekvienam įrankiui suteikėme parametrą Context, kad apdorojimo funkcija galėtų skaityti ir atnaujinti šią būseną.
Stabilūs ID ir ankstesni rezultatai buvo saugomi sesijoje, todėl nereikėjo prašyti ChatGPT kiekvieną kartą juos perduoti kaip įrankio argumentus.
Atsiradus įrankių iškvietimo ciklams galėjome aptikti pasikartojančius iškvietimus ir įrankio rezultate grąžinti aiškią klaidą.
Derinimo ir pagalbos tikslais sesijų žurnalus saugojome savo pusėje.
Iš pradžių parodydavome valdiklį, manydavome, kad modelis „suprato“, ir laukdavome tinkamo tolesnio įrankio iškvietimo. Kartais taip nutikdavo. Tačiau dažnai – ne.
Nesant aiškaus perdavimo, ChatGPT galėjo pateikti santrauką, kai reikėjo veiksmo, prašyti naudotojo pakartoti pasirinkimą arba toliau planuoti, nors jau turėjo sustoti.
Sprendimas buvo aiškiai nurodyti kitą veiksmą susistemintose išvestyse ir valdiklių duomenyse, o ne tikėtis, kad modelis pats jį nustatys.
Remdamiesi Apps SDK dokumentacija bandėme išmaniai išskaidyti atsakymus į įrankio išvestį, paslėptus metaduomenis ir pokalbio tekstą. Tačiau valdikliuose negalėjome perskaityti paslėptų metaduomenų. Todėl negalėjome šio metodo naudoti.
Apps SDK dokumentacijoje aprašyti įrankiai, kurių galima nerodyti agento įrankių sąraše, kad šis jų nepasirinktų, bet vis tiek iškviesti juos iš valdiklio. Nustačius matomumą tik programai, šie įrankiai tapo nepasiekiami ne tik agentui, bet ir valdikliui. Taip ir nepavyko sukurti konfigūracijos, kurioje agentas įrankio nematytų, o valdiklis vis tiek galėtų jį pasiekti.
Tyla arba bendrinis pranešimas „pavyko“, kai neįvyko nieko naudingo, buvo blogiau už tiesioginę klaidą. Todėl įrankių ir valdiklių triktis laikėme visaverčiais rezultatais: jei veiksmo tęsti neįmanoma, aiškiai tai nurodydavome ir grąžindavome konkrečią klaidą, užuot palikę naudotoją žiūrėti į valdiklį, kuris rodomas, bet nepadeda judėti pirmyn. Tai pagerino naudojimo patogumą ir padidino modelio elgsenos patikimumą.
Jei norite sukurti darbo eigą ChatGPT aplinkoje atlikdami mažiau individualių platformos darbų, Apps SDK yra praktiškas būdas tai pasiekti. Dalies kontrolės atsisakote dėl spartos ir galimybės pasiekti naudotojus ten, kur jie jau dirba.
Jei turite valdyti kiekvieną eigos šaką, UI ir sprendimus kiekviename etape, nuo pat pradžių planuokite nuosavą agentų technologijų rinkinį. Tikėtina, kad ilgainiui vien kūrimo ChatGPT aplinkoje jums nebepakaks.
Apps SDK taip pat galite naudoti MCP serveriui vykdyti ChatGPT aplinkoje, kol dar nesukūrėte nuosavų pokalbių, tapatybės nustatymo ir agento infrastruktūros, o produktui išaugus pereiti prie savo technologijų rinkinio.
Panašioje padėtyje esančioms komandoms siūlome pradėti nuo vienos aiškų rezultatą turinčios darbo eigos, aprašyti perdavimus tarp pokalbio, įrankių ir valdiklių, o prieš skiriant daug laiko užklausoms tobulinti kruopščiai išbandyti pakartotinius bandymus ir klaidas.