每次客戶說「AI 做錯事了」,阿凱就順手在客戶的 CLAUDE.md 裡多加一條禁令,久而久之每份 CLAUDE.md 都疊到好幾百行
這篇文章的作者是 Anthropic 自己(也就是打造 Claude 的公司),在官方部落格上罕見地公開一段「我們怎麼改自己家AI助理說明書」的內幕。主角是一件事:他們把 Claude Code(讓 Claude 幫你寫程式的工具)背後的 system promptAI助理在每次對話開始前,看不到但一定會先讀的『開場說明書』,硬生生刪掉超過八成內容,拿到最新一代模型(像 Claude Opus 5、Claude Fable 5)身上測試,寫程式的評測分數完全沒有掉。
為什麼要特別提這件事?因為這牽涉到一門叫做 context engineering把『餵給AI的所有背景資料』整體設計好,讓AI能穩定做出你要的結果,而不只是寫一句提示詞而已 的功夫。跟你隨口問AI一句話不一樣,這是在幫AI打造一整套「它每次工作前一定會看到」的環境——包含系統提示詞、CLAUDE.md放在專案資料夾裡、AI進場前必讀的規則文件,用來告訴AI這個專案的規矩,還有它自己記住的東西。這套環境設計得好不好,直接決定AI做出來的結果好不好。
Anthropic 內部翻自己的使用紀錄時,發現一件尷尬的事:同一次請求裡,系統提示詞說「該留文件就留」,某個 skills(技能)AI可以視情況主動載入的一包做事說明書,用不到就不會佔用它的注意力 又說「禁止加註解」,兩邊互相打架,AI 得先花力氣猜「這次到底要聽誰的」才能真正動手做事。這種規則疊規則的做法,在能力有限的舊模型上曾是必要的防呆機制,但對判斷力更強的新模型來說,反而變成拖累。
| 面向 | 過去做法(Then) | 現在做法(Now) |
|---|---|---|
| 給AI的指示 | 條列每種情況的硬性規則,愈寫愈多 | 讓AI依情境自行判斷,只留關鍵防線 |
| 記憶與規則存放 | 全部塞進同一份CLAUDE.md | 拆成 memory、artifacts、skills 分工存放 |
| 防呆心態 | 先假設AI會亂來,處處設限 | 先信任AI的判斷力,只防真正的最壞情況 |
| 維護方式 | 規則只增不減,一路往上疊 | 定期用 /doctor 之類的工具回頭健檢瘦身 |
這段程式在做的事:把一份 CLAUDE.md(或任何規則文件)逐行掃過,找出裡面『禁止』『必須』這類絕對型規則字眼,算出密度,讓你知道規則是不是疊太多了。
ABSOLUTE_WORDS = ["禁止", "必須", "不得", "MUST", "DO NOT", ...]lines = path.read_text(encoding="utf-8").splitlines()for i, line in enumerate(lines, start=1):for word in ABSOLUTE_WORDS:if word in line:hits.append((i, word, line.strip()))density = len(hits) / total_lines * 100這是一個真實小專案:下載(或複製)檔案,照步驟在你電腦上跑起來。
# -*- coding: utf-8 -*-
# 簡易 CLAUDE.md 規則健檢工具
import sys
from pathlib import Path
ABSOLUTE_WORDS = ["禁止", "必須", "不得", "一律", "絕對不可", "嚴禁", "禁用", "MUST", "DO NOT", "NEVER", "ALWAYS"]
def audit(file_path):
path = Path(file_path)
if not path.exists():
print("找不到檔案:" + file_path)
return
lines = path.read_text(encoding="utf-8").splitlines()
total_lines = len(lines)
hits = []
for i, line in enumerate(lines, start=1):
for word in ABSOLUTE_WORDS:
if word in line:
hits.append((i, word, line.strip()))
break
print("檔案:" + file_path)
print("總行數:" + str(total_lines))
print("「絕對型規則」行數:" + str(len(hits)))
if total_lines:
density = len(hits) / total_lines * 100
print("規則密度:{:.1f}%".format(density))
print("")
print("以下是每一條絕對型規則,請逐條自問「這條還有必要嗎?」:")
for line_no, word, text in hits:
print(" 第 " + str(line_no) + " 行(關鍵字:" + word + "):" + text)
if total_lines and len(hits) / total_lines > 0.3:
print("")
print("提示:規則密度偏高,建議參考文章原則做一次健檢瘦身。")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法:python claude_md_audit.py 你的檔案路徑.txt")
else:
audit(sys.argv[1])
# 範例專案規則
本專案使用 Python 撰寫小工具。
必須在每個函式加上型別註記。
禁止在正式程式碼留下 print 除錯訊息。
一律使用 UTF-8 編碼讀寫檔案。
不得刪除既有的測試案例。
如果不確定某個決定,你可以自行判斷後說明理由。
文件視情況更新,不用每次都寫。
DO NOT add comments unless the logic is non-obvious.