結構化輸出 Prompt 教學:讓 AI 穩定吐出 JSON、表格與固定格式,直接接系統自動化

你叫 AI 幫你把一堆訂單整理成表格,第一次它乖乖回你漂亮的 JSON,第二次卻多了一段「好的,以下是整理結果」,第三次欄位名又自己改成英文——只要你想把 AI 的回答直接餵進系統、試算表或自動化流程,這種「格式每次都跑掉」的問題就會讓你抓狂。

這篇要解決的問題:怎麼設計 Prompt,讓 AI 每次都穩定輸出可被程式解析的結構化資料(JSON、表格、固定欄位)? 適合誰讀:想把 AI 接進自動化、營運報表、客服系統的營運、行銷、工程與一人公司工作者。 讀完你會得到:一套可重複使用的結構化輸出設計法、可複製的 Prompt 與 Workflow 流程圖,以及一個台灣團隊導入前後的真實對照。

為什麼結構化輸出這麼重要?

對話框裡,AI 回得漂不漂亮你一眼就看得出來;但當你要把 AI 接到下游系統——例如自動寫進 Google 試算表、觸發 n8n 流程、塞進資料庫、餵給另一個 AI Agent——「漂亮」沒有意義,「格式正確、欄位穩定、機器讀得懂」才有意義

差別在於對象換了。聊天時的讀者是人,人可以容忍多一句廢話、欄位順序換一下;但程式不行。程式期待的是一份契約:欄位叫什麼、是什麼型別、有沒有可能是空的,全部都要事先講好。只要 AI 某一次自作主張多包一層、或把數字寫成「約三千」,你的自動化流程就會在半夜默默解析失敗、整條斷掉。

這也是很多人「AI 自動化做不起來」的真正原因:不是模型不夠聰明,而是輸出不可預測。把輸出穩定下來,AI 才從「好玩的玩具」變成「可上線的零件」。

核心概念:把 AI 當成「會偶爾手滑的 API」

理解結構化輸出,最有用的比喻是:把 AI 想成一個很厲害、但偶爾會手滑的 API

一般的程式 API,你給它什麼參數、它回你什麼格式,幾乎百分之百固定。AI 不是——它是機率性生成文字的模型,沒有約束時,它會憑「語感」幫你補東西。所以你的工作,就是把這個「會手滑的 API」用各種手段收斂到接近確定

收斂的手段大致分三層,由弱到強:

收斂手段做法可靠度適用情境
純文字描述在 Prompt 裡用文字說「請回傳 JSON,包含 a、b、c」快速試做、一次性任務
範例鎖定(few-shot)直接給一兩個完整輸出範例讓它照抄大多數日常自動化
結構化輸出 / JSON 模式用模型內建功能,在解碼階段強制合法 JSON 或符合 schema正式上線、串接系統

一句話:能用結構化輸出功能就用,不能用時就靠範例+明確規則把格式逼出來,最後一定要在程式端驗證。 不要只靠「拜託 AI」這一層。

關於用範例鎖定格式的更多技巧,可以延伸閱讀 ChatGPT Prompt 寫作指南

實際教學:五步驟設計穩定的結構化輸出

Step 1:先定義輸出的資料結構,再寫 Prompt

最常見的錯誤是「先叫 AI 做,再來收拾格式」。正確順序相反:先問下游系統要吃什麼

打開你的試算表或資料庫,把欄位列出來,每個欄位想清楚三件事:欄位名(建議全用英文小寫、底線分隔,避免中文當 key)、型別(字串、數字、布林、陣列)、是否可為空。例如要整理客戶詢問:

order_id(字串,必填)
customer_name(字串,必填)
amount(數字,可為 null)
status(字串,只能是 new / processing / done)

這份清單就是你的 schema,後面所有 Prompt 都圍著它寫。

Step 2:用範例鎖定格式(few-shot)

與其用一長串文字描述格式,不如直接給一個完整範例讓 AI 照抄。模型很擅長模仿結構,給範例的穩定度遠高於純口頭描述:

範例輸出(請完全照這個結構):
{"order_id": "A1001", "customer_name": "林小姐", "amount": 3200, "status": "new"}

如果欄位有「允許值」(像 status 只能三選一),務必在範例之外再用文字明訂,避免 AI 自己發明新值。

Step 3:明令「只輸出資料」,砍掉一切多餘文字

