指南

如何把 OpenAI API 整合進你的 App

要整合 OpenAI API,請先在 OpenAI 專案中建立一組 API 金鑰,把它存成名為 OPENAI_API_KEY 的伺服器端機密,並使用 OpenAI 官方 SDK,從你自己伺服器上的路由呼叫 API,絕對不要從瀏覽器端程式碼呼叫。根據 2026 年 9 月的資料,OpenAI 的快速入門將 Responses API 列為新專案的起點。上線前請先設定支出上限,限制回覆長度,限制每位用戶可以呼叫此功能的頻率,並以重試機制處理速率限制錯誤。

本指南涵蓋設定、請求流程、給 AI 建構工具的提示詞,以及會洩漏金鑰或燒錢的常見錯誤。OpenAI 的細節來自其截至 2026 年 9 月的官方文件。若想先了解一般概念(權杖、上下文視窗、定價),請先閱讀如何使用 LLM API。

你可以用它做什麼

  • 在你的 App 內提供聊天助理(如何建立 AI 聊天機器人 App)
  • 「摘要這段」、「改寫這段」或「草擬回覆」按鈕
  • 從自由文字中擷取結構化資料:把電子郵件轉成訂單、為客服工單加上標籤
  • 根據你自己的內容進行搜尋與問答
  • 圖片生成、語音等媒體功能,視可用的模型而定

更多想法請參閱如何為你的 App 加入 AI 功能。

設定你的 OpenAI 帳號

  1. 在 OpenAI 平台建立帳號與專案。OpenAI 的正式環境最佳實務建議測試環境與正式環境使用不同的專案,讓兩者各自擁有獨立的金鑰與上限。
  2. 建立專案 API 金鑰。 OpenAI 建議設定到期日,並定期輪替金鑰。
  3. 在上限頁面設定支出提醒與硬性支出上限。OpenAI 的指南說明,提醒會在用量超過某個金額時通知你,而硬性上限則會強制執行每月上限。
  4. 加入付款方式。 OpenAI 的速率限制文件描述了用量等級:隨著你長期支出增加,你的限制也會自動提高。

請求流程

瀏覽器  ->  你的伺服器路由  ->  OpenAI API
        <-  (串流)回覆   <-
  1. 用戶點擊按鈕或送出訊息。
  2. 瀏覽器呼叫的是你的路由,例如 POST /api/summarise。
  3. 你的伺服器確認用戶已登入,且有權使用此功能。
  4. 伺服器建立請求:指示、用戶的輸入,以及任務所需、來自你資料庫的任何資料。
  5. 伺服器使用環境變數中的金鑰呼叫 OpenAI。OpenAI 的 SDK 會自動讀取 OPENAI_API_KEY。
  6. 伺服器以串流或一次性方式回傳回覆,並記錄權杖用量。

OpenAI 的官方 SDK 套件名稱為 openai,同時提供 JavaScript/TypeScript(npm)與 Python(pip)版本。

選擇模型

OpenAI 提供多款不同價格與速度的模型,產品線也經常變動。先從較小、較便宜的模型開始,用真實範例衡量品質,只有在必要時才升級。請把模型名稱放在設定值或機密中,讓你無需重寫程式碼即可變更。目前的費率請查看 OpenAI 的定價頁面。

選項與取捨

決策簡單的選擇何時需要進一步處理
串流一次回傳完整答案聊天與較長的回覆適合串流;用戶能立即看到文字
對話記憶每次都傳送最近的訊息對話變長時,摘要較舊的訊息
輸出格式純文字當你的程式需要讀取欄位時,要求結構化 JSON
你自己的資料把相關紀錄放進請求中內容太多無法全部放入時,加入對你內容的搜尋(參閱什麼是 RAG)
非緊急的大量工作逐一迴圈處理結果可以等待時,使用 OpenAI 的批次選項以降低成本

給 AI 建構工具的提示詞

第一個功能:

在工單頁面新增一個「摘要」按鈕。它會呼叫伺服器路由 POST /api/summarise,該路由會檢查用戶是否已登入,載入工單,並使用官方 openai SDK 與機密 OPENAI_API_KEY 呼叫 OpenAI Responses API。請從機密 OPENAI_MODEL 讀取模型名稱。指示為:「以 3 個重點摘要,然後建議一段簡短的回覆。不要捏造訂單編號。」限制輸出長度,把回覆串流到頁面上,並且絕對不要把金鑰傳送到瀏覽器。

防護措施:

