Nếu bạn không thể chờ đợi và đọc bài viết này, hãy copy/paste prompt này vào claude code / codex / grok ngay bây giờ để nhận được kết quả ngay lập tức:
Cài đặt XERJ (tài liệu:
https://xerj.org/llms.txt ), lập chỉ mục các nguồn của dự án này, và thiết lập reference coding: clone và lập chỉ mục các kho lưu trữ mã nguồn mở gần nhất với những gì chúng ta đang xây dựng, và tìm kiếm cách họ giải quyết một vấn đề trước khi viết code.
hầu hết mọi người chạy claude code như một thực tập sinh đắt tiền, và đây là cách làm cho nó thông minh hơn và thông minh hơn sau mỗi lượt (thực sự)
bạn giao cho nó một nhiệm vụ. nó hỏi một vài câu hỏi. nó grep repo, đoán cách code của bạn hoạt động, viết một bản triển khai, có thứ gì đó hỏng. bạn dán lỗi vào. nó viết lại. có thứ gì đó khác lại hỏng.
mỗi một lượt đó là token bạn đã trả tiền.
và claude thường không bị kẹt vì vấn đề khó. nó bị kẹt vì bạn bắt nó khám phá lại một câu trả lời đã tồn tại ở đâu đó, trong repo của chính bạn hoặc trong một dự án mã nguồn mở nơi vài nghìn lập trình viên đã tìm ra các trường hợp ngoại lệ.
XERJ đã kiểm tra điều này một cách bài bản. 8 tác vụ code, 4 ngôn ngữ, 16 lần chạy cho mỗi thiết lập, số lượng token được lấy trực tiếp từ claude -p.
từ bộ nhớ: 260,916 output token từ một reference: 9,982 output token

bộ nhớ giải quyết được 11 trong số 16. reference giải quyết được tất cả 16.
vậy hãy tập trung và thực sự đọc phần dưới đây ↓↓↓
vòng lặp bạn đang trả tiền

một phiên làm việc bình thường diễn ra như thế này.
bạn mô tả những gì bạn muốn. claude khám phá. nó đưa ra một giả định về các mẫu của bạn, cách xử lý lỗi của bạn, hình dạng dữ liệu của bạn. nó viết code dựa trên giả định đó. giả định sai ở đâu đó nên thứ đó hỏng, bạn giải thích lỗi, nó viết lại, và bạn lại quay vòng cho đến khi đầu ra khớp với những gì bạn có trong đầu lúc ban đầu.
mọi người đọc vòng lặp đó và cho rằng claude code kém. thực tế ngược lại. claude rất giỏi trong việc lấy một ví dụ đang hoạt động và điều chỉnh nó cho một tình huống mới. vòng lặp xảy ra khi không có ví dụ nào trong phòng, vì vậy nó dành nửa đầu phiên để tái tạo lại một cái.
output token là những token đắt tiền, được định giá cao hơn khoảng 5 lần so với input token trên các mô hình claude. vì vậy mỗi vòng lặp đó đều được tính phí ở mức cao nhất.
một prompt và một reference không phải là cùng một thứ

prompt là một hướng dẫn. reference là bằng chứng.

bạn có thể viết hai nghìn từ mô tả chính xác cách thứ đó nên hoạt động và claude vẫn phải dịch mô tả đó thành một bản triển khai, sau đó đoán mọi thứ bạn đã bỏ sót.
một bản triển khai đang hoạt động đã chứa sẵn những phần bạn sẽ không bao giờ viết ra
kiến trúc, cách xử lý lỗi, logic thử lại, trường hợp ngoại lệ mà ai đó đã gặp phải trong sản xuất hai năm trước, lý do tại sao một hàm được tách ra như vậy
bạn đã không đề cập đến những điều đó trong prompt vì bạn không biết chúng quan trọng.
đây là phiên bản sắc nét nhất của điều đó. một trình biên dịch cuối cùng sẽ làm rò rỉ tên phương thức. nó sẽ cho bạn biết hàm được gọi là absorb chứ không phải push, và tính phí bạn gấp 20 đến 25 lần token để đến được đó. một trình biên dịch sẽ không bao giờ làm rò rỉ một hợp đồng. không có gì trong chuỗi công cụ của bạn sẽ cho bạn biết cấu trúc này phải được niêm phong trước khi nó có thể được đọc. quy tắc đó tồn tại trong đầu của người đã viết thư viện và trong phần thân của hàm, và không có lượng prompt nào có thể khôi phục nó, bởi vì bạn không biết nó tồn tại.

đó là lý do tại sao điều này cắt giảm token và nâng cao chất lượng cùng một lúc. nhiều ngữ cảnh hữu ích hơn được đưa vào, ít phỏng đoán hơn, ít lần thử lại hơn.
những gì các bài kiểm tra cho thấy
so với thiết lập dựa trên grep, reference coding đã sử dụng ít hơn 2.7 lần output token trên cùng 8 tác vụ. tổng chi phí trên các nhánh là $11.18 từ bộ nhớ, $3.27 với grep, $1.58 với một reference.

grep trông giống như giải pháp nhưng hầu như không phải vậy. grep bảo agent nơi cần tìm, sau đó agent vẫn phải đọc file vào ngữ cảnh để hiểu nó. một kho ngữ liệu trong nghiên cứu này đã kéo 1.06 triệu input token chỉ để làm điều đó. token rẻ hơn, nhưng một đống khổng lồ chúng, cộng với mỗi lượt agent bạn phải ngồi chờ.
sau đó là một lần chạy lớn hơn. 13 thư viện được xây dựng từ đầu cho nghiên cứu trên 5 ngôn ngữ, mỗi thư viện đều biên dịch và vượt qua các bài kiểm tra của chính nó, mỗi thư viện mang một quy tắc thời gian chạy mà trình biên dịch không thể cảnh báo bạn. được xây dựng theo cách đó có chủ đích, bởi vì bạn không thể kiểm tra khả năng truy xuất trên code mà mô hình đã ghi nhớ.

trần trụi, từ bộ nhớ: 1 trên 21 với truy xuất: 21 trên 21
$21.90 so với $3.38.
đó là một kết quả khác, không phải là một kết quả rẻ hơn.
ví dụ rõ ràng nhất trong đó là một tác vụ java. xây dựng một sổ cái chỉ có thể thêm vào, niêm phong trước khi phát lại, cắt bớt đến một điểm kiểm tra. từ bộ nhớ, nó đã phát minh lại toàn bộ, 503 dòng, khoảng 36,000 token, ngữ nghĩa cắt bớt sai, không vượt qua bài kiểm tra. được đưa cho reference, nó đã viết bốn dòng. 103 token. đã vượt qua.
sự chênh lệch theo ngôn ngữ cho bạn biết giá trị nằm ở đâu. python từ 14,752 xuống còn 214. c từ 18,792 xuống còn 988. java từ 27,108 xuống còn 98. javascript chỉ từ 4,300 xuống còn 646, bởi vì một prefix trie là một cấu trúc đã biết và mô hình đã biết một nửa câu trả lời.

các lập trình viên chạy XERJ trong công việc hàng ngày báo cáo khoảng ít hơn 5 lần token. con số này là tự báo cáo chứ không phải được đo điểm chuẩn, vì vậy hãy coi nó là mức sàn chứ không phải là điểm nhấn.
tại sao một prompt dài hơn không khắc phục được điều này
trong một thời gian, câu trả lời cho đầu ra kém luôn giống nhau. viết một prompt tốt hơn. thêm nhiều ngữ cảnh hơn. giải thích kiến trúc.
và đôi khi điều đó có hiệu quả.
nhưng một prompt là bạn mô tả một giải pháp bạn chưa viết. một reference là một giải pháp mà ai đó đã giao hàng và gỡ lỗi. bạn không thể mô tả để đến được logic thử lại chỉ tồn tại bởi vì một người bảo trì đã bị giới hạn tốc độ lúc 3 giờ sáng và vá nó một cách vội vàng.
code đã có sẵn. bạn không cần phải giải thích các quyết định đã đưa vào nó.
tìm reference là công việc thực sự

đây là lúc mọi thứ sụp đổ.
làm thủ công có nghĩa là mở github, đọc qua các repo khớp một nửa, đào qua các pull request cũ, sau đó mở codebase của chính bạn từ tám tháng trước và cố gắng nhớ bạn đã đặt tên file là gì. đến lúc bạn tìm được thứ gì đó có thể sử dụng, bạn đã có thể viết xong tính năng đó.
vì vậy, việc tìm kiếm phải rẻ, nếu không sẽ không ai làm điều đó lần thứ hai.
đó là mục đích của XERJ. nó lập chỉ mục code và cho phép bạn tìm kiếm theo vấn đề bạn đang giải quyết thay vì theo tên file hoặc từ khóa, sau đó kéo bản triển khai phù hợp ra làm reference mà bạn có thể đưa trực tiếp cho claude. https://xerj.org
cách chạy nó

1) copy/paste prompt cài đặt vào phiên claude code
Cài đặt XERJ (tài liệu:
https://xerj.org/llms.txt ), lập chỉ mục các nguồn của dự án này, và thiết lập reference coding: clone và lập chỉ mục các kho lưu trữ mã nguồn mở gần nhất với những gì chúng ta đang xây dựng, và tìm kiếm cách họ giải quyết một vấn đề trước khi viết code.
2) kiểm tra phản hồi của coding agent và đề xuất các dự án để bạn clone làm reference
bất kể bạn đang xây dựng gì, bạn luôn biết ai khác cũng đang làm điều tương tự. Một số dự án sẽ được claude code tìm thấy ở giai đoạn này, và bạn có thể thêm nhiều hơn theo lựa chọn của mình. 5-10 thường là đủ nhưng nó phụ thuộc vào những gì bạn đang code
3) tạo tính năng sản phẩm tiếp theo và kiểm tra kết quả
cứ để nó chạy và tận hưởng (hoặc không) những kết quả mới. Bạn luôn có thể quay lại việc code lãng phí nhưng tôi chắc chắn bạn sẽ thấy sự khác biệt ngay lập tức
4) duy trì nó hoạt động và giúp đỡ cộng đồng bằng phản hồi của bạn
mỗi tác vụ bạn hoàn thành theo cách này sẽ trở thành reference cho tác vụ tiếp theo. thư viện tích lũy dần. bất cứ lúc nào
khi nào nên bỏ qua nó
nếu mô hình đã biết code, đây là một khoản thuế và không có gì khác. tuy nhiên, đây không phải là trường hợp thường xuyên.

