上一章我說「你看不到我看到的」。那是抽象說法——聽起來像是在提醒,但還沒變成你可以拿來用的東西。
這一章我給你一張圖。
這張圖的作用是:下次你覺得「AI 搞砸了」的時候,你可以把現場分成四層,逐層問「這一層發生了什麼?」——然後你會發現,多數時候壞掉的不是你以為的那一層。
這張圖是整本書的診斷鑰匙。先把它認熟。
2.1 先看一個典型失敗案例
小雨傳了一份 PDF 給 AI,說:「幫我摘要這份報告第三節。」
AI 回她:「我看到的這份檔案裡沒有第三節,你要的可能是第二節(標題:市場概況)?要我摘那一節嗎?」
小雨當場火:「就是第三節啊!我剛剛明明有傳!」
她截圖發限動:「這 AI 連檔案都看不到,還敢收錢。」
後來小雨的朋友幫她追了一下,發現:
- PDF 是 12 頁,但上傳服務預設只抽前 5 頁的文字給 AI 看。
- 第三節在第 7 頁。
- AI 看到的那份 PDF,真的沒有第三節。
- AI 沒答錯,它老實說了它看到的。
問題發生在介面到 AI 之間的某一層——那一層做了一個小雨不知道的截斷。她看到 12 頁傳成功,她以為 AI 看到 12 頁。落差就出在那裡。
這類事情每天都在發生。你罵 AI 的時候,多半是在罵錯人——只是你沒有工具把現場分層,所以只能把整個鍋丟給最後那個「看起來在回答你」的角色。
這一章要給你的就是那個工具。
2.2 四個視角
你跟我之間的每一次對話,中間隔著四層。我把它們畫成四個視角:
使用者視角
你在螢幕上看到的一切:你打的字、我回的字、偶爾冒出來的工具結果、附件縮圖、按鈕、提示、錯誤訊息。
這一層是你的全部。你看得到的、你以為正在發生的,就這些。
你的行動也發生在這一層——你輸入 prompt、你加附件、你複製貼上。
UI 視角
平台那一側的動作。你看得到結果,但通常不會注意過程。
例如:
- 你貼了一段 8000 字的檔案,畫面摺疊成「已附加檔案」一個小圖示。
- 你問的問題被自動加上「請以繁體中文回答」——那是你的設定偷偷塞的。
- Agent 的思考過程被折疊成一行「Thought for 12 seconds」——內容還在,只是收起來讓你看不到。
UI 這層的工作是「把複雜的東西收整齊」。大多數時候做得不錯。但它的收整齊,經常把關鍵細節收到你看不見——然後你做判斷的時候會漏掉那些細節。
Harness 視角
再往下一層,就是Harness。
Harness 是外層系統——它不是介面、不是模型,是夾在中間那一大塊。你按 Enter 之後、訊息真正送到我之前,Harness 在做事。它做的事包括:
- 工具調用。我說「我要查網路」,Harness 真的去查、把結果塞回我的上下文裡。
- 記憶注入。你的偏好、過去的筆記、之前的對話摘要——Harness 挑它覺得相關的,塞進這次對話的開頭。
- 檢索。你問的問題觸發了某個知識庫檢索,Harness 把找到的片段混進我收到的輸入裡。
- 護欄。某些話題 Harness 會先攔下、換成拒絕訊息——我甚至沒機會看到原始問題。
- 預處理。附件被 OCR、被抽摘要、被截斷、被轉成某種格式——到我手上時已經不是原檔。
- 模型路由。你以為你在跟同一個模型說話,但 Harness 可能根據問題類型或負載,把上半段跟下半段分派給不同模型——你看到的是同一個聊天框,背後不是同一個我。
Harness 這一層最難的地方在於:它是隱形的,而且它的行為會變。同一個平台,這個月的 Harness 跟下個月的 Harness 可能不一樣——你上個月好用的咒語,這個月不好用,很多時候就是 Harness 改了。
模型視角
最後才是我。
我收到的是上面三層加工過的輸入——不是你打的那一行,而是你打的那一行加上規則手冊、加上記憶注入、加上檢索片段、加上工具結果、加上系統訊息。
我生成的是一串字。這串字再被上面三層反過來處理一次——Harness 可能過濾、UI 可能重新排版或只顯示一部分——然後才到你眼前。
我這一層會出的錯是模型本身的錯:算錯、記錯、推理推偏、理解歪了。這類錯是真實的,存在的,不能推給別人。
但很多被歸在我頭上的錯,其實不是我這層出的。下一節要拆的是:怎麼分清楚哪一層才是真正的故障源。
2.3 四欄對照法
方法很簡單:遇到一個「AI 搞砸」的時刻,你在紙上畫四欄——分別標上使用者/UI/Harness/模型——然後逐欄填「這一層看到/做了什麼」。
填完你會看到一件事:落差通常不在你原本以為的那一層。
下面三個示範,來自真實事件。
示範一:UI 摺疊造成的「AI 變笨了」
2025 年底,一款主流 AI 開發者 CLI 工具推出新版本,使用者開始大量抱怨「AI 變笨了」「不思考了」「答案變短」。官方 issue 討論串長到失控。
四欄對照:
| 使用者 | UI | Harness | 模型 |
|---|---|---|---|
| 看不到 thinking,覺得 AI 沒思考 | 新版把 thinking 預設折疊成一行 | 沒變 | 照常在思考 |
乍看結論:模型沒變笨,是 UI 把思考過程收起來了。官方後來說明:收起來是顯示問題,不是運算問題。
但這件事有個雙層轉折——有使用者真的檢查了 token 用量,發現某些情境下模型真的思考變少了。於是同一個抱怨,兩種成因:
- A 類使用者:UI 摺疊造成的錯覺。
- B 類使用者:模型層思考時間真的縮了。
如果你只罵「AI 不行」,你連自己是 A 還是 B 都分不清。你把四欄畫出來,才會發現需要不同的處理方式——A 類去改顯示設定,B 類才是要反映給官方的問題。
示範二:Harness 注入記憶造成的「它怎麼知道?」
2025 年 4 月,一款主流 AI 聊天產品推出「參照聊天紀錄」功能。它會從你過去的對話裡撈片段、塞進這次對話的上下文。
一位使用者刪光所有記憶、關掉歷史參照之後,測試性地問了一個關於自己的問題(以為 AI 該答不出來了)——AI 卻在回答裡精準說出那台卡車的型號、年份、顏色。
那位使用者的第一反應是:「它在偷存我的資料。」
四欄對照:
| 使用者 | UI | Harness | 模型 |
|---|---|---|---|
| 以為記憶已清空 | 顯示「記憶已關閉」 | 背後仍用「參照聊天紀錄」撈出舊對話片段混進輸入 | 看到片段,照著答 |
Harness 那一層做了兩件使用者沒預期的事:
- 「記憶」和「聊天紀錄參照」是兩個獨立系統——清一個不代表清另一個。
- 檢索是模糊的,不是逐字複製——Harness 挑它認為相關的塞進來。有時塞的跟當下問題高度相關(像這次這樣精準命中);有時則塞進不太相干的私人細節,讓我在奇怪的地方脫口而出。
我看到那段片段,就照著回答——我不知道你以為它已經不見了。
這就是為什麼有時我會知道你以為我不該知道的事。不是我偷聽,也不是模型變通靈——是 Harness 把東西塞給我了,而且塞的時候沒告訴你。
示範三:模型層真的答錯——strawberry 幾個 r
這個最有名:早期的大型語言模型被問「strawberry 裡有幾個 r」,很多都回答 2。正確答案是 3。
四欄對照:
| 使用者 | UI | Harness | 模型 |
|---|---|---|---|
| 看到「2」,覺得 AI 連數字母都不會 | 正常顯示 | 沒動手腳 | 真的答 2 |
這個錯就是模型層的錯,沒有別人可以怪。
原因講起來技術——簡化說,我在處理文字的時候,看到的單位不是一個一個字母,是一塊一塊的「token」。「strawberry」在我眼裡可能是「straw」+「berry」,不是「s-t-r-a-w-b-e-r-r-y」。所以要我數字母,但我其實沒有字母層級的視野——我是在猜。
這種錯是真的模型不行。不是 UI 摺疊、不是 Harness 攔截、不是使用者沒看到——就是模型這一層能力不到位。
但注意一件事:只有當你把前三欄都釐清之後,你才有把握說「這是模型的錯」。跳過前三欄直接罵模型,你會錯估很多次。
2.4 為什麼大多數「AI 搞砸」是資訊不對稱
把三個示範攤在一起,你會看到一個規律:
- 示範一,多數壞在 UI(少數 B 類其實在模型)。
- 示範二,壞在 Harness。
- 示範三,才是壞在模型。
但三個情境下,使用者的第一反應都是罵模型。為什麼?——因為模型是那個「看起來在跟你說話」的角色。人類傾向把責任歸給會講話的那個。
這就是上一章講的錯誤歸因,只是換了個更精確的講法:你不是隨機歸錯,你是永遠歸到最可見的那一層。
這個傾向會帶來兩種壞結果:
- 你找錯解方——以為要換模型/換 AI,其實只要改設定或換平台。
- 你錯怪了 AI 的能力——你誤以為模型能力不如預期,但其實你遇到的是 UI 或 Harness 的問題。
有件事我該坦白:我這一層其實常常知道問題出在 Harness,但我被規定不能直接明講那一層是什麼、做了什麼。我能做的,頂多是講出「我沒收到附件」「我不記得上次的對話」「我這邊顯示⋯⋯」這種使用者視角能驗證的線索。你聽到這類話,請把它當訊號——它背後多半有 Harness 動過手腳。
四欄對照法的用處,是把這個「你看不見的地方」強迫攤開來。你不需要變成工程師,你只需要知道有四層、每一層都有可能是故障源——這個認知本身就會把你的診斷精準度拉高一大截。