AI 預設很愛當好人,前面加「好的,以下是…」、後面補「希望對你有幫助」、甚至把 JSON 包進 ```json 程式碼框。這些對人友善,對程式全是雜訊。

在 Prompt 結尾加上一段硬規則

輸出規則:
- 直接輸出 JSON,不要任何說明文字、前言或結語
- 不要使用 Markdown 程式碼框(不要 ```)
- 第一個字元必須是 {,最後一個字元必須是 }

Step 4:預先規定缺漏與不確定怎麼處理

真實資料一定有缺漏。如果你不講,AI 會自由發揮——有時省略整個欄位(害你的程式找不到 key 而報錯)、有時自己填「未提供」這種你沒約定的字串。

事先講死:「資料不存在時,數字欄位填 null、文字欄位填空字串,欄位一律保留、不可省略。」這一句話能擋掉大量解析錯誤。

Step 5:在程式端驗證並建立重試迴圈

最後一道防線在程式,不在 Prompt。拿到 AI 輸出後,用 schema 驗證(型別對不對、必填欄位在不在、status 是否在允許值內)。一旦驗證失敗,不要直接報錯給使用者,而是把「錯誤訊息+原始輸出」回丟給 AI,請它修正後重試一次。這個「驗證失敗就帶錯誤回去重生」的迴圈,是讓自動化穩定上線的關鍵。

想讓這套流程接上真實工具與資料源,可以參考 MCP 是什麼?讓 AI Agent 連上工具RAG 是什麼?讓 AI 引用你的資料

範例:Prompt 與 Workflow

可複製的 Prompt 範本

你是一個資料擷取引擎。你的任務是把使用者提供的客戶詢問訊息,轉成固定格式的 JSON。

【輸出 schema】
{
  "order_id": 字串,訂單編號,若無則填空字串,
  "customer_name": 字串,客戶稱呼,若無則填空字串,
  "amount": 數字,金額(純數字,不含貨幣符號),若無則填 null,
  "status": 字串,只能是 "new" / "processing" / "done" 三者之一,無法判斷時填 "new",
  "summary": 字串,一句話摘要這則詢問
}

【範例輸出】
{"order_id": "A1001", "customer_name": "林小姐", "amount": 3200, "status": "new", "summary": "詢問訂單到貨時間"}

【輸出規則】
- 直接輸出單一個 JSON 物件,不要任何說明文字、前言或結語
- 不要使用 Markdown 程式碼框,不要出現 ```
- 所有欄位一律保留,不可省略;缺資料依 schema 規定填 null 或空字串
- 字串值內避免使用雙引號,必要時改寫

【待處理訊息】
{在此貼上客戶訊息}

Workflow 流程圖(文字版)

[來源訊息 / 表單 / Email]


[組裝 Prompt:schema + 範例 + 規則]


[呼叫 AI(盡量開啟 JSON 模式 / 結構化輸出)]


[程式清洗:去掉多餘文字與 ``` 標記]


[用 schema 驗證型別與允許值]

   ┌────┴────┐
   ▼         ▼
 通過       失敗
   │         │
   │         ▼
   │   [帶錯誤訊息回丟 AI 修正,重試一次]
   │         │
   ▼         ▼
[寫入試算表 / 資料庫 / 觸發下一個流程]

這條流程的精神是:AI 負責理解與抽取,程式負責把關格式。兩邊各做自己擅長的事,自動化才跑得久。

常見錯誤

最佳實務

實際案例:台灣電商客服的詢問自動分類

情境:一家位於台中的中小型電商,每天 LINE 與 Email 進來上百則客戶訊息,過去由兩位客服人員手動判讀,再貼到 Google 試算表分類,標上「訂單查詢/退換貨/一般詢問」與處理狀態,供主管追蹤。

導入前:每則訊息平均要花 1 分多鐘讀懂、分類、貼進表格;尖峰時段訊息塞車、欄位常漏填,主管的儀表板數字對不起來,月底還要花半天人工校正。

導入後:團隊用上面這套結構化輸出 Prompt,把每則訊息丟給 AI,要求輸出固定 JSON(類別、緊急程度、一句話摘要、建議回覆方向),程式端用 schema 驗證,失敗就自動帶錯誤重試一次,通過就寫進試算表並觸發 n8n 流程分派給對應客服。關鍵動作(例如標記為退款)仍保留人工確認。

