標籤: 提示工程

  • 會用 vs 不會用 Claude Code:醫療、股市、電商三場景對比

    重點摘要

    • 差距不在「會不會用 AI」,在「有沒有給 AI 做事的結構」
    • 不會用的人:一句話丟需求 → 結果跑偏 → 多輪修正 → 累積沮喪
    • 會用的人:CLAUDE.md + 設計文件 + 分段驗證 → 第一次就對
    • 三個真實場景(醫療 / 股市 / 電商)示範具體差距

    「Claude Code 對我沒用,我試過,它做出來的東西都不對。」

    這句話我聽過很多次。幾乎每次深入問,問題都不在 Claude,在提問的方式。

    這篇文章用三個真實的軟體開發場景,直接模擬「不會用的人」和「會用的人」各自怎麼做,讓你看清楚差距在哪裡。

    核心差距:有沒有給 AI 做事的結構

    不會用 Claude Code 的人,把它當成「很聰明的搜尋引擎」,問一句,期待完美答案。

    會用的人,把它當成「需要完整簡報才能開工的新進工程師」:你給的資訊越清楚,他做出來的東西越準確。

    差距的本質是:你的輸入有沒有結構

    場景一:醫療預約系統(門診掛號)

    痛點

    診所要做線上掛號,需要處理:醫師排班、假日停診、同時段人數上限、患者重複掛號防止。每個規則都有例外,例外裡還有例外。

    不會用的人怎麼做

    直接開口:

    幫我寫一個門診預約系統的 API,要能掛號、取消、查詢。

    Claude 給了一個乾淨的 REST API,CRUD 完整,code 看起來不錯。

    開始整合後發現問題一個接一個:

    • 沒處理同時段上限(診所每診次只收 20 人,API 沒有 capacity 邏輯)
    • 沒有重複掛號檢查(同一個患者可以掛同一診次兩次)
    • 沒有假日判斷(系統不知道什麼是醫院休診日)
    • 時區沒處理(台灣 UTC+8,stored as UTC,前端顯示全錯)

    開始補需求:「喔對,要加上每診次人數上限」→ Claude 修改。「還有重複掛號要擋掉」→ Claude 再改。「假日要停診」→ 再改。每次修改都可能動到之前改好的邏輯,三輪之後代碼開始難以追蹤。

    結果:8 小時,仍有未發現的 bug,信心不足。

    會用的人怎麼做

    第一步:CLAUDE.md 裡早就寫好領域規則

    ## 醫療領域規則
    - 所有時間以 UTC+8 儲存,API 回應包含 timezone 欄位
    - 患者 ID 採用身分證字號格式,需驗證格式(字母+9位數字)
    - 診次 (session) 為最小預約單位,每診次有 capacity 上限
    - 相同患者在同一診次只能有一筆有效預約
    
    ## 錯誤處理標準
    - 業務邏輯錯誤:HTTP 422 + { code, message, field }
    - 驗證錯誤:HTTP 400 + 同上格式

    第二步:先寫設計文件(20 分鐘)

    # 功能:門診掛號 API
    
    ## 輸入
    { patientId: string, sessionId: string }
    
    ## 驗證順序(按此順序,遇錯即停)
    1. patientId 格式是否合法
    2. sessionId 是否存在且為未來時間
    3. 該診次是否已達 capacity
    4. 該患者是否已有此診次的有效預約
    
    ## 邊界條件
    - capacity 滿:422,code: SESSION_FULL
    - 重複掛號:422,code: DUPLICATE_BOOKING
    - 患者格式錯:400,code: INVALID_PATIENT_ID
    - 診次已過去:422,code: SESSION_EXPIRED
    
    ## Done When
    - 所有邊界條件有單元測試
    - integration test 驗證完整掛號流程
    - 0 TypeScript errors

    第三步:分段給任務

    請先閱讀 CLAUDE.md 和這份設計文件。
    閱讀完告訴我你的理解,特別是驗證順序的邏輯,再開始實作。
    先只實作 validateBooking() 函數和對應單元測試,不要動 API 層。

    確認驗證邏輯正確後,再說「現在依照這個驗證函數實作 POST /bookings endpoint」。

    結果:2.5 小時,第一次就通過所有測試,零修改。

    場景二:股市回測系統

    痛點

    想驗證一個交易策略:當 5 日均線上穿 20 日均線時買進,死亡交叉時賣出。聽起來簡單,但台股有漲跌停、只能在交易日交易、最小交易單位是 1000 股、手續費和證交稅要扣掉,每個細節都會影響回測結果。

    不會用的人怎麼做

    幫我寫一個台股回測程式,策略是 5 日均線上穿 20 日均線買進,死叉賣出。

    Claude 給了一個 Python 回測,用 pandas 計算均線,邏輯清楚。跑了一下,報酬率看起來很漂亮。

    仔細看才發現:

    • 買賣都用收盤價,但實際上收盤價買不到(要用隔日開盤)
    • 沒有漲跌停限制,假設任何價格都能成交
    • 沒扣手續費(0.1425%)和證交稅(0.3%)
    • 沒有最小交易單位,0.1 張也買
    • 跑到非交易日(週末)的資料也在交易

    這些問題加起來,讓回測結果虛報了約 30–40%。一個看起來賺錢的策略,修正後可能是虧損的。

    結果:6 小時修修改改,最後不確定結果是否可信。

    會用的人怎麼做

    設計文件把所有台股規則先寫清楚:

    # 功能:台股均線策略回測引擎
    
    ## 市場規則(必須完整實作)
    - 交易日:排除週末 + 台灣國定假日(用 holidays-tw 套件)
    - 成交價:訊號發生在收盤,執行在「隔一個交易日開盤價」
    - 漲跌停:每日最大漲跌幅 ±10%,超過範圍無法成交,標記 LIMIT_HIT
    - 最小交易單位:1000 股,不足整張無法下單
    - 手續費:買賣各 0.1425%(可設定),最低 20 元
    - 證交稅:賣出 0.3%(ETF 為 0.1%)
    
    ## 回測輸出格式
    {
      total_return_pct: float,    # 扣除所有費用後
      trades: [{ date, action, price, shares, cost, tax, net_pnl }],
      unfilled: [{ date, reason }],   # LIMIT_HIT 等無法成交紀錄
      sharpe_ratio: float,
      max_drawdown_pct: float
    }
    
    ## 邊界條件
    - 漲停無法賣出(LIMIT_HIT_SELL)
    - 跌停無法買入(LIMIT_HIT_BUY)
    - 資金不足一張:跳過,記錄 INSUFFICIENT_FUNDS
    - 最後持倉:回測結束日強制以收盤價平倉

    提示方式:

    請先閱讀這份設計文件,告訴我:
    1. 成交時間點的邏輯(訊號日 vs 執行日)你的理解
    2. 漲跌停時的處理流程
    
    確認理解正確後,先只實作 TaiwanMarketRules 類別和測試,
    包含漲跌停判斷、交易日判斷、手續費計算三個方法。
    不要實作策略邏輯或回測引擎。

    結果:3 小時,回測結果可信,且有完整的無法成交紀錄供分析。

    場景三:電商金流串接(綠界 ECPay)

    痛點

    要串接台灣最常用的金流服務商,支援信用卡一次付清 + ATM 虛擬帳號。牽涉到加密簽章驗證、非同步回調(ReturnURL / OrderResultURL)、以及各種付款失敗情境。

    不會用的人怎麼做

    幫我串接綠界金流,支援信用卡和 ATM 付款。

    Claude 寫了一個串接,看起來完整。測試環境跑起來。上線後三天,開始收到客訴:

    • 付款成功但訂單沒更新(沒有正確處理綠界的非同步通知)
    • ATM 超時未付款,訂單卡在「待付款」沒有自動取消
    • CheckMacValue 驗簽偶發失敗(特殊字元的 URL encode 方式不對)
    • 退款流程完全沒實作(以為付款和退款是同一組 API)

    每個問題單獨看都能修,但修一個又會影響另一個。金流 bug 是最難測試的,因為要模擬真實付款行為。

    結果:上線後 bug,緊急修補兩天,損失用戶信任。

    會用的人怎麼做

    先用 Plan Mode 讓 Claude 梳理所有狀態流:

    【背景】
    我要串接綠界 ECPay,使用 Node.js + PostgreSQL,
    CLAUDE.md 中規定所有金流操作要記 audit log。
    
    【目標】
    支援信用卡一次付清和 ATM 虛擬帳號,訂單狀態要與付款狀態完全同步。
    
    【約束條件】
    - 不能有「已付款但訂單未更新」的狀態
    - ATM 超過 3 天未付款自動取消訂單並釋放庫存
    - CheckMacValue 驗簽失敗必須記錄並告警
    
    請制定實作計劃,列出所有需要處理的狀態流轉,
    等我確認計劃後再開始實作。

    Claude 在計劃中列出了 14 個狀態節點,包含「非同步通知重複到達」、「驗簽失敗的處理」這些不明顯的情境。確認計劃後再開始做。

    設計文件特別標明的邊界條件:

    ## 邊界條件(金流特有)
    - ReturnURL(非同步)和 OrderResultURL(同步)可能「都」被呼叫
      → 用 idempotency key 確保同一筆交易只更新一次訂單
    - CheckMacValue 驗簽:URL encode 順序必須按綠界規範(非標準 encodeURIComponent)
      → 測試案例需包含含特殊字元的 MerchantTradeNo
    - ATM 逾期:用 pg-cron 排程,不要依賴前端觸發
    - 退款:獨立 API,與付款 API 完全分離,需要人工審核 flag

    結果:4 小時,上線零 bug,audit log 完整。

    差距總結

    面向 不會用的人 會用的人
    提示方式「幫我做 X」「背景 + 目標 + 約束條件 + 邊界條件」
    領域規則每次用到才補說寫進 CLAUDE.md,一次設定永久生效
    邊界條件做完後才發現沒處理設計文件裡最前面就列清楚
    複雜任務一次丟,結果跑偏再修Plan Mode 確認方向,分段執行
    驗證方式全部做完再整體測試每段完成後先確認,錯誤早期發現
    對話輪數8–15 輪2–4 輪
    結果品質能跑,但邊界不完整完整,測試覆蓋所有邊界

    為什麼大多數人卡在「不會用」

    不是因為懶,是因為直覺錯了。

    我們習慣搜尋引擎:問一句,得到答案。Claude Code 不是搜尋引擎,它是一個需要簡報才能開工的工程師。你給的資訊越完整,它做出來的東西越準確。

    轉換這個直覺需要時間,但一旦轉過來,你就不會想回頭了。

    從下一個任務開始,試著在開口前先回答三個問題:

    1. 這個功能的輸入和輸出各是什麼格式?
    2. 哪些邊界條件會讓它失敗?
    3. 我怎麼確認它做對了?

    把這三個問題的答案寫下來,你的 Claude Code 使用效果會立刻不一樣。

    常見問題

    Q:每次都要先寫設計文件,不會很花時間嗎?

    一份最小版設計文件 20 分鐘。省下的多輪修改至少 2–4 小時。這筆帳很好算。

    小功能(一個函數、修一個 bug)不需要設計文件,直接做。設計文件是為了「有多個邊界條件、或跨越兩層以上架構」的任務。

    Q:CLAUDE.md 不是每個專案都要重寫一遍嗎?

    寫一次,維護成本低。每次發現 Claude 做了一個你不喜歡的決定,把那條規則加進 CLAUDE.md,下次就不會再發生。它是越用越省力的資產。

    Q:我的需求很複雜,文件要寫到多詳細?

    詳細到「可以讓另一個工程師依照這份文件實作,不需要問你問題」。如果你寫完文件還是覺得有地方模糊,那就是還有沒想清楚的需求,先想清楚再開始比較省事。

    從不會用到會用:各情境的具體升級路徑

    看完上面三個場景,你可能知道差距在哪,但還不知道今天要改什麼。這一節給你一條明確的路,從第一步到進階,每步都有可以直接複製的東西。

    第一步:今天就能做到(不需要任何準備)

    在你現在的任何提示最後加上這一句:

    先告訴我你的理解和假設,再開始實作。

    就這一句。它會讓 Claude 在動手前先說出它的假設,你可以在它寫出一堆錯誤代碼前糾正它。成本 0,效果立竿見影。

    三個情境的具體升級示範:

    醫療場景:Level 0 → Level 1

    不會用(Level 0) 初步會用(Level 1)
    幫我寫門診預約系統(見下方)
    幫我寫門診掛號的 API。
    
    輸入:{ patientId: string, sessionId: string, phone: string }
    輸出:{ bookingNo: string, status: "SUCCESS" | "FULL" | "DUPLICATE" }
    
    必須處理:
    - 同一診次超過容量上限 → 回傳 FULL
    - 同一患者重複掛同一診次 → 回傳 DUPLICATE
    - 所有時間以 UTC+8 處理
    
    先告訴我你的理解,特別是這三種情況你打算怎麼處理,再開始實作。

    改變了什麼:加了輸入輸出格式、三個邊界條件、確認步驟。這 5 分鐘的準備,省掉事後發現「沒處理重複掛號」的 2 小時修改。

    股市場景:Level 0 → Level 1

    幫我寫台股均線回測。策略:5日均線上穿20日均線買進,死叉賣出。
    
    台股特有規則(全部都要實作):
    - 訊號發生在收盤,執行在隔交易日開盤價(不是同日收盤)
    - 漲跌停 ±10%,超過無法成交,記錄 LIMIT_HIT
    - 手續費:買賣各 0.1425%,最低 20 元
    - 證交稅:賣出 0.3%
    - 最小交易單位 1000 股,不足不下單
    
    先告訴我這些規則你的理解,特別是成交時間點的邏輯,再開始寫。

    電商金流場景:Level 0 → Level 1

    幫我串接綠界 ECPay,支援信用卡一次付清。
    
    必須處理的情況:
    - ReturnURL(非同步)和 OrderResultURL(同步)可能都會被呼叫,
      同一筆交易只能更新訂單一次(要有 idempotency 機制)
    - CheckMacValue 驗簽失敗:記 log,不更新訂單,回傳 0|Error
    - 付款成功後訂單狀態必須立刻更新
    
    先告訴我你打算怎麼處理「非同步和同步通知都到達」這個情況,再開始實作。

    第二步:下週可以做到(CLAUDE.md)

    把你的領域規則寫成一個檔案,放在專案根目錄,命名 CLAUDE.md。之後每次對話都不用再重複說這些規則。

    先從最小版開始,15 分鐘寫完:

    # 專案規則
    
    ## Tech Stack
    [填你用的技術]
    
    ## 這個領域的特殊規則
    [把你每次都要補充說明的規則寫在這裡]
    例:
    - 台股交易日排除週末 + 台灣國定假日
    - 醫療系統所有時間 UTC+8
    - 金流驗簽失敗一律記 log 不更新訂單
    
    ## 代碼標準
    [你每次都要糾正的習慣寫在這裡]
    例:
    - 禁止 any 類型
    - 每個函數必須有對應測試
    - API 錯誤格式統一:{ code, message, field }
    
    ## 邊界條件規則
    [這個專案特有的邊界處理方式]

    寫好之後,下次開口前說「請先讀 CLAUDE.md」或什麼都不用說(Claude Code 會自動載入)。

    第三步:一個月後的進化(設計文件 + Plan Mode)

    當你習慣 Level 1 之後,下一步是在動手前多寫一份設計文件。這份文件不是給人看的,是給 Claude 看的,20 分鐘寫完,節省的是事後 4–6 小時的修改。

    設計文件的最小格式:

    # 功能:[名稱]
    
    ## 輸入 / 輸出
    輸入:[JSON 範例]
    輸出:[JSON 範例]
    
    ## 邊界條件(必須處理)
    - [條件 A] → [預期行為]
    - [條件 B] → [預期行為]
    
    ## 完成定義
    - [ ] 所有邊界條件有對應單元測試
    - [ ] TypeScript 0 errors

    有了設計文件之後,任務的啟動提示變成:

    請先閱讀 CLAUDE.md 和 [設計文件名]。
    閱讀完告訴我你的理解,特別是邊界條件部分。
    確認後先只實作 [最小單元],不要動其他層。

    當任務更複雜(跨 5 個以上文件、不可逆的架構改動),改用 Plan Mode 啟動:

    請先制定實作計劃,列出方案選項和取捨,等我確認後再開始執行。
    階段 做什麼 時間投資 節省的來回
    Level 0直接說需求00
    Level 1(今天)加輸入/輸出/邊界 + 確認步驟5 分鐘/次2–4 輪
    Level 2(下週)CLAUDE.md 寫入領域規則15 分鐘(一次性)每次省 1–2 輪
    Level 3(一個月後)設計文件 + Plan Mode20 分鐘/功能第一次就對
  • Claude Code 實戰:5 個核心技巧讓 AI 一次到位

    重點摘要

    • CLAUDE.md 是一次性投資,讓每次對話自動遵守規則,減少 50–70% 重複提示
    • 設計文件寫在執行前,讓 Claude 一次完成實作,避免多輪修改
    • Plan Mode + Agent Teams 適合複雜任務,正確啟動方式決定準確率
    • Hooks 自動化格式、測試、安全掃描,讓你專注在真正需要判斷的事

    你是否有過這樣的經驗:跟 Claude Code 說了一大段需求,它做出來的結果差了一點點,於是你開始修正、補充說明、再確認,來回四五輪才終於完成?

    這篇文章整理的,就是如何系統性地消滅這些來回。不靠運氣,靠結構。

    1. CLAUDE.md:把規則寫進專案,不用每次重說

    CLAUDE.md 是 Claude Code 自動載入的專案規則檔,放在 ~/your-project/CLAUDE.md。它是永久生效的,只要存在,每次對話都會自動套用。

    效果:寫一次,永久有效,減少 50–70% 重複提示。

    CLAUDE.md 應該寫什麼

    分四層,由外到內:

    層次 內容 範例
    基本資訊Tech stack、架構決策Next.js 14 App Router + PostgreSQL
    代碼標準命名規則、檔案結構TypeScript strict mode,禁止 any
    業務邏輯領域規則、合規要求台灣統一編號驗證邏輯
    技術決策測試策略、代碼審查規則每個函數必須有對應單元測試

    可直接複製的最小版 CLAUDE.md

    # 專案規則
    
    ## Tech Stack
    - Runtime: Node.js 20, TypeScript strict
    - Frontend: Next.js 14 App Router
    - Database: PostgreSQL + Prisma ORM
    - Testing: Vitest + Testing Library
    
    ## 代碼標準
    - 禁止使用 `any` 類型
    - 所有 API 回應都必須有錯誤處理
    - 命名:camelCase 變數/函數,PascalCase 元件
    - 每個新函數必須有對應測試
    
    ## 禁止事項
    - 不要在 .env 以外的地方寫入 secrets
    - 不要 commit node_modules
    - 不要繞過 TypeScript 類型檢查
    
    ## 測試策略
    - 單元測試:純函數、工具類
    - 整合測試:API routes、資料庫操作
    - E2E:核心用戶流程

    常見錯誤:規則太模糊(「要寫好的代碼」)。寫 CLAUDE.md 要具體到可驗證,例如「API 回應必須包含 { success, data, error } 結構」。

    2. 設計文件:讓 Claude 第一次就做對

    沒有設計文件,Claude 會根據最可能的假設去實作。你的需求愈複雜,這些假設偏離你想法的機率就愈高。

    設計文件 ≠ CLAUDE.md:CLAUDE.md 是永久規則,設計文件是「這個功能」的一次性說明。

    最小版設計文件(20 分鐘內完成)

    # 功能:[名稱]
    
    ## 要做什麼
    [一段話描述,包含用戶場景]
    
    ## 輸入 / 輸出格式
    輸入:{ invoiceNumber: string, amount: number }
    輸出:{ success: boolean, invoiceId: string }
    
    ## 邊界條件
    - 金額為 0 時:回傳錯誤,不建立發票
    - 統編格式錯誤時:拋出 ValidationError
    - 重複發票號碼:回傳已存在的 invoiceId
    
    ## 完成定義(Done When)
    - [ ] 所有邊界條件有對應測試
    - [ ] API 回應符合 CLAUDE.md 定義的格式
    - [ ] TypeScript 0 errors

    這 20 分鐘可以省下 4–6 小時的修改。數學很簡單。

    複雜場景:從用戶故事快速產出設計文件

    當你腦中只有模糊需求,可以用這個提示讓 Claude 幫你產出設計文件初稿:

    我需要實作:[用戶故事]
    
    請幫我寫一份設計文件,包含:
    1. 功能描述(一段話)
    2. 輸入/輸出格式(JSON 範例)
    3. 邊界條件清單
    4. 完成定義
    
    不要實作,只寫文件。

    確認文件正確後,再說「依照這份設計文件實作」。這是「計劃→確認→執行」的標準流程,比直接說需求減少至少 2 輪來回。

    3. Plan Mode:大型任務的正確啟動方式

    Plan Mode 是 Claude Code 的三段式決策機制:探索 → 規劃 → 用戶確認。只有用戶批准後才開始執行,避免走錯方向浪費的大量時間。

    何時使用 Plan Mode

    場景 使用 Plan Mode? 原因
    修一個 bug不需要範圍小,直接做
    新增一個 API endpoint不需要單一改動
    重構模組(跨 5+ 個文件)需要需要確認拆分策略
    架構遷移(框架升級)需要不可逆,要先對齊
    全新功能模組(3 天以上工作量)需要複雜度高,先確認再做

    Plan Mode 的正確提示格式

    啟動 Plan Mode 後,給 Claude 的提示要包含三個部分:

    【背景】
    這個專案是 [系統描述],目前 [現況]。
    
    【目標】
    我需要 [具體目標],完成後要能 [驗收標準]。
    
    【約束條件】
    - 不能破壞現有的 [X] 功能
    - 必須相容 [Y] 版本
    - 不要修改 [Z] 目錄的任何檔案
    
    請先制定實作計劃,列出方案選項和取捨,等我確認後再開始執行。

    「等我確認後再開始執行」這句話非常關鍵。沒有這句話,Claude 可能在呈現計劃的同時就開始執行了。

    4. Agent Teams:平行作業的正確姿勢

    Agent Teams 讓多個 Claude 實例同時處理獨立任務。正確使用可以把 3 天的工作壓縮到 1 天,錯誤使用會讓機器記憶體爆掉。

    模型選擇速查

    模型 記憶體 適合任務 口訣
    Opus~1GB/agent架構決策、複雜業務邏輯、Code Review需要「想」
    Sonnet~600MB/agentCRUD 實作、API 對接、表單頁面需要「做」
    Haiku~400MB/agent檔案掃描、配置對比、簡單查詢需要「找」

    建立 Agent Team 前必做的三件事

    1. 評估記憶體:執行 free -h,可用記憶體必須大於預計用量的 1.5 倍(安全邊界)
    2. 拆分獨立任務:每個 agent 的任務不能有隱性依賴,確認前後順序再分配
    3. 準備共用 CLAUDE.md:所有 agent 共享同一套規則,避免各自用不同標準

    任務拆分原則

    適合平行的任務:API endpoint A、API endpoint B、前端表單 C(互不依賴)

    不適合平行的任務:「建資料庫 schema」→「實作 API」→「寫測試」(有嚴格先後順序)

    # 建立 Agent Team 的標準提示
    我需要建立一個 Agent Team 完成以下任務:
    
    【總目標】[一句話]
    
    【任務清單】(已確認互相獨立)
    1. [任務 A] → 負責人:Sonnet agent
    2. [任務 B] → 負責人:Sonnet agent
    3. [任務 C](需要架構決策)→ 負責人:Opus agent
    
    【共用規則】
    - 所有代碼遵守 CLAUDE.md
    - 任務完成後回報:完成的文件列表 + 測試通過狀態
    
    【資源限制】
    可用記憶體:[X]GB,請確認 agent 數量不超過安全上限。

    5. Hooks:讓機器自動做重複的事

    Hooks 是在特定事件(編輯後、提交前、排程)自動執行的腳本。設定一次,永久省力。

    三個最值得設定的 Hook

    Hook 1:編輯後自動格式化(after-edit)

    {
      "hooks": {
        "after-edit": {
          "command": "prettier --write $FILE && eslint --fix $FILE",
          "on_failure": "warn",
          "timeout": 30000
        }
      }
    }

    Hook 2:提交前強制測試通過(before-commit)

    {
      "hooks": {
        "before-commit": {
          "command": "npm run test -- --passWithNoTests && npm run lint",
          "on_failure": "block",
          "timeout": 120000
        }
      }
    }

    "on_failure": "block" 代表測試未通過時 commit 會被阻止,不是只警告。

    Hook 3:每週安全掃描(scheduled)

    {
      "hooks": {
        "scheduled": {
          "cron": "0 10 * * 6",
          "command": "npm audit fix && npm outdated",
          "on_failure": "warn"
        }
      }
    }

    這三個 Hook 每週省下約 60 分鐘,一年就是 52 小時。

    6. 降低來回、提高準確的通用技巧

    多文件上下文提示法

    要讓 Claude 了解跨文件的關係,不要一次只給一個文件,要同時提供:

    請先閱讀這三個文件後再開始:
    - src/types/invoice.ts(資料模型)
    - src/api/invoices.ts(現有 API)
    - docs/designs/invoice-search.md(本次設計文件)
    
    閱讀完成後告訴我你的理解,再開始實作。

    「閱讀完成後告訴我你的理解」這個確認步驟,能在執行前抓到 Claude 對現有代碼的誤解。

    邊界條件先行法

    把邊界條件和錯誤情況列在需求的最前面,而不是最後面。Claude 讀到越早的內容,優先度越高:

    # 不好的順序
    實作用戶登入功能,支援 email/password,記得處理密碼錯誤的情況
    
    # 好的順序
    實作用戶登入功能
    
    【錯誤情況(必須處理)】
    - 帳號不存在 → 401,訊息「帳號或密碼錯誤」(不透露哪個錯)
    - 密碼錯誤 → 401,同上訊息
    - 連續失敗 5 次 → 鎖定帳號 15 分鐘
    
    【正常流程】
    支援 email/password,成功回傳 JWT token

    分段確認法(適合複雜場景)

    不要一次把整個複雜需求丟給 Claude,分段完成並確認:

    1. 「先實作資料模型,不要碰 API 層,完成後給我看」
    2. (確認模型正確)「現在依照這個模型實作 API」
    3. (確認 API 正確)「現在寫整合測試」

    每一段都比整體更容易驗證,錯誤也更容易在早期被發現。

    明確說「不要做什麼」

    Claude 很善意,會主動補充它認為合理的東西。如果不想要這些補充:

    # 加上明確的範圍限制
    只修改 src/utils/tax.ts 這個文件,不要動 tests/ 目錄,
    不要重構現有函數,只新增 calculateVAT() 函數。

    整合使用:複雜功能的標準流程

    把上面所有技巧整合成一套可重複使用的流程:

    1. 確認 CLAUDE.md 存在且最新(一次性,專案生命週期)
    2. 寫設計文件(每個新功能,20–30 分鐘)
    3. 用「計劃→確認→執行」啟動任務(複雜任務用 Plan Mode)
    4. 分段驗證(模型 → API → 測試,每段確認一次)
    5. Hooks 自動把關(格式、測試、安全)

    這套流程把原本 10–15 輪的來回壓縮到 2–3 輪。

    常見問題

    Q:CLAUDE.md 要多詳細才夠?

    夠到「可以驗證」就夠了。「代碼要好維護」是沒用的規則,「函數超過 50 行必須拆分」是有用的規則。從最重要的 5 條開始,持續更新。

    Q:設計文件需求中途改了怎麼辦?

    先更新設計文件,再告訴 Claude「設計文件已更新,請依最新版本繼續,以下是改變的部分:[…]」。不要只口頭說需求變了,有文件才有依據。

    Q:Agent Teams 記憶體爆掉怎麼辦?

    立即執行 free -h 確認狀況,用 ps aux --sort=-%mem | head -20 找出佔用最多的 agent,優先結束 Opus 實例。恢復後先用 git status 確認哪些工作已完成,從斷點繼續而不是重頭來過。

    Q:Claude 輸出的代碼跟我的風格差很多?

    這幾乎都是 CLAUDE.md 不夠具體的問題。找一個你認為寫得好的現有文件,告訴 Claude「比照這個文件的風格」,然後把那個風格總結後加進 CLAUDE.md。