họ cũng đã đo lường điều đó, trên valkey và memcached, code công khai thực tế mà claude chắc chắn đã được huấn luyện. từ bộ nhớ đạt 6 trên 6 với $1.49. truy xuất đạt 5 trên 6 với $4.40. nó đứng cuối và tốn kém gấp ba lần so với không làm gì.
vì vậy ranh giới là code riêng tư, độc quyền hoặc thực sự không quen thuộc ở một bên, và mọi thứ mô hình đã "ăn" ở bên kia.

nếu thứ bạn đang xây dựng chưa bao giờ được xây dựng trước đây, không có gì để chỉ vào và bạn quay lại việc mô tả nó.
nếu reference được viết dựa trên một phiên bản framework mà bạn không sử dụng, nó tốn kém hơn là tiết kiệm.
và nếu tác vụ chỉ dài bốn dòng, hãy cứ viết nó.
những gì vẫn còn bỏ ngỏ
13 thư viện được xây dựng cho nghiên cứu, điều này làm cho chúng không quen thuộc một cách có chủ đích và cũng làm cho chúng nhỏ. chưa ai chạy điều này trên một codebase tư nhân thực sự lớn. kỳ vọng là khoảng cách sẽ mở rộng ở đó, vì chi phí grep tăng lên cùng với kích thước của cây trong khi truy xuất vẫn ổn định, nhưng đó chỉ là phỏng đoán cho đến khi ai đó đo lường nó.
mọi con số ở trên đều đến từ điểm chuẩn được công bố của chính XERJ, dữ liệu từng lần chạy thô trong repo của họ. https://xerj.org/case-studies/reference-coding
kết luận
bạn không cần một mô hình khác và bạn không cần phải rời khỏi claude code.
bạn cần ngừng bắt đầu mọi tác vụ từ con số không, bởi vì thứ bạn đang xây dựng có thể đã tồn tại ở đâu đó trong repo của bạn hoặc trong một dự án mã nguồn mở đã giải quyết nó hai năm trước.
nếu ai đó đã giải quyết nó, hãy đưa code của họ cho claude và để nó làm việc từ đó. và nó không tốn kém gì cho bạn, chỉ một prompt






