AIDive

Tôi Xóa CLAUDE.md Và Đo Xem Cái Gì Hỏng

Bởi AIDive · Đăng ngày

Coding agent

Đã xóa, đã đo, một luật hỏng

Xóa một file CLAUDE.md nghĩa là gỡ bỏ file hướng dẫn mà Claude Code đọc vào đầu mỗi cuộc hội thoại. Boris Cherny, người tạo ra Claude Code, đã nói trên sân khấu là hãy xóa nó mỗi sáu tháng. Hai mươi hai video nhắc lại lời anh ấy trong bảy tuần. Không video nào mở một repository ra xem.

Bài viết này làm điều mà các video kia không làm: lấy một app thật với một file CLAUDE.md 177 dòng, ba skill, bốn command và một hook, chạy năm tác vụ hằng ngày với file đó và không có nó, rồi đếm. Sau bốn mươi bốn lần chạy, đúng một luật bị hỏng. File này tốn token ở mọi tác vụ, không bao giờ cùng một mức, và một trong các dòng của nó không ai theo được.

Đoạn clip, nguyên văn, và hai câu không phải của anh ấy

Đoạn clip đến từ bài nói của Boris Cherny tại YC Startup School, được ghi hình một ngày sau khi Opus 5 ra mắt. Lời anh ấy: cứ mỗi sáu tháng, xóa CLAUDE.md của bạn, xóa skill của bạn, xóa hook của bạn. Xem model làm gì, nó có thể khiến bạn bất ngờ. Với Opus 5, anh ấy nói, Anthropic thực sự khuyến nghị thử điều đó: model có thể không cần tất cả những hướng dẫn đó nữa.

Ba mươi giây trước đó là lời cảnh báo mà không ai trích dẫn. Anthropic không xóa toàn bộ code base. Họ xóa rất nhiều, và gọi đó là một ablation. Bản transcript viết đầy đủ giữ lại câu đó cho đến hôm nay. Tám mươi phần trăm system prompt của Claude Code đã đi theo hướng đó: xóa hết, đưa từng phần trở lại, đo từng dòng.

Hai câu mà các video phản ứng gán vào miệng anh ấy không có trong bài nói. "Context, mục tiêu, và định nghĩa hoàn thành" không xuất hiện ở đâu cả; gần nhất anh ấy nói là task, guardrail, exit criteria. "Sáu mươi bốn agent viết lại Bun" cũng không phải con số của anh ấy: đó là con số của Jarred Sumner, trong bài viết về Bun. Cherny nói mười một ngày, và khi được hỏi con số, anh ấy đoán là hàng nghìn.

Hai mươi hai video trong bảy tuần trích dẫn đoạn clip. Không video nào chạy thử nghiệm. Vậy nên bài viết này làm đúng những gì anh ấy thực sự mô tả: xóa, đưa từng phần trở lại, đo lường.

Công cụ: ablation, không phải xóa bỏ

Một ablation gỡ từng phần của một cấu hình và đo tác động, thay vì xóa hết rồi đoán. CLAUDE.md được đọc vào đầu mỗi cuộc hội thoại và lại được đọc ở mỗi lượt; skill chỉ tải khi được gọi. Sự khác biệt đó chính là điều được đo.

Anthropic cung cấp sẵn công tắc xóa: một cờ đơn giản, cùng biến mà Cherny nhắc đến trên sân khấu. Repository là một app thật của tôi: 177 dòng hướng dẫn, ba skill, bốn command, và một hook kích hoạt ở mỗi lần tìm kiếm.

Chiều đo Giá trị
Tác vụ hằng ngày 5 (component mới, chỉnh sửa, refactor, thay đổi store, câu hỏi kiến trúc)
Cấu hình 5 (đầy đủ, không file, không skill, không hook, không gì cả)
Model một, cố định
Môi trường thư mục config trống, clone mới trước mỗi lần chạy
Lượt chạy 44
Chi phí $39

Mỗi lượt chạy được chấm điểm theo cùng một cách, trên cùng một bản clone, bằng một script thay vì bằng tay. Điều tính là hỏng: các luật riêng của repository (import, kiểu dữ liệu, design token, bản dịch) cộng với typecheck và lint.

Công cụ duy nhất được xây cho loại ablation này, Caliper, gỡ skill và MCP server nhưng không đụng vào file; việc hoán đổi CLAUDE.md được làm bằng tay. Giới hạn, nói một lần: một repository, một model, hai lượt chạy cho mỗi ô, không có transcript. Kết quả đầu tiên định giọng điệu: tác vụ refactor cho kết quả giống hệt nhau, sáu mươi bốn cent với file và sáu mươi ba cent không có file.

