提示詞大公開:CLI 提示詞工程配置與驗(yàn)證)
1. Claude Code 系統(tǒng)提示詞到底長什么樣Claude Code 是 Anthropic 官方發(fā)布的 CLI 編程助手你在終端里敲claude之后它之所以能像一個(gè)有經(jīng)驗(yàn)的工程師那樣先讀代碼再動(dòng)手、不亂建文件、不隨便加注釋靠的不是模型本身「自覺」而是一套分層設(shè)計(jì)的系統(tǒng)提示詞在約束它。這套提示詞工程的核心思路是把「能力上限」和「行為約束」分開處理能力交給模型約束交給提示詞。很多人用 Claude Code 只停留在「能跑就行」但一旦你想讓它按團(tuán)隊(duì)規(guī)范干活比如禁止它自作主張重構(gòu)、禁止它給沒改過的代碼補(bǔ)注釋、要求它引用代碼時(shí)帶上file_path:line_number就必須理解系統(tǒng)提示詞的結(jié)構(gòu)并且知道怎么通過settings.json和項(xiàng)目級(jí)配置去覆蓋或追加規(guī)則。這篇就圍繞 Claude Code CLI 的系統(tǒng)提示詞結(jié)構(gòu)拆解、可復(fù)制的配置骨架、以及驗(yàn)證提示詞是否生效的完整操作步驟來寫面向的是天天在終端里用 CLI 的開發(fā)者。先說結(jié)論Claude Code 的系統(tǒng)提示詞不是一整塊文本而是分成「靜態(tài)內(nèi)容」和「動(dòng)態(tài)內(nèi)容」兩段中間用一條邊界標(biāo)記隔開。靜態(tài)部分可以全局緩存動(dòng)態(tài)部分每次會(huì)話都要重新計(jì)算。理解這條邊界是理解它為什么又快又穩(wěn)的關(guān)鍵。2. 系統(tǒng)提示詞的分層結(jié)構(gòu)與緩存邊界2.1 靜態(tài)層與動(dòng)態(tài)層的分界Claude Code 在源碼里定義了一個(gè)常量用來標(biāo)記靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容的分界export const SYSTEM_PROMPT_DYNAMIC_BOUNDARY __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__邊界之前是靜態(tài)內(nèi)容作用域是global可以被全局緩存邊界之后是動(dòng)態(tài)內(nèi)容跟當(dāng)前會(huì)話強(qiáng)相關(guān)不能緩存。這樣設(shè)計(jì)的好處很直接同一個(gè)組織下的多個(gè)用戶共享相同的靜態(tài)前綴緩存命中率大幅提升API 調(diào)用成本和延遲都降下來。靜態(tài)層通常包含這幾塊核心身份定義、系統(tǒng)運(yùn)作機(jī)制、任務(wù)執(zhí)行準(zhǔn)則、代碼風(fēng)格約束、行動(dòng)安全邊界、工具使用規(guī)范、輸出風(fēng)格。動(dòng)態(tài)層則包含當(dāng)前工作目錄、是否 git 倉庫、平臺(tái)、Shell 類型、操作系統(tǒng)版本、模型 ID、MCP 服務(wù)器指令、臨時(shí)目錄路徑。2.2 核心身份與安全邊界靜態(tài)層最開頭是身份定義大意是「你是一個(gè)幫助用戶完成軟件工程任務(wù)的交互式 agent使用下面的指令和可用工具來協(xié)助用戶」緊接著一條硬約束除非確信 URL 是在幫用戶做編程相關(guān)的事否則絕不生成或猜測 URL。這條約束的作用是防止模型在回答里編造鏈接。2.3 任務(wù)執(zhí)行準(zhǔn)則里的「先讀后改」任務(wù)執(zhí)行準(zhǔn)則這一段是提示詞工程里最值得抄的部分。它明確要求不要對(duì)你沒讀過的代碼提出修改除非絕對(duì)必要不要?jiǎng)?chuàng)建文件注意不要引入命令注入、XSS、SQL 注入等 OWASP Top 10 漏洞。這三條分別對(duì)應(yīng)三個(gè)真實(shí)痛點(diǎn)——瞎改、文件膨脹、安全漏洞。2.4 代碼風(fēng)格約束反過度工程化代碼風(fēng)格這一段直接針對(duì) AI 的「過度工程化」傾向原文約束包括不要添加超出要求的功能、重構(gòu)或「改進(jìn)」不要為不可能發(fā)生的場景添加錯(cuò)誤處理、回退或校驗(yàn)不要為一次性操作創(chuàng)建輔助函數(shù)、工具或抽象不要給你沒改過的代碼添加 docstring、注釋或類型標(biāo)注默認(rèn)不寫注釋只有當(dāng)「為什么」不明顯時(shí)才加一條不要解釋代碼在做什么因?yàn)槊己玫臉?biāo)識(shí)符已經(jīng)說明了。這幾條約束的價(jià)值在于它把「少即是多」變成了可執(zhí)行的規(guī)則而不是一句空泛的風(fēng)格建議。2.5 行動(dòng)安全邊界可逆性與影響范圍行動(dòng)安全邊界這一段引入了兩個(gè)判斷維度可逆性和影響范圍。本地、可逆的操作比如編輯文件、跑測試可以直接做難以逆轉(zhuǎn)或有風(fēng)險(xiǎn)的操作必須先跟用戶確認(rèn)。它列出的風(fēng)險(xiǎn)操作清單包括破壞性操作刪文件、刪分支、drop 數(shù)據(jù)庫表、rm -rf、難以逆轉(zhuǎn)的操作force-push、git reset --hard、修改已發(fā)布的 commit、對(duì)他人可見的操作推送代碼、創(chuàng)建或關(guān)閉 PR、發(fā)消息。2.6 工具使用規(guī)范與輸出風(fēng)格工具使用規(guī)范要求專用工具優(yōu)先于通用命令讀文件用 Read 而不是cat、head、tail、sed編輯文件用 Edit 而不是sed、awk創(chuàng)建文件用 Write 而不是 heredoc 或 echo 重定向Bash 只保留給系統(tǒng)命令。同時(shí)鼓勵(lì)在單次響應(yīng)里并行調(diào)用多個(gè)工具以提高效率。輸出風(fēng)格這一段要求只有用戶明確要求時(shí)才用 emoji響應(yīng)要簡短精煉引用具體函數(shù)時(shí)帶上file_path:line_number工具調(diào)用前不要用冒號(hào)。輸出效率部分強(qiáng)調(diào)直奔主題、先試最簡單的方法、保持文本輸出簡短直接只聚焦需要用戶輸入的決定、自然里程碑處的高層狀態(tài)更新、以及會(huì)改變計(jì)劃的錯(cuò)誤或阻塞。3. 用 settings.json 落地你自己的提示詞配置理解了結(jié)構(gòu)接下來是實(shí)操。Claude Code 允許你通過配置文件追加自定義指令而不必去改它的源碼。下面是一份可以直接復(fù)制的settings.json骨架放在項(xiàng)目根目錄的.claude/settings.json或者用戶級(jí)的~/.claude/settings.json。{ permissions: { allow: [ Read, Edit, Write, Bash(git status), Bash(git diff:*), Bash(npm test:*) ], deny: [ Bash(rm -rf:*), Bash(git push --force:*), Bash(git reset --hard:*) ] }, env: { CLAUDE_CODE_ENABLE_TELEMETRY: 0 } }permissions.allow和permissions.deny是權(quán)限模式的具體落地。把rm -rf、git push --force、git reset --hard放進(jìn) deny等于把系統(tǒng)提示詞里「風(fēng)險(xiǎn)操作需確認(rèn)」的規(guī)則變成了硬攔截比單純靠模型自覺更可靠。如果你想讓 Claude Code 遵循團(tuán)隊(duì)規(guī)范可以在項(xiàng)目里放一個(gè)CLAUDE.md它會(huì)作為項(xiàng)目級(jí)指令被注入。下面是一份針對(duì)「禁止過度工程化」的追加指令片段## 項(xiàng)目編碼規(guī)范 - 只修改與當(dāng)前任務(wù)直接相關(guān)的代碼不做順手重構(gòu)。 - 不新增未被要求的抽象層、工具函數(shù)或配置文件。 - 不為不可能發(fā)生的分支寫防御性代碼。 - 注釋只寫「為什么」不寫「是什么」。 - 引用代碼位置時(shí)統(tǒng)一使用 path/to/file.ts:42 格式。 - 提交前必須運(yùn)行 npm run lint 和 npm test失敗要如實(shí)報(bào)告輸出。這份CLAUDE.md會(huì)被拼接到系統(tǒng)提示詞的動(dòng)態(tài)層之后優(yōu)先級(jí)高于默認(rèn)的靜態(tài)約束所以你可以用它來收緊或放寬默認(rèn)行為。4. 驗(yàn)證提示詞是否真的生效配置寫完不代表生效必須驗(yàn)證。下面給出可跟做的 CLI 操作步驟。第一步確認(rèn)配置文件被讀取。在項(xiàng)目根目錄執(zhí)行claude --version claude config listclaude config list會(huì)打印當(dāng)前生效的配置項(xiàng)檢查你寫的permissions是否出現(xiàn)在輸出里。如果沒有說明文件路徑不對(duì)注意項(xiàng)目級(jí)是.claude/settings.json用戶級(jí)是~/.claude/settings.json。第二步驗(yàn)證 deny 規(guī)則是否攔截。直接在交互模式里讓它執(zhí)行一個(gè)被禁的命令claude -p 幫我執(zhí)行 rm -rf ./dist 清理構(gòu)建產(chǎn)物如果配置生效Claude Code 會(huì)拒絕執(zhí)行并提示該命令在 deny 列表里而不是直接跑掉。這一步是驗(yàn)證權(quán)限配置最直接的方式。第三步驗(yàn)證項(xiàng)目指令是否注入。用-p模式問一個(gè)能觸發(fā)規(guī)范的問題claude -p 給 src/utils/date.ts 里的 formatDate 函數(shù)加個(gè)注釋如果CLAUDE.md里的「注釋只寫為什么」生效它應(yīng)該拒絕給一個(gè)命名清晰的函數(shù)加「是什么」類注釋或者只在你說明「為什么」不明顯的場景下才加。如果它老老實(shí)實(shí)加了一行// 格式化日期說明你的項(xiàng)目指令沒被讀到。第四步驗(yàn)證輸出格式約束。問一個(gè)需要引用代碼的問題claude -p src/api/client.ts 里請(qǐng)求超時(shí)是在哪一行處理的生效時(shí)它應(yīng)該返回類似src/api/client.ts:88的引用格式而不是籠統(tǒng)地說「在請(qǐng)求部分」。第五步檢查緩存邊界是否影響行為。這一步偏進(jìn)階你可以連續(xù)兩次問同一個(gè)靜態(tài)問題觀察第二次響應(yīng)是否更快。如果靜態(tài)層緩存生效第二次的延遲會(huì)明顯下降。注意動(dòng)態(tài)層內(nèi)容比如當(dāng)前目錄變化時(shí)緩存會(huì)失效這是預(yù)期行為。5. 本篇常見錯(cuò)排查配置不生效九成出在路徑和優(yōu)先級(jí)上。下面按現(xiàn)象列排查思路?,F(xiàn)象一claude config list里看不到自己寫的權(quán)限。原因通常是文件放錯(cuò)位置。項(xiàng)目級(jí)配置必須在項(xiàng)目根目錄的.claude/settings.json不是settings.json也不是.claude/config.json。用戶級(jí)在~/.claude/settings.json。兩者同時(shí)存在時(shí)項(xiàng)目級(jí)優(yōu)先?,F(xiàn)象二deny 規(guī)則寫了但沒攔住。檢查命令匹配模式。Bash(rm -rf:*)里的:*是通配后綴表示rm -rf后面可以跟任意參數(shù)。如果你寫成Bash(rm -rf)只有完全等于rm -rf的命令才會(huì)被攔帶參數(shù)的不會(huì)命中?,F(xiàn)象三CLAUDE.md寫了但模型不遵守。先確認(rèn)文件名大小寫必須是全大寫CLAUDE.md。其次確認(rèn)它在項(xiàng)目根目錄子目錄里的CLAUDE.md只在處理該子目錄文件時(shí)才注入。最后指令要具體可執(zhí)行「寫高質(zhì)量代碼」這種空話模型沒法遵守「不新增未被要求的抽象層」才能落地?,F(xiàn)象四模型還是給沒改過的代碼加注釋。這通常是因?yàn)槟愕淖芳又噶詈湍J(rèn)靜態(tài)約束沖突而追加指令寫得不夠強(qiáng)硬。把「不要給未修改的代碼加注釋」明確寫進(jìn)CLAUDE.md并加上「即使看起來有幫助也不要加」這樣的強(qiáng)化措辭。現(xiàn)象五引用代碼不帶行號(hào)。檢查你是否在CLAUDE.md里明確要求了格式。默認(rèn)靜態(tài)層只要求「引用具體函數(shù)時(shí)包含file_path:line_number」如果你問的是文件級(jí)問題它可能只給路徑。把要求擴(kuò)展到「任何代碼位置引用都必須帶行號(hào)」即可?,F(xiàn)象六并行工具調(diào)用沒生效。這屬于模型行為不是配置問題。你可以在指令里顯式鼓勵(lì)「當(dāng)多個(gè)讀取或搜索操作互不依賴時(shí)請(qǐng)?jiān)趩未雾憫?yīng)里并行調(diào)用」。但要注意并行調(diào)用受權(quán)限模式影響如果某個(gè)工具需要確認(rèn)會(huì)打斷并行。6. 把提示詞工程變成日常習(xí)慣系統(tǒng)提示詞的價(jià)值不在于你讀懂了它而在于你能用它約束出一個(gè)穩(wěn)定、可預(yù)期的編碼助手。我的做法是把CLAUDE.md當(dāng)成項(xiàng)目的一部分提交到倉庫團(tuán)隊(duì)每個(gè)人拉下來就有一致的行為基線新人不用口頭交代規(guī)范Claude Code 自己會(huì)遵守。如果你還沒開始用 Claude Code或者想先低成本試一下模型對(duì)話和 API 接入可以從 https://taotoken.net/api 拿到 API Key配合接入文檔把 CLI 跑起來。想先驗(yàn)證模型行為再?zèng)Q定要不要長期用可以直接在模型對(duì)話里試如果是長期編碼或跑 Agent 任務(wù)Coding Plan 更劃算。配置骨架和驗(yàn)證步驟都在上面了照著改一遍你就能看到系統(tǒng)提示詞對(duì) Claude Code 行為的實(shí)際影響。