分類: 🤖 AI 與自動化

  • 拔掉 RLS 的兩天:AI 時代規模化 Day One 為何從奢侈變預設

    重點摘要

    • 540 萬包裹壓測,警衛的社區包裹列表要 7330 毫秒。病根是 RLS 兩條 PERMISSIVE policy 用 OR 合併,讓查詢規劃器用不到 community_id 索引。
    • 全面拔除 173 條 policy、85 張表的 RLS,租戶隔離 100% 改由應用層帶 community_id。同一條查詢從 7330ms 降到 1.34ms,約 5500 倍。
    • 但拔掉 RLS 不是終點——第二波跨社區洩漏被「單租戶壓測」蓋住了:對照社區在多數表是 0 筆,洩漏判準(本社區數=全平台數)自動成立。要每張表都灌 ≥2 個社區才測得出;而且漏帶 community_id 不只洩漏,更是少了索引,同一個病根換地方又長。
    • AI 把規模準備的「建造成本」打掉了,但有兩個成本它打不掉:分區帶來的「複雜度稅」(維護照繳),與「取決於規模實測才知道對錯」的經驗決策(RLS 自己就是反例)。
    • 結論:AI 時代「規模化 Day One」從奢侈變預設,但「準備什麼」的判斷力更值錢——有把握的提前上,取決於壓測的,老實留給壓測。

    一個 V2 產品、兩天、一個 AI 協作者,把一套多租戶系統從「靠資料庫兜底」推進到「應用層自己負責」。這篇記錄的不是 commit log,是技術選型的隱性成本,怎麼在特定規模與特定哲學下才現形——以及 AI 怎麼悄悄改寫了「該不該提前準備規模化」這道老題目。

    先講結論:MVP 智慧是成本算出來的啟發法,不是定律

    傳統智慧說:MVP 先做,別過度工程,規模化以後再說。這句話我一直信,直到這兩天我意識到——它是一條成本驅動的啟發法,不是定律

    它成立的前提是「規模準備很貴」。以前要做分區、多租戶隔離、idempotency、離線佇列這整套規模機械,往往要多三到四倍的人力、好幾個月。那個成本,才讓「先別做、等需要再說」變成理性選擇。但兩件事同時改變了這個算式:

    1. AI 把建造成本打掉了。那套規模機械,AI 輔助下生成 + 維護的人力崩塌。
    2. 這是 V2,不是 try。前一版已經證明了領域——住戶、警衛、包裹是真需求,而且會有很多社區。規模不是猜測,是 near-certainty。「You Ain’t Gonna Need It」的前提「你可能不需要」,直接是假的。

    所以對一個 AI 輔助、領域已驗證的 V2,Day One 就準備規模化,比經典 MVP 智慧主張的更該做。但這篇真正有料的地方,是兩個 AI 也打不掉的成本。後面講。

    當初為什麼這樣選技術?

    這套系統的技術選型,是三股力量的合力:領域驅動 + 規模前瞻 + 不重蹈前版覆轍

    • Flutter 單一 codebase:住戶用手機、警衛用平板,功能大半重疊靠角色 gate。兩份原生 = 兩倍維護;一份 + responsive 是省力的對。加上離線優先是硬需求(警衛平板斷網也要能收件、拍照、印通知條)。代價老實說:CanvasKit 的 web 端很痛,e2e 自動化一路在跟它的無障礙語意樹搏鬥。
    • Go + GraphQL(型別契約):Go 單一 binary 好部署、並發強,對著「1000+ RPM / 1000 社區」的目標。GraphQL 用型別嚴謹的契約——這是對前版的反動:舊版用 category/method 字串路由 + PHP 的型別強制轉換怪招,踩過坑。型別世界 = runtime 少驚喜。
    • PostgreSQL + RLS(Row-Level Security):這個最值得講,因為我們親手拆了它

    RLS 的故事:為安全而選,為清亮而拆

    RLS 當初為什麼選?防禦縱深。理由聽起來無懈可擊:「把租戶隔離放在資料庫層,app 出 bug 也繞不過。」每個社區的資料用 policy 鎖死,誰都別想跨社區看到別人的包裹。

    然後規模化壓測來了。我們灌了 540 萬包裹、5.4 萬戶、202 個社區,模擬一個 V2 跑兩三年後的樣子。一量——警衛的社區包裹列表,7330 毫秒。七秒。

    病根不是索引沒建,是 RLS 的兩條 PERMISSIVE policy 用 OR 合併(是系統管理員) OR (社區=X)。community_id 只出現在 OR 的一邊,查詢規劃器就用不到 community_id 索引,只能 Seq Scan 掃完整張表的所有分區。這個病,設計時看不出來,要到 5.4M 才現形

    業主的反應很關鍵。他不要「在 DB 加更多限制」來繞,他要的是更乾淨:「我不要我的資料庫跟我的 AP 有這樣的依賴。本來就該做到零洩漏,怎麼會依賴 RLS?」

    於是我們全面拔除 RLS——173 條 policy、85 張表,全部 DROP。租戶隔離 100% 改由應用層:每一條碰租戶資料的查詢,自己帶上 community_id = current_setting('app.community_id')

    拆的過程,反過來證明「本來就該零洩漏」當時是假的

    審計時我抓到,授權中介層對「同社區範圍」的操作寫死了一行註解:「RLS 負責租戶隔離,這裡不另外檢查。」也就是說,有好幾個改別人資料的後端進入點(停用警衛、在別社區建戶、復活別社區的軟刪戶),它們的隔離正確性,本來就完全押在 RLS 上。RLS 一拔,這些就是跨社區提權漏洞。

    派去掃的 AI 子代理一開始判了 23 個缺口;我逐條人工驗證,收斂到 3 個真缺口——其餘有的早被別的守衛擋著、有的是子代理幻覺出根本不存在的函式。這也是個教訓:AI 的清單要逐條驗,不能盲信。

    拆完,效能呢?同一條查詢,帶上 community_id:

    查詢 RLS 開(OR 合併擋索引) RLS 拔除 + 應用層 community_id
    警衛社區包裹列表(5.4M 列) 7330 ms(Seq Scan 全分區) 1.34 ms(Index Scan)
    包裹改動歷程鑽取 0.2 ms

    從 7330ms 到 1.34ms,約 5500 倍。反諷的地方:當初選 RLS 是「為了安全」。它不但變成效能地雷,還讓 app 層偷懶——「反正 DB 會兜底」,於是 app 層的隔離就不嚴謹了。兜底機制養出了被兜底者的鬆懈。

    拔完 RLS 之後:洩漏沒結束,是換了個地方躲

    拔掉那天修了 3 個提權,我以為收工了。錯。RLS 一拔,等於把「DB 兜底」這層拿掉,所有原本偷懶的查詢全部裸奔——真正的第二波,要再跑一輪壓測才現形。

    一個包裹計數查詢,給某社區警衛回了 280 萬——那是整個平台的數字,不是他那個社區的。病根:這個 count 自己手寫 WHERE,繞過了會自動補 community_id 的中央 helper。同一類的還有一票:社區統計(*Stats)、各種計數(*Count)、住戶/包裹 picker、以及「先 load-by-id 再改」的 mutation——全是各自為政手寫查詢、漏帶租戶欄位的高風險地帶。

    但這篇最該記住的,是為什麼第一次壓測沒抓到。答案很反直覺:單租戶結構上測不出跨租戶洩漏。

    我第一次灌的 540 萬,只灌在 parcelshouseholds 兩張表,其他維度(使用者、訪客、公告、picklist)對照社區根本 0 筆。而洩漏的判準是「本社區查到的數字 == 全平台的數字」——當對照組是 0,這條恆等式自動成立,洩漏被 0 資料蓋得死死的。修法不只是補 WHERE,是補資料形狀:每一張要驗的表,都灌進 ≥2 個社區的資料,動態探針才有對照組去抓「你回給我的,有沒有混進別人的」。

    還有一層,業主一句話點破:漏帶 community_id 不只是洩漏,是效能。「為什麼還有功能沒戴上 ID,這不只會洩漏,重點是效能會變差,沒用到 index。」少了那個欄位,查詢就跟當初 RLS 的 OR 一樣用不到索引、掃全表。防洩漏和上索引,是同一個動作——community_id 既是隔離邊界,也是索引前綴。當初那個「OR 擋索引」的病根,拔了 RLS 之後,在每一條手寫查詢裡換個地方又長了出來。

    規模下另外兩個 Day One 就得拍的板

    同一輪還拍了兩個一旦上線就很難回頭的板,都是「規模 + 時間」逼出來的。

    • 快照 vs 正規化:歷史標籤不准 join。包裹上的物流公司、儲位、包裹類型、收件人姓名,全部存成當下的文字快照,不是外鍵。為什麼不正規化?因為這些是歷史事實。若做成外鍵去 join 現行字典,哪天某家物流公司改名或下架,過去的包裹紀錄會被回頭改寫——未來的公司出現在過去的資料上。原則一句話:身分用外鍵,歷史標籤用快照。這跟「證據鏈不可竄改」是同一個底層要求。
    • 控制面狀態用單例快取,不是每頁查 DB。社區可被系統管理員停用,每個請求都得確認「這社區還活著嗎」。最笨的做法是每頁打一次 DB——那又是另一種 RLS 式的過度防禦。做法是一個程序級單例快取(map + 鎖),10 分鐘 TTL,miss 才查 DB,停用/復活時主動逐出;隔離檢查收斂在一個 chokepoint(進交易時查一次),不撒在每條查詢。順手修了個誠實問題:社區停用後登入原本回「帳密錯誤」會誤導用戶,改成帳密對的人才告知「社區暫停服務中」——既不誤導本人,也不洩漏社區存在給攻擊者。

    兩個 AI 也打不掉的成本

    回到開頭的 thesis。AI 讓規模準備「便宜到值得 Day One 就做」——但有兩個成本它打不掉。

    成本 AI 打掉了什麼 AI 打不掉什麼
    複雜度稅 建造成本(生成分區/隔離/佇列) 維護稅:每次改動/debug 都要付。例:pg_total_relation_size 對分區母表回 0,最大的表都報 0,要展開分區層才量得到
    經驗決策 實作速度 壓測經驗:RLS 的「OR 擋索引」要 5.4M 才看得見,連 AI 都沒辦法 Day One 告訴你對的選擇

    成本一:AI 打掉「建造成本」,沒打掉「複雜度稅」。月分區讓程式更難推理。這兩天我們親自繳了這個稅:監測資料量時,pg_total_relation_size 對分區母表只算母表本身(回 0);還有 FK 要複合鍵、分區不繼承 RLS、清測試資料時被自己剛上的 append-only trigger 擋住……這個複雜度,是每一次未來改動、每一次 debug 都要付的稅,連 AI 也付。「AI 讓規模準備好建」是真的,「規模準備免費」是假的——稅照繳,只是從建造繳給了維護。

    成本二:有些規模決策是「經驗的」,Day One 就是準備不了——RLS 自己就是鐵證。RLS 本來就是 Day One 的規模準備(多租戶隔離),結果它是錯的 Day One 選擇。為什麼當初設計看不出來?因為「OR 擋索引」這個病要 5.4M 壓測才看得見。有些決策,正確答案取決於規模行為,而那行為你預測不了——那是壓出來的,不是設計出來的。而且如前面那一節的教訓:光有規模還不夠,要對的「資料形狀」——對照社區是 0 筆的那次壓測,把第二波洩漏整個蓋住了。經驗決策不只需要壓力,需要對的壓力

    AI 時代,「規模化 Day One」從奢侈變預設。但「準備什麼」的判斷力反而更值錢:有把握的結構提前上(便宜了);取決於規模實測的決策,老實留給壓測。

    有把握的(會有很多社區 → 按社區/時間分區;離線不可妥協 → 佇列),提前做。沒把握的(隔離機制、索引策略),別假裝設計階段就能拍板。這跟我之前寫過的 企業 AI 落地為什麼失敗 是同一個底層觀念:方法論不能照抄,要看你的前提條件還成不成立。

    方法:規格化、決策留證、以及「我自己打臉自己」的報告

    這兩天還做了第二件大事——把包裹做成可被法庭級檢驗的證據鏈。改動寫進不可竄改的 log(鑽一顆包裹的歷程,5.4M 下 0.2 毫秒)、簽名與照片在儲存層鎖死不可刪、系統管理員調查要「破窗」且每次都留審計。但比功能更值得分享的是方法

    • 規格先行。每個設計決定都先寫進規格、辯論清楚、鎖進文件,才動手。對話會被壓縮遺忘,規格不會。
    • 決策留證,不靠主觀評分。業主不信任 AI 加工過的「成本/風險」評分,他要看真實檔案、真實行數、schema 影響。所以需要他拍板的時刻,我生的是事實卡片,不是紅黃綠燈。
    • 三份報告的誠實檢驗。最後他要一份評分報告。但他要的不是一個數字——他要三份做比較:原始版、我「現在的預估」(鎖時間戳,不准事後改)、和「全部做完 + 全面測試後的真實量測」。核心是拿我的主觀預估去對真實量到的,差多少 = 我的評估可信度。

    結果:我預估綜合 7.5,真實約 7.8,誤差約 0.3 分;方向性預測(「dev 環境的測試污染會讓部分整合測試紅、但那不是回歸」「forensic 能力做完會升」「效能會守住」)全中。唯一校準:我對「系統穩定度」過度保守——實際零回歸。這種「逼 AI 先承諾預測、再用真實數據打臉」的設計,把「AI 的話可不可信」變成一個可量測的問題。

    人機協作:最好的部分不是分工,是辯論

    這兩天的分工大概是:業主出領域知識與方向決策,AI 出執行、驗證與反思。但最好的部分不是分工,是辯論。RLS 該不該拆、拆了 sysadmin 怎麼查日誌、照片資料夾要不要鏡射分區、孤兒清理會不會變成刪證據的後門——這些不是「下指令、執行」,是來回推。

    業主用領域常識把我拉回現實(「哪有警衛不分社區的,警衛 A 在四個社區工作就是四個警衛」),我用壓測數據和審計把假設證偽(「你說本來就零洩漏,但我們現有 code 就漏了 3 個」)。AI 不會累、能掃完每個呼叫點、能把 23 個候選逐條驗到剩 3 個真的;但判斷「準備什麼」「什麼時候該停下來問人」,還是要人。

    結語

    如果只能留一句:老的 RD 有老的包袱,所以才有「MVP、先別管規模」的智慧。但那個智慧是成本算出來的。當 AI 把建造成本打掉、當你做的是領域已驗證的 V2——規模化就是 Day One 的事。只是別忘了,AI 打不掉複雜度稅,也替不了你壓測;有把握的提前上,沒把握的,老實壓出來——而且要用對的資料形狀去壓,單租戶測不出跨租戶的洩漏。

    RLS 是我們「Day One 準備了錯的東西、規模化才發現」的活標本。它沒有讓這個決定變壞——它讓這個決定有了教材

    技術細節:Flutter + Go(gqlgen) + PostgreSQL 16;月分區、River 佇列、MinIO。壓測 540 萬包裹 / 202 社區 / RLS-off:熱查詢 1.34ms、改動 log 鑽歷程 0.2ms。

  • 讓 Claude Code 走企業自管:從直連 Azure Foundry 到 API Gateway

    重點摘要

    • Claude Code 官方原生支援把後端從 Anthropic 訂閱換成雲端供應商,本文走 Azure / Microsoft Foundry 這條,目標是把資料與計費留在公司合規邊界內。
    • 第一階段:用 CLAUDE_CODE_USE_FOUNDRY=1 直連 Foundry 部署的 Claude,含 settings.json、Entra ID 認證、原始 curl。
    • 第二階段:在前面架一個自家 DNS 的 API Gateway,Claude Code 改用 ANTHROPIC_BASE_URL 只打一個入口,Gateway 依 model 欄位路由到後端——這才是企業統一控管的正解。
    • 關鍵觀念:不是每個模型一個網址,而是一個入口、用 body 的 model 名分流。

    為什麼要弄:當 AI 訂閱開始「換軌」

    2026 年起,前沿模型供應商的計費邏輯正在改變:訂閱方案把「互動使用」和「自動化 / Agent 使用」拆成不同的計量池,企業帳號甚至無法直接購買訂閱、只能走 API。對個人開發者這是成本問題;但對企業,真正的痛點是另外兩個字:控管

    企業導入 AI 編碼工具時,資安與法遵部門會問的第一個問題永遠是:「我們的程式碼與機密,送去哪裡?誰能存取?怎麼稽核?成本怎麼歸戶?」 把 Claude Code 直接接公開 API,這些問題全部無解。解法是讓推論跑在公司自己的雲端租戶裡,資料留在合規邊界內,並在前面架一道統一閘道。本文就是這條路的逐步實戰,從最簡單的直連,進化到可上線的企業架構。延伸閱讀可參考我先前寫的 用 Claude Code Hooks 打造大腦反饋迴路

    全局:兩個階段

    整條路分兩階段。先讓 Claude Code 直連雲端供應商上的 Claude(證明機制),再把它收斂到自家閘道後面(正式控管)。

    階段一(直連):
      Claude Code  --->  https://<resource>.services.ai.azure.com/anthropic/v1/messages
    
    階段二(閘道):
      Claude Code  --->  https://ai-gw.yourcompany.com/v1/messages  --->  雲端供應商後端
                         (自家 DNS、統一入口、依 model 路由、注入真憑證)

    第一階段:Claude Code 直連雲端 Foundry

    1. 在 Foundry 部署 Claude 模型

    在 Foundry 入口建立資源並部署 base model。三個實務重點,踩過才知道:

    • 地區限定:Claude 模型目前只開放在特定區域(本文撰寫時為 East US 2 與 Sweden Central),選錯區一定部署失敗。
    • 務必接受服務條款:第一次在資源上部署 Claude,後台要建立一個對應的供應商組織(Anthropic Organization)。部署時跳出的 Terms of Service 一定要在「正確登入帳號」狀態下按接受,否則握手失敗。
    • bad-state 陷阱:一旦某次部署握手失敗進入 bad state,該資源就修不好、重部任何模型都會死。正解是建立全新資源,別在壞掉的資源上重試。

    2. 設定 Claude Code(settings.json)

    最乾淨的做法是把環境變數寫進 Claude Code 的 settings.jsonenv 區塊(跨平台、持久,Windows 與 Linux 通用)。檔案位置:Linux 是 ~/.claude/settings.json,Windows 是 %USERPROFILE%\.claude\settings.json

    {
      "language": "繁體中文",
      "theme": "dark",
      "env": {
        "CLAUDE_CODE_USE_FOUNDRY": "1",
        "ANTHROPIC_FOUNDRY_RESOURCE": "<your-resource-name>",
        "ANTHROPIC_FOUNDRY_API_KEY": "<your-foundry-key-or-omit-for-entra-id>",
        "ANTHROPIC_DEFAULT_SONNET_MODEL": "<your-sonnet-deployment-name>",
        "ANTHROPIC_DEFAULT_OPUS_MODEL":   "<your-opus-deployment-name>",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL":  "<your-haiku-deployment-name>"
      }
    }

    各變數的意義:

    變數 作用
    CLAUDE_CODE_USE_FOUNDRY設為 1 啟用 Foundry 整合。沒設的話 Claude Code 會走預設的公開 Anthropic API。
    ANTHROPIC_FOUNDRY_RESOURCE你的資源名稱;Claude Code 會自動組成端點 https://<resource>.services.ai.azure.com/anthropic
    ANTHROPIC_DEFAULT_*_MODEL三個層級(Sonnet/Opus/Haiku)各自的「部署名稱」,不是 model id。注意部署名可能跟 model 名不同(例如同名重建時會自動加序號)。

    重要:ANTHROPIC_DEFAULT_*_MODEL 一定要填「實際部署名」。Claude Code 內部會依當下任務挑層級(主要寫 code 用 Sonnet/Opus,讀檔、摘要等雜活用 Haiku),把對應的部署名塞進請求送出。

    3. 認證:Entra ID(建議)或 API 金鑰

    兩種選擇。企業環境建議 Entra ID:不把金鑰寫進檔案,改用 Azure CLI 的身分,集中式身分管理、適合團隊與 CI/CD。只要在啟動 Claude Code 前登入即可:

    # 方案 A:Entra ID(不放金鑰進檔案,建議)
    az login
    az account show        # 確認登入到正確訂閱
    # 然後在 settings.json 拿掉 ANTHROPIC_FOUNDRY_API_KEY 那行即可
    
    # 方案 B:API 金鑰(快速測試用)
    # 直接把金鑰填進 settings.json 的 ANTHROPIC_FOUNDRY_API_KEY

    4. 驗證設定

    啟動 claude,在裡面打 /status,確認 API provider 顯示 Microsoft Foundry、resource 與 model 都正確。啟動橫幅若顯示類似 Sonnet 4.5 · API Usage Billing,代表它走的是 API 計量(雲端供應商),不是訂閱。最後送一句測試訊息,有正常回應就代表端到端打通。

    5. 直接打 Messages API:預設協議就能用

    很多人會問:不能直接用「預設的 Messages API」嗎?能,而且它就是。 Foundry 的端點本來就是標準的 Anthropic Messages API,只是換了網址與認證。跟原生 Anthropic API 只有三點差別:網址不同、model 欄位填「部署名」、認證用 Azure 的方式。以下是兩種認證的原始 curl:

    # 用 API 金鑰(Header 是 x-api-key)
    curl -X POST https://<resource>.services.ai.azure.com/anthropic/v1/messages \
      -H "Content-Type: application/json" \
      -H "x-api-key: $AZURE_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "<your-deployment-name>",
        "max_tokens": 256,
        "messages": [{"role":"user","content":"Hello, which model are you?"}]
      }'
    
    # 用 Entra ID(Header 是 Authorization: Bearer,scope https://ai.azure.com/.default)
    curl -X POST https://<resource>.services.ai.azure.com/anthropic/v1/messages \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $AZURE_AUTH_TOKEN" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "<your-deployment-name>",
        "max_tokens": 256,
        "messages": [{"role":"user","content":"Hello, which model are you?"}]
      }'
    

    6. 一個必知限制:訂閱資格與配額

    有個坑要先知道:Foundry 上的 Claude 通常限定企業等級訂閱(Enterprise / MCA-E),而且非企業訂閱的預設配額可能是 0 RPM / 0 TPM,免費 / 試用 / 純 credit 帳號不支援。意思是——你用個人帳號可以「部署成功」,但真正送推論時可能撞到 0 配額或資格錯誤。這正是企業要在正式的公司訂閱下跑、而不是個人帳號的硬理由。

    第二階段:進化成 API Gateway

    為什麼要 Gateway

    直連能動,但每台機器各自拿著後端憑證、各自直接打雲端——這在企業是不可維護也不安全的。把一道閘道架在中間,你得到一個單一控制點:

    • 統一認證與 RBAC:誰能用、能用哪些模型,集中管理;client 只拿你發的 token,永遠看不到後端真憑證。
    • 稽核與成本歸戶:每一筆請求記 log,依使用者 / 專案歸戶成本。
    • 限流與配額:在閘道做,而不是寄望每個 client 自律。
    • 供應商解耦:哪天要把某個模型從 A 雲換成 B 雲,改閘道就好,幾百台 client 一行都不用動。

    關鍵架構原則:一個入口,依 model 路由

    最容易設計錯的地方:不要做成「Sonnet 一個網址、Opus 另一個網址」。 Claude Code 整個 session 只認一個 base URL,它靠請求 body 裡的 model 欄位區分模型,所有請求都送到同一個入口。所以正確設計是:閘道對外只露一個 DNS 入口,內部再依 model 名稱路由到對應的後端部署。你想像中的「API1 / API2 分流」應該活在閘道後面,對 client 只露一扇門。

    Claude Code 改成 Gateway 模式

    不再用 Foundry 那組變數,改用通用閘道模式。注意 model 這裡填「乾淨的標準名」,讓部署名的映射藏在閘道裡:

    {
      "env": {
        "ANTHROPIC_BASE_URL": "https://ai-gw.yourcompany.com",
        "ANTHROPIC_AUTH_TOKEN": "<gateway-issued-token>",
        "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5",
        "ANTHROPIC_DEFAULT_OPUS_MODEL":   "claude-opus-4-1",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL":  "claude-haiku-4-5",
        "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1"
      }
    }
    • ANTHROPIC_BASE_URL(通用)取代 CLAUDE_CODE_USE_FOUNDRY;Claude Code 會打 {BASE_URL}/v1/messages
    • ANTHROPIC_AUTH_TOKEN 會以 Authorization: Bearer 送出(若閘道收 x-api-key,改用 ANTHROPIC_API_KEY)。
    • model 填標準名,閘道內部再對應到實際部署名——client 從此不必知道後端命名怪癖。

    閘道必須遵守的契約

    你的閘道本質是一個 Anthropic Messages API 相容的透傳反向代理。違反任一條,Claude Code 與所有官方 SDK 就打不進去:

    要求 說明
    對外端點 POST /v1/messages選配 /v1/messages/count_tokens/v1/models(供模型發現)。
    body 原樣透傳收到什麼 Anthropic Messages JSON,就照樣轉發,絕不改 schema
    支援 SSE streamingstream:true 必須逐塊串回,這是最常翻車的點。
    依 model 欄位路由把標準名映射成對應後端部署名並轉發。
    後端注入真憑證閘道持有後端金鑰 / service principal,client 永遠看不到。
    錯誤碼原樣回429 / 401 / 400 照轉,client 才能正確重試。

    一條封包的端到端追蹤

    把上面串起來,一通 Sonnet 請求與一通 Haiku 請求,打的是同一個網址,只有 body 的 model 不同:

    # Claude Code 做主要工作(Sonnet 層)
    POST https://ai-gw.yourcompany.com/v1/messages
    Authorization: Bearer <gateway-token>
    anthropic-version: 2023-06-01
    {"model":"claude-sonnet-4-5","messages":[...],"stream":true}
    
    # Claude Code 做雜活(Haiku 層)-- 網址與 token 一模一樣,只有 model 變
    POST https://ai-gw.yourcompany.com/v1/messages
    Authorization: Bearer <gateway-token>
    {"model":"claude-haiku-4-5","messages":[...]}
    
    # 你的 Gateway 收到後:
    #   1) 驗 token + RBAC(這個人 / 這隊能用哪些 model)
    #   2) 讀 model 欄位,查路由表:
    #        claude-sonnet-4-5 -> 後端部署 "claude-sonnet-4-5-xx"
    #        claude-haiku-4-5  -> 後端部署 "claude-haiku-4-5"
    #   3) 改寫 model 成真部署名、換上後端真憑證、轉發到雲端
    #   4) 後端回標準 Anthropic 回應 -> Gateway 原樣串回 -> Claude Code 收到

    用現成的,別手刻 schema

    別自己發明一套 JSON 格式包起來——那會讓 Claude Code 和所有官方 SDK 全部失效,很多公司「封裝 API」就死在這。直接用支援 Anthropic 相容 + model-based routing 的成熟方案:雲端原生的 API 管理服務(如 Azure API Management)、或開源的 LLM 閘道(如 LiteLLM proxy、Portkey)。它們原生就能做認證、限流、路由與 log。

    常見錯誤與排查

    症狀 原因 / 解法
    Claude Code 一直要你登入 Anthropic沒設 CLAUDE_CODE_USE_FOUNDRY=1,它走了預設公開 API。
    model is not availableANTHROPIC_DEFAULT_*_MODEL 沒對到實際部署名(注意同名重建的序號後綴)。
    401 / 403金鑰錯,或 Entra scope 不是 https://ai.azure.com/.default,或缺 RBAC 角色。
    429 / 0 配額非企業訂閱預設配額為 0;改用企業訂閱或申請配額。
    部署一直 Failed 又刪不掉資源進入 bad state;建新資源,別在壞掉的上面重試。
    經閘道後 streaming 不會動閘道沒正確透傳 SSE;確認 stream:true 的逐塊轉發。

    結語

    這條路的核心其實只有一句話:Foundry 的端點就是標準 Messages API,所以閘道只要當一個透傳代理。 先用直連證明機制能通,再用閘道把它收斂成「單一入口、依 model 路由、注入真憑證」的企業架構——資料留在合規邊界、計費可歸戶、供應商可替換。當前沿模型的使用門檻越來越高,能把它穩穩接進公司治理框架的能力,本身就是一種競爭力。

  • 當 AI 夠重要,價值與風險就是一體兩面:談 AI 治理與 ROI

    重點摘要

    • AI 的 ROI「難算又好算」:別只看表面省工,要看頻率質變——一個分析從「一年做一次」變成「一月一次」,價值是跳級的。
    • ROI 要對到競爭本質與戰略目標,不是中階的過程 KPI。
    • 當 AI 夠重要,它的價值與風險就是一體兩面,這不是缺陷,是事實。
    • 治理心法:讓法遵、風險、業務所有人在同一個平台看同樣的問題與機會,達成共識才放行。
    • 底線是主權 AI:公司的資料不能丟到公開 AI 去訓練。

    這是 SAP NOW AI Tour 系列的最後一篇。前面談了方法論、技術、案例,這篇談一個比技術更難、卻真正決定成敗的東西——AI 治理與 ROI。這天聽下來,最深刻的幾段都不是在講模型多強,而是在講「怎麼算它的價值」和「怎麼管它的風險」。

    一、ROI 難算又好算:關鍵在「頻率質變」

    一位銀行高管分享的 ROI 觀點,我覺得每個要替 AI 專案爭預算的人都該聽。他說 AI 的 ROI「難算,但也好算」。

    難算,是因為一個企業要用 AI 做什麼,沒辦法被量化反推;好算,是因為當 AI 對到「三到五年後的巨大競爭優勢」時,那些成本相對就不是重點。他舉了一個企業信用分析的例子,非常經典:

    一開始算 ROI,是「原本一個人要做 36 小時,AI 降到 3 小時」。聽起來省了工,但因為做的人不多,效益看起來普通。後來他們發現算錯了重點——因為過去要花 36 小時,這個分析一年只能做一次;但 AI 只要 3 小時,就能改成一季一次、甚至一個月一次。頻率一變,質就變了:能提早發現客戶信用變好(多給額度)、或提早發現問題(不用等到明年,中間就預警)。他說:「這對銀行是很大的突破,效益沒辦法估量,因為太大了。」

    這就是頻率質變:真正大的效益,往往不在「同一件事做得更快」,而在「快到可以改變做這件事的頻率」。表面的工時 ROI,會嚴重低估它。

    二、ROI 要對到戰略本質,不是中階 KPI

    承上,他的結論是:AI 專案的 ROI,應該對到「你原本要創造的競爭優勢是什麼」,而不是中階的過程指標。製造業的講者也呼應這點——挑 AI 專案的優先順序,是「越能直接反映客戶需求的越優先」(良率、產出、交期),而不是從內部好做的地方開始。

    另一個容易被低估的效益是潛在損失的避免。一家電子大廠提到,AI 最大的價值往往不是看得到的降本,而是「在第一關就攔截一個品質議題,避免整批損失」——這種效益很難寫進試算表,卻可能是最大的。還有橫向複製:一個廠導入成功,就能複製到二十個廠,效益會放大到難以估算。

    三、價值與風險,是一體兩面

    講到治理,那位銀行高管用了兩個會場引用的軍事 AI 案例,把問題講得很透。同一套 AI 影像辨識系統:

    • 故事一:在任務中辨識出前方的威脅,救了一條人命。
    • 故事二:把一個人手上拿的東西誤判成危險物,造成了無法挽回的誤傷。

    同一個系統,兩個極端。只看故事二,你會想「隔天就把系統關掉」;只看故事一,你會繼續用。他的洞察是:當你的 AI 夠重要,它一定同時帶著高價值與高風險——這是一體兩面,不是哪邊做得不夠好。

    四、治理心法:所有人在同一個平台達共識

    既然價值與風險綁在一起,怎麼管?他的答案很簡單,也很難:讓所有人在同一個平台上。

    以他們銀行為例,法遵、風險、業務人員,都在同樣的平台、看同樣的 AI、同樣的問題與機會。沒有共識,就沒辦法離開那個辦公室——因為一定有人覺得「該關掉」,有人覺得「不能關(關掉會出事)」,必須當場喬到共識。這比任何一份治理文件都實在:把對的人放在同一個畫面前,逼出共識。這也呼應全場另一個反覆出現的觀點——AI 治理的重點,是讓 AI「行為有序」地在企業內運行,而不是放任它亂竄。

    五、底線:主權 AI

    如果說全場有一條最強的暗線,那就是主權 AI(Sovereign AI)——這個詞在不同講者口中至少出現了三次。顧問業引用的調查顯示,超過七成的企業領導者認為「AI 在哪裡開發/運算」是選技術的關鍵考量;製造業強調總部集中算力、守住數位主權;而傳產的設備主管講得最白:

    每個公司都有自己的機密,你不會希望把自己的資料丟到公開的 AI 上去訓練。所以你需要的是主權 AI。

    對製造業、金融業這種高度重視資料的產業,這會是董事會問的第一個問題。所以在選型時,「資料留在哪、誰能存取、會不會被拿去訓練」往往比「模型多聰明」更早被決定。

    結語:難的不是技術,是人與治理

    四篇寫到這裡,剛好繞回系列第一篇的結論:數位轉型 80% 卡在組織與人,不是技術。AI 治理也是同一回事——真正難的,不是把模型接起來,而是怎麼算清楚它的價值、管得住它的風險、讓所有人對它有共識。

    把整個系列濃縮成一句話:AI 降低了工具的門檻,卻抬高了「懂業務、會判斷、守得住治理」的人的價值。工具會越來越好用,但會用工具的人和組織,才是差距所在。

    常見問題 FAQ

    怎麼評估 AI 專案的 ROI 才不會低估?

    別只看「同一件事做得更快」省了多少工時,要看「頻率質變」——當一個分析從一年一次變成一月一次,能提早發現機會與風險,價值是跳級的。ROI 應對到競爭本質,而非中階過程 KPI。

    AI 的價值和風險可以分開管嗎?

    很難。當 AI 夠重要,價值與風險是一體兩面。務實的治理是讓法遵、風險、業務在同一個平台看同樣的問題與機會,達成共識才放行。

    什麼是主權 AI(Sovereign AI)?

    指企業掌握「AI 在哪裡開發、運算,資料由誰存取、會不會被拿去訓練」的主導權。對重視資料的產業,公司機密不丟公開 AI 訓練是底線。

    導入企業 AI,最該先想清楚什麼?

    不是先選模型,而是先想清楚資料主權與治理(資料留在哪、誰能存取),以及這個 AI 要對到的競爭本質。技術反而是相對後面的問題。

    📚 本系列:SAP NOW AI Tour 的 4 堂課

  • 傳產與金融怎麼把 AI 落地?三個真實場景

    重點摘要

    • 鋼鐵廠:讓機器狗進約 1,200°C 的高爐巡檢,並用「設備健康指標像人的健康指標」的概念,做動態預知維護。
    • 銀行:把客戶經理變成 AI Agent,靠「下游的下游有訂單」的線索,搶在同業之前打那通電話。
    • 電子代工:信奉「工廠不是實驗場」,所有試錯與優化先在數位孿生裡跑完,再上實體。
    • 三個產業差很遠,但共通點一致:AI 不是取代人,而是把人從危險、重複、來不及反應的地方解放出來。

    這是 SAP NOW AI Tour 系列的第三篇。前兩篇談方法論與技術骨架,這篇講最好看的部分——真實案例。我挑了三個差異很大的產業(鋼鐵、銀行、電子代工),看他們各自怎麼把 AI 落到地上。為尊重分享者,以下用產業代稱、只引用公開分享的內容。

    一、鋼鐵廠:讓機器狗進 1,200 度的高爐

    鋼鐵是典型的「3K 場域」——危險、骯髒、辛苦,再加上傳產普遍的缺工壓力。這家鋼鐵龍頭的設備部門,把 AI 用在兩個地方,我覺得都很有啟發。

    無人化:機器狗、無人機、無人天車

    高爐的高點,溫度約 1,200°C,爐板一旦出問題可能導致熱點甚至爆炸——這種地方不適合人進去。他們的解法是把巡檢路徑寫成程式,讓機器狗去走、去看,背後的資料庫做預知分析。有人問「機器狗為什麼要練爬樓梯?」講者的回答很妙:人也不是天生會走路,是學會之後才會;機器人往前走要耗大量運算在做平衡,如果目的是去收集數據,那就讓它走遍各種路去練。同樣的思路也用在無人天車上——AI 控制吊掛鋼捲時,左右自動防擺,比人操作還穩。

    設備健康指標,就像人的健康指標

    這是我整天聽到最好的一個比喻。買設備時,廠商會告訴你「多久保養一次」,那是固定規範。但設備用久了會慢慢變化,固定規範不一定適用。講者拿人來類比:

    小孩子量身高、體重、頭圍最重要;到了中老年,身高體重沒太大意義,要量三高。設備也一樣——剛買的設備和用了十年的設備,同一個指標代表的意義完全不同,不能用同一套標準看。

    所以他們用 AI(深度學習模型 + 領域專家的特徵工程)把老師傅的經驗變成「智慧健康指標」,在設備出問題前就抓到初期徵兆。核心一句話:用「數據驅動」取代「直覺或規範」。

    二、銀行:把客戶經理變成 AI Agent

    一家大型銀行的企業金融部門問了自己一個尖銳的問題:我們的服務方式會不會被取代?他們的答案是「會」,所以乾脆自己先動手。

    最精彩的是一個「搶先機」的案例。某個企業客戶可能接到一筆訂單——這種公開資訊大家都看得到。但這家銀行的客戶經理,會在早上收到系統提示:「你可能要去拜訪某客戶。」怎麼知道的?因為系統掌握到這個客戶「下游的下游」可能有訂單,照這個模式推斷它有機會接單,再比對它最近的新聞表現。因為它會接單,就可能有備料與資金需求——於是客戶經理提前打了那通電話。結果是:客戶的財務長第一個接到的,是這家銀行打來的。

    更進一步,他們的想像是把客戶經理本身變成一個常駐客戶端的 AI Agent。一個真人沒辦法一天到晚守在客戶那裡待命,但 AI 可以。背後的技術,就是用前一篇談過的協定,把銀行服務嵌進客戶的 ERP 流程裡。這呼應了一個全場反覆出現的觀點:AI 不是要取代你,而是讓你把「人做不到的覆蓋率」補起來。

    三、電子代工:工廠不是實驗場

    一家全球佈廠的電子代工大廠,分享了他們十多年的 AI 進化。最打動我的,是一句很樸素的話:「工廠是每天在生產運行的地方,並不是給你做實驗的地方。」

    所以他們的核心策略是數位孿生:所有的生產設計、AI Agent 的驗證、流程的優化,都先在虛擬世界裡跑完,再上實體。一個模擬若用實體去做實驗可能要兩個月,在數位孿生裡快很多;而且實體還沒蓋,就能先把問題找出來、把良率拉上去。他們也坦白分享了 Agent 的導入節奏:今年初做了第一個 Agent,到年中大概第八個——剛開始導入比較辛苦,但越往後越快,因為 know-how 會累積。這跟前面銀行、鋼鐵的經驗一致:先做最關鍵的那一個,驗證了再放心擴展。

    結語:三個產業,同一個底層邏輯

    把這三個案例疊在一起,會發現它們其實在講同一件事:

    • 方向一致:都是把人從危險(高爐)、重複(守客戶)、來不及反應(品質與訂單)的地方解放出來。
    • 節奏一致:都先做一個最關鍵的 MVP,驗證了再擴展,沒有人一次性全導入。
    • 對人的定位一致:AI 接手「人做不到或不該做」的部分,人回到判斷與經驗的價值上。

    下一篇是系列最後一篇,談一個比技術更難、卻決定成敗的東西——AI 治理與 ROI:當 AI 夠重要,它的價值與風險就是一體兩面,你該怎麼算、怎麼管?

    常見問題 FAQ

    AI 怎麼用在設備維護上?

    用深度學習模型加上領域專家的特徵工程,把老師傅的經驗變成「智慧健康指標」,在設備出問題前抓到初期徵兆,做動態的預知維護,而不是照固定的保養規範。

    為什麼說「工廠不是實驗場」?

    因為工廠每天都在生產,不能拿來反覆試錯。改用數位孿生,把生產設計、AI 驗證、流程優化先在虛擬世界跑完再上實體,可大幅降低風險與時間。

    AI 會取代客戶經理或第一線人員嗎?

    案例顯示的方向是「補覆蓋率」而非取代:AI Agent 常駐客戶端、處理人力做不到的即時與規模,人則回到判斷、經驗與關係經營的價值上。

    導入 AI Agent 一開始就會很有效率嗎?

    不會。實務經驗是「先苦後快」——第一個最辛苦,隨著 know-how 累積,後面越做越快、效益越來越可觀。建議先做一個最關鍵的 MVP。

    📚 本系列:SAP NOW AI Tour 的 4 堂課

  • AI Agent 怎麼接進企業系統?看懂 MCP 與 A2A 兩個關鍵協定

    重點摘要

    • AI 應用正從「單一模型/聊天機器人」走向 Agentic AI(自主規劃、推理、跨系統行動)
    • Agentic AI 有兩個關鍵挑戰:Agent 怎麼連接工具?怎麼跟其他 Agent 合作?由此誕生兩個開放協定。
    • MCP(Model Context Protocol)= 垂直整合:讓單一 Agent 往下接工具與資料源。
    • A2A(Agent-to-Agent)= 水平協作:讓多個 Agent 之間互相委派任務。
    • 資料層上,趨勢是「串接而非搬遷」——地端資料可以留在原地,用連接器接上雲端分析。

    這是 SAP NOW AI Tour 系列的第二篇。第一篇談方法論(為什麼轉型會失敗),這篇換上工程師的眼睛,談技術骨架:當大家都在喊 Agentic AI,到底 AI Agent 是怎麼接進一家企業既有的系統?這一整天聽下來,金融、製造、雲端三方不約而同指向同兩個字母組合——MCP 與 A2A

    一、先看演進:從 Traditional AI 到 Agentic AI

    AI 在企業裡的應用方式,大致經過三個階段:

    1. Traditional AI:單一模型、單一任務(聊天機器人、文件摘要)。
    2. AI chatBot:AI 嵌入應用,輔助人員完成工作。
    3. Agentic AI:AI 自主規劃、推理、行動,並跨系統協作

    到了第三階段,問題就來了:一個 Agent 要做事,得能呼叫工具、讀寫資料;而真實的企業流程往往要好幾個 Agent 接力。於是兩個關鍵挑戰浮現——Agent 如何連接工具?如何與其他 Agent 合作?

    二、兩個開放協定:MCP 與 A2A

    這兩個挑戰,分別由兩個開放協定來解。它們不是競爭關係,而是互補——一個管「垂直」,一個管「水平」。

    維度 MCP(Model Context Protocol) A2A(Agent-to-Agent)
    連接對象 Agent ↔ 工具/資料源 Agent ↔ Agent(雙向協作)
    整合方向 垂直整合(取用工具) 水平協作(分工委派)
    典型用法 Agent 透過 MCP 存取 ERP 資料庫 / API 一個 Agent 透過 A2A 把任務委派給另一個 Agent

    一句話記憶:MCP 讓 Agent 往下接系統,A2A 讓 Agent 之間互相傳接棒。

    三、實際跨系統流程長怎樣

    會場舉了一個很好懂的端到端流程,看完就知道兩個協定是交替使用的:

    • 採購 AgentMCP 查庫存
    • 物流 AgentA2A 被委派去安排出貨
    • 財務 AgentMCP 更新帳務
    • → 完成一條自動化流程

    每個 Agent 用 MCP 往下接自己負責的系統,再用 A2A 把棒子交給下一個 Agent。這就是 Agentic AI「跨系統協作」的具體長相。

    四、資料層:串接,而不是搬遷

    講到 Agent 接資料,現場有個觀眾問了一個很實際的問題:「用 AI 是不是一定要把所有資料都搬上雲?」畢竟資安、上雲成本、地端的第三方系統,都是真實顧慮。

    答案是「不用」。現在的資料雲走的是「串接」而不是「搬遷」——透過連接器(Data Provisioning Agent 這類機制)直接接上地端資料,資料可以留在原地,上層再用 AI 做分析與呈現。對於有資安顧慮、又想用 AI 的企業,這條路很關鍵。一個實際的搭法是:既有系統(ERP/設備系統)→ 連接器 → 雲端的資料模型層(如 Datasphere)+ 報表層(如 SAP Analytics Cloud),最前面再接一層自然語言(Joule),就能「用一句話問、自動跑出分析圖表」。

    五、官方參考架構:把內外 Agent 安全地串起來

    最後一張技術總圖,把上面這些拼成了一個完整的互通架構(這是雲端與 ERP 兩大廠的聯合參考架構):

    • 企業內部的 Agent(Orchestrator + 各種 Custom/Low-Code/Pro-Code Agent)透過 A2A 跟外部雲端的 Agent 協作;
    • 透過 MCP 接到 ERP、資料雲等既有系統;
    • 身份與信任由統一的 Identity Service 治理(authenticate / trust)。

    值得一提的是,雲端廠在大會上一口氣發布了多項與 ERP 深化整合的東西,包括官方的 MCP Server(讓 AI Agent 透過整合套件安全存取 ERP 商業數據)、支援 ABAP 開發者的 AI IDE,以及基於雲端模型平台的 Agentic AI 方案。換句話說,MCP 已經不是概念,而是有官方實作可以開始試的東西。

    結語:協定先行,骨架才穩

    如果你也在規劃企業內的 AI Agent,這篇的重點只有一個:先把「Agent 怎麼接系統、怎麼互相協作」這層協定想清楚,再談上面要跑什麼應用。MCP 負責垂直、A2A 負責水平,資料層走串接不搬遷,身份治理統一——這就是下一代企業 AI 自動化的骨架。下一篇換個角度,看真實的傳產與金融公司,是怎麼把這套東西落到地上的。

    常見問題 FAQ

    MCP 和 A2A 有什麼差別?

    MCP 是讓單一 Agent 垂直連接工具與資料源(例如存取 ERP 資料庫);A2A 是讓多個 Agent 之間水平協作、互相委派任務。實際流程裡兩者交替使用。

    用 AI Agent 一定要把資料搬上雲嗎?

    不一定。可以用連接器「串接」地端資料,讓資料留在原地,再由雲端的分析層處理,兼顧資安與成本。

    什麼是 Agentic AI?

    相對於單一任務的傳統 AI 與輔助型的 chatBot,Agentic AI 能自主規劃、推理、行動,並跨多個系統協作完成任務。

    MCP 現在可以實際使用了嗎?

    可以。雲端與 ERP 大廠已推出官方的 MCP Server,讓 AI Agent 透過整合套件安全存取 ERP 商業數據,並有支援開發者的相關工具。

    📚 本系列:SAP NOW AI Tour 的 4 堂課

  • 數位轉型不是換系統:企業 AI 落地為什麼失敗,又該怎麼做對

    重點摘要

    • 麥肯錫研究指出:數位轉型失敗的主因 80% 在「組織與人」,而不是技術
    • AI 世代的轉型有四大關鍵核心:人員、流程、應用、數據,四者要同步處理,不能只做一個。
    • 轉型有不能跳過的順序:合理化 → 標準化 → 自動化。跳過前段直接自動化,等於把錯的流程加速。
    • 很多企業的「戰情室/儀表板」做完沒人用,是因為它只看落後指標;當員工覺得「自己下載資料用 Excel 更快」,系統就開始死亡。
    • 一句話:數位轉型只是手段,真正的目的是創造價值。

    我參加了一整天的企業 AI 大會,聽了金融、半導體、電子製造、鋼鐵、顧問與雲端平台共六、七家公司分享他們怎麼把 AI 落地。把這些不同產業的經驗放在一起聽,最有趣的發現是:他們講的「成功關鍵」高度一致,而且那個關鍵幾乎都不是技術。這篇是系列第一篇,先談方法論——企業 AI 為什麼會失敗,又該怎麼做對。

    一、先承認:80% 的轉型卡在「人與流程」,不是技術

    會場引用了一份麥肯錫研究:數位轉型失敗的主因在於「組織與人」,而非技術本身。成敗大約 80% 取決於「組織與人」的改變與「方法」的正確性,而「資料」與「內容」是實現價值的核心基石。

    把它拆開來看,組織面的挑戰是:缺乏清晰的轉型願景、組織結構僵化、跨部門協作困難、決策流程緩慢、資源分散。人員面的挑戰是:員工抗拒改變、數位技能不足、人才流失、缺乏主人翁意識、溝通不足導致信任缺失。這些沒有一條是「買哪個 AI 工具」能解的。

    現場有位經營者講得更直接:很多人怕因為跟不上而被淘汰,所以拒絕改變;而真正成功的企業,是想辦法讓「最懂業務的資深人員」被 AI 賦能,而不是被取代。AI 降低了工具門檻,卻抬高了「懂業務、會問對問題」的價值。

    二、四大關鍵核心:人員、流程、應用、數據

    在 AI 世代,數位轉型規劃有四個關鍵核心,每一個都帶著自己的痛點。整理成一張表最清楚:

    核心 三大痛點
    人員 技能隔閡、變革阻力、組織知識流失
    流程 過時流程、跨系統依賴、合規問題
    應用 過度客製、技術債、整合挑戰
    數據 數據孤島、數據品質問題、數據安全與合規

    關鍵在於這四個要同步處理。只把「數據」清乾淨、卻不動「流程」和「人員」,AI 一樣跑不起來;反過來也一樣。多家公司不約而同提到的共通痛點——數據孤島、技術債、缺乏單一真實來源——其實都落在這四個象限裡。

    三、不能跳步:合理化 → 標準化 → 自動化

    一位資深製造業高管分享了一個很樸素但很重要的原則:轉型沒有捷徑,過程必須照順序走——

    1. 先把做事情的順序合理化
    2. 再想辦法標準化
    3. 標準化之後,才能自動化(接著才是 AI)

    為什麼順序這麼重要?因為如果你跳過合理化與標準化、直接自動化,你的標準很可能是錯的——這等於把一個錯的流程加速,是一場無效的轉型。這也呼應了現場另一個觀察:很多人誤以為「拿一個工具來、不需要前面那些步驟,就能把事情做好」,但這從來不會成立。

    對應到角色,轉型會依序需要三種人:BA(業務分析)把現況忠實記錄成流程、SA(系統分析)定義這些需求該用什麼系統滿足、SD(系統設計/開發)實作。順序顛倒,後面全部白做。

    四、為什麼「戰情室」做了沒人用

    一家深耕 SAP 二十多年的整合商,分享了一個我覺得每個做過 BI 專案的人都會心一笑的觀察:傳統的策略支援系統(戰情室、儀表板)會沿著一條曲線慢慢失效。

    階段 作用強度 狀態
    過去 100% 決策利器,報表即時、深受信任
    幾年前 75% 仍具價值,但開始延遲、需人解讀
    現在 40% 內容固定、無法靈活、使用率下降
    不久後 15% 「自己做更快」,轉向替代方案
    未來 5% 報表停更、系統荒廢

    真正的死亡轉折點,發生在「現在 → 不久後」之間:當員工覺得「我自己下載資料、用 Excel 加工更快」,這個系統就開始死亡。幾年後公司又起一個新專案、重做一個新的戰情室,如此不斷循環。

    根因是什麼?傳統戰情室只給你落後指標——告訴你「過去發生了什麼」。但經營者真正面對的世界,不是內部報表,而是外部的快速變化。一句話點破:現在企業經營,最大的風險不在「做錯決策」,而是「太晚知道這世界變了」。所以下一代的決策平台,要從「內部、落後、檢討過去」轉向「外部、領先、預判未來」。

    五、把方法論變成步驟:從經營分析到決策機制

    那實際要怎麼建?現場分享的一套五步驟方法論,把上面這些抽象原則落成了可執行的流程:

    1. 經營分析:先對準企業目標——「企業到底需要什麼」,盤點現有流程與痛點。
    2. 資訊探索:從資料裡看清楚「現在發生了什麼問題、哪些資料必須收集進來」。
    3. 要因分析:用模型與統計方法,找出最重要的影響因子,把它變成你的領先指標
    4. 建立決策引擎:做出預測模型與預警儀表板。
    5. 形成決策機制:導入流程、教育訓練、持續優化,確保它真的被用起來。

    注意第三步「要因分析」才是重點——找出領先指標,而不是把舊的三十幾個 KPI 再畫一次。如果你做數位轉型時,還是只盯著以前那幾張報表看,那不會從根本改變公司的體質。

    結語:轉型是手段,創造價值才是目的

    麥肯錫、BCG、Gartner 對「數位轉型」的定義各不相同,但他們都強調同一件事:要創造價值。多數公司過於聚焦在前半段的「數位化」(導入工具、優化局部流程、提升效率),結果改善了效率、價值卻有限,難以帶動企業成長。真正的數位轉型,是重新設計商業模式與價值交付。

    所以如果只能記一句話,我會記這句:數位轉型只是手段,真正的目的在於創造價值。工具會越來越好用,但真正的差距,落在你有沒有把流程、資料與人,重新組織成一個 AI 跑得動的樣子。

    這是 SAP NOW AI Tour 系列的第一篇(方法論)。接下來幾篇會談技術骨架(MCP 與 A2A 怎麼讓 AI 接進企業系統)、真實落地案例(傳產與金融怎麼做),以及 AI 治理與 ROI。

    常見問題 FAQ

    數位轉型失敗的最主要原因是什麼?

    根據麥肯錫研究,主因是「組織與人」而非技術,成敗約 80% 取決於組織與人的改變、以及方法的正確性,資料與內容則是實現價值的基石。

    為什麼不能直接導入自動化或 AI?

    因為順序是「合理化 → 標準化 → 自動化」。跳過前面直接自動化,等於把一個還沒理順的錯誤流程加速,是無效的轉型。

    為什麼很多 BI 戰情室做完就沒人用?

    因為它只提供「落後指標」、內容固定難以靈活。當員工覺得自己下載資料用 Excel 更快,使用率就會一路下滑到系統荒廢。解法是轉向外部感知與領先指標。

    數位化和數位轉型有什麼不同?

    數位化偏向導入工具、優化局部流程、提升效率;數位轉型則是重新設計商業模式與價值交付。前者改善效率但價值有限,後者才能驅動企業持續成長。

    📚 本系列:SAP NOW AI Tour 的 4 堂課

  • 從自動化到自主化:SAP NOW AI Tour 座談五觀察

    重點摘要

    • 企業 AI 的競爭,正從「誰的工具快」轉向「誰能把 AI 行為有序地放進流程」——人機協作分成三階段:人在迴圈中、人在迴圈上、人當協調者。
    • 餐飲業者提出務實的加薪邏輯:AI 提升 25% 效能,就把待遇提升 25%(5 人月薪 4 萬 → 4 人月薪 5 萬)。
    • 製造業者的答案是「戰略集中化 + 應用邊緣化」:總部集中算力與資料治理,海外廠用「參數包」無痛複製。
    • 顧問業者強調:真正難被複製的不是單一技術,而是跨產業整合能力;做的不是科技本身,而是改善流程。
    • 平台商的結論:資料不必全部搬上雲(用串接而非搬遷),而成功的關鍵其實是一連串「選擇」。

    這是一場以「企業 AI 如何落地」為題的綜合座談,與談者橫跨餐飲、光電製造、科技集團、顧問與平台商。把五個視角放在一起聽,會發現他們其實在講同一件事的不同切面:AI 正從「自動化」走向「自主化」。以下是我在現場記下的五個觀察。

    一、AI 不是要取代你,而是放大你的價值

    座談一開始就定調:多數與談者都同意,AI 帶來的不是「取代」,而是經營模式的變革

    餐飲集團董事長講得最直白:「餐飲業的本質不會改變,但 AI 會帶來經營模式的變革。」他認為這個產業「太幸運」——人與人之間有溫度的交流,本來就不會被 AI 取代,反而能被 AI 放大價值。他舉點餐為例:與其讓客人自己滑手機自助點餐,理想場景是 AI 一眼認出常客、知道他的口味偏好,讓不同的服務夥伴也能交付一樣的感動

    二、餐飲業的加薪邏輯:五成四變四成五

    最讓我記住的一段,是餐飲董事長對「AI 與待遇」的算式。他向董事會、股東、同業溝通的概念叫「五成四變四成五」:

    • 原本 5 個人、平均月薪 4 萬
    • 透過 AI 與科技導入提升效能 → 變成 4 個人、每人平均月薪 5 萬
    • 待遇提升 25%

    他的主張是:如果 AI 能提升夥伴 25% 的效能,就應該把這 25% 回饋到待遇上。對一個長期缺工的產業來說,這不只是成本算式,更是留才與招募的吸引力。而要支撐這件事,背後需要可信賴、精準的底層資訊系統——當門市數量、來客人次累積成海量資料,沒有系統就無法把資料變成更好的經營決策。

    三、製造業的跨國解法:集中化加邊緣化

    光電製造業者面對的是另一種題目:跨國擴張時,如何把品質判斷複製到海外廠?他分享了一個很具體的痛點:光學元件最後常要靠老師傅「目視判斷品味」,這件事很「玄」,而當你要在海外設新廠時,沒有同一批老師傅怎麼辦?

    他們的做法是把老師傅的判斷標準化——用 AI 影像模型即時記錄作業員檢視產品時的角度、停留時間,一旦方式不對就現場提醒。累積資料後做預測與比對,這套機制就能搬到海外廠,降低跨國擴張的品質風險。延伸到組織層級,他畫出一張「未來跨國 AI 頂層設計架構」:

    層級 做法
    戰略集中化 總部建置核心算力,集中治理乾淨的核心資料,對核心智慧財產分級安全管控,守護「數位主權」
    應用邊緣化 海外各廠作為應用端,快速無痛導入由總部打包的微服務「參數包」,把前線操作門檻降到最低

    他用了一句很到位的話收尾:「數據決定智商,治理引領戰略;人才點亮大腦,批判成就卓越。」並提醒:AI 賦能很好,但不能讓所有人各做各的,否則既浪費又有風險——就像飛機機長能在自動駕駛時休息,靠的是「對的系統」,而不是一直手動微調。

    四、整合能力才是護城河

    科技製造集團的代表談「大艦隊」如何協同。他的心法是:AI 不是拿著鎚子到處找釘子——不要看到哪裡就把工具往哪裡敲,而是先找出整個集團最重要的事,再用 AI。

    他們的競爭力主張是:「真正難被複製的,不是單一技術,而是跨產業整合能力。」關鍵在於整合算力、網路、資料、場域與產業 know-how,讓 AI 從「分析工具」進一步成為「營運執行助力」。而支撐這種跨公司、跨事業群整合的,是一套「單一數據真相」。

    顧問業者則把話題拉回本質:「我們要做的不是科技本身,而是怎麼去改善營運、改善業務、改善流程。」他強調關鍵始終在你的資料——先把碎片化的資料匯進系統、治理好,才談得上往上疊應用。對於代理型 AI(Agentic AI)的紅利,他的建議是:資源有限,必須有排序與藍圖,而且「未來是系統整合的世界」,懂業務結構的人,才找得出最適應自己的 AI 應用。

    五、平台商的兩個答案:資料留地端、成功靠選擇

    平台商在觀眾 Q&A 給了兩個很實用的答案。

    問題一:用 AI 一定要把所有資料都搬上雲嗎?

    答案是「不用」。透過資料雲的「串接」機制(而不是把資料整個搬上去),地端資料可以留在原地,上層再用 AI 助理做分析。對於有資安與成本考量、又想用 AI 的企業,這是關鍵的一條路。

    問題二:員工要具備什麼技能、上什麼課才會用?

    最大的差別是:過去要寫程式、做報表再串接,現在這些提示(prompt)已經內建在產品裡——會打字、會用講的,就能用,不太需要特別上課。換句話說,提示工程被產品吸收了,人的價值回到「會問對問題」加上業務判斷。

    而對於「企業如何像自動駕駛一般運作」,平台商的結論很清楚:成功的關鍵在一連串的「選擇」——從哪裡開始、聚什麼團隊、選什麼平台、選哪些流程與資料、找哪些顧問參與。平台本身不是萬靈丹,選對標準流程,AI 才發揮得出來。

    整場的理論收束:人機協作的三階段

    如果要用一張圖總結這場座談,那會是平台商提出的「人類決策 + AI 執行」新運作邏輯。知識圖譜像一個「導遊」,告訴 AI 流程在哪、要取哪個系統、資料在哪;而人與 AI 的協作,會經歷三個階段:

    階段 人的角色
    人在迴圈中(Human-in-the-Loop) 人觸發並監控代理的每個動作
    人在迴圈上(Human-on-the-Loop) 系統觸發代理,人只處理例外
    人當協調者(Human-as-the-Orchestrator) 人退居監督者,跨多個 AI 助理協調指揮

    人從「親自做」走向「監控」、再走向「處理例外」與「協調指揮」——這正是「從自動化到自主化」的具體階梯。而與談者最後那句話,也許是整場最好的註腳:

    人機協作的時代已經來臨——機器不是要取代你,而是你要教會它,如何「行為有序」地在企業內部運行。

    結語:差距落在組織,而不是工具

    回看這五個視角,會發現它們其實在講同一件事的不同切面:方向一致——都指向「AI 從輔助走向自主」;底線一致——資料治理與「讓 AI 行為有序、不亂竄」是所有人的共同前提;對人的重新定位——AI 降低了工具門檻,卻抬高了「懂業務、會問對問題」的價值。

    工具會越來越好用,但真正的差距,落在你有沒有把流程、資料與人,重新組織成一個 AI 跑得動的樣子。

    常見問題 FAQ

    企業導入 AI,一定要把資料全部上雲嗎?

    不一定。可以用資料雲的「串接」機制讓地端資料留在原地,再由上層 AI 做分析,兼顧資安與成本。

    員工要會寫程式才能用企業 AI 嗎?

    多數情況不用。提示(prompt)已內建在產品裡,會用自然語言(打字或講話)就能操作;價值回到「會問對問題」與業務判斷。

    「從自動化到自主化」具體是什麼意思?

    指人機協作的演進:人在迴圈中(觸發監控)→ 人在迴圈上(只處理例外)→ 人當協調者(指揮多個 AI 助理)。

    跨國企業怎麼把 AI 能力複製到海外廠?

    一種做法是「戰略集中化 + 應用邊緣化」:總部集中算力與資料治理,海外廠用標準化的「參數包」快速導入。

  • 讓 AI 不再失憶:用 Claude Code Hooks 打造大腦反饋迴路

    重點摘要

    • LLM 最大的弱點是會忘:session 結束或 context 被壓縮後,這次學到的教訓就蒸發了。
    • 解法是把「教訓」外接到持久的 腦子系統(brain/*.md),並用 hooks 在關鍵時刻強迫寫入。
    • 5 支 hook 腳本在三個點攔截:fix commit 發生時、context 壓縮前、session 結束時
    • 另一支 hook 負責身份錨定,防止 /compact 後 AI 角色崩潰。

    大型語言模型最致命的弱點,不是不夠聰明,而是會失憶。每一次對話結束,或是上下文(context)被壓縮(compaction)以節省 token,這一輪辛苦學到的教訓——某個 bug 的根因、某個 API 的雷點——就跟著蒸發,下一次又從零開始,甚至重踩同一個坑。

    我在 Claude Code 上的解法,是一套「harness × 腦子系統」的反饋迴路:用幾支 Bash hook 腳本當感測器,在 AI 即將遺忘的關鍵點上攔截,強迫它把這次的教訓寫進持久的 brain 檔。這篇拆解它為什麼需要、每支腳本做了什麼、以及它怎麼跟腦子系統搭配。

    為什麼需要這套東西?LLM 的三個結構性缺陷

    這套設計不是為了炫技,而是針對 LLM 的三個無法靠「更大模型」解決的缺陷:

    • 沒有長期記憶:模型權重是凍結的,單次對話的學習不會留存。→ 需要一個外部、持久的記憶體(brain 檔)。
    • 記憶會被壓縮清除:對話一長,context 就會被 compaction 截斷,早期內容直接消失。→ 需要在壓縮之前把該留的留下來。
    • 會角色漂移(role drift):尤其在壓縮後,AI 可能忘記自己是誰、該做什麼。→ 需要定期重新錨定身份。

    關鍵洞察是:光靠「提醒 AI 要記得寫筆記」沒用,因為它會說「好的我等下寫」然後就忘了。必須把它做成系統層級的強制關卡(gate)——由 harness 在固定時機自動觸發,而不是仰賴 AI 的自律。

    一張圖看懂:harness 感測器迴路

    🤖 Claude Code Session(工作中)
    做事 → git commit -m "fix: ..."
    ⚡ HARNESS 感測器層(hooks 自動觸發)
    ① 發生時 · PostToolUse
    fix-detect.sh
    偵測到 fix: commit → 注入:
    「現在去更新 brain,不准做下一件事」
    ② 遺忘前 · PreCompact
    precompact.sh
    壓縮前掃最近 5 個 commit →
    「記憶要被清除了,brain 寫了嗎?」
    ③ 離開時 · Stop
    stop-check.sh
    比對 fix commit vs brain 修改時間 →
    有 fix 卻 0 更新 = 警告
    ↓ 強制寫入教訓
    🧠 腦子系統 · brain/*.md(37 個領域檔,持久)
    – [source: 專案名] 哪裡踩坑、怎麼修的
    ↺ 下次 SessionStart 載入 MEMORY.md 索引 → 知識回到 AI,不再從零開始

    三個攔截點:守住 fix commit 的整個生命週期

    這套機制最聰明的地方,是它不靠單一檢查點,而是沿著「一個教訓從產生到消失」的時間軸,設了三道關卡。每一道都是一支獨立的 Bash 腳本,讀 Claude Code 透過 stdin 餵進來的 JSON,再輸出一段 additionalContext 回去改變 AI 的下一步行為。

    時機(Hook) 腳本 做什麼
    PostToolUse(每次 Bash 後)fix-detect.sh解析 git commit 訊息,若是 fix: 開頭,注入硬性要求:讀對應 brain 檔、追加教訓、更新前不准進行下一個任務
    PreCompact(壓縮前)precompact.sh掃描最近 5 個 commit 找 fix:,在 context 被清除前做最後提醒:「該寫的寫了嗎?現在不寫就來不及了」
    Stop(session 結束)stop-check.sh統計今天的 fix: commit 數,對比 brain 檔有沒有被更新過;有修 bug 卻沒留筆記,就丟出「知識可能流失」的警告

    三個點分別對應人(或 AI)會偷懶的三個藉口:「等下再寫」(被①擋下)、「我忘了還沒寫」(被②救回)、「這次算了吧」(被③抓出來)

    一個巧妙的無狀態設計:時間戳 + mtime 比對

    怎麼知道「這個 session 到底有沒有動過 brain」?這裡用了一個很輕量、不需要資料庫的技巧,由兩支腳本配合:

    • SessionStart 時,session-start.sh 只做一件事:touch /tmp/.claude-session-start,在檔案系統上插一根時間戳基準線
    • Stop 時,stop-check.shfind BRAIN_DIR -newer /tmp/.claude-session-start 數出「比這根基準線更新的 brain 檔」有幾個。

    0 個,代表這次 session 完全沒碰 brain。用檔案的 mtime 當狀態,既不用記資料庫、也跨工具通用——這是 Unix 哲學的漂亮應用。

    另一種 hook 用途:身份錨定,防止角色崩潰

    hook 不只用來餵記憶,也能用來穩住 AI 的身份。我跑過一個多 agent 的評測 harness,其中一個 session 擔任「Driver(駕駛)」——負責呼叫 orchestrator、讀結果、寫總結;另一批 agent 才是「被測團隊」。問題是:一次 /compact 之後,Driver 角色崩潰了,退化成被測團隊,開始自己回答原本該交給被測 agent 的技術題。

    修法是一支 SessionStart hook:當工作目錄落在該專案內,就注入一段「身份錨定」context,白紙黑字提醒——你是 Driver、不是被測團隊、遇到這些題目只能呼叫 orchestrator 而不是自己答。每次啟動(含 compact 後的重啟)都重貼一次,把漂移的角色拉回來。這是「context injection 對抗 LLM drift」的典型手法。

    它跟腦子系統的搭配:三層分工

    把整套東西攤開,其實是三層各司其職,像生物的神經系統:

    對應 角色
    Hooks神經反射自動、不經思考,在固定時機觸發,負責「執行紀律」
    Brain 檔長期記憶持久儲存踩過的坑與教訓,跨 session、跨專案可讀
    CLAUDE.md價值觀 / 規則每次 session 載入,定義「該怎麼做事」的原則

    Hooks 的唯一使命,就是確保「經驗 → 長期記憶」這條路徑不會因為 AI 的健忘或偷懶而斷掉。Brain 負責存、CLAUDE.md 負責規範,而 Hooks 負責在對的時間點逼著迴路閉合。三者缺一,知識就會慢慢漏光。

    設計哲學:為什麼是「強制關卡」而不是「溫柔提醒」?

    因為知識的衰減是無聲的。沒人會在當下感覺到「我剛剛流失了一條教訓」,只會在三個月後重踩同一個坑時才後悔。溫柔的提醒對抗不了這種無聲衰減——它需要的是一個會在你想跳過時擋在路中間的系統。借別人(與過去的自己)之手學坑,而不是真的每個坑都親自踩一次,這才是把 AI 從「強力的金魚」變成「會累積的夥伴」的關鍵。

    (這套 domain brain 的概念我有開源一份骨架,有興趣可以參考延伸。)

  • Claude Code 換腦記:雲端便宜但要未雨綢繆,5 萬內路徑

    重點摘要

    • Claude Code 是「身體」(agent loop、tool use、MCP),模型是「腦子」,claude-code-router(ccswitch)是「神經接口」,把腦子接上身體。
    • 雲端 LLM 現在真的便宜:DeepSeek V3.2 每百萬 token USD 0.28/0.42,SWE-bench Verified 72-74%,夠用 80% 場景。不需要為了省錢買硬體
    • 但 Anthropic 改價、限額、ToS 變動隨時可能 — 未雨綢繆有必要,可是不要花過頭。5 萬內買「合理保險」夠了。
    • 10 萬內 3 條路徑:0 元全雲端(屁股電腦 + cheap API)、3 萬二手 GPU5 萬 RTX 5070 Ti。20+ 萬路徑(RTX 5090 + Mac Studio Ultra)完全不必要。
    • 腦子可以換,工具不能綁架你 — 也不要綁架你家庭預算。

    為什麼要換腦:Claude Code 框架真好用,但要有「萬一」準備

    Claude Code 提供的是身體 + 技能:agent loop、tool use、Bash 執行、MCP server 接入、檔案編輯、git 操作、subagent 派遣。這套框架成熟、穩定、文件齊。問題只有一個:底層腦子綁死在 Anthropic API

    講真的,2026 年雲端 LLM 費用真的便宜。Claude Max USD 100/月、DeepSeek V3.2 一百萬 token 不到 USD 0.5,單看價格就是時代最佳。多數人現階段「為了省錢花 20 萬買 RTX 5090」算式根本算不過來:5 萬月 API 成本 × 80 個月 = 6 年半才回本,而 6 年半後 RTX 7090 都出來了。

    「便宜」不等於「無風險」。Anthropic 可以隨時改價、限額、deprecate model、改 ToS、加區域限制、政策性下架。「便宜」是現在的事實,「能用」是對方願意的事實。未雨綢繆 = 確保「對方變心」的那天不會讓我停工

    這篇講的是合理保險:用 5 萬內的預算建立 fallback,不是為了省錢、不是為了完全自主、不是為了跑分追 frontier。只是讓你睡得安穩

    神經接口:claude-code-router 是什麼,怎麼把腦子接上身體

    claude-code-router(社群稱 ccswitch)是一個 proxy gateway,綁在 localhost:3456。Claude Code 原本打到 Anthropic API 的請求,router 攔截下來、轉換格式、路由到你指定的後端(OpenRouter / DeepSeek / Ollama / Gemini / Volcengine / SiliconFlow)。[GitHub: musistudio/claude-code-router]

    核心能力 3 個:

    • Transformer:把 Anthropic API request schema 轉換成 OpenAI / Ollama 格式,模型不用知道對方是誰
    • 動態切換:聊天中用 /model 指令切後端,不重啟
    • 路由策略:根據 task 類型自動派模型(重任務 → Claude Opus、background → DeepSeek、本地 → Qwen3-Coder)

    實際省錢幅度:[Cut Claude Code Bill 90%] 給的數字是 50-90%,看路由邏輯激進程度。但對保留 Claude Max 訂閱的人,router 真正的價值不是省錢,是削峰 — 把 subagent / background 派出去,Claude Max 的 weekly quota 留給真正需要 Opus 的任務,永不撞 lockout

    腦子替換的 3 種劑量

    劑量 A:全雲端腦(0 元入場)⭐ 我推這個

    router 把全部請求(或除主對話外的全部)丟到便宜 cloud API(DeepSeek V3.2 / Qwen3-Coder API)。本機完全不用裝模型,連 Ollama 都不裝。屁股電腦完美參與 — 它只負責跑 Claude Code 跟 router 本身,推理在雲端。

    適合:多數人。除非你有商業機密 / air-gapped 需求,沒理由花硬體錢。

    劑量 B:半雲半本地

    本地裝中型模型(Qwen3-Coder-30B-A3B 或 Gemma 3 12B)跑 background / 重複性任務,雲端跑重活。需要至少一張 12-16GB VRAM 的 GPU。

    適合:日常 coding 主力 + 想壓 API bill 到極致 + 願意花 3-5 萬硬體錢做「保險」。

    劑量 C:全本地腦(本文不推)

    本地跑 Kimi K2.6(1T MoE)或 DeepSeek V3.2(671B),完全不打雲端。但需要 Mac Studio M4 Ultra 256GB(NT$ 35 萬起)。對 99% 開發者而言不划算 — 不在本文 5 萬內預算範圍

    5 萬內的 3 條路徑(具體 part list)

    路徑 1:NT$ 0(全雲端 + 屁股電腦)

    項目 內容 成本
    機器 手邊任何能跑 Node 20 的機器(屁股電腦 / Mini PC / 舊筆電都行) NT$ 0
    claude-code-router npm install -g @musistudio/claude-code-router 免費
    DeepSeek API 帳號 platform.deepseek.com 註冊,買 USD 5 預付 NT$ 150 起
    月用量(中度開發者) DeepSeek V3.2 USD 0.28/M input, USD 0.42/M output NT$ 500-3,000

    這條路最被低估。多數人以為「本地模型」=「沒網路也能跑」,但實際 90% 場景你有網路,DeepSeek API 比自己跑本地 30B 還快還準。0 硬體成本 + 月 USD 5-15 = 跟 Claude 訂閱比省 70-90%,而且性能 80% 場景夠用。

    路徑 2:NT$ 1.5 萬(二手 GPU 試水溫)

    Part 規格 NT$
    二手 RTX 3060 12GB PTT / 露天 / 蝦皮二手 8,000-10,000
    PSU 升級到 650W 確保 GPU 供電 3,000
    機殼 / 風扇 散熱 1,500
    合計 ~15,000

    可跑:Qwen3-Coder-Next(3B active,記憶體吃 ~6GB)、Gemma 3 12B Q4、DeepSeek-R1-Distill-Qwen-14B Q4。40-60 tokens/sec,互動體驗已過 30 t/s 的「跟 cloud 無感」門檻。[Best GPU for Local LLMs 2026]

    適合:「想玩本地但不想砸大錢」。1.5 萬投資 = 大約 30 個月 DeepSeek API 用量,只在你**確實會用本地** + 想實驗的前提下划算。

    路徑 3:NT$ 5 萬(RTX 5070 Ti 16GB 改現有桌機)⭐ 認真做本地的甜蜜點

    Part 規格 NT$
    RTX 5070 Ti 16GB(新) 2026 最佳 CP 值 LLM 卡 28,000-32,000
    PSU 850W 5070 Ti 需 750W+ 5,000
    RAM 加到 64GB DDR4 / DDR5 雙通道 6,000
    NVMe 2TB 模型 / GGUF 存放 5,000
    合計 ~48,000

    可跑:Qwen3-Coder-30B-A3B(MoE,VRAM 吃 ~14GB),80-120 t/s 飛快。已能應付日常主力 coding,Claude API 退到 background 角色(複雜重構 / 跨檔分析才用)。

    適合:真的認真做本地化 + 有現有桌機可以裝顯卡 + 5 萬預算的人。這條路在 2026 中是「合理保險」最高 CP 值的點。

    為什麼不砸 20+ 萬?算給你看

    很多「玩 LLM」社群推的是 RTX 5090(NT$ 12-15 萬)或 Mac Studio M4 Ultra 256GB(NT$ 35 萬+)。對 99% 開發者而言,這算式根本算不過來

    配置 硬體投入 月省 (vs Claude USD 100) 回本年數 折舊風險
    路徑 1(全雲端) NT$ 0 USD 80-95 立刻省
    路徑 2(NT$ 1.5 萬) NT$ 15,000 USD 80-90 5-6 個月 低(二手 3060 殘值高)
    路徑 3(NT$ 5 萬) NT$ 48,000 USD 80-100 14-16 個月 中(2 年後 RTX 6070 上市)
    RTX 5090 機(NT$ 23 萬) NT$ 230,000 USD 100(只是不付訂閱) 76 個月 / 6.3 年
    Mac Studio M4 Ultra(NT$ 40 萬) NT$ 400,000 USD 100 133 個月 / 11 年 超高

    RTX 5090 機 6.3 年才回本,但 6 年後 RTX 8090 都出來了,你的 5090 殘值剩 30%。Mac Studio Ultra 11 年回本,11 年後 Apple Silicon 已經換了 4 代。

    「未雨綢繆」≠「為了不可能發生的事過度準備」。Anthropic 真的明天倒了,你也能在 5 萬路徑下半天內切到本地 — 那才是「合理保險」。砸 20 萬給「我擔心 Anthropic 變心」,是恐懼定價,不是工程。

    4 個本地腦子怎麼選(為什麼不一定要追 frontier)

    模型 Release 規模 SWE-bench 適合誰
    Qwen3-Coder-Next 2026/02 80B MoE / 3B active SOTA local 5 萬路徑首選 ⭐
    Kimi K2.6 2026/04/20 1T MoE SWE-Bench Pro 58.6% 贏 Opus 4.6 需 Mac Studio Ultra,不在本文範圍
    DeepSeek V3.2 2026/Q1 671B MoE SWE-bench Verified 72-74% 用 API 最划算(自己跑要 256GB RAM)
    Gemma 4 2026/04 多 size Apache 2.0 純開源、小機器友善(路徑 2 OK)

    來源:[Qwen3-Coder GitHub][Kimi K2.6 完整指南][DeepSeek 完整指南][Gemma releases]

    關鍵判斷:不要追 frontier。Kimi K2.6 跑分贏 Opus 4.6 沒錯,但要 256GB RAM 的 Mac Studio Ultra 才跑得動 = 40 萬硬體。對 5 萬內預算而言,Qwen3-Coder-30B-A3B(30B 規模、3B active MoE,16GB VRAM 就跑得起)已經滿足 80% 場景。剩下 20% 的硬任務丟回 Claude 用 router 解決

    ccswitch 路由策略:哪個腦子接什麼活

    1. Heavy(複雜重構、跨檔架構分析、安全 review)→ Claude Opus 4.7(API 或 Max 訂閱)
    2. Medium(一般 coding、debug、寫 test)→ DeepSeek V3.2(API)或 Qwen3-Coder-30B(本地,僅路徑 3)
    3. Light(格式整理、改 typo、寫 commit message、跑 lint)→ 本地 Gemma 3 12B(路徑 3)或最便宜 cloud(DeepSeek background tier)
    4. Background(自動產生 README、批次重命名、log 摘要)→ 本地小模型或 DeepSeek,跑多久都不心疼

    router config 範例:

    {
      "providers": {
        "claude": { "type": "anthropic", "apiKey": "$ANTHROPIC_KEY" },
        "deepseek": { "type": "openai", "baseUrl": "https://api.deepseek.com" },
        "qwen-local": { "type": "ollama", "baseUrl": "http://localhost:11434" }
      },
      "routes": [
        { "match": { "complexity": "heavy" }, "provider": "claude", "model": "claude-opus-4-7" },
        { "match": { "complexity": "medium" }, "provider": "deepseek", "model": "deepseek-chat" },
        { "match": { "complexity": "light" }, "provider": "qwen-local", "model": "qwen3-coder:30b" }
      ]
    }

    實際省下來的成本:[Claude Code Router 完整 2026 指南] 給的數字是月 API bill 從 USD 200 降到 USD 30-50。如果你保留 Claude Max 訂閱,把 subagent / background 路由出去,可以避免撞 weekly quota lockout,實質效益就是 「有效用量翻 2 倍」

    屁股電腦改造案例:32GB RAM + Ryzen 7 4700U 怎麼玩

    我自己手上的 Mini PC:AMD Ryzen 7 4700U(8 cores)、32GB RAM、無獨立 GPU、Linux Mint。前面查過所有資料,這台機器在 2026 的真實處境是:

    • ❌ 30B+ 模型完全跑不動(無 GPU + RAM 不夠)
    • ⚠️ 7B Q4 可跑但 ~3-5 t/s,慢到不能互動
    • ✅ Gemma 3 1B-4B 可跑但太弱,agent 任務跑不完

    結論:路徑 1(全雲端)最 fit 我的場景:

    1. 裝 claude-code-router(5 分鐘)
    2. 申請 DeepSeek API(10 分鐘,USD 5 預付)
    3. router config 把 medium / light 全部 route 到 DeepSeek V3.2
    4. Heavy 留給 Claude(Max 訂閱 或 API pay-per-token)
    5. Mini PC 繼續扛 Claude Code + router process,VRAM 無關緊要

    月成本估:USD 15-30(NT$ 500-1,000)。跟新組 RTX 5070 Ti 桌機(NT$ 5 萬)比,4-8 年才回本。所以路徑 1 是我目前最 fit 的路徑 — 不是因為我堅持本地化,是因為「本地化」對我來說是未來的選項,不是現在的剛需。

    真話:不要為了「本地化迷思」花錢,但也不要裸奔

    很多人買 RTX 5090 是為了「資料安全 / 不依賴雲端 / 終究有一天用得到」。實際統計:

    • 「資料安全」→ 99% 場景你的 code 在 GitHub public repo / company 內部 repo,傳給 DeepSeek 沒比較危險
    • 「不依賴雲端」→ 你每天還是上 Stack Overflow、Google 搜文檔,雲端依賴沒消失
    • 「終究會用」→ 通常買了之後跑兩週就放著積灰塵,1 年後折舊損失 30%+

    真正該本地化的場景:商業機密、air-gapped 環境、隱私法規(GDPR / HIPAA)。個人 / 中小團隊 dev workflow 不在這個 list 內

    但「不要過度準備」≠「不準備」。裝 router 是免費的,就算現在全部 route 給 Anthropic,哪天它變心,你只要改 config 就能切。5 分鐘的事,沒理由不做。這才是真正的「未雨綢繆」:架構靈活、邊際成本接近 0,而不是花 20 萬買「萬一」。

    結尾:腦子可以換,工具不能綁架你 — 也不要綁架你家庭預算

    claude-code-router 的真正價值不在「省錢」,是主權。Anthropic 改價、改 ToS、deprecate model,你不用跟著它的節奏走。換腦只是動作,背後是 ownership 的姿勢:你選你信任的模型、你決定路由邏輯、你不被任何單一廠商綁架

    具體建議按你場景:

    • 偶爾用 / 屁股電腦 / 預算 0:路徑 1(全雲端 + DeepSeek API + 5 分鐘 router setup)
    • 想玩本地但不確定會不會堅持:路徑 2(NT$ 1.5 萬二手 RTX 3060)
    • 真認真做本地化 + 有現有桌機:路徑 3(NT$ 5 萬 RTX 5070 Ti)
    • RTX 5090 / Mac Studio Ultra(20+ 萬):除非有商業機密 / air-gapped 需求,否則 6-11 年回本算式不划算,不推

    不為了「本地化迷思」花錢。留錢給你該花的地方 — 可能是更好的螢幕、更好的椅子、家人的長照、孩子的教育、未來的不確定性。Claude Code 是工具,換腦只是技術選擇,你才是 own 自己工作流的人 — 也是 own 自己家庭預算的人

  • 跟 AI 寫程式的 15 條軟工紀律 — 用一條真實對話從頭拆解

    重點摘要

    • 常聽到「跟 AI 寫程式需要軟工基礎」,但具體是哪些?本文用前一篇 Opus 4.8 Workflow 實測那條真實對話從頭拆,對照 15 條經典軟工紀律
    • 盤點結果:做到 9 條 / 部分做到 1 條 / 沒做 5 條。每條都有對話證據引用,沒做的給可執行 action。
    • 15 條按高 leverage 排序前 5 名:驗證紀律、正交分解、真實基準、focused review、文檔作為下個 session 輸入。這 5 條沒守,其他都白搭。
    • 結論:跟 AI 寫程式需要的不是「新的軟工」,而是把舊軟工套到 stateless / non-deterministic / 訓練截止 / 高並發 4 個 AI 特性上的對應方法。

    為什麼問這題

    「跟 AI 寫程式需要軟工基礎」這句話傳得很廣,但講細節的人少。多數人講出來的不是軟工,是 prompt engineering tricks(怎麼下 prompt、怎麼用 chain-of-thought)— 那叫 LLM 使用技巧,不叫軟工。

    真正的軟工基礎是從 1970 年代 SWEBOK 累積到今天的工程紀律:specification、verification、separation of concerns、observability 那些。問題是這些紀律最初是針對「人寫 code、人 review、人交接」設計的,套到「AI 寫 code、人 review」會不會失效?哪些反而更重要?

    本文不假設,用一條真實對話實證:5/29 我跟 Claude Opus 4.8 跑 Home123 backend 的 109 個 GraphQL resolver authz pattern audit 對照實驗,從頭到尾大約 8 輪對話、~50 分鐘。把這條對話拆解,對照 15 條經典軟工紀律,看真實場景下到底用到了哪些、漏了哪些。

    15 條紀律的分類框架

    從經典軟工教材(《Code Complete》、《Pragmatic Programmer》、SWEBOK Guide)抽出 15 條跟 AI 協作最相關的紀律,分 4 群:

    類別 條目 經典 reference
    核心驗證#1 驗證紀律、#13 根因分析、#7 回顧TDD / Postmortem culture / Code Complete §22
    設計分解#2 正交分解、#8 規格先於實作、#9 權衡分析、#14 錯誤處理哲學Dijkstra SoC / Spec-first / Pragmatic Programmer Ch.4
    過程紀律#3 真實基準、#5 focused review、#6 並行執行、#10 預設驗收標準、#12 預算控管Performance Engineering / Code Review SOP / Agile
    知識持久化#4 文檔作為輸入、#11 可重跑、#15 版本控制ADR / Reproducible Research / Git workflow

    下面逐條拆。每條格式統一:定義 → 經典出處 → 你做了沒 → 證據或補救 → 對 AI 協作的特別意義

    #1 驗證紀律 (Verification Discipline)

    定義:任何宣稱(claim)都要靠可重現的證據才能信。
    經典出處:Steve McConnell《Code Complete》§22 The Twelve-Step Programming Process、TDD 的 Red-Green-Refactor 第一步、Cynefin framework 的 probe-sense-respond。

    本次對話做了沒:✅ 做了,多次

    對話證據:

    「幫我讀書 https://www.anthropic.com/news/claude-opus-4-8」
    → 不接受 AI 憑記憶,要 AI 去 web 抓。

    「今天已經是5/29了 你的日期有問題」
    → 即時校正環境假設,不讓我繼續用錯日期。

    「我正在運作 你看一下」
    → 不接受我講的文字總結,要看 ps / pstree / jsonl 真實 OS 訊號。

    對 AI 協作的特別意義:AI 的訓練資料有 cutoff(我的是 2026 年 1 月)。你問跟 cutoff 之後的事(Opus 4.8 是 5/28 發佈),我用「記憶」回答就是瞎掰 — 而且會用流暢的口氣瞎掰,不像人類會猶豫。強制 AI 查資料這個動作,等於把 AI 從「自信的 LLM」拉回「會用工具的執行者」。這條 baseline 沒守,後面 14 條全變空談,因為起手第一個 claim 就錯了。

    #2 正交分解 (Separation of Concerns)

    定義:一個議題只談一個軸線,軸線之間不混。
    經典出處:Dijkstra 1974《On the role of scientific thought》、Parnas 1972 information hiding、UNIX philosophy 的 “do one thing well”。

    本次對話做了沒:✅ 做了,而且是教科書級。

    對話證據:

    「首先 看起來除了MODEL 還有 EFFORT
    同樣是SONNET 還可以有HIGH XHIGH?
    WORKFLOW 我要怎麼去用?」

    三個正交軸線(Model / Effort / Workflow)分開問。對照組是新手會問「給我最好的設定」— 等於要 AI 替你在多維空間做加總決策,你拿到答案也不知道為什麼。

    對 AI 協作的特別意義:AI 處理 bundled question 會發生兩種失敗:(1) 只回最顯眼那條,其他偷偷漏掉;(2) 強行給一個整合答案,但每個軸線都妥協。你下意識把 3 軸拆開,等於逼 AI 逐個 expose,你才能照自己的 context 做選擇。這對應的軟工原則是「不讓抽象漏掉」(don’t leak the abstraction)的反向應用:你拒絕 AI 把抽象漏掉。

    #3 真實基準 (Representative Benchmarks)

    定義:評估新工具用真實場景,不用 toy example。
    經典出處:John Hennessy / David Patterson《Computer Architecture》§1.8 Fallacies and Pitfalls(benchmark 永遠騙人)、SPEC CPU 為什麼要 update、ML 領域 distribution shift 一整條研究線。

    本次對話做了沒:✅ 做了,而且是本次對話最關鍵的一個動作。

    對話證據:

    「好 你現在用HOME123 專案 做一個測試循環 然後用你的WORKFLOW試試看 記錄下來差異」

    不要 toy 不要 hello-world,直接拿 Home123 的 109 個 production resolver。這個動作直接決定了實驗結論的可信度。

    對 AI 協作的特別意義:80% 的「新 AI 工具評測」文章用合成 case(leetcode-style problems),結論毫無遷移性。Anthropic 自家 4.8 release notes 用的也是 SWE-bench、Terminal-Bench 這種「合成的真實」 — 不是任何一家公司的 production codebase。你直接拿 109 個 real resolver 來測,workflow 暴露出來的問題(主 orchestrator 抓到 synthesis agent 算錯 83 vs 109)在合成 case 上看不到,因為合成 case 沒那麼大、catch 不到 emergent behavior。這個動作的工程價值比你的 prompt 內容更高。

    #4 文檔作為下個 Session 輸入 (Documentation as Next-Session Input)

    定義:寫文件不是給未來的人看,是給未來的 stateless agent 看,作為下次 conversation 的可讀輸入。
    經典出處:Architecture Decision Records (ADR, Michael Nygard 2011)、SREbook 的 runbook 文化、Reproducible Research 運動(Donald Knuth literate programming 的延伸)。

    本次對話做了沒:✅ 做了,而且是主動做。

    對話證據:

    「Ab然後我想請你發一篇文章到wordpress上詳細比對這一次的經驗跟數據還有該怎麼啟用的prompt」

    同時要求三份產出:(A) brain/dynamic-workflows.md(下個 conversation 我會自動讀)、(B) 更新 brain/adaptive-agent-team-staffing.md(舊文件補新知識)、(WordPress 文章 —對人類讀者跟搜尋引擎)。

    對 AI 協作的特別意義:你跟人類同事的會議結論寫成 wiki/Notion,下次他翻過。跟 AI 寫 code 的對話結論寫成 brain file,下次 conversation 的 AI 把它當 first-class context 讀 — 等於把這次 conversation 的腦容量無損傳給下次。一般軟工人甚至沒聽過這個用法(「文件是給 AI 讀的?」),但它是 LLM 時代的 ADR + retrospective 文化合體。沒這層,你每次跟新 conversation 都得從零教一遍,等於每次都 onboarding。

    #5 Focused Review (一次只 review 一條軸線)

    定義:給 code review 的 feedback 一次只挑一條軸線改,不混雜其他要求。
    經典出處:Google Engineering Practices《Code Review Developer Guide》、《The Art of Readable Code》Ch.15、Andy Hunt《Pragmatic Thinking and Learning》Ch.9。

    本次對話做了沒:✅ 做了,而且 6 個字精準命中。

    對話證據:

    「注意好讀性跟比較方式」

    6 個字,2 條軸線,沒夾雜其他要求(沒同時挑錯字、補內容、改標題)。我回去重做的時候不需要 disambiguate「我到底該優先處理哪一條」。新手 reviewer 會給 30 條 mixed feedback,作者改完反而亂七八糟。

    對 AI 協作的特別意義:AI 在 mixed feedback 下會做兩件事:(1) 試圖一次解決所有,結果每條都打折;(2) 自選優先序,但你看不到它怎麼選的。你的 focused feedback 等於把「review reviewer」這層 meta-loop 去掉。對 token 成本也直接有差 — AI 不用先花 token 解析「Tom 到底想我先處理哪條」,直接動工。

    #6 並行/異步執行 (Async Parallel Execution)

    定義:能並行的工作不要序列化等待,結果到再收。
    經典出處:Concurrent programming 整個學門、Amdahl’s law、async/await 在現代語言的普及、Toyota production system 的並行工序設計。

    本次對話做了沒:✅ 做了

    對話證據:

    「我正在運作 你看一下」

    你開另一個 terminal 跑 workflow,沒等我講完就行動。我這邊主 session 同時讀你的 process tree + session jsonl 做即時觀察。兩條軌道平行,中間用 jsonl 落地通訊。

    對 AI 協作的特別意義:跟 AI 對話有個隱形成本叫 cache miss penalty。Claude 的 prompt cache 5 分鐘 TTL,超過就要從零重讀整個 conversation。如果你序列化等(我講完→你看→你跑→等結果→回我),很容易 5 分鐘外。並行化 + 中間用 file system / jsonl 落地通訊,等於把 cache 維持在熱狀態。傳統軟工這條對應的是「不要 block 在 IO 等待」,AI 場景下是「不要 block 在對話等待」。

    #7 回顧 (Retrospective)

    定義:任務完成後不直接進下一個,先回看「what went well / what didn’t」。
    經典出處:Agile retrospective(Scrum 每個 sprint 末必做)、Norm Kerth《Project Retrospectives》、Etsy/Google 的 blameless postmortem 文化。

    本次對話做了沒:✅ 做了,而且是 meta 級 — 你問本篇這題就是 retrospective。

    對話證據:

    「還有 很多人說跟ai寫作需要很多的軟工基礎,不像請你評估一下所謂的軟工基礎在我們所有的循環裡面,我無形中有用到哪一些…因為有一些是我打中很關鍵的點,而你不知道那些是不是軟工基礎」

    這句話本身是回顧:你不滿足於「拿到結果就走」,還要拆解過程、識別 pattern、產生可遷移知識。

    對 AI 協作的特別意義:AI 不會主動 retrospect — 我跑完就等下一個 prompt,沒人觸發我不會自己回頭看「剛剛這條對話我做對了什麼」。retrospective 必須由你發起。但 retrospective 的產出對 AI 特別有價值:它是 #4 文檔作為輸入的最佳 raw material — 直接把回顧結論寫成 brain file,下次 conversation 直接用。傳統 retrospective 是「同個團隊下個 sprint 用」,AI 場景是「同個你下個 conversation 用」。

    #8 規格先於實作 (Spec-First / Specification before Implementation)

    定義:動手寫 code 之前先把「要做什麼」「驗收標準」寫死。
    經典出處:Leslie Lamport《Specifying Systems》、TDD「先寫測試」也是這條的變形、Design by Contract (Bertrand Meyer)、SDD(Spec-Driven Development)的學派。

    本次對話做了沒:✅ 做了,而且是顯式的 4 維度規格。

    對話證據:

    「記錄下來差異 怎麼啟動 有優化那些地方 要做什麼東西 必要是什麼」

    4 個維度寫死:(1) 啟動方式、(2) 優化點、(3) 要做的東西、(4) 必要條件。我後續的 brain file 跟 WordPress 文章兩份產出,結構直接照這 4 維度生。

    對 AI 協作的特別意義:沒給 spec 的 AI 會「自由發揮」,結果是形式上看起來有結構,實際結構是 AI 替你做的選擇,你不一定買單。你給 4 維度等於把結構決定權拿回來,AI 只負責填內容。這條對應的傳統軟工是 PRD/RFC,AI 場景是「在 prompt 裡內嵌驗收 schema」。

    #9 權衡分析 (Trade-off Analysis)

    定義:任何方案都有 cost 跟 benefit,要顯式列出再比較。
    經典出處:Software Architecture 教材必有的 ATAM (Architecture Tradeoff Analysis Method)、Jeff Bezos 的「two-way door / one-way door decisions」、《Pragmatic Programmer》Ch.4「Be a Catalyst for Change」的反向。

    本次對話做了沒:✅ 做了,而且是顯式追問。

    對話證據:本系列你連續問了三個 trade-off 問題:

    「差異你可以跑跑看」(empirical 比較 cost)

    「我想知道Workflow那一個,他現在到底對我的意義是什麼?我看不太出來」(質疑單一方向的 benefit)

    「注意好讀性跟比較方式」(cost = 讀者認知負擔 vs benefit = 完整性)

    對 AI 協作的特別意義:AI 對「該不該做某件事」的默認是 yes — 因為訓練資料裡的「Yes, you should」遠多於「No, don’t」。你「我看不太出來意義」這句逼我從 advocacy 模式切到 honest assessment 模式,實際結論變成「不存它,寫 reference 進 brain 就好」。這條對應的傳統軟工是 design review 裡「這個複雜度真的需要嗎?」的提問。

    #10 預設驗收標準 (Acceptance Criteria Upfront)

    定義:任務開始前先寫死「做到什麼程度算 done」。
    經典出處:Agile user story 的 INVEST criteria、Behavior-Driven Development (BDD) 的 Given-When-Then、Definition of Done 是 Scrum 必備產物。

    本次對話做了沒:🟡 部分做到

    分析:你 #8 給了 4 維度規格,算是 partial acceptance criteria。但缺了「品質門檻」:

    • workflow 跑出來的 report 要達到什麼分類正確率才算可信?
    • baseline 跟 workflow 的差異要大到多少才算「值得換 workflow」?
    • 對話拆解後若 15 條都做到,實質工程效率提升多少才算夠?

    結果就是 — workflow 抓到 12 個 hand-roll,我們默認接受這個數字,沒去 sample 5 個函式人工驗證。如果 workflow 系統性把某類 hybrid 全錯標,我們不會發現。

    該怎麼補:任務開始前加一句「驗收標準」段落。例如本次該寫:

    驗收標準:
    1. 兩邊跑完後,我會手動 sample 5 個 USES_PRELUDE 跟 3 個 HAND_ROLLED 對證據
    2. 如果 baseline 跟 workflow 在這 8 個樣本上有 2 個以上分歧,需逐個澄清
    3. 完整 109 函式都要有 row,缺一個視為失敗

    對 AI 協作的特別意義:AI 沒驗收標準會「看起來完成」(plausible-looking output),但內部可能 systematically 錯。傳統軟工裡 acceptance test 是另一個人寫的,AI 場景下你得自己寫,因為 AI 不會主動跟自己對抗。本次沒守這條的代價:我們得花一篇文章解釋「為什麼信任 workflow 的結果」,而本來只需要 sample-test。

    #11 可重跑 / Idempotency (Reproducible Execution)

    定義:任何過程要可從頭重來,輸入相同則輸出相同(在合理隨機範圍內)。
    經典出處:Make / build system 整個學門、Donald Knuth literate programming、Reproducible Research 運動、Docker / IaC 的根本動機。

    本次對話做了沒:❌ 沒做。最具體的證據是你沒按 s 把 workflow script 存下來

    分析:本次跑了 11 個 Haiku 4.5 平行 audit,產生 146 行 JavaScript orchestration script,結果只存在 session 暫存目錄。如果這次的審計結論被人質疑(例如「12 個 hand_roll 是真的還是 AI 瞎標」),你要重跑驗證沒辦法保證跑出同一份結果 — 因為:

    • 下次跑 Claude 會重新生 script,chunk 切法可能不同
    • Haiku 4.5 即使 temperature 0 也有非 deterministic 因素(MoE routing 隨機)
    • Cache hit 率不同 → 提示空間不同 → 細節結論不同

    該怎麼補:三層防護(從便宜到昂貴):

    1. 最低: 把 script 從 session 暫存目錄 cp 出來歸檔到 brain 或 repo
    2. 中等: 把 script 真的存成 ~/.claude/workflows/<name>.js slash command,雖然本案大概不重跑,但其他 audit 可以 fork
    3. 高保證: 把 audit 結論 + 109 函式分類存成 JSON / CSV,用 schema 驗證,以後重跑只需 diff JSON 不需要重看 markdown

    對 AI 協作的特別意義:AI 的輸出有內建非 determinism(temperature、MoE、context order),這跟傳統 reproducibility 假設(同 input → 同 output)直接衝突。AI 場景的可重跑不能依賴「程式邏輯一樣」,要依賴「中間結果落地」 + 「結果用結構化格式儲存」 + 「下游 verifier 用同 schema 驗」。傳統軟工這條是「build 可重現」,AI 場景是「結論可驗證」。

    #12 預算控管 (Cost / Budget Cap)

    定義:任何運算工作開始前先設天花板,超過自動停。
    經典出處:Cloud computing 的 budget alerts、Kubernetes resource limits、Hadoop / Spark 的 timeout、Stripe 的「circuit breaker」pattern、SREbook §12 effective troubleshooting 的 budget 章節。

    本次對話做了沒:❌ 沒做

    分析:我們跑 workflow 的時候沒設 token budget 或 wall-time cap。實際跑了 11 個 agent、~$6.10 estimated cost、132 秒 wall-time。如果 Claude 寫的 script bug 了 — 例如把 chunk 切成 100 個,可能跑出 100 個 agent、$60 cost、20 分鐘 wall-time。沒任何機制自動阻擋。

    該怎麼補:

    • prompt 裡明寫上限 — 例如「最多派 12 個 agent,單一 agent 最多跑 60 秒」
    • --effort medium 而不是 high 開始,確認 quality 夠才升 effort
    • 跑前先讓 Claude 估算 token cost 跟 agent 數,你 approve 才放跑(workflow 內建這層 approval prompt,但你按 [3] View raw script 之前沒人問你 budget)
    • 對自己設「單條對話 spend 上限」(例如 $10),透過 Claude Code admin page 或 API budget API 強制

    對 AI 協作的特別意義:傳統軟工 budget 是「機器跑爛要錢」,AI 場景下 budget 還包含「AI 寫錯 script 跑很久才發現」的 fail-loud delay。Anthropic 自己在他們 multi-agent research system 的 paper 也警告:multi-agent 用 token 是 single-agent 的 3-10×,Research system 是 ~15×。沒 budget cap 等於放任這個倍率,3am 一覺起來收到 $200 帳單是真實風險。

    #13 根因分析 (Root Cause Analysis)

    定義:遇到問題不停在表象,挖到「為什麼會發生」的最底層。
    經典出處:Toyota 的「Five Whys」、Apollo 13 事故報告、Etsy / Google 的 blameless postmortem template、《The Field Guide to Understanding Human Error》。

    本次對話做了沒:🟡 部分做到,但是 AI 替你做的

    分析:本次 audit 最有價值的發現是「guard role 被 AuthzDecision.IsCommunityWide 排除,迫使 5 個 resolver 各自重 probe 一段相同 SQL」。這是根因分析的成果 — 不停在「這幾個 resolver 沒用 prelude」,而是挖到「為什麼它們不能用」。

    但這是 workflow 的 synthesis agent 替你做的,不是你做的。Baseline 模式下 1 個 agent 沒做出這層,你也沒主動追問「為什麼會有 5 個重複」。如果這次跑 baseline 你會 miss 這個 root cause。

    該怎麼補:不能只靠 AI 替你做。可以加紀律 — 拿到分類結果後,主動問:

    看到 12 個 HAND_ROLLED,我們 ladder 5 個 why:
    - 為什麼這 12 個沒用 prelude? → 各自原因
    - 為什麼它們有共同原因? → 找 pattern
    - 為什麼這個 pattern 沒被早發現? → 流程 gap
    - 為什麼流程沒抓到? → tooling gap
    - 為什麼 tooling 沒設計這層? → 設計時的假設

    對 AI 協作的特別意義:AI 默認停在第一層觀察(「這幾個沒用 prelude」)。要挖根因得明確要求(「列出 root cause」)或結構性逼它(workflow 的獨立 synthesis pass 就是設計來做這個)。傳統軟工這條是 debug 工具,AI 場景是「prompt design」工具 — 在 prompt 裡內嵌 root cause analysis instruction,或設計獨立 verification agent。

    #14 錯誤處理哲學 (Error Handling Philosophy)

    定義:對「事情會出錯」這件事有明確設計姿態 — fail-fast vs fail-silently、retry policy、circuit breaker、graceful degradation。
    經典出處:Erlang 的「let it crash」哲學、《Release It!》Michael Nygard 整本書、Google SREbook §22 addressing cascading failures。

    本次對話做了沒:❌ 沒做

    分析:我們沒任何「workflow 跑到一半失敗了怎麼辦」的計畫:

    • 如果某個 chunk 的 Haiku agent 超時了 → 我們沒設 retry 也沒設 fallback
    • 如果 synthesis agent 算術錯了(這次真的發生了:83 vs 109)→ 我們沒設 verification 步驟,純靠主 orchestrator 主動懷疑
    • 如果 JSON schema 驗證 fail → 不知道會發生什麼,沒測過
    • 如果 workflow runtime 自己 crash → 沒 graceful resume 流程

    該怎麼補:在 prompt 裡加 error handling instruction:

    如果跑到一半發現:
    - 某 chunk 的 agent fail → 標記 SKIPPED,繼續其他,最後 report 哪些 skip
    - synthesis 結果跟 row count 對不上 → 不要直接出 report,先 escalate 給主 orchestrator 重算
    - JSON schema 違反 → 該 row 標 INVALID,繼續其他
    - 整體執行超過 5 分鐘 → 自動 abort,出階段性 report
    
    最後 final report 要明確標示哪些 chunk 是「完整跑完」、哪些是「skipped」、哪些是「fail-and-retried」。

    對 AI 協作的特別意義:AI 預設 fail-silently — 它會生「看起來合理」的內容掩蓋失敗。傳統軟工 fail-fast 是「raise exception 停下來」,AI 場景的 fail-fast 是「標註 INVALID / SKIPPED 而不是瞎掰」。沒設計這條,AI 會「完整交付」一份其實內部有 hole 的報告,你看不出來。本次 workflow synthesis 算 83 是僥倖被主 orchestrator 抓到,如果主 orchestrator 也沒抓,我們就拿錯誤數字寫文章了。

    #15 版本控制紀律 (Version Control Discipline)

    定義:任何重要 artifact 進 git,commit message 寫清楚 why,branch 策略對應 workflow。
    經典出處:Git 整個工具、Conventional Commits 規範、Trunk-based / GitFlow / GitHub Flow 各家 branch 策略、Linus 的 git 設計初衷。

    本次對話做了沒:❌ 沒做。本次產出全部沒進 git。

    分析:這次產出了 4 件 artifact:

    • ~/.claude/projects/-home-tom/memory/brain/dynamic-workflows.md(新建)
    • ~/.claude/projects/-home-tom/memory/brain/adaptive-agent-team-staffing.md(編輯)
    • ~/.claude/projects/-home-tom/memory/MEMORY.md(編輯)
    • WordPress 文章兩篇

    前三個位置實際是 ~/.claude/projects/-home-tom/ — 你有可能沒把它放在 git 控管下,意思是:

    • brain 編輯沒 commit history,半年後想知道「dynamic-workflows.md 是什麼時候加的、為什麼加」沒記錄
    • 如果 brain 不小心被改錯了(例如未來某個 conversation AI 寫壞了),無法 rollback
    • 跨機器同步只能靠 rsync / cloud sync,沒 conflict resolution

    該怎麼補:

    1. cd ~/.claude/projects/-home-tom && git init(如果還沒)
    2. 新 brain 或重大編輯後 commit:git add brain/ MEMORY.md && git commit -m "feat(brain): dynamic-workflows from 2026-05-29 Opus 4.8 test"
    3. WordPress 文章 export markdown 進專屬 repo,或用 wp-cli 串自動 backup
    4. workflow script 改 #11 補救時順便 commit 進 dotfiles repo

    對 AI 協作的特別意義:AI 跨 conversation 是 stateless,brain file 是它的「外部記憶」。外部記憶的版本控管比 code 的還重要,因為你不會看到自己過去 conversation 改了哪些 brain,只有 git diff 告訴你。本次對話我改了 3 個 brain 檔,如果你沒 git 控管,3 個月後你不會記得這幾條條目是 5/29 對話加的還是更早。傳統 git 是 code 的時間機,AI 場景是「我跟 AI 集體記憶的時間機」。

    15 條全表:做了沒 × leverage

    # 紀律 類別 本次 Leverage(高→低)
    1驗證紀律核心驗證★★★★★ 沒守等於沒救
    2正交分解設計分解★★★★★ AI 回答品質直接相關
    3真實基準過程紀律★★★★★ 結論可信度核心
    4文檔作為輸入知識持久化★★★★★ AI 時代特有的紀律
    5Focused review過程紀律★★★★ AI 對 mixed feedback 表現差
    6並行執行過程紀律★★★ 規模大才顯效
    7回顧核心驗證★★★★ 跟 #4 配對 leverage 最大
    8規格先於實作設計分解★★★★ 直接決定 AI 輸出結構
    9權衡分析設計分解★★★★ 抗 AI 默認 yes 傾向
    10預設驗收標準過程紀律🟡★★★★ 該補,沒守會默認 plausible-looking
    11可重跑知識持久化★★★ 任務一次性可省,系統性任務必須
    12預算控管過程紀律★★★ 小任務可省,長 background 任務必須
    13根因分析核心驗證🟡★★★★ 主要靠 prompt 設計
    14錯誤處理哲學設計分解★★★★ AI 預設 fail-silently 必補
    15版本控制知識持久化★★★ brain 控管比 code 控管更重要

    結論:跟 AI 寫程式需要哪些軟工?

    不是新的軟工,是舊軟工套到 AI 4 個特性上

    15 條全部都不是「AI 時代發明的」 — 每條都能在 1990 年代的軟工教材找到根。差別在 4 個 AI 特性對這些紀律的需求強度不同:

    AI 特性 被放大需求的紀律
    訓練資料 cutoff#1 驗證紀律(逼 AI 查資料,不要憑記憶)
    Stateless / 無 conversation 記憶#4 文檔作為輸入、#15 版本控制(外部記憶持久化)
    非 deterministic 輸出#11 可重跑、#10 預設驗收標準、#14 錯誤處理(處理隨機性)
    高並發 + 高速#6 並行、#12 預算控管(token 倍率風險)

    個人 leverage 排序(5 強)

    如果你是這條光譜中段的人(寫過 5 年以上 code,剛開始系統性用 AI 寫 code),最該優先吸收這 5 條:

    1. #1 驗證紀律 — 沒守這條,後面 14 條都白學。AI 講什麼都不能信,grep / curl / test 重驗
    2. #2 正交分解 — 拆軸線問,不要 bundled question。直接決定 AI 回答品質
    3. #4 文檔作為輸入 — 把學到的寫成下個 conversation 可讀的格式。沒這條,每次 onboarding
    4. #3 真實基準 — Toy example 騙人。用 production codebase 評估工具
    5. #5 Focused review — 給 AI feedback 一次只挑一條軸線

    沒做的 5 條,該怎麼補

    本次對話沒做的紀律對應 5 條 action(從便宜到貴):

    1. #15 版本控制(5 分鐘):cd ~/.claude/projects/-home-tom && git init && git add . && git commit -m "snapshot" 一次性處理
    2. #11 可重跑(2 分鐘):把 workflow script 從 session 暫存 cp 到 brain 或 dotfiles repo 歸檔
    3. #10 驗收標準(每任務多寫 3 行 prompt):任務 prompt 開頭加「驗收標準:N 個項目,M% 正確率,通不過要告訴我」
    4. #14 錯誤處理(每 workflow 多寫 5 行):script 內加 fail-fast / skip / retry 分支
    5. #12 預算控管(系統性設定):Claude Code admin page 設 hard daily limit 或寫個 hook 跑前先估

    真正的 meta-insight

    本文 15 條展開後最反直覺的觀察:跟 AI 寫程式需要的軟工基礎,大部分不是 code-level 的,是 process-level + protocol-level 的。傳統軟工新人學的順序是「先學語言 → 再學 design pattern → 最後學 process」,跟 AI 寫程式得反過來:先學 process discipline(怎麼下指令、怎麼驗證、怎麼回顧),最後才是 code-level technique

    因為跟 AI 寫程式,code 是 AI 生的,你扮演的是 reviewer + verifier + spec writer 三個角色。這三個角色傳統上叫 PM / QA / Tech Lead — 都是 senior eng 的活。所以「跟 AI 寫程式比較簡單」這句話完全反了 — 它把senior eng 的工作 commoditize 到每個用 AI 的人身上,reviewer 的紀律從「資深工程師的特權」變成「每個 prompt 作者的基本技能」。

    這就是為什麼那麼多人「用 AI 寫了一堆 code 但跑不起來」 — 不是 AI 不行,是沒人替他們做 reviewer / verifier / spec writer 那三層活。本文 15 條的本質就是把這三層活的紀律寫下來。

    跟我之前文章的關聯