跳至主要內容

給 Claude 上下文:CLAUDE.md 和更好的提示詞

昨日已更新

Claude Code 開箱即用效果不錯,但一旦它了解你的專案慣例並養成一些提示詞習慣後,效果會明顯提升。本指南涵蓋兩者。


第 1 部分 — CLAUDE.md:你的專案記憶

它是什麼

CLAUDE.md 是一個純 Markdown 檔案,Claude 會在該目錄中的每個會話開始時自動讀取。把它想像成你會在新隊友第一天早上給他們的簡報:團隊如何做事、要避免什麼,以及重要部分在哪裡。

你不需要在提示詞中引用它或手動附加它。如果檔案存在,Claude 已經讀過了。

它在哪裡

Claude 會在幾個地方查找並合併找到的內容,從廣泛到具體:

位置

範圍

適合用於

~/.claude/CLAUDE.md

你機器上的每個專案

個人偏好(例如,"我用 pnpm,不用 npm" 或 "總是建議測試")。

<repo-root>/CLAUDE.md

這個專案

架構、慣例和命令。這是主要的。

<subdir>/CLAUDE.md

該子目錄(當 Claude 讀取該目錄中的檔案時按需加載,不在會話開始時)

模組特定規則(例如,frontend/api/ 中的不同慣例)。

大多數團隊只需要專案根目錄檔案。將其提交到 git,讓整個團隊受益。

它如何被加載(以及成本是多少)

工作目錄及其上方的檔案在會話開始時被讀取,並作為系統提示之後的用戶消息立即傳遞給 Claude(不嵌入系統提示本身)。子目錄 CLAUDE.md 檔案在稍後按需加載,當 Claude 讀取該子目錄中的檔案時。沒有摘要或截斷,也不會在每個回合重新從磁碟讀取。如果你在會話中編輯檔案,下次運行 /compact 或通過 /memory 打開時會選取更改;否則在你的下一個會話生效。

對於 Claude for Enterprise 客戶,成本情況比 "在每個請求上加載" 可能暗示的要好。Claude Code 對 CLAUDE.md 應用 Anthropic 的提示快取。會話中的第一個請求支付檔案的完整輸入令牌價格;大約五分鐘內的後續請求命中快取,按低得多的快取讀取率計費。快取是內容尋址的,所以對 CLAUDE.md 的任何更改都會使其失效,下一個請求再次支付全價。

實際上,這意味著一個相當大的 CLAUDE.md 每個會話支付一次完整令牌,加上任何足夠長的空閒間隙後一次(快取過期),而不是每條消息一次。保持檔案精簡以節省上下文窗口空間和信噪比仍然值得,但你不需要純粹為了控制每條消息支出而限制行數。在 Enterprise 使用儀表板中,檔案的佔用空間幾乎完全顯示為快取讀取令牌,而不是標準輸入令牌。

入門:運行 /init

在任何專案中,輸入 /init。Claude 將探索程式碼庫並為你起草一個 CLAUDE.md,涵蓋構建命令、測試命令、結構概述和它檢測到的任何慣例。檢查草稿,刪除任何不準確的內容,並提交。這大約需要五分鐘,但永久值得。

實際上應該包含什麼

目標是一個簡短且信號密集的檔案 — 大約 200 行以下。每一行都會在每個請求上加載到上下文中,所以每一行都應該值得其成本。

值得包含:

  • 命令 — 如何構建、測試、檢查和本地運行。Claude 會執行這些,所以準確性很重要。

  • 慣例 — 命名、錯誤處理、檔案佈局和 "我們用 X,不用 Y" 的決定。

  • 三句話的架構 — 主要部分是什麼以及它們如何通信。

  • 硬約束 — 例如,"永遠不要從測試寫入生產資料庫," "所有 API 路由都需要認證中間件," 或 "不要編輯 generated/。"

  • 已知陷阱 — 每個新工程師都會遇到的問題。

不值得包含:

  • 完整的 API 文件(Claude 可以直接讀取程式碼)。

  • 變更日誌或歷史。

  • 檔案樹中已經很明顯的任何內容。

  • 團隊實際上不遵循的理想規則。

多久更新一次

把它當作一個活的入職文件,而不是規格。

  • /init 之後 — 檢查一次以清理生成的草稿。

  • 當 Claude 兩次出錯時 — 這是一個規則缺失的信號。添加一行來解決它。

  • 當慣例改變時 — 例如,新框架、測試運行器或一組新的檢查規則。

  • 季度檢查 — 刪除任何過時的內容,因為過時的說明比沒有更糟。

你也可以在會話中添加:打開 /memory 直接編輯檔案,或只是要求 Claude "記住" 一條規則,它會為你將其附加到正確的 CLAUDE.md


第 2 部分 — 在 Claude Code 中值得的提示詞習慣

這些不是通用的提示詞工程技巧;它們是當 Claude 讀取和編輯真實程式碼庫時最重要的習慣。

1. 陳述結果,而不是步驟

Claude 可以自己探索程式碼庫。告訴它你想要什麼為什麼,讓它自己找出在哪裡

❌ "打開 userService.ts,找到 validate 函數,在第 42 行添加空值檢查。"

✅ "沒有電子郵件的用戶正在使驗證步驟崩潰。讓它優雅地處理並添加測試。"

2. 逐字給它錯誤

粘貼完整的堆棧跟蹤,而不是總結它。確切的檔案名、行號和消息是允許 Claude 快速找到正確位置的原因。

3. 用計畫模式先確定大任務的範圍

對於涉及多個檔案的任何事情,按 Shift+Tab 兩次進入計畫模式(第一次按進入 acceptEdits)並詢問:

"計畫你如何向公共 API 添加速率限制。暫時不要改變任何東西。"

檢查計畫,在對話中調整它,然後切換模式並說 "執行第 1 步。" 這會在誤解變成十二檔案差異之前捕捉它。

4. 當你已經知道檔案時指向它們

Claude 可以自己搜索程式碼庫,但如果你已經知道相關檔案,就說出來 — 這更快且使用更少的令牌。使用 @ 引用路徑,例如 @src/auth/login.ts

5. 說出 "完成" 是什麼樣子

例子包括 "測試通過," "匹配其他處理程序的風格," 或 "沒有新依賴。" 預先陳述驗收標準比多輪修訂更有效率。

6. 每個對話一個任務;它們之間 /clear

長會話會積累噪音。當你從 "修復登錄錯誤" 切換到 "重構計費模組" 時,運行 /clear 並重新開始。你的 CLAUDE.md 帶著持久的上下文向前,所以聊天歷史不需要。

7. 像對待同事一樣糾正它,而不是搜尋引擎

如果第一個答案不對,你不需要重新表述整個請求。只需說出什麼是錯誤的 — 例如,"那改變了公共 API;保持簽名相同。" Claude 會保留其他一切並只調整那一點。


快速參考

想要…

做這個

生成起始 CLAUDE.md

/init

查看 Claude 正在使用什麼記憶

/memory

在會話中添加規則

打開 /memory,或要求 Claude "記住" 規則

重新開始但保留專案記憶

/clear

在提示詞中引用特定檔案

@path/to/file

是否回答了您的問題?