這篇適合誰先看:
- 你已經做過 prompt,開始發現「看起來對」和「系統真的能接」是兩回事
- 你正在做分類、抽取、摘要、intake、ROI 估算、ticket triage 這類要進下游流程的任務
- 你是 PM、工程、AI PM、PMO,想把 PoC 拉近 production 一點點
如果上一篇在畫地圖,這篇就是先把其中一條最常被低估的路挖深。
我想先把一句容易被忽略的話講白
企業落地的第一道門票,通常不是模型多聰明。
而是輸出能不能被下游可靠接住。
這句話聽起來沒有很性感,但它常常比你用的是哪個模型更決定專案能不能真的往前走。
因為真實世界裡,很多 PoC 不是死在答案不夠像人話,而是死在這些地方:
- JSON 長得像,但 parse 不過
- 欄位齊了,但 enum 值漂掉
- 格式對了,但語義其實矛盾
- retry 一開,成本像漏水一樣往下滴
- 最後只好人工複製貼上,整個自動化名存實亡
你筆記裡把 Day 3 壓成一句「prompt 變規格」,我覺得非常準。因為到這一步,你要做的已經不是讓模型講得更像答案,而是把它的輸出變成一個可驗證、可修復、可治理的資料介面。
為什麼「請用 JSON 輸出」還遠遠不夠
很多人第一個直覺是這樣:
請用 JSON 回答,欄位要有 title、department、risk_level。
這當然比自由文字好。但如果你真的要把輸出餵給程式,只靠這句 usually 不夠。
因為模型很可能會:
- 多送一個你沒想要的欄位
- 把
risk_level寫成medium而不是Med - 把 number 輸成
"12 hours"這種字串 - 把 array 寫成逗號分隔字串
- 包一段「以下是 JSON」在前面
- 在資訊不足時亂補值,不填 null
這些錯誤在聊天畫面裡通常沒那麼刺眼,到了系統裡卻會像小石頭卡齒輪,一顆就夠讓整條流程停住。
所以真正關鍵的,不是「模型願不願意用 JSON」,而是你有沒有把輸出定義成一份 contract。
我會怎麼看這份輸出合約:四道門
如果要把這件事講得簡單一點,我會把企業落地的輸出合約看成四道門。
第一道:Schema
這是最外層,也是最容易理解的一道門。
你先定義:
- 欄位是什麼
- 哪些必填
- 型別是什麼
- enum 有哪些合法值
- 允不允許額外欄位
- number 的範圍是什麼
- array 至少要幾個元素
這一步最像在寫規格書。
OpenAI 現在把 Structured Outputs 做成獨立能力,核心也是同一件事:讓模型輸出遵守你提供的 JSON Schema,而不是只生成「看起來像 JSON 的東西」。這個 distinction 很重要。因為 JSON mode 解的是語法感,schema 解的是結構契約。
第二道:Validator
但 schema 還不夠。
因為有些錯,不是 schema 能抓的。
例如:
estimated_time_saved_hours_per_week = 9999department = "Operations",語義對但 enum 不在白名單risk_level = Low,可是內容明明提到敏感資料與自動外發- 使用者同時說「每週省 20 小時」和「每月只省 3 小時」
- 輸出裡混進 email、phone、ID 這種 PII
這些東西需要 validator。
也就是說,你不只檢查格式,還要檢查:
- parse 過不過
- required 欄位齊不齊
- keys 有沒有多或少
- enum 合不合法
- 數值範圍合理不合理
- business rules 有沒有互撞
- PII 是否被帶出來
我很喜歡你筆記裡一句話:
我要的是爛資料下也不爆炸。
這句話其實就是 validator 的精神。
第三道:Retry
很多人知道要 retry,但 retry 寫得像在拜拜。
輸出一錯就重跑,重跑還錯再重跑,最後模型看起來很勤勞,帳單也很勤勞。
我比較推薦的是 bounded retry,而且每一次 retry 都要有很明確的修復目的。
例如:
- Retry #1:指出 schema 錯在哪,要求只回合法 JSON
- Retry #2:再更嚴格一次,禁止多餘文字,保守填值
兩次都不過,就不要再無限循環。直接 fallback。
因為 retry 的目的是修格式,不是讓模型反覆祈禱自己突然變成熟。
第四道:Fallback
這一層很常被忘掉,但 production 裡超重要。
如果格式還是不對、資料不足、風險過高、PII 遮不乾淨、欄位互撞,那就要有退路。
常見的退路有幾種:
- 回保守預設 JSON
confidence = Low- 列出缺資料清單
- 回退到人工 review
- 不更新系統,只生成 draft
這一步的價值,不是讓流程變醜,而是讓它不要硬撞。
一個很實際的例子:用例 intake 為什麼很適合拿來講這件事
你筆記裡拿「use case intake + ROI estimate」做 Day 3 和 Day 4 的練習,我覺得很聰明,因為這類任務剛好卡在 LLM 最常被高估的地帶。
表面上它很像只是抽資訊:
- use_case_title
- department
- estimated_time_saved_hours_per_week
- risk_level
- next_steps
但真實世界裡,這種任務其實很容易壞:
- 標題模糊
- 部門寫法很多種
- 工時估算互相矛盾
- 風險等級其實需要結合規則判定
- next_steps 容易漂成一整段空泛建議
如果你只是讓模型自由回答,它也許會寫得很像 consultant note。
但如果你要把這份輸出送進 dashboard、roadmap 或 weekly review,它就需要 contract。
這也是我很喜歡這類 use case 的地方。它把「prompt 很好看」和「系統真的能用」的差別攤得很清楚。
格式合規率,為什麼值得被單獨拿出來看
很多團隊做 PoC 時只看兩件事:
- 回答看起來對不對
- 使用者喜不喜歡
這兩件都重要,但對企業導入來說不夠。
你筆記裡提到 format compliance rate,我會把它視為很值得單獨看的前置指標。
因為它回答的是更基礎的一個問題:
這個輸出有沒有穩到足以被流程接住?
如果一個任務的語意準確率不錯,但 format compliance rate 只有 70%,那你很可能還不能讓它直連下游。
反過來說,如果格式穩、validator 成熟、fallback 清楚,就算語意還不是完美,你也比較有機會安全地把它放進半自動流程。
這也是為什麼我會說,格式穩定不是小事,而是 adoption 的地基。
Structured Outputs 不是全部,但它很值得
這裡也要講一個邊界,免得寫成 tool 崇拜。
Structured Outputs 很好用,但它不是萬靈丹。
它能幫你解的是:
- required key 不見
- enum 漂掉
- 結構不合法
- JSON parse 失敗
它不能替你解的通常是:
- business logic 是否合理
- 數字是否自相矛盾
- 風險分級是否符合你公司的規則
- PII 是否該被遮
- 這次輸出是否該進人工審核
所以不要把 Structured Outputs 想成「有它就不用 validator」。
比較像是:有它之後,你的 validator 才終於不用一直在地上撿語法碎片。
什麼時候不需要把事情做到這麼硬
還是要補一個反例,不然整篇會太像 engineering maximalism。
不是每個任務都需要 schema + validator + retry + fallback 這套全開。
通常不需要全開的情境
- 純人讀摘要
- 內部一次性腦暴
- 早期探索問題空間
- 明顯不會接下游系統
- 反正一定人工覆核,而且量很小
例如你只是要主管報告的草稿摘要,結果最後本來就會人工重寫,那你不一定要先把一切都做成 JSON contract。
這條線值得做的前提是:
- 輸出會被反覆用
- 會進系統
- 會被追蹤
- 會產生成本或風險
- 你真的希望它從「助手」變成「元件」
如果沒有這些前提,先停在 prompt 層,有時才是成熟。
最後我想留給你的判準
所以,如果你問我:
什麼時候才算真的跨過了 prompt,開始進到企業可落地的 LLM 專案?
我的答案是:
當你不再只問「怎麼讓它回答得更好」,而開始問「怎麼讓系統能穩定接住、驗證、修復、回退這個輸出」的時候。
那一刻,你做的已經不是單純 prompting。
你在寫一份輸出合約。
而 schema、validator、retry、fallback 這四件事,就是這份合約最先要長出來的骨架。
下一篇會接什麼
下一篇會往上走到第三層,也就是:
- tool calling
- deterministic tools
- retrieval
- RAG
- citations
也就是為什麼很多任務不是「模型再聰明一點」就會好,而是該讓它學會什麼時候查資料、什麼時候叫工具、什麼時候停止自己亂答。