Cái gì hỏng: một luật, trên file mới

Luật bị hỏng là một luật về bản địa hóa (internationalisation), theo đúng lời trong file: luôn thêm cả tiếng Anh và tiếng Pháp, không bao giờ hard-code một chuỗi mà người dùng nhìn thấy. Ở tác vụ component mới, khi có file, cả bốn lượt chạy đều viết file bản dịch. Khi không có file, ba trên bốn lượt hard-code phần tiêu đề. Cùng một tác vụ, cùng một repository, cùng một model, cùng một prompt.

Component mới Đã viết file bản dịch
Có CLAUDE.md 4/4
Không có CLAUDE.md 1/4

Tác vụ edit cho thấy nửa còn lại của câu chuyện. Mọi cấu hình đều làm đúng, kể cả khi không có gì, bởi vì code xung quanh đã dạy sẵn: mọi component bên cạnh component được chỉnh sửa đều đã có file bản dịch. Mọi thứ khác đều giữ vững trong cả bốn mươi bốn lượt chạy: alias import, type thay vì interface, design token, pattern của store. Code thể hiện những điều đó, file chỉ lặp lại chúng.

Một bài báo từ ETH Zurich đo cùng một điều đó trên 138 issue thật. Kết luận của họ: các context file không cải thiện tỷ lệ thành công và tốn thêm khoảng hai mươi phần trăm chi phí, dù model có tuân theo các hướng dẫn. Một lưu ý: một lượt chạy không có file vẫn viết file bản dịch. Luật này không phải bất khả thi khi thiếu file, nó chỉ không đáng tin cậy. Một luật hỏng, đúng cái luật mà code không thể tự dạy. Và lượt chạy bỏ qua công việc đó cũng là lượt rẻ nhất.

File này tốn gì, theo từng tác vụ

Chi phí token của một CLAUDE.md là hiệu số token đọc được giữa một lượt chạy có file và cùng lượt chạy đó không có file.

Tác vụ Ít token đọc hơn khi không có file
Component mới 61%
Edit 15%
Refactor 5%
Thay đổi store 4%
Câu hỏi kiến trúc 14%
Trên mười lượt chạy 32% token, 22% tiền

Ba mươi hai phần trăm là con số mà mọi video sẽ giật tít, và đó là con số sai. Khoản tiết kiệm lớn nhất đến từ lượt chạy không viết file bản dịch: rẻ hơn vì làm ít việc hơn. Ở nơi kết quả giống hệt nhau, file tốn từ bốn đến mười bốn phần trăm. Đó mới là cái giá thực của nó, và con số hai mươi phần trăm của bài báo nằm đúng giữa hai con số này.

Cơ chế này tốn khoảng 1.800 token, được đọc lại ở mỗi lượt. Skill, hook và knowledge graph không tạo ra gì đo được, dù có mặt hay không. Nhiễu còn lớn hơn hầu hết những con số đó: cùng một tác vụ với cùng một file tốn $2.11 ở một lượt chạy và $1.33 ở lượt khác. Hai lượt chạy chạm trần lượt (turn cap), một lượt có file và một lượt không có. Vậy nên file này tốn một chút ở khắp mọi nơi và chỉ đáng giá đúng một lần, trừ khi nó cũng nói dối.

Những dòng nói dối

Một dòng nói dối là một hướng dẫn mà model không thể theo hoặc không thay đổi gì cả. Dòng được nhắc đến ở đầu bài: import theme từ alias design-tokens. Alias đó không tồn tại: file cấu hình TypeScript chỉ map một prefix, và thư mục tokens không có file theme nào. Mọi lượt chạy, có file hay không, đều làm giống như code xung quanh, cùng một dòng import bốn mươi bốn lần.

File này có tám mươi hai dòng tổng quan kiến trúc. Cùng một câu hỏi, sáu câu trả lời: cả sáu đều tìm ra cùng chín file, từ backend đến màn hình, theo cùng một thứ tự, với hoặc không có phần tổng quan. Một đoạn trỏ tới một knowledge graph mà bản clone không có. Khi có knowledge graph, câu hỏi vẫn tốn y như vậy.

Đo lường Giá trị
Quy tắc kích thước của Anthropic dưới 200 dòng
File này 177 dòng
File trung vị trong tập dữ liệu 30.000 repo của reporails 50 mục, 12 chỉ thị
Dòng chỉ thị trong file này 24/177