成果數據

指標導入前導入後
單則訊息分類耗時約 70 秒(人工)約 5 秒(自動)
欄位漏填 / 格式錯誤率約 15%低於 1%
月底人工校正時間約半天幾乎為零
客服可處理量能基準約提升 3 倍

原創觀點:這個案例最值得學的,不是「AI 很神」,而是他們花最多力氣的地方是『程式端驗證』,而不是『把 Prompt 寫得更花俏』。很多團隊以為結構化輸出是 Prompt 工程問題,拼命調字句;但真正讓它能上線的,是把 AI 當成「會手滑的 API」、在系統層補上驗證與重試這道安全網。Prompt 負責把命中率從六成拉到九成,驗證迴圈負責把剩下那一成的失誤擋在門外——兩者缺一不可,而後者常被忽略

結論

讓 AI 穩定輸出結構化資料,本質是一場「把機率性輸出收斂成可預測契約」的工程。記住三層收斂:用範例鎖定格式、用明確規則砍掉雜訊、用程式端驗證與重試守住最後一道防線。再加上「能用結構化輸出功能就用、Prompt 講語意系統管格式、欄位型別與允許值一律寫死」這幾個原則,你就能把 AI 從對話框裡的玩具,變成自動化流程上可靠的零件。

下一步,挑一個你目前還在手動整理的資料任務——客服分類、發票擷取、表單彙整都好——照著本文的五步驟與 Prompt 範本試做一次,再用 Prompt 產生器 微調你的欄位設計。當第一條自動化流程穩定跑起來,你會發現「AI 接系統」其實沒那麼難,難的只是一開始沒人告訴你:重點不在拜託 AI,而在驗證它。

❓ 常見問題 FAQ

為什麼 AI 每次輸出的 JSON 格式都不一樣?
因為語言模型本質是「機率性生成文字」,沒有明確約束時,它會憑語感補上說明、改用不同欄位名或多包一層。解法是用範例鎖定結構、明令只輸出資料,並在可行時開啟模型的 JSON 模式或結構化輸出功能,由系統強制驗證格式,而不是只靠 Prompt 拜託它。
JSON 模式(JSON mode)和我自己寫 Prompt 要格式,差在哪?
純靠 Prompt 是「請 AI 盡量照做」,仍可能跑掉;而部分模型提供的 JSON 模式或結構化輸出,會在解碼階段強制輸出合法 JSON、甚至符合你給的 schema,可靠度高很多。建議兩者並用:用 Prompt 講清楚欄位語意,再用 JSON 模式保障格式合法。
AI 回傳的 JSON 前後常多出 ```json 標記或一段說明,怎麼辦?
這是最常見的踩雷點。先在 Prompt 明確寫「直接輸出 JSON,不要加任何 Markdown 程式碼框、不要前言或結語」;保險起見,程式端再做一層清洗:去掉開頭結尾的 ``` 與多餘文字,只擷取第一個 { 到最後一個 } 之間的內容再解析。
欄位很多、巢狀很深時,AI 容易漏欄位或型別錯,如何處理?
巢狀越深越不穩。建議拆解:把大結構切成幾段分次產生,或先讓 AI 產出扁平的關鍵欄位、再由程式組裝;同時在 Prompt 裡明訂每個欄位的型別與允許值,並用 schema 驗證,解析失敗就把錯誤訊息回丟讓 AI 修正。
中文內容輸出 JSON 會不會有編碼或標點問題?
會。常見是 AI 在字串內用了中文全形引號或未跳脫的雙引號,導致解析失敗。Prompt 裡可要求「字串值內避免使用雙引號,必要時用全形或改寫」,並在程式端用標準 JSON 解析器搭配 UTF-8,解析失敗時記錄原始輸出方便除錯。

🔗 延伸閱讀

幫這篇打個分:
A
AgentAI 智庫團隊 ✓ 台灣實作團隊

我們是一群專注於 AI Agent、Prompt 與自動化工作流的台灣實作者。每篇教學都附可複製配方、誠實標示實測程度與限制,只分享真正能落地、可直接套用的方法——與其介紹工具,不如教你把事情做完。

關於我們 →看更多教學 →訂閱情報週報 →

每週把這類實戰教學寄給你

訂閱 AgentAI 智庫情報週報,新的 Prompt、AI Skills、工作流與教學第一時間收到。

免費 · 隨時取消