Tại sao bài kiểm tra này lại quan trọng
Các trợ lý mã nguồn dựa trên AI thường cho phép các nhóm đưa một tệp "quy tắc" vào kho lưu trữ và kỳ vọng mô hình sẽ tuân thủ các chỉ thị đó trong mọi yêu cầu. Trên thực tế, mô hình có thể không bao giờ nhìn thấy tệp đó, hoặc có thấy nhưng lại bỏ qua nội dung. Một thử nghiệm gần đây với Claude Code đã cho thấy cả hai vấn đề này. Công cụ đã âm thầm bỏ qua tệp AGENTS.md dung lượng 72 KB; khi tệp đó được đổi tên thành CLAUDE.md, trợ lý đã tải nó và làm tăng số lượng token cho mỗi yêu cầu. Ngân sách token bổ sung đó làm tăng độ trễ, chi phí và có thể khiến một yêu cầu vượt quá giới hạn của mô hình.
Những nhà phát triển mặc định rằng "tệp tồn tại" đồng nghĩa với việc "mô hình tuân thủ các quy tắc" sẽ đối mặt với rủi ro về sự kém hiệu quả tiềm ẩn và kết quả đầu ra không thể dự đoán trước. Bài kiểm tra ba bước buộc phải có bằng chứng cụ thể ở từng giai đoạn: cấu hình, tải và tính hữu dụng.
Ba câu hỏi cần đặt ra
- Đã cấu hình – Tệp có được đặt đúng nơi trợ lý tìm kiếm không? Các công cụ khác nhau có thể mã hóa cứng các đường dẫn hoặc quy ước tên tệp; sự không khớp có nghĩa là tệp sẽ không bao giờ đi vào luồng xử lý prompt.
- Đã tải – Trợ lý có đưa ra bất kỳ bằng chứng nào cho thấy nó đã nhận được tệp không? Một mã băm (hash) có thể xác nhận danh tính của tệp trên đĩa, nhưng chỉ có dấu vết truyền tải (ví dụ: một dòng nhật ký hoặc số lượng token) mới chứng minh được mô hình thực sự đã quan sát thấy nó.
- Hữu dụng – Sự hiện diện của tệp có cải thiện kết quả công việc không? Một tệp đã được tải nhưng chỉ làm tăng thêm token mà không làm thay đổi kết quả thì đó là một tổn thất thuần túy.
Thực hiện bài kiểm tra
Quy trình này được thiết kế tối giản để có thể lặp lại trên bất kỳ nền tảng nào.
Tạo một quy tắc có thể quan sát được – Viết một chỉ thị đơn giản, dễ nhận thấy. Ví dụ: “Liệt kê chính xác hai tệp trước khi chỉnh sửa.” Hiệu quả của quy tắc có thể được kiểm tra trong phản hồi của trợ lý.
Kiểm tra phiên bản công cụ và mô hình – Mở một phiên làm việc mới, ghi lại chuỗi phiên bản và định danh mô hình. Các phiên bản khác nhau có thể thay đổi tên tệp mà chúng nhận diện.
Thực hiện hai lần chạy Lần chạy A: Sử dụng tên tệp mà công cụ không nhận diện (ví dụ: AGENTS.md). Lần chạy B: Sử dụng tên tệp mặc định của công cụ (ví dụ: CLAUDE.md).
Ghi lại:
- Mã băm nguồn của tệp (để chứng minh nội dung trên đĩa không thay đổi).
- Đường dẫn chính xác đã sử dụng.
- Bất kỳ bằng chứng nào mà trợ lý ghi lại về việc tải tệp (sự gia tăng số lượng token, thông báo rõ ràng “loaded X.md”, v.v.).
- Số lượng token cho mỗi yêu cầu.
- Kết quả công việc (trợ lý có liệt kê chính xác hai tệp không?).
Nếu Lần chạy B cho thấy quy tắc được tuân thủ và số lượng token tăng lên đúng mức dự kiến, thì tệp vừa được tải vừa có tính hữu dụng. Nếu quy tắc bị bỏ qua mặc dù số lượng token có tăng, nghĩa là tệp đang được đọc nhưng quá trình phân tích prompt của mô hình đã loại bỏ chỉ thị đó. Trong trường hợp đó, việc thêm nhiều văn bản hơn vào tệp sẽ không có tác dụng; thay vào đó, hãy chuyển quy tắc sang một cổng chính sách được mã hóa cứng hoặc một bộ khung kiểm thử (test harness).
Dữ liệu tiết lộ điều gì
Trường hợp Claude Code đã cho thấy một khoảng cách rõ rệt giữa việc cấu hình và việc tải tệp. Tệp 72 KB vẫn tồn tại, có mã băm chính xác và đã được đồng bộ hóa với kho lưu trữ, nhưng trợ lý chưa bao giờ tham chiếu đến nó. Việc đổi tên tệp thành CLAUDE.md mặc định đã kích hoạt việc tải, nhưng cũng làm tăng đáng kể chi phí token dư thừa. Mỗi token bổ sung đều tiêu tốn chu kỳ tính toán và có thể khiến yêu cầu vượt quá giới hạn tốc độ (rate limits).
Bài kiểm tra ba bước giúp làm lộ ra những chi phí ẩn như vậy trước khi chúng trở thành rào cản trong môi trường production. Bằng cách nắm bắt sự chênh lệch token (token delta), các nhóm có thể quyết định liệu lợi ích của quy tắc có xứng đáng với chi phí bỏ ra hay không.
Bài học rút ra
Đừng bao giờ mặc định rằng một tệp quy tắc đang hoạt động chỉ vì nó nằm trong kho lưu trữ. Hãy sử dụng bài kiểm tra ba bước—cấu hình, tải, chứng minh tính hữu dụng—để biến giả định đó thành bằng chứng có thể đo lường được. Khi bằng chứng cho thấy một tệp chỉ đơn thuần là nơi tiêu tốn token vô ích, hãy chuyển logic ra khỏi prompt và đưa vào một cổng kiểm soát mang tính xác định (deterministic gate). Kết quả là một quy trình lập trình AI tinh gọn hơn, nhanh hơn và dễ dự đoán hơn.
