如果你需要盡快在 ChatGPT 中推出工作流程,或想先在其中測試工具,再投資打造自訂智慧體技術堆疊,Apps SDK 是務實的選擇。但如果你需要完全掌控智慧體每一步的行為,通常就不適合。
若要以 ChatGPT 作為主要介面,並在不打造完整對話產品的情況下結合工具與少量 UI,請選擇 Apps SDK。若需要嚴密掌控流程、記憶、提示詞與寫入操作,請選擇自己的智慧體技術堆疊。
Apps SDK 適合將對話與少數簡短 UI 步驟結合的產品。你能更快推出產品,但會犧牲部分控制權。
我們實證有效的方法,是明確定義工具、小工具的行為和後續步驟。我們依靠這些要素來確立流程,而非依賴 LLM。模型最能發揮價值之處,是解釋系統已經選定的結果。
下文將先說明如何選擇,再分享哪些做法有效、哪些無效。
多數團隊仍停留在 AI 試驗階段,或只將 AI 用於風險與回報皆低的非核心用途。真正推出使用者每週都會接觸的業務關鍵產品者寥寥可數。如果你的目標是進駐 ChatGPT,而非自行打造整套助理,ChatGPT Apps SDK 是縮小這項落差的一種方式。
這些心得來自一次客戶合作:需求明確指向以 ChatGPT 為主要介面,並尋求一條快速路徑,無須投入資金打造完整的客製化對話產品。
依照這項需求,Apps SDK 相當合適,因為客戶需要:
不必打造及託管專用對話產品,他們想透過 ChatGPT 觸及使用者,而不是再做一個獨立的助理介面。
對話加上小型的任務專用 UI,只需幾個用途明確的小工具步驟,不必在工作流程中再加入一套完整產品。
透過 MCP 工具提供後端功能,採用標準工具呼叫,不必自行端到端掌控客製化智慧體執行環境。
可在 ChatGPT 中被使用者發現,讓使用者在原本工作的地方接觸這套工作流程。
我們在開發過程中與客戶一同驗證了這些選擇。這項取捨依然存在:由 ChatGPT 託管工作階段時,外層執行環境並不由你掌控。你可以引導執行流程,卻無法完全控制。
Apps SDK 應用程式會串連三項要素:
ChatGPT 的智慧體執行環境
你的 MCP 工具
你的小工具 UI
實際流程如下:
使用者向 ChatGPT 提出需求。
ChatGPT 可能會呼叫你的一項 MCP 工具。
你的伺服器傳回結構化的工具結果。
ChatGPT 讀取結果並決定下一步:繼續呼叫工具、回覆使用者,或兩者並行。如果你為這項工具附加了小工具,小工具就能在這一輪顯示。
使用者可以繼續在對話或小工具中操作,例如輸入後續文字、做出選擇,或透過小工具觸發工具呼叫。使用者的操作會更新討論串,接著 ChatGPT 執行下一輪,並重複步驟 2 至 4,直到任務完成。
重點就在於結合對話、後端操作和簡短的 UI 步驟,而最脆弱的環節是對話、工具與 UI 之間的交接。
你不必從頭重建對話 UI、工具串接、身分驗證機制或小工具框架。對許多產品而言,這能大幅縮短開發時間,讓你專注於領域邏輯與防護機制。
在 ChatGPT 中開發,並不等於執行自己的智慧體。這個專案的難點不在提示詞技巧。真正的挑戰,是把工具、小工具和後續步驟定義得夠明確,讓模型與 UI 保持一致。
Apps SDK 採用不同於一般前端的產品形態,但務必了解這套架構最適合哪些情境。
適合選用 Apps SDK 的情況
快速推出 ChatGPT 工作流程。
讓 ChatGPT 託管對話。
結合自然語言與少數聚焦的 UI 步驟。
無須自行打造對話介面、智慧體容器,也無須自行解決產品曝光。
如果使用者本來就經常使用 ChatGPT,最後一點尤其重要。
適合自行打造智慧體的情況
需要可在程式碼中強制執行的固定逐步流程。
需要由你端到端掌控的自訂 UI 與確認路徑。
需要自己的記憶與狀態模型。
每次執行的行為都必須可預測。
需要智慧體的追蹤資料、日誌和指標。
如果規劃器、系統提示詞和完整工作流程就是你的產品,自訂技術堆疊通常更合適。
問題 | ChatGPT Apps SDK | 自有智慧體 |
|---|---|---|
使用體驗位於何處? | ChatGPT 內 | 你的產品內 |
由誰執行各個對話步驟? | ChatGPT,由你的工具與 UI 引導 | 你的智慧體系統 |
需要建置多少 UI? | 對話中用途明確的小工具 | 依需求而定 |
對提示詞有多少控制權? | 間接控制 | 完全控制 |
固定、可重複的流程容易建立嗎? | 需要審慎設計 | 較容易以程式碼強制執行 |
首次推出所需時間 | 通常較快 | 初期通常較慢 |
由你負責的平台工作 | 較少 | 較多 |
日後改變方向的空間 | 較少 | 較多 |
這次合作中反覆出現的關鍵詞是「控制權」:一端是速度和使用者熟悉的環境,另一端則是對執行環境僅有部分掌控權。客戶優先選擇在 ChatGPT 中接觸使用者,而不是掌控完整技術堆疊,因此接受這項取捨。
理想流程聽來很簡單:使用者提出需求、工具執行、資料傳回,遇到需要選擇時便顯示小工具。
實務上的痛點卻是交接。小工具並非裝飾。一旦出現在畫面上,就會改變模型接收的資訊和下一步動作。應將小工具操作視為具名事件,而不是鬆散的對話。
這次合作採用的技術堆疊很單純:FastMCP、Pydantic、React、TypeScript。整合這些技術並不困難,真正的難題是讓模型、工具和 UI 對接下來要做的事取得共識。
讓每次交接都清楚明確
我們不再將工具結果視為原始後端承載資料,而是把每次傳回結果都當作一次交接。
完善的工具結果會:
提供小工具顯示所需的資料。
向 ChatGPT 提供結構化事實,作為回覆依據。
必要時明確指出接下來該做什麼,讓模型不必猜測。
小工具操作不應將含糊的文字傳回討論串,而應清楚說明使用者做了什麼,以及接下來該做什麼。
交接變得清楚後,系統也變得更可靠。
只要工具輸出和小工具操作中包含簡短明確的指示,模型就能遵循。
以下是我們使用的一個簡單 Pydantic 結構。output 欄位包含顯示小工具所需的結構化資料,以及 ChatGPT 在工作階段中應使用的事實。agent_directions 欄位則是一行簡短文字,說明助理下一步該做什麼。reason 欄位為選填。
Python
保持小工具精簡
有效的小工具一次只讓使用者做一項決定,完成後便交還控制權。簡短清單、確認操作或精簡的審閱畫面,都比把小工具變成迷你應用程式更有效。若想讓流程更具確定性,仍可在小工具中加入少量邏輯,例如簡單驗證或固定的下一步。
小工具訊息採用第三人稱
我們不再把小工具的後續訊息寫成使用者的對話口吻,例如「我選擇了……」或「我確認了……」。我們改用簡短報告描述使用者的操作,例如「使用者選擇了……」或「使用者確認了……」。我們之所以嘗試這種寫法,是因為 ChatGPT 會把小工具傳回的訊息歸類為工具訊息,而不是使用者訊息。
下一步明確時直接執行操作
如果按鈕已明確對應下一次工具呼叫,讓小工具直接觸發呼叫,比強制再進行一輪對話更有效。只有在下一次工具呼叫不需要 ChatGPT 提供輸入時,才適合採用這種做法。
由小工具直接觸發呼叫,有助於強制執行確定性流程,還能省去另一輪對話並降低延遲
錯誤處理
工具呼叫失敗時,我們會從工具傳回正確的 MCP 錯誤代碼和簡短易懂的訊息。如此一來,ChatGPT 在呼叫失敗時就有實際資訊可讀,能向使用者解釋問題及/或選擇合理的下一步。
工具情境管理
我們將工作階段狀態保留在自己的伺服器上。ChatGPT 會隨工具呼叫傳送工作階段專屬的上下文;在 FastMCP 中,我們為每項工具提供 Context 參數,讓處理常式能讀取及更新工作階段狀態。
固定 ID 和先前結果都存放在工作階段中,因此不必要求 ChatGPT 在每次呼叫時,再次以工具引數傳入固定 ID 和先前結果。
若出現工具呼叫迴圈,我們可以攔截重複呼叫,並透過工具結果傳回明確錯誤。
工作階段日誌則保留在我們的伺服器上,供偵錯和支援使用。
初期,我們會顯示小工具,假設模型已經「理解」,然後等待正確的後續工具呼叫。偶爾成功,多半不會。
如果交接不夠明確,ChatGPT 可能在應執行操作時改做摘要、要求使用者重複選擇,或在應停止時繼續規劃。
解決方法是在結構化輸出和小工具承載資料中明確寫出下一步,而不是期待模型自行推斷。
按照 Apps SDK 文件的做法,我們曾嘗試將回應拆分到工具輸出、隱藏中繼資料和對話文字中。但小工具無法讀取隱藏中繼資料,因此這個做法行不通。
Apps SDK 文件說明,有些工具可以不顯示在智慧體的工具清單中,讓智慧體不會選用,但小工具仍可呼叫。可是,當我們將可見性設為「app-only」時,這些工具不僅不再供智慧體使用,小工具也無法呼叫。我們一直無法完成智慧體看不到工具、小工具卻仍能使用的設定。
沒有任何回應,或在毫無實質結果時只顯示籠統的「成功」,都比直接回報錯誤更糟。因此,我們將工具和小工具失敗正式納入輸出:如果某個步驟無法繼續,就用淺白文字說明並傳回明確錯誤,不讓使用者只能盯著已顯示卻無法推進流程的小工具。這種做法改善了易用性,也讓模型的行為更可靠。
如果你的目標是在 ChatGPT 中建立工作流程,同時減少客製化平台的開發工作,Apps SDK 是務實的選擇。你以部分控制權換取速度,也能在使用者原本工作的環境中接觸他們。
如果需要掌控流程的每個分支、UI,以及每一步由誰決定,就應從一開始規劃自己的智慧體技術堆疊。若只在 ChatGPT 中開發,產品很可能終究會超出 Apps SDK 架構的適用範圍。
你也可以先透過 Apps SDK 在 ChatGPT 中執行 MCP 伺服器,之後再自行建置對話、身分驗證和智慧體串接機制。產品需要時,便可轉移至自有技術堆疊。
處境相似的團隊接下來可以這樣做:挑選一個結果明確的工作流程,寫下對話、工具和小工具之間的交接方式,再針對重試和錯誤情境進行壓力測試,完成後才投入大量時間調校提示詞。