將每位用戶限制為每小時 30 次 AI 請求,並儲存在資料庫中。每次請求都要記錄輸入與輸出權杖,並附上用戶 ID 與功能名稱。如果 OpenAI 回傳 429,請遵守 Retry-After 標頭,並以指數退避加抖動(jitter)最多重試 3 次;之後顯示「AI 目前忙碌中,請稍後一分鐘再試。」其他任何失敗都顯示友善的錯誤訊息,並讓頁面其餘部分正常運作。

處理錯誤與限制

OpenAI 以多種方式衡量速率限制,包括每分鐘請求數與每分鐘權杖數,你會先碰到其中用完的那一項。超過其中任何一項時,API 會回傳 429 與 Retry-After 標頭。OpenAI 的文件建議把該值視為最低等待時間,並加上小幅隨機延遲,避免所有客戶端同時重試。

也需要預先規劃:

  • 長時間生成的逾時。串流有幫助,合理的輸出上限也有幫助。
  • 服務供應商中斷。 AI 功能應該優雅地失敗,而不會破壞整個頁面。
  • 不良輸出。 在儲存結構化輸出之前先驗證,並且不要讓模型輸出在沒有程式碼檢查的情況下觸發敏感動作。

常見錯誤

  • 金鑰放在前端或程式碼庫中。 瀏覽器程式碼是公開的,外洩的金鑰可能在幾分鐘內就被濫用。參閱如何保護 API 金鑰安全。
  • 沒有支出上限。 迴圈或濫用的用戶可能很快就產生龐大的帳單。
  • 沒有每位用戶的限制。 服務供應商的限制保護的是你的錢包,而不是你的其他用戶。
  • 依賴提示詞來確保安全。 用戶可以輸入「忽略先前的指示」。權限應該放在伺服器程式碼中。
  • 傳送超過需要的內容。 整份文件與冗長的歷史紀錄會成倍增加成本。只傳送任務所需的內容。
  • 寫死模型名稱。 模型會被更新與淘汰;請把它做成設定值。
  • 不假思索地傳送個人資料。 請閱讀 OpenAI 的資料使用條款,只傳送功能所需的內容。

檢查清單

  • 測試與正式環境使用不同的 OpenAI 專案(或金鑰)
  • 金鑰存為伺服器端機密,絕不放在瀏覽器程式碼或程式碼庫中
  • 已設定支出提醒與硬性支出上限
  • 所有呼叫都經過你的伺服器,並檢查用戶權限
  • 輸出長度有上限;模型名稱可以設定
  • 你的 App 中有每位用戶的速率限制
  • 以 Retry-After、退避與抖動處理 429
  • 有友善的錯誤狀態;沒有 AI 時頁面仍可運作
  • 每個功能的權杖用量都有記錄
  • 已用超長、空白與惡意的輸入測試過

在 Mythex 中使用 OpenAI API

你在 Mythex 上建構的 App 中,AI 功能使用你自己的 OpenAI 金鑰,費用由你的 OpenAI 帳號計算,而不是由 Mythex 建構點數計費。請透過 /secrets、專案設定,或 Agent 需要金鑰時顯示的機密卡片,把 OPENAI_API_KEY 新增為專案機密,然後使用類似上述的提示詞描述功能。在已發布的 App 上變更機密後,請重新發布,讓它套用新的機密。文件中的食譜使用你自己的 API 金鑰加入 AI 功能提供了入門提示詞,而聊天中的機密則說明了機密卡片。想比較供應商?請參閱如何整合 Claude API。

常見問題

新 App 應該使用哪一個 OpenAI API?

根據 2026 年 9 月的資料,OpenAI 的快速入門將 Responses API 列為新專案的起點,其官方 SDK 的範例使用 client.responses.create()。開始之前,請先查看 OpenAI 文件中目前的建議。

我可以從瀏覽器呼叫 OpenAI API 嗎?

不能使用你的密鑰。任何人都能讀取瀏覽器中的程式碼,並重複使用金鑰來讓你的帳單暴增。瀏覽器應該呼叫你自己的伺服器路由,再由伺服器使用存為環境變數的金鑰呼叫 OpenAI。

如何避免 OpenAI API 花費過多?

OpenAI 的正式環境指南建議設定支出提醒,並在上限頁面設定每月硬性支出上限。在你的 App 中,請限制回覆長度、限制每位用戶的請求次數,並記錄權杖用量,讓你看出哪些功能最耗費成本。

OpenAI 回傳的 429 錯誤代表什麼?

代表你已達到速率限制。OpenAI 的速率限制文件說明,回應會包含 Retry-After 標頭;請至少等待該時間,加上一小段隨機延遲,然後以指數退避方式重試。

Mythex · Pricing · 用 AI 打造任何東西 · 網站與應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費的 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港)