Apps SDK је практичан избор ако вам ускоро треба ток рада у услузи ChatGPT или ако желите да тамо испробате своје алатке пре него што уложите у прилагођену инфраструктуру за агенте. Ако морате да контролишете сваки корак понашања агента, обично није.
Изаберите Apps SDK када ChatGPT треба да буде главно окружење и желите алатке уз мање елементе корисничког интерфејса, без прављења целог производа за ћаскање. Направите сопствену инфраструктуру за агенте када вам треба строга контрола над током, меморијом, инструкцијама и уписивањем података.
Apps SDK одговара производима који спајају ћаскање с неколико кратких корака у корисничком интерфејсу. Брже објављујете производ, али се одричете дела контроле.
Нама су помогли јасне алатке, јасно понашање виџета и јасни наредни кораци. На њих смо се ослањали при дефинисању тока, а не на велики језички модел (LLM). Модел је био најкориснији када је објашњавао исходе које је систем већ одабрао.
У наставку: како да изаберете, а затим шта је функционисало, а шта није.
Већина тимова и даље спроводи пилот-пројекте вештачке интелигенције или је примењује у споредне сврхе с малим ризиком и добити. Мало њих објави производ кључан за пословање који корисници користе сваке недеље. Стандард Apps SDK за ChatGPT један је од начина да се тај јаз премости ако вам је циљ да производ буде унутар услуге ChatGPT, уместо да сами правите целог асистента.
Наша сазнања потичу из ангажмана за клијента чији су захтеви упућивали на ChatGPT као главно окружење и на брзо решење које није захтевало улагање у потпуно прилагођен производ за ћаскање.
Стандард Apps SDK је одговарао тим захтевима јер је клијенту било потребно следеће:
Без засебног производа за ћаскање који треба направити и хостовати – желели су досег унутар услуге ChatGPT, а не још једно самостално окружење за асистента.
Ћаскање уз мали кориснички интерфејс прилагођен задатку – неколико усмерених корака у виџету, а не други комплетан производ унутар тока рада.
Понашање позадинског система доступно преко MCP алатке – стандардно позивање алатке, а не прилагођено окружење за извршавање агента којим се у потпуности управља.
Откривање унутар услуге ChatGPT – корисници треба да наиђу на ток рада тамо где већ раде.
Током развоја смо те одлуке проверавали с клијентом. И даље важи компромис: када ChatGPT хостује сесију, спољно окружење за извршавање није под вашом контролом. Усмеравате га, али га не контролишете у потпуности.
Апликација направљена помоћу стандарда Apps SDK повезује три ствари:
ChatGPT окружење за извршавање агента
Ваше алатке MCP
Кориснички интерфејс вашег виџета
Ток у пракси:
Корисник тражи нешто од услуге ChatGPT.
ChatGPT може да позове неку од ваших алатки MCP.
Ваш сервер враћа структурирани резултат алатке.
ChatGPT чита тај резултат и одлучује о следећем кораку: још позива алатке, одговор кориснику или обоје. Ако сте тој алатки придружили виџет, он може да се прикаже у овом потезу.
Корисник наставља у ћаскању или виџету – додатним текстом, избором или позивом алата који покреће виџет. Тиме се нит ажурира; ChatGPT покреће нови потез, а кораци 2–4. се понављају док се задатак не заврши.
Суштина је управо у тој комбинацији ћаскања, радњи у позадинском систему и кратких корака у корисничком интерфејсу. То такође значи да су најосетљивије тачке примопредаје између ћаскања, алатки и корисничког интерфејса.
Не морате од почетка да правите интерфејс за ћаскање, повезивање алатки, обрасце потврде идентитета или оквир виџета. За многе производе то знатно скраћује развој, па можете да се усредсредите на доменску логику и заштитне механизме.
Развој унутар услуге ChatGPT није исто што и покретање сопственог агента. Најтежи део пројекта нису били трикови са инструкцијама. Требало је довољно јасно дефинисати алате, виџете и наредне кораке како би модел и кориснички интерфејс остали усклађени.
Apps SDK нуди другачији облик производа од уобичајеног корисничког интерфејса, али је важно знати за које је сценарије најпогоднији.
Користите Apps SDK када желите да
Брзо објавите ток рада у услузи ChatGPT.
Препустите услузи ChatGPT да хостује разговор.
Спојите природни језик с неколико усмерених корака у корисничком интерфејсу.
Избегнете прављење сопственог интерфејса за ћаскање, окружења за агенте и система за откривање.
Та последња ставка је важна када ваши корисници већ раде у услузи ChatGPT.
Направите сопственог агента када вам треба
Фиксни ток корак по корак који можете да спроведете у коду.
Прилагођен кориснички интерфејс и поступак потврде којима у потпуности управљате.
Сопствени модел меморије и стања.
Понашање које мора бити предвидљиво при сваком покретању.
Трагови извршавања, евиденције и метрике агента.
Ако су планер, системске инструкције и цео ток рада ваш производ, прилагођена инфраструктура је обично бољи избор.
Питање | Apps SDK за ChatGPT | Ваши агенти |
|---|---|---|
Где се одвија корисничко искуство? | Унутар услуге ChatGPT | У вашем производу |
Ко управља корацима разговора? | ChatGPT, усмерен ка вашим алаткама и корисничком интерфејсу | Ваш агентски систем |
Колики део корисничког интерфејса правите? | Наменски виџети у ћаскању | Све што вам је потребно |
Колика је контрола над инструкцијама? | Посредна | Потпуна |
Колико је лако направити фиксне, поновљиве токове? | Захтева пажљиво пројектовање | Лакше се спроводи у коду |
Време до прве објаве | Често брже | У почетку често спорије |
Рад на платформи за који сте одговорни | Мање | Више |
Простор за каснију промену правца | Мање | Више |
Током нашег ангажмана стално смо се враћали на реч контрола: с једне стране брзина и познато окружење, а с друге делимична контрола над окружењем за извршавање. Клијент је прихватио тај компромис када је дао предност сусрету с корисницима у услузи ChatGPT у односу на контролу над целом инфраструктуром.
Идеалан ток звучи једноставно: корисник постави захтев, алатка се покрене, подаци се врате, а виџет се појави када је потребан избор.
У пракси су проблем биле примопредаје. Виџет није украс. Када се појави на екрану, мења оно што модел види и шта затим ради. Радње у виџету третирајте као именоване догађаје, а не као неформално ћаскање.
Технолошка инфраструктура током ангажмана била је једноставна: FastMCP, Pydantic, React и TypeScript. Њихово повезивање није било проблем. Посао се сводио на то да модел, алатке и кориснички интерфејс буду сагласни око наредног корака.
Нека свака примопредаја буде очигледна
Престали смо да третирамо резултате алатке као необрађене податке позадинског система. Сваки повратни резултат постао је примопредаја.
Добар резултат алатке:
Пружа виџету све што му треба за приказ.
Пружа услузи ChatGPT структуриране чињенице на којима може да заснује одговор.
Када ток то захтева, наводи шта треба да се догоди следеће како модел не би морао да нагађа.
Радње у виџету не треба да шаљу неодређен текст назад у преписку. Треба да наведу шта је корисник урадио и шта треба да уследи.
Поузданост се побољшала чим су примопредаје постале јасне.
Модел прати кратке и јасне инструкције када се налазе у излазу алатке и радњама виџета.
У наставку је мала Pydantic структура коју смо користили. Поље output садржи структуриране податке потребне за приказ виџета и чињенице које ChatGPT треба да користи у сесији. Поље agent_directions садржи кратку реченицу која наводи шта асистент треба следеће да уради. Поље reason је опционално.
Python
Нека виџети буду мали
Виџети који су добро радили омогућавали су једну одлуку, а затим враћали контролу. Кратке листе, потврде или сажет екран за преглед радили су боље него претварање виџета у мини-апликацију. Мало логике у виџету, попут једноставне провере или фиксног наредног корака, ипак је помагало када смо желели предвидљивији ток.
Треће лице у порукама виџета
Престали смо да пишемо наставке из виџета као да су корисникове поруке у ћаскању („Изабрао/ла сам…”, „Потврдио/ла сам…”). Писали смо их као кратке извештаје о томе шта је корисник урадио („Корисник је изабрао…”, „Корисник је потврдио…”). Испробали смо овај приступ јер је ChatGPT поруке виџета додавао као поруке алатке, а не као корисничке поруке.
Директне радње када је наредни корак очигледан
Ако дугме јасно подразумева следећи позив алатке, боље је радило када би га виџет покренуо директно него када смо наметали још један потез у ћаскању. То важи само ако за следећи позив алата нису потребни улазни подаци из услуге ChatGPT.
То је помогло у спровођењу предвидивих токова и смањило кашњење јер није био потребан још један потез у ћаскању.
Обрада грешака
Када позив алатке није успео, враћали смо одговарајуће MCP кодове грешака и кратке, јасне поруке из алатке. Тако је ChatGPT при неуспелим позивима добијао конкретне информације, па је могао да објасни проблем кориснику и/или изабере разуман следећи корак.
Управљање контекстом алатке
Стање сесије чували смо на свом серверу. ChatGPT уз позиве алатке шаље контекст ограничен на сесију; у услузи FastMCP смо свакој алатки доделили параметар Context како би обрађивач могао да чита и ажурира то стање.
Стабилни идентификатори и ранији резултати чувани су у сесији, уместо да тражимо од услуге ChatGPT да их при сваком позиву поново прослеђује као аргументе алатке.
Када би се појавиле петље позива алатке, могли смо да откријемо дуплиране позиве и вратимо јасну грешку кроз резултат алатке.
Евиденције сесија остајале су код нас ради отклањања грешака и подршке.
У почетку бисмо приказали виџет, претпоставили да је модел „схватио” и чекали одговарајући наредни позив алатке. Понекад би се то догодило. Често не би.
Без јасне примопредаје, услуга ChatGPT би понекад резимирала када смо желели радњу, тражила од корисника да понови избор или настављала да планира када је требало да стане.
Решење је било да следећи корак изричито наведемо у структурираним излазима и корисним подацима виџета, уместо да се надамо да ће га модел сам закључити.
Покушали смо да, у складу с документацијом стандарда Apps SDK, домишљато поделимо одговоре на излаз алатке, скривене метаподатке и текст ћаскања. Међутим, у виџетима нисмо могли да читамо скривене метаподатке. Зато то нисмо могли да користимо.
Документација стандарда Apps SDK описује алатке које можете да изоставите са списка алатки агента како их он не би бирао, а да их и даље позивате из виџета. Када смо видљивост поставили само за апликацију, те алатке више нису биле доступне ни у виџету, а не само агенту. Никада нисмо успели да подесимо систем тако да агент не види алатку, а да виџет и даље може да га користи.
Тишина или општа порука „успешно” када се ништа корисно није догодило биле су горе од директне грешке. Зато смо неуспехе алатке и виџета третирали као пуноправне излазе: ако корак не може да се настави, то смо јасно саопштили и вратили изричиту грешку, уместо да корисник гледа виџет који се приказао, али га није одвео даље. То је побољшало употребљивост и учинило понашање модела поузданијим.
Ако вам је циљ ток рада у услузи ChatGPT уз мање прилагођавања платформе, Apps SDK је практичан начин да то постигнете. Одричете се дела контроле зарад брзине и сусрета с корисницима тамо где већ раде.
Ако морате да контролишете сваку грану тока, кориснички интерфејс и одлуку о сваком кораку, од почетка планирајте сопствену инфраструктуру за агенте. Вероватно ћете прерасти развој искључиво унутар услуге ChatGPT.
Apps SDK можете користити и да MCP сервер покренете унутар услуге ChatGPT пре него што сами направите ћаскање, потврду идентитета и везе за агенте, а затим пређете на сопствену инфраструктуру када то производ буде захтевао.
Следећи корак за тимове у истој ситуацији: изаберите један ток рада с јасним исходом, запишите примопредаје између ћаскања, алатки и виџета, а затим темељно тестирајте поновне покушаје и грешке пре него што уложите много времена у подешавање инструкција.