Vị trí quyết định luật nào trong hai luật xung đột sẽ thắng, và model không bao giờ nói ra điều đó, chênh khoảng chín mươi điểm trong một bài test của một nhà cung cấp. Phần tổng quan có thể giúp ích cho một tác vụ chưa được chạy ở đây: một lần thử, một câu trả lời. Vậy là ba loại dòng: loại xứng đáng có mặt, loại mà code đã dạy sẵn, loại nói dối.

Giữ, chuyển, xóa: danh sách ngắn

Ba đống, và phép đo đứng sau mỗi đống.

Đống Cái gì thuộc về đó Phép đo
Giữ Luật mà code không thể tự thể hiện 6 dòng cứu 4 lượt chạy
Chuyển Tổng quan kiến trúc và các command 107 dòng không có lợi ích đo được
Xóa Những dòng nói dối, và những dòng mà cây thư mục đã cho thấy sẵn 44 lượt chạy giống hệt nhau

Giữ lại những gì model từng làm sai hai lần: đó chính là tiêu chí của Anthropic cho file này. Chuyển phần tổng quan và các command vào một cây file chỉ tải khi cần; bài viết tháng Bảy của Anthropic gọi kho tài liệu trung tâm là một huyền thoại. Hook thì ở lại: một gate không hết hạn khi model tốt hơn. Cắt bỏ phần văn xuôi mà nó đã vượt qua, giữ lại gate.

File sau khi rút gọn: khoảng bảy mươi dòng, cộng thêm sáu dòng đã chứng minh giá trị. Đó là phương pháp của Cherny, đọc đầy đủ: xóa, đưa từng phần trở lại, đo lường. Một repository, một model, hai lượt chạy cho mỗi ô; các đống của bạn sẽ khác, nhưng phương pháp thì không. Việc xóa file tốn một luật và tiết kiệm được rất ít. Tìm ra những dòng nói dối mới là phần thắng.

Nguồn

Câu hỏi thường gặp

Có nên xóa CLAUDE.md như Boris Cherny nói không?
Không nên xóa một cách mù quáng. Bài nói của Cherny mô tả một ablation: xóa file, đưa từng phần trở lại và đo từng dòng. Trên một file thật 177 dòng, xóa nó làm hỏng một luật trong 44 lượt chạy và chỉ tiết kiệm được rất ít; phần thắng là tìm ra những dòng nói dối.
Điều gì hỏng khi bạn xóa CLAUDE.md?
Trên repository này, một luật: luôn thêm cả bản dịch tiếng Anh và tiếng Pháp. Không có file, ba trên bốn lượt chạy hard-code phần tiêu đề ở tác vụ component mới. Mọi luật khác đều giữ vững vì code xung quanh đã cho thấy sẵn.
CLAUDE.md tốn bao nhiêu token?
Khoảng 1.800 token, được đọc lại ở mỗi lượt. Theo từng tác vụ, con số đó là 4% đến 61% ít token đọc hơn khi không có file; ở nơi kết quả giống hệt nhau, file tốn 4% đến 14%, khớp với mức trung bình 20% của bài báo ETH Zurich.
Nên giữ lại gì trong CLAUDE.md?
Những luật mà code không thể tự thể hiện, đây cũng chính là tiêu chí của Anthropic: giữ lại những gì model từng làm sai hai lần. Chuyển phần tổng quan và danh sách command vào các file chỉ tải khi cần, xóa những hướng dẫn trỏ tới thứ không tồn tại, và giữ lại hook, vì một gate không hết hạn khi model tốt hơn.
Các context file như CLAUDE.md hay AGENTS.md có cải thiện agent lập trình không?
Bài báo của ETH Zurich trên 138 issue thật cho thấy context file không cải thiện tỷ lệ thành công và tăng chi phí suy luận trung bình hơn 20%, dù model có tuân theo các hướng dẫn. Phép đo trên một repository này cho kết quả nằm trong cùng khoảng đó.
Ablation trong Claude Code nghĩa là gì?
Gỡ từng phần của cấu hình một lần, với model được cố định và một bản clone mới cho mỗi lượt chạy, rồi đo tác động. Anthropic đã dùng cách này để cắt 80% system prompt của Claude Code; ở đây nó chạy trên năm cấu hình: đầy đủ, không file, không skill, không hook, không gì cả.

Video liên quan