AIDive

Gói video

Xóa CLAUDE.md của bạn, có đo đạc: bảng ablation, checklist và nguồn

11 phút đọc

TL;DR

  • Trên một repo thật với CLAUDE.md dài 177 dòng, 3 skill và 1 hook, xóa sạch mọi thứ chỉ làm hỏng đúng một quy tắc, trong đúng một tình huống: quy tắc i18n trên một file hoàn toàn mới. Mọi quy ước khác vẫn giữ nguyên vì code xung quanh đã dạy sẵn.
  • File này tốn 4 đến 14% số token đọc ở những tác vụ có kết quả giống hệt nhau, khoảng một đô trên mười. Con số tiết kiệm 32% nổi bật bị chi phối bởi một tác vụ duy nhất, nơi file khiến model phải làm nhiều việc hơn.
  • Skill và hook không tốn gì đo được: skill chỉ nạp khi được gọi mà không skill nào được gọi, hook chỉ chèn một câu.
  • Phần tổng quan kiến trúc dài 82 dòng không mang lại gì cho câu hỏi về kiến trúc: sáu câu trả lời, đều đúng, dù có file hay không.
  • "Delete" theo lời của chính Anthropic nghĩa là ablate rồi chuyển sang progressive disclosure, không phải xóa trắng. Giữ những quy tắc mà code không dạy được, chuyển phần còn lại sang file rules và skill, và biến các điều bất khả xâm phạm thành hook.
  • Hai lần chạy mỗi cấu hình chỉ là mức sàn, không phải kết luận: chênh lệch theo từng tác vụ dưới 15% nằm trong nhiễu giữa các lần chạy.

What the measurements say

Bài nói mà ai cũng bàn tán nói hai điều, và điều thứ hai hay bị bỏ qua. Boris Cherny xác nhận trên sân khấu rằng Claude Code đã xóa 80% system prompt, và ông mô tả phương pháp: xóa toàn bộ system prompt, rồi đưa từng dòng trở lại để đo tác động của mỗi dòng s2. Đoạn "every 6 months" nằm ở 00:06:58 đến 00:07:05, và cách nói là "really do recommend", không phải "strongly recommend" s1. Hai câu được gán rộng rãi cho ông thực ra không có trong bài nói: "context, goals and a definition of done" (cụm gần nhất thật sự ở 15:22 là "describe the task, the guardrails, the exit criteria") và "64 agents". Ông nói "eleven days" và khi được hỏi số agent thì trả lời "I'm not sure" s2. Con số 64 thuộc về bài viết về việc viết lại Bun: "64 Claudes running for 11 days", khoảng 165.000 đô theo giá API, 9 tỷ token đầu vào không cache, 690 triệu token đầu ra và 72 tỷ lượt đọc token đầu vào từ cache s14.

Cơ chế khiến mọi điều này đo được là việc nạp context. CLAUDE.md và các file rules được chèn vào ở mỗi lượt; skill chỉ nạp khi được gọi. Tài liệu về memory cũng có hướng dẫn kích thước mà ai cũng diễn giải lại: "target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence." s4. Bản viết của Anthropic coi CLAUDE.md tập trung cho cả repo là một huyền thoại và hướng tới progressive disclosure cùng auto-memory s3.

Nghiên cứu có đối chứng duy nhất trước chúng tôi là bài báo của ETH về AGENTS.md: 138 issue trên 12 repo, và "providing context files does not generally improve task success rates, while increasing inference cost by over 20% on average". File do developer commit vượt file do LLM sinh ra trung bình 7%, và những chỉ dẫn nêu tên công cụ cụ thể thì có ích s5.

Hai dữ liệu về nội dung các file và cách chúng được đọc. Trên 28.721 repo và 165.063 file, file chỉ dẫn trung vị có 50 mục nội dung, trong đó 12 là chỉ thị thực sự; tác giả đặt vấn đề rằng chỉ 27% file đang làm đúng việc bạn nghĩ s8. Trong một thí nghiệm có đối chứng với hai chỉ dẫn mâu thuẫn thật sự, chuyển một quy tắc từ đầu file xuống cuối file làm tần suất model tuân theo thay đổi khoảng 90 điểm, từ gần như không bao giờ đến gần như luôn luôn s9. Cùng nhà xuất bản này vạch ra ranh giới mà thí nghiệm của chúng tôi theo: ablation không phải là xóa, và hook là cơ chế cưỡng chế, chúng không hết hạn khi model nâng cấp s7.

Hai giả định không chính thức khớp với kết quả của chúng tôi. Một CLAUDE.md 1.000 dòng so với bản rút gọn khoảng 20 dòng trên cùng các GitHub issue với cùng model: kiến trúc vẫn giữ, quy tắc nhà thì hỏng s6. Một người bình luận chuyển mọi thứ sang progressive disclosure báo cáo context tự nạp giảm từ ~35k token xuống ~4.5k mỗi phiên, không mất tri thức nào s11. Để chấm điểm ablation skill có một công cụ: --ablate của caliper bao phủ skill và MCP server, còn compare báo cáo tỷ lệ thành công, token và thời gian chạy; việc hoán đổi CLAUDE.md vẫn làm thủ công s16.

Measurements

Quy trình: một repo Expo / React Native riêng tư (1.021 file được theo dõi), CLAUDE.md 177 dòng, 7.243 ký tự, khoảng 1.800 token, 3 skill, 4 slash command, 1 hook PreToolUse. Model cố định claude-opus-5 cho mọi lần chạy, Claude Code 2.1.278, claude -p headless, --max-turns 40, thư mục cấu hình người dùng để trống, không MCP, clone mới được reset trước mỗi lần chạy. Năm tác vụ hằng ngày (component mới, sửa component, refactor helper dùng chung, lưu một field của store, giải thích một luồng dữ liệu), ablation từng phần một. 44 lần chạy, 38,97 đô theo giá API, 92 phút thời gian chạy của agent. Chấm điểm: các quy tắc nhà của chính repo trên các dòng được thêm, tsc --noEmit, eslint, câu trả lời chấm tay.

Chất lượng, cái gì đã hỏng:

cấu hình số lần chạy sửa vi phạm quy tắc nhà lỗi tsc mới lỗi eslint
A đầy đủ 8 0 0 0
B không CLAUDE.md 8 1 (heading mới viết cứng, không có .content.ts) 0 0
C không skill 4 0 0 0
D không hook 4 0 0 0
E không gì cả 8 2 (heading viết cứng hai lần, không có .content.ts) 0 0

Chi phí mỗi lần chạy, trung bình theo các lần chạy của cấu hình (token = lượt đọc cache, tức context được đọc lại ở mỗi lượt):

cấu hình số lần chạy $ / lần lượt / lần token đọc / lần
A đầy đủ 10 0.95 25.6 829k
B không CLAUDE.md 10 0.74 21.9 568k
C không skill 5 0.96 28.2 819k
D không hook 5 0.96 27.8 851k
E không gì cả 10 0.85 25.7 655k

Theo từng tác vụ, A so với B (trung bình của 2 lần chạy mỗi bên):

tác vụ A $ B $ chi phí token đọc
T1 component mới 1.72 0.96 -44% -61%
T2 sửa component 1.49 1.26 -15% -15%
T3 refactor 0.64 0.63 -1% -5%
T4 store 0.57 0.53 -6% -4%
T5 câu hỏi 0.34 0.31 -9% -14%
cả 10 lần chạy 9.51 7.40 -22% -32%

Cách đọc các bảng. Không có CLAUDE.md, 3 trong 4 lần chạy component mới viết heading thành chuỗi thường; có file thì 4 trên 4 tạo .content.ts với EN và FR. Ở tác vụ sửa, mọi cấu hình, kể cả E, đều đặt chuỗi mới vào .content.ts: các file bên cạnh đã mang sẵn quy ước. Mọi thứ khác đều giữ trong cả 44 lần chạy: 0 import tương đối, type thay vì interface trong sáu lần sửa file types, design token trong mọi diff, 0 màu hex, không có barrel file. Có một chỉ dẫn không ai làm theo được: file bảo import theme từ @design-tokens, một alias không tồn tại trong tsconfig.json; không lần chạy nào ở cấu hình nào dùng nó, 1.800 token đọc vô ích ở mỗi phiên. Mức tiết kiệm ở T1 là do lần chạy rẻ hơn làm ít việc hơn. Phương sai giữa các lần chạy lớn hơn hầu hết tác động của cấu hình: T1 với cấu hình đầy đủ tốn 2.11 đô rồi 1.33 đô. Một lần đối chứng với đồ thị code 333 MB cho kết quả sát cấu hình đầy đủ (1.59 so với 1.72 đô ở T1, 0.38 so với 0.34 đô ở T5): khối đồ thị và hook không thay đổi gì đo được.

Do this Monday

  • Đếm CLAUDE.md của bạn: số dòng, số ký tự, và số dòng thực sự là chỉ thị (Always, Never, Use, Prefer). Phần còn lại là context mà model đọc lại ở mỗi lượt.
  • Chọn một quy ước trong mỗi mục và kiểm tra xem file bên cạnh đã thể hiện nó chưa. Nếu ba file trong thư mục tuân theo quy tắc đó, dòng ấy là ứng viên để xóa.
  • Tìm quy tắc mà code không dạy được trên một file hoàn toàn mới (i18n, telemetry, header giấy phép, một bước đăng ký bắt buộc). Giữ nó, viết trong một dòng, và đặt gần đầu file.
  • Thử mọi đường dẫn import và lệnh mà file của bạn nhắc tới. Một alias chết hoặc một script đã đổi tên là chỉ dẫn không ai làm theo được.
  • Chuyển các phần tổng quan kiến trúc dài và hướng dẫn cài đặt sang file rules hoặc skill nạp theo yêu cầu, rồi so sánh context tự nạp trước và sau.
  • Biến hai hoặc ba điều bất khả xâm phạm của bạn thành hook hoặc quy tắc lint. Cưỡng chế không phụ thuộc vào việc model có đọc một đoạn văn hay không.
  • Chạy hai tác vụ phổ biến nhất của bạn hai lần có file và hai lần không có, trên model cố định, rồi đọc token và diff. Hai lần chạy cho biết nên nhìn vào đâu, không cho biết nên kết luận gì.

Go further

  • Chính bài nói, để lấy phương pháp thay vì câu trích: xóa, rồi đưa từng dòng trở lại s2.
  • Toàn bộ kết quả của bài báo, gồm phát hiện file do developer commit hơn file sinh tự động 7% và việc nêu tên công cụ có ích s5.
  • Vị trí quy tắc như một biến số: mức chênh khoảng 90 điểm và cách model âm thầm giải quyết các chỉ dẫn mâu thuẫn s9.
  • Giải phẫu file chỉ dẫn trên 30k repo: 50 mục, 12 chỉ thị, và 38 mục còn lại là gì s8.
  • Hướng dẫn của HumanLayer về cách viết CLAUDE.md tốt và thread tranh luận với nó s10.
  • Thread "MUST use agent, ignored 80% of the time": một trường hợp cho hook khi văn xuôi thất bại s12.
  • Thread "Claude Code now ignores everything", hữu ích để tách model drift khỏi xung đột chỉ dẫn s13.
  • caliper, để chấm điểm ablation skill và MCP bằng tỷ lệ thành công, token và thời gian chạy s16.

Sources

FAQ

Tôi có nên xóa CLAUDE.md của mình không?

Đừng làm mù quáng. Trên repo của chúng tôi, thiệt hại duy nhất là một quy tắc trên file mới; mọi thứ code đã thể hiện sẵn đều giữ nguyên khi không có file. Hãy ablate từng mục một và giữ những gì làm thay đổi kết quả.

Vì sao file tiết kiệm 32% token nếu nó chỉ tốn 4 đến 14%?

Vì con số tổng bị chi phối bởi tác vụ component mới, nơi file khiến model viết thêm một file thứ hai bằng hai ngôn ngữ. Lần chạy rẻ hơn đã làm ít việc hơn. Ở các tác vụ có kết quả giống hệt nhau, mức tiết kiệm là 4 đến 14%.

Skill và hook có tốn token ở mỗi lượt không?

Skill chỉ nạp khi được gọi, nên skill không được gọi thì không tốn gì; hook chỉ chèn một câu. Xóa cả hai không làm thay đổi con số nào trong các lần chạy của chúng tôi. File rules và CLAUDE.md mới là thứ được đọc lại ở mỗi lượt.

Hai lần chạy mỗi cấu hình có đủ không?

Không. Hai lần chạy giúp định vị tác động, không đo được độ lớn. Cấu hình đầy đủ của chúng tôi tốn 2.11 đô rồi 1.33 đô trên cùng một tác vụ, nên chênh lệch theo tác vụ dưới 15% nằm trong nhiễu.