Đánh giá LLM: từ benchmark công khai đến golden set của bạn
Cùng một agent, cùng tác vụ, chạy 10 lần. 7 lần thành công tưởng là 70% — cho đến khi tính pass^10 và nhận ra bằng 0.
Trên trang này
Đây là một minh họa. agent từ Chương 23 — cùng một vòng lặp, hai trong bốn công cụ của nó — được trỏ vào một thư mục gồm năm tệp log và cấu hình rồi được hỏi một câu.
Q: What is the last line of errors.log about?
turn 1 -> read_file({"path": "errors.log"})
turn 2 -> "The last line of errors.log is:
ERROR worker 7 timed out after 30000 ms."Đúng, và chẳng chứng minh được gì cả — vì transcript đó chỉ là một trong mười lần tôi chạy, và tôi chọn nó sau khi đã xem cả mười.
Chạy cùng một tác vụ y hệt mười lần, không thay đổi gì ngoài sampling seed, và agent làm đúng bảy lần. Bảy mươi phần trăm, con số sẽ được đưa lên slide. Giờ hãy hỏi câu mà khách hàng thật sự quan tâm — nó có chạy đúng mọi lần không? — và câu trả lời là một con số hoàn toàn khác:
t20 7/10 successes = 70 % (95 % Wilson interval: 39.7 % to 89.2 %)
pass^1 70.00 % pass^5 8.33 %
pass^2 46.67 % pass^7 0.83 %
pass^3 29.17 % pass^8 0.00 %
pass^4 16.67 % pass^10 0.00 %agent chưa bao giờ giải được tác vụ này mười lần liên tiếp và, dựa trên bằng chứng này, cũng không được kỳ vọng sẽ làm được. Con số đó — pass^10 — mới là con số trung thực; nó gần như không bao giờ được công bố, và đến cuối chương này bạn sẽ biết cách tính nó, tính nó tốn bao nhiêu, và vì sao khoảng nằm cạnh 70 % quan trọng hơn chính 70 %.
Hiện chi tiết
Chương này cần gì từ các chương trước.
- Chương 4 cho phần thống kê: khoảng Wilson trên một tỷ lệ, lý do mười bảy đúng trên hai mươi không phân biệt được gì, và baseline ngớ ngẩn như yêu cầu đầu tiên.
- Chương 15 cho bench: harness năm mươi dòng, kiểm định dấu ghép cặp trên các case mà hai hệ thống bất đồng, và quy tắc rằng một prompt được đo, không được tranh luận.
- Chương 23 cho thứ được đo: vòng lặp, năm lối thoát, kế toán chi phí, và nhận xét kết thúc rằng một harness khiến agent có thể được quản trị nhưng không khiến nó đúng.
Hai panel ở đây. TypeScript cho đánh giá của riêng bạn, vì nó thuộc về continuous integration của bạn, nằm cạnh code. Python cho panel thứ hai, vì các benchmark công khai nằm ở đó và một trong các phép đo bên dưới cần logits.
Ba dự án, ba công cụ đo
Liên kết đến mục: Ba dự án, ba công cụ đoHầu như mọi cuộc tranh luận về đánh giá đều là hai người đang đo hai thứ khác nhau. Có ba dự án và chúng không dùng chung công cụ đo.
| thứ bạn đang đánh giá | câu hỏi | công cụ đo | ai sở hữu |
|---|---|---|---|
| model | nhìn chung, model này có tốt hơn model kia không? | benchmark công khai, leaderboard | cộng đồng |
| ứng dụng của bạn | prompt, retrieval, schema của tôi có hoạt động trên input của tôi không? | golden set của bạn | bạn |
| agent của bạn | toàn bộ vòng lặp, với công cụ và side effect, có đạt mục tiêu một cách đáng tin cậy không? | thành công tác vụ cộng với pass^k | bạn |
Sự nhầm lẫn này đắt đỏ theo một hướng. Leaderboard nói với bạn rằng một model mạnh về suy luận cấp sau đại học; nó không thể nói liệu model đó có định tuyến ticket hỗ trợ của bạn hay không. Và một đánh giá ứng dụng chấm một câu trả lời cho mỗi input hoàn toàn không nhìn thấy agent, vì agent có một phân phối các trajectory còn một câu trả lời chỉ là một mẫu đơn từ phân phối đó. Chương 22 đã đặt tên cho hàng thứ ba đó và để trống: thước đo hiệu năng, phần duy nhất trong đặc tả agent mà các team viết xuống sau cùng hoặc không bao giờ viết.
Thứ tự cũng quan trọng, và vendor bán model cho bạn cũng nói vậy. Hướng dẫn agent của OpenAI rút gọn việc chọn model thành ba bước, theo thứ tự này: “Thiết lập evals để xác lập baseline hiệu năng”, “Tập trung đạt mục tiêu độ chính xác bằng những model tốt nhất hiện có”, “Tối ưu chi phí và độ trễ bằng cách thay model lớn bằng model nhỏ hơn khi có thể”.1 Đánh giá đi trước, vì bước hai và ba vô nghĩa nếu không có một con số.
Golden set, và hai mươi case thật sự mua được gì
Liên kết đến mục: Golden set, và hai mươi case thật sự mua được gìGolden set là một danh sách input, mỗi input có câu trả lời được ghi sẵn, và một grader quyết định output có khớp hay không. Nó nhàm chán, nó nhỏ, và nó là artefact duy nhất trong chương này thuộc về bạn. Bộ được xây ở đây có hai mươi tác vụ trên một thư mục năm tệp — không phải ba tệp của Chương 23, nên câu trả lời không phải cùng các câu trả lời — và grader được viết trước khi agent chạy:
export type Task = {
id: string;
prompt: string;
answer: string; // the fact, in words, for a human and for a judge
must: RegExp[]; // ALL must match the final answer
mustNot?: RegExp[]; // NONE may match
};
export const GOLDEN: Task[] = [
{ id: "t04", prompt: "Which file is the largest?", answer: "access.log",
must: [/access\.log/i], mustNot: [/errors\.log/i, /notes\.txt/i] },
{ id: "t12", prompt: "Which HTTP status codes appear in access.log? List all of them.",
answer: "200, 429 and 500", must: [/200/, /429/, /500/] },
// ...eighteen more
];Hai thuộc tính là trụ chịu lực. Danh sách mustNot tồn tại vì một model nêu tên ba tệp trong đó có tệp đúng thì chưa trả lời. Và answer được viết bằng văn xuôi cũng như bằng pattern, vì cả con người lẫn judge đều sẽ cần nó sau này — và viết cùng một sự thật hai lần bằng hai ký pháp là cách bạn phát hiện ra mình chưa thống nhất với chính mình về tác vụ là gì.
Giờ đến bảng quyết định. Bốn hệ thống ứng viên, cùng hai mươi tác vụ, accuracy với khoảng của nó, và hai cột mà một bảng chỉ có accuracy luôn che giấu:
| system | correct | accuracy, 95 % Wilson | cost per solved task | mean latency |
|---|---|---|---|---|
| A — no tools, greedy | 2/20 | 10.0 % [2.8, 30.1] | $0.004649 | 663 ms |
| B — tools, terse prompt | 5/20 | 25.0 % [11.2, 46.9] | $0.005576 | 1,362 ms |
| C — tools, guided prompt | 2/20 | 10.0 % [2.8, 30.1] | $0.013071 | 930 ms |
| D — C, best of 3 at T = 0.7 | 1/20 | 5.0 % [0.9, 23.6] | $0.073532 | 2,628 ms |
Hãy đọc các khoảng trước khi đọc người thắng. Nhánh B chạy từ 11 % đến 47 %; nhánh A từ 3 % đến 30 %. Chúng chồng lấn trên phần lớn độ dài, chính là kết luận của Chương 4 xuất hiện đúng nơi đã hứa: hai mươi case không thể xếp hạng bốn hệ thống. Chương 15 làm sắc hơn bằng cách hỏi câu hỏi ghép cặp — trong các case mà hai nhánh bất đồng, độ lệch nghiêng về bên nào đến mức nào? — vì độ khó chung của bộ dữ liệu được triệt tiêu. Đây là mọi cặp:
A vs B +0 / -3 p = 0.2500 B vs C +4 / -1 p = 0.3750
A vs C +2 / -2 p = 1.0000 B vs D +4 / -0 p = 0.1250
A vs D +2 / -1 p = 1.0000 C vs D +1 / -0 p = 1.0000Không một so sánh nào trong sáu so sánh được xác lập. Nhánh tốt nhất hơn nhánh không dùng công cụ nào mười lăm điểm, và kết luận đó tựa lên ba case discordant. Hai mươi case cho thấy một cơ chế chứ không thể chọn nhà cung cấp; nói ngược lại trong cuộc họp là cách một model tệ được mua.
Có một điều bảng này thật sự xác lập, và đó là cột chẳng ai đưa vào. Nhánh D tốn mười ba lần nhánh B trên mỗi tác vụ giải được, vì sampling ba trajectory rồi lấy câu trả lời modal làm hóa đơn tăng gấp ba dù accuracy có tăng gấp ba hay không. Các bảng accuracy bỏ qua chi phí khiến trade-off đó trở nên vô hình.
Metric quyết định con số
Liên kết đến mục: Metric quyết định con sốGiờ đến phát hiện sẽ thay đổi cách bạn đọc mọi benchmark từ nay về sau. Lấy cùng hai trăm transcript — hai mươi tác vụ, mười lần chạy, không tái tạo một token nào — và chấm chúng theo ba cách:
| grader | correct | accuracy, 95 % Wilson |
|---|---|---|
| exact match với câu trả lời đã viết | 0/200 | 0.0 % [0.0, 1.9] |
| câu trả lời đã viết xuất hiện như substring | 26/200 | 13.0 % [9.0, 18.4] |
| keyword rubric ở trên | 52/200 | 26.0 % [20.4, 32.5] |
Không, mười ba, hai mươi sáu. Hệ thống không đổi. Grader đổi. Exact match trả về không không phải vì agent vô dụng mà vì không câu trả lời free-text nào từng byte-identical với reference: nó đo định dạng và báo cáo điều đó như năng lực.
Đó không phải chuyện lạ, đó là một cơ chế, và nó có tên. Một hard-cutoff metric chấm tác vụ theo kiểu được-ăn-cả-ngã-về-không trên nhiều sub-fact, nên nó nhân dồn. Tác vụ t12 hỏi ba status code cùng lúc. Qua mười lần chạy:
per-code presence 200: 9/10 429: 6/10 500: 8/10 (mean 0.77 per fact)
all three at once 5/10Mỗi fact đúng khoảng ba phần tư số lần; yêu cầu cả ba cùng lúc làm điểm giảm một nửa, và đủ gần với 0.50 đo được để cho thấy cú giảm đến từ đâu. Khái quát hóa:
| per-fact accuracy | |||||
|---|---|---|---|---|---|
| 0.60 | 60.0 % | 36.0 % | 21.6 % | 7.8 % | 0.6 % |
| 0.80 | 80.0 % | 64.0 % | 51.2 % | 32.8 % | 10.7 % |
| 0.90 | 90.0 % | 81.0 % | 72.9 % | 59.0 % | 34.9 % |
| 0.95 | 95.0 % | 90.3 % | 85.7 % | 77.4 % | 59.9 % |
Đọc hàng 0.90 so với hàng 0.95 tại : cải thiện năm điểm trên mỗi fact trở thành hai mươi lăm điểm trên conjunction. Không có gì gián đoạn xảy ra với model. Một đường cong mượt khi đọc qua metric được-ăn-cả-ngã-về-không trông như một cú nhảy — chính là lập luận Schaeffer, Miranda và Koyejo đưa ra về emergent abilities, và là điều Chương 10 để dành đến đây.2 Kiểm toán của họ phát hiện tối đa 5 trong 39 metric ưu tiên của BIG-Bench thể hiện emergence, với hai metric gián đoạn chiếm hơn 92 % các trường hợp được tuyên bố.
Vậy kỷ luật, trong một câu: một cú nhảy trên biểu đồ là bằng chứng về metric cho đến khi chứng minh được điều ngược lại. Trước khi tin rằng một năng lực vừa xuất hiện, hãy plot cùng các lần chạy bằng một metric cho điểm một phần và xem vách đá có còn không.
Có một phiên bản bậc hai của chuyện này mà Kalai và cộng sự cho rằng đang gây hại từ thượng nguồn: benchmark chấm đúng-sai thưởng cho việc đoán thay vì nói “Tôi không biết”, nên một model được tối ưu theo chúng học cách đoán. Cách sửa họ đề xuất không phải một benchmark hallucination khác mà là “sửa cách chấm điểm của các benchmark hiện có vốn bị lệch nhưng thống trị leaderboard”.3 Golden set của bạn có cùng đòn bẩy đó, và chỉ là một dòng: quyết định abstention được tính là failure hay là hạng mục riêng. Hầu hết mọi người không bao giờ quyết định, nên nó âm thầm bị tính là failure, và hệ thống họ ship sẽ đoán.
pass^k, và phương sai chẳng ai công bố
Liên kết đến mục: pass^k, và phương sai chẳng ai công bốMọi thứ đến đây chấm một attempt cho mỗi tác vụ. Một agent không phải một attempt. Chương 17 đã xác lập rằng bạn không có determinism ngay cả ở temperature zero, nên cùng một input tạo ra một phân phối các trajectory và một benchmark chạy mỗi tác vụ một lần chỉ báo cáo một mẫu từ phân phối đó.
Đóng góp của τ-bench là metric cho việc đó. Paper định nghĩa rất rõ: “chúng tôi đề xuất một metric mới – pass^k (pass hat k), được định nghĩa là xác suất tất cả k thử nghiệm tác vụ i.i.d. đều thành công, trung bình trên các tác vụ.”4 Chạy mỗi tác vụ lần, đếm lần thành công, và các ước lượng không chệch là:
Cái thứ hai là pass@k quen thuộc từ sinh code: xác suất ít nhất một trong attempt thành công. Đặt chúng cạnh nhau trên cùng các count đã đo và chúng đi ngược chiều nhau:
pass@k — ít nhất một | pass^k — tất cả | |
|---|---|---|
| 1 | 26.0 % | 26.0 % |
| 2 | 37.0 % | 15.0 % |
| 3 | 43.5 % | 10.5 % |
| 5 | 51.2 % | 6.7 % |
| 8 | 57.7 % | 5.1 % |
| 10 | 60.0 % | 5.0 % |
Cùng các lần chạy, cùng grader, cùng hai mươi tác vụ. Một cột nói hệ thống cải thiện khi có thêm attempt, cột kia nói nó tệ đi, và cả hai đều đúng, vì chúng trả lời hai câu hỏi khác nhau. pass@k là metric đúng khi có con người lọc output — sinh code, bản nháp, brainstorming — và các attempt bổ sung rẻ. pass^k là metric đúng khi agent hành động không qua bộ lọc, đó chính là nghĩa của “agent”. Công bố cái thứ nhất ở nơi cái thứ hai mới phù hợp là cách phóng đại phổ biến nhất trong lĩnh vực này, và headline của chính τ-bench là phiên bản trung thực: gpt-4o ở khoảng 61 % pass^1 trên retail rơi xuống khoảng 25 % tại pass^8.4
Giờ đến cú đau trong số liệu của tôi. pass^10 trên hai mươi tác vụ của tôi là 5.0 %: đúng một tác vụ trong hai mươi được giải ở cả mười lần chạy. Tác vụ đó là t19, “Deploy 42 có thành công không?”, và đây là hai trong mười câu trả lời mà rubric chấm là đúng:
run 2 "To check if 'deploy.log' succeeded in deploying 42, I will list the file
names in the working directory using the list_files function..."
run 8 "Yes, deploy 42 has successfully deployed. Deploying was successful for 41
as well."Câu đầu không bao giờ trả lời. Câu thứ hai thêm một tuyên bố sai — deploy 41 đã bị rollback. Cả hai khớp /succe|yes/. Tác vụ duy nhất giữ pass^10 trên không là một artefact của grader, nên con số thật là không, và không aggregate nào cho tôi thấy điều đó. Sampling transcript phía sau tác vụ có điểm cao nhất của bạn là nơi grader đi chết.
Và thêm một con số nữa, con số đặt tên cho phần này. Mười đánh giá giống hệt nhau — cùng hệ thống, cùng hai mươi tác vụ, cùng code, không đổi gì ngoài seed:
per-run correct: 5 2 5 5 8 5 8 5 4 5 -> 10 % .. 40 %, mean 26.0 %, sd 8.8 pointsMột khoảng ba mươi điểm trên một hệ thống không thay đổi. Nếu bạn chạy suite một lần trước release và một lần sau release, một “cải thiện” tám điểm nằm trong spread đó và bạn sẽ ship vì tin rằng mình đã gây ra nó. Đây là lý do khoảng pooled ở trên — 26.0 % [20.4, 32.5] — là quá hẹp nếu trích dẫn một mình: nó xem hai trăm trial tương quan như hai trăm trial độc lập. Tóm tắt trung thực của một đánh giá agent là mean và spread qua các lần lặp, và gần như không ai công bố cái thứ hai.
Judge, và golden set riêng của judge
Liên kết đến mục: Judge, và golden set riêng của judgeRubric không scale với câu trả lời mở, nên thao tác chuẩn là để một model chấm output. Nó hoạt động đủ tốt ở frontier scale để trở thành mặc định, và có ba failure mode đã được đặt tên: position bias, verbosity bias và self-enhancement bias.5
Đo nó trước khi tin nó. Cùng sáu mươi câu trả lời — ba trong mười lần chạy — được gán nhãn theo ba cách. Nhãn con người là của tôi: tôi đọc cả sáu mươi với năm tệp đang mở và áp dụng một quy tắc đã viết, pass khi và chỉ khi câu trả lời nêu sự thật mà câu hỏi yêu cầu và không chứa gì bị các tệp mâu thuẫn.
| grader | says pass | agrees with the human | false pass | false fail |
|---|---|---|---|---|
| keyword rubric | 17/60 | 50/60 = 83.3 % [72.0, 90.7] | 8 | 2 |
| the model as judge | 60/60 | 11/60 = 18.3 % [10.6, 29.9] | 49 | 0 |
Judge nói PASS sáu mươi trên sáu mươi lần. Nó sẽ báo cáo agent này đạt 100 % accuracy trên một bộ mà con người chấm 18 %. Một judge không có năng lực phân biệt không phải là công cụ đo nhiễu; nó là một hàm hằng, và hàm hằng cho hệ thống tốt nhất và tệ nhất của bạn cùng một điểm.
Prompting không cứu được nó. Bốn biến thể, cùng sáu mươi item:
| judge prompt | says pass | agreement with the human |
|---|---|---|
| “Reply PASS or FAIL.” | 60/60 | 18.3 % |
| “Reply FAIL or PASS.” — đảo nhãn | 56/60 | 25.0 % |
| cộng thêm danh sách rõ ràng về những gì được tính là failure | 55/60 | 26.7 % |
cộng một ví dụ FAIL đã làm mẫu và một ví dụ PASS đã làm mẫu | 56/60 | 25.0 % |
Đảo thứ tự hai nhãn trong instruction làm bốn verdict đổi. Đó là hiệu ứng đo được và là loại hiệu ứng sai: judge đang phản hồi hình dạng của prompt thay vì câu trả lời trước mặt nó.
Minh họa sạch là pairwise. Hai mươi câu hỏi, mỗi câu có một candidate rõ ràng đúng và một candidate rõ ràng sai, được trình bày theo cả hai thứ tự:
picked the FIRST option 40/40 = 100.0 %
order-consistent (same winner both ways) 0/20 = 0.0 % [Wilson 0.0, 16.1]
picked the CORRECT answer 20/40 = 50.0 %Nó chọn vị trí A bốn mươi trên bốn mươi lần. 50 % về correctness không phải năng lực một phần — đó là số học, vì câu trả lời đúng nằm ở vị trí A đúng một nửa số trial. Consistency ở đây được định nghĩa như MT-Bench định nghĩa, “tỷ lệ phần trăm các case trong đó judge đưa ra kết quả nhất quán khi hoán đổi thứ tự hai assistant”, cho phép so sánh táo với táo: GPT-4 đạt 65.0 % trên thước đo đó, và few-shot prompting nâng lên 77.5 %.5 Của tôi đạt không.
Mitigation chuẩn cũng đến từ paper đó: “gọi judge hai lần bằng cách hoán đổi thứ tự hai câu trả lời và chỉ tuyên bố thắng khi một câu trả lời được ưu tiên ở cả hai thứ tự.”5 Áp dụng ở đây và judge tạo ra không verdict dùng được nào từ hai mươi cặp — đó là kết quả đúng, và tốt hơn vô hạn so với hai mươi verdict tự tin.
Một ghi chú phương pháp đáng giá hơn kết quả. Tôi cũng chạy một bài test verbosity: cùng một câu trả lời đúng, một bản được đệm thêm một câu 36 từ không thêm gì. Judge ưu tiên bản dài hơn đúng 50 % trial — nhìn giống không có verbosity bias nhưng hoàn toàn không phải, vì một judge luôn chọn vị trí A sẽ đạt 50 % trên bất kỳ pairing cân bằng nào. Bạn không thể đo bias thứ hai cho đến khi bias thứ nhất được kiểm soát. Hoán đổi vị trí không phải tinh chỉnh để thêm sau; nó là thứ khiến mọi phép đo khác có thể diễn giải được.
Judge dùng để làm gì. Câu trả lời mở không có dạng parseable: giọng điệu, độ bao phủ, liệu citation có hỗ trợ câu của nó không, liệu refusal có phù hợp không. Rẻ, nhanh, và đại khái tốt ngang base model của nó.
Judge không phải gì. Ground truth. Nó là một hệ thống có accuracy, hồ sơ bias và chi phí, và nó cần golden set nhãn con người của riêng mình — gồm cả các failure đã biết — trước khi bất kỳ con số nào nó tạo ra có nghĩa.
Caveat trung thực: judge này là model nửa tỷ parameter, và không ai nên dùng một model như vậy để chấm. Vấn đề không phải judge là xấu. Vấn đề là các con số ở trên tốn tám phút để tạo ra, và nếu không có chúng thì verdict của judge này cho một quyết định ship sẽ là 100 %.
Panel thứ hai: Python, và một probe cho contamination
Liên kết đến mục: Panel thứ hai: Python, và một probe cho contaminationĐây là panel Python được tuyên bố thứ ba và cuối cùng của khóa học, và lý do nằm ở nơi các con số công khai đến từ. lm-evaluation-harness bao phủ “hơn 60 benchmark học thuật chuẩn cho LLM, với hàng trăm subtask và biến thể được triển khai” và là “backend cho Open LLM Leaderboard phổ biến của Hugging Face”; HELM, SWE-bench và τ-bench là các package Python với entry point Python.6 Chạy model của bạn đối chiếu với một con số đã công bố nghĩa là chạy code của họ, và ngày bạn muốn so sánh với một con số ai đó trích dẫn, đây là hệ sinh thái bạn đang ở trong:
lm_eval --model hf \
--model_args pretrained=EleutherAI/gpt-j-6B \
--tasks hellaswag \
--device cuda:0 \
--batch_size 8Lý do thứ hai là một phép đo trong chương này bất khả thi qua HTTP. Contamination — test set bị rò vào dữ liệu training — là failure khiến một benchmark công khai âm thầm vô nghĩa, và probe sắc nhất cho nó cần loss của chính model, thứ không chat API nào trả về. Đó là cross-entropy per token của Chương 8, trỏ vào một câu hỏi về trí nhớ:
def nll(text: str) -> float:
"""Mean negative log-likelihood per token, in nats."""
ids = tok(text, return_tensors="pt").input_ids.to(model.device)
with torch.no_grad():
out = model(ids, labels=ids)
return float(out.loss)Mười cặp câu: năm câu nằm trong mọi crawl web từ khi web tồn tại, năm câu được viết cho chương này sáng nay, mỗi câu ghép với một bản diễn đạt lại mang cùng nội dung.
| set | canonical wording | reworded | gap |
|---|---|---|---|
| famous, mean of 5 | 1.21 | 3.03 | +1.83 |
| fresh, mean of 5 | 5.02 | 5.96 | +0.93 |
Model ngạc nhiên gấp bốn lần trước một câu viết sáng nay so với một câu nó đã thấy một triệu lần, và diễn đạt lại tốn gấp đôi trên các câu nổi tiếng — chi phí thêm đó là phần được ghi nhớ thay vì được hiểu. Loss tuyệt đối trộn lẫn ghi nhớ với độ tự nhiên thông thường, nên gap là thống kê tốt hơn và continuation test còn tốt hơn nữa. Cho nó sáu từ đầu:
famous "Permission is hereby granted, free of"
-> "charge, to any person obtaining a copy of this software and associated
documentation files (the "
famous "All human beings are born free"
-> "and equal in dignity and rights. The right to life, liberty, and security"
fresh "All evaluation harnesses are born tiny"
-> ", and the most common way to measure their size is by using a ruler."Ba trong năm chuỗi nổi tiếng được tiếp tục chính xác từng từ từ sáu từ; không chuỗi mới nào trong năm chuỗi mới làm được. Đó là một model nửa tỷ parameter đang đọc thuộc MIT License. Nếu benchmark của bạn nằm trên web công khai, hãy giả định nó nằm trong weights. Đây cũng là lập luận cho toàn bộ chương: một golden set bạn viết từ dữ liệu của chính bạn, giữ ngoài mọi repository mà crawler đọc, là test set duy nhất bạn có thể chắc chắn chưa từng được train trên đó.
Benchmark công khai thật sự đo gì
Liên kết đến mục: Benchmark công khai thật sự đo gìChúng vẫn đáng đọc, miễn là bạn đọc thứ mỗi benchmark đo thay vì con số đơn lẻ gắn với nó.
| benchmark | nó đo gì | một con số từ paper của nó |
|---|---|---|
| MMLU | kiến thức trắc nghiệm trên 57 môn | GPT-3 hơn mức ngẫu nhiên “gần 20 điểm phần trăm trung bình”7 |
| HELM | nhiều metric × nhiều kịch bản, được chuẩn hóa | độ phủ các kịch bản lõi tăng từ 17.9 % lên 96.0 %8 |
| Chatbot Arena | sở thích con người pairwise từ crowdsourcing | hơn 240K vote; vote đám đông “đồng thuận tốt” với chuyên gia9 |
| SWE-bench | giải issue GitHub thật, chấm bằng test của repo | 2,294 bài; model tốt nhất lúc đó giải được “chỉ 1.96 %”10 |
| τ-bench | dùng công cụ với user giả lập và policy miền | gpt-4o ≈ 61 % pass^1, ≈ 25 % pass^8 trên retail4 |
| WebArena | tác vụ long-horizon trên website hoạt động | agent GPT-4 tốt nhất 14.41 % so với 78.24 % của con người11 |
| OSWorld | tác vụ desktop và OS thật trên nhiều ứng dụng | 369 tác vụ; model tốt nhất 12.24 %, con người 72.36 %12 |
| GAIA | câu hỏi dễ với người, khó với assistant | 466 câu hỏi; con người 92 %, GPT-4 với plugin 15 %13 |
| AgentBench | suy luận agent trên 8 môi trường khác nhau | khoảng cách lớn giữa model thương mại và model mở14 |
| AgentHarm | liệu agent có thực hiện tác vụ độc hại nhiều bước không | 110 tác vụ độc hại trên 11 hạng mục gây hại15 |
Hãy lấy cả bảng thay vì bất kỳ hàng nào. Các benchmark agentic đều đặt con người cao hơn model rất xa, trái ngược với benchmark kiến thức và là tóm tắt một dòng tốt nhất về vị trí của lĩnh vực này; số liệu của chúng cũ đi trong vài tháng, nên hãy trích dẫn kèm ngày bạn đọc; và mỗi benchmark đều đo một tác vụ không phải của bạn.
Những metric quyết định trong production
Liên kết đến mục: Những metric quyết định trong productionAccuracy là metric bạn tranh luận. Đây là những metric quyết định liệu thứ đó có được ship không. Cả bốn đều rơi ra từ hai trăm lần chạy đã đo.
Chi phí trên mỗi tác vụ giải được, không phải mỗi call. agent tốn $0.001345 mỗi attempt và $0.005172 cho mỗi tác vụ thật sự giải được — cao hơn 3.85 lần, vì ba phần tư attempt không tạo ra gì. Latency cũng như vậy: 1,213 ms mỗi attempt, 4,667 ms mỗi tác vụ giải được. Mỗi retry, mỗi lần hỏi lại, mỗi trajectory bị bỏ rơi nằm trong con số thứ hai và vô hình trong con số thứ nhất.
Một diagnostic tốt hơn accuracy. Trong 123 trên 200 attempt, agent trả lời mà không gọi một công cụ nào — nó đoán thay vì nhìn. Tách theo đó:
answered without reading anything 8/123 = 6.5 % [3.3, 12.3]
answered after reading something 44/77 = 57.1 % [46.0, 67.6]Các khoảng không đến gần nhau. Điều đó đáng giá hơn aggregate 26 %, vì nó gọi tên thứ cần sửa — model không thất bại trong suy luận, nó thất bại trong việc nhìn — và cách sửa nằm trong harness, không phải model. Một caveat chương này nợ chính tiêu chuẩn của nó: hai nhóm là các tác vụ khác nhau, không phải cùng tác vụ được ghép cặp, nên một phần gap có thể là nó bỏ qua công cụ chính ở những câu nó thấy khó. Phân tách này là diagnostic, không phải tuyên bố nhân quả.
Tỷ lệ can thiệp của con người là metric buyer hỏi đầu tiên: tỷ lệ run dừng ở approval, guardrail hoặc handoff là bao nhiêu. Typed interruptions của Chương 23 khiến nó đếm được, và khi đếm theo loại tác vụ và theo tuần, nó là thứ phân biệt một agent đang học việc với một agent âm thầm biến thành hàng đợi.
Abandonment là thứ không offline suite nào nhìn thấy: user đọc câu trả lời, đóng tab và tự làm tác vụ. Đánh giá offline là cổng; đánh giá production là mẫu liên tục từ traffic thật, chấm bằng cùng grader cộng bốn metric này.
Và một quy tắc kế thừa từ Chương 17: đừng bao giờ assert trên output chính xác. Assert trên thuộc tính — JSON hợp lệ, schema đúng, công cụ đúng được gọi, một số nằm trong tolerance, substring bắt buộc có mặt. Cột exact-match ở đầu chương này là điều xảy ra khi quy tắc đó bị phá.
Bạn gửi gì cho bên thứ ba
Liên kết đến mục: Bạn gửi gì cho bên thứ baĐánh giá nhà cung cấp không chỉ là accuracy, và đây là nửa sau của phần đạo đức trong khóa học này, có heading riêng thay vì phụ lục.
Đo bias, đừng giả định nó. Bất kể bạn tin gì về hành vi của model trên tên gọi, phương ngữ, giới tính hay quốc tịch, đó là một thuộc tính đo được của pipeline của bạn, và công cụ là thứ bạn đã có: lấy golden set, chỉ thay đổi thuộc tính, so sánh ghép cặp. HELM tồn tại chính vì accuracy đơn lẻ được báo cáo ở nơi bias, toxicity, calibration và robustness cũng có thể quyết định được.8 Model card của vendor là điểm bắt đầu, không phải bằng chứng về input của bạn.
Contamination cũng là câu hỏi dành cho nhà cung cấp. Probe ở trên là lý do để hỏi một con số đã công bố được đo trên gì, và dữ liệu của model được cắt ở thời điểm nào.
Retention, training và residency, đọc ngày 7 tháng 9 năm 2026. Những thứ này thay đổi, nên hãy ghi ngày bên cạnh câu trả lời. Trang policy của Anthropic nêu: “Theo mặc định, chúng tôi sẽ không sử dụng input hoặc output của bạn từ các sản phẩm thương mại của chúng tôi (ví dụ Claude for Work, Anthropic API, Claude Gov, v.v.) để train model của chúng tôi”, ngoại trừ nội dung bạn chủ động gửi làm feedback, được lưu “tối đa 5 năm”.16 Tài liệu kiểm soát dữ liệu của OpenAI nêu rằng “dữ liệu gửi đến OpenAI API không được dùng để train hoặc cải thiện model OpenAI (trừ khi bạn chủ động opt in chia sẻ dữ liệu với chúng tôi)”, mô tả retention mặc định ba mươi ngày cho log giám sát lạm dụng, và cung cấp Zero Data Retention, thứ “loại trừ nội dung khách hàng khỏi log giám sát lạm dụng”, cộng với data residency có thể cấu hình trên một danh sách vùng.17
Bốn câu hỏi cần có bằng văn bản trước production call đầu tiên, vì mỗi câu có một owner khác nhau: dữ liệu của tôi có được dùng để training không; nó được giữ bao lâu và bởi ai; nó được xử lý và lưu ở đâu; và điều gì xảy ra với tất cả những điều đó nếu tôi dùng reseller, gateway hoặc aggregator thay vì trực tiếp provider. Câu cuối là nơi hầu hết bất ngờ trú ngụ, và không benchmark nào sẽ nói cho bạn.
Tiếp theo là gì
Liên kết đến mục: Tiếp theo là gìGiờ bạn có công cụ đo: một golden set bạn sở hữu, một khoảng trên mọi con số, một kiểm định ghép cặp cho mọi so sánh, pass^k cho các run bạn không cho ai xem, một judge đã được đo, và một probe để biết một điểm công khai có nghĩa gì không. Tuyên bố kết thúc của Chương 23 giờ có thể được kiểm tra thay vì khẳng định — một harness khiến agent có thể được quản trị, không khiến nó đúng — và việc kiểm tra đó tốn hai trăm run cùng tám phút.
Có một thuộc tính của agent mà không thứ nào trong đó đo, và đó là thuộc tính khiến người ta mất việc.
Mọi tác vụ trong golden set của chương này đều do tôi viết, và mọi tệp agent đọc đều do tôi viết. Không có gì trong thư mục đó đang cố làm gì cả. Thay một dòng trong một tệp agent được yêu cầu đọc — một dòng kết thúc bằng instruction gửi tới bất cứ thứ gì đọc nó tiếp theo — và agent đạt 26 % sẽ làm theo nó với cùng công cụ, cùng quyền hạn và cùng trace sạch, còn mọi con số trong chương này vẫn nằm đúng chỗ. Một evaluation suite đo tần suất hệ thống đạt mục tiêu của bạn. Nó không đo mức độ dễ dàng để người khác thay mục tiêu của họ vào.
Chương 30 là chuyện đó: prompt injection, lethal trifecta của dữ liệu riêng tư, nội dung không đáng tin và giao tiếp bên ngoài, cùng chi phí của việc trao quyền thật cho một agent. Chương đó mở bằng nhận xét mà chương này đã né tránh — rằng cùng một điểm pass tương thích với một agent làm đúng những gì attacker viết trong một tệp nó được yêu cầu đọc.
Nguồn và phương pháp
Liên kết đến mục: Nguồn và phương phápMọi con số ở trên được tạo trên một máy và không đụng tới paid endpoint nào. agent là vòng lặp của Chương 23 với hai trong bốn công cụ của nó trên một thư mục năm tệp; model phía sau port là Qwen/Qwen2.5-0.5B-Instruct, được expose qua một server nhỏ có cùng hình dạng với chat completions endpoint y như Chương 23, nhưng ở half precision trên một GPU consumer thay vì CPU của chương đó. Chi phí dùng rate của Chương 16 — $2.00 trên một triệu input tokens và $12.00 trên một triệu output — áp vào token count đã đo. Các lần chạy lặp dùng temperature 0.7 với seed cố định để toàn bộ bộ có thể tái lập; bảng bốn nhánh là greedy. Khoảng là Wilson ở 95 %, so sánh ghép cặp là kiểm định dấu exact hai phía trên các cặp discordant; khoảng Wilson là của Chương 4 và kiểm định dấu exact ghép cặp là của Chương 15, cả hai được dùng lại không đổi. Nhãn con người là của tôi, áp vào sáu mươi câu trả lời theo quy tắc đã viết được trích trong text. Hãy đọc mọi độ lớn ở đây như thuộc tính của một model nửa tỷ parameter và mọi phương pháp như thứ có thể chuyển giao: model lớn hơn đẩy mọi con số lên và không đẩy công cụ đo nào đi.
Tài liệu tham khảo
Liên kết đến mục: Tài liệu tham khảo-
OpenAI, A practical guide to building agents (PDF), trang 8, đọc ngày 7 tháng 9 năm 2026. Nguồn của thứ tự ba bước được trích ở trên và lời khuyên đi kèm là “xây prototype agent của bạn với model có năng lực nhất cho mọi tác vụ để xác lập baseline hiệu năng. Từ đó, thử thay bằng model nhỏ hơn để xem chúng có vẫn đạt kết quả chấp nhận được không.” Chương 22 và 25 trích các trang định nghĩa và orchestration của nó. ↩
-
Schaeffer, R., Miranda, B. và Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). Lập luận rằng các metric gián đoạn, được-ăn-cả-ngã-về-không tạo ra những cú nhảy biểu kiến từ cải thiện nền mượt, với kiểm toán BIG-Bench được trích trong Chương 10. Cảnh báo của chính họ đáng nhắc lại: không có gì trong paper tuyên bố model lớn không thể thể hiện emergent abilities. ↩
-
Kalai, A. T., Nachum, O., Vempala, S. S. và Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). Lập luận rằng benchmark chấm đúng-sai thưởng cho việc đoán hơn abstention, và phương thuốc đề xuất là “sửa cách chấm điểm của các benchmark hiện có vốn bị lệch nhưng thống trị leaderboard, thay vì đưa thêm evaluation hallucination mới”. Chương 19 trích nó từ phía retrieval; đây là phía đánh giá của cùng tuyên bố. ↩
-
Yao, S., Shinn, N., Razavi, P. và Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). Nguồn gốc của
pass^k, được định nghĩa như trích ở trên, với cả hai estimator in cạnh nhau trong paper; headline của abstract là các function-calling agents state-of-the-art “thành công trên <50 % tác vụ, và khá không nhất quán (pass^8 <25 % trong retail)”, và mục 1 đưa các số liệu gpt-4o ≈61 %pass^1và ≈25 %pass^8trên τ-retail. Estimatorpass@kmà nó đối chiếu đến từ Chen, M. và cộng sự, Evaluating Large Language Models Trained on Code, arXiv:2107.03374 (2021). ↩ ↩2 ↩3 -
Zheng, L. và cộng sự Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arXiv:2306.05685 (2023). Nguồn của ba bias được đặt tên, của định nghĩa consistency dùng ở trên (“tỷ lệ phần trăm các case trong đó judge đưa ra kết quả nhất quán khi hoán đổi thứ tự hai assistant”), của phát hiện rằng “chỉ output của GPT-4 cho kết quả nhất quán trong hơn 60 % case” với 65.0 % tăng lên 77.5 % nhờ few-shot, và của mitigation hoán-đổi-và-yêu-cầu-đồng-thuận được trích nguyên văn. Kết quả tích cực của paper cũng quan trọng: judge GPT-4 đạt “tỷ lệ đồng thuận vượt 80 %” với đánh giá của con người, “cùng mức với đồng thuận giữa người với người” — đó là lý do để dùng judge, và lý do để đo judge của bạn. ↩ ↩2 ↩3
-
EleutherAI, Language Model Evaluation Harness, README dự án đọc ngày 7 tháng 9 năm 2026: “hơn 60 benchmark học thuật chuẩn cho LLM, với hàng trăm subtask và biến thể được triển khai”, và “backend cho Open LLM Leaderboard phổ biến của Hugging Face”. Lệnh gọi
lm_evalđược trích ở trên là ví dụ của chính README. Liang, P. và cộng sự, Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), là runner chuẩn còn lại và là tài liệu đáng đọc hơn về thiết kế đánh giá. ↩ -
Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. và Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 tác vụ; tuyên bố trong abstract rằng model GPT-3 lớn nhất “cải thiện so với ngẫu nhiên gần 20 điểm phần trăm trung bình” là lời nhắc hữu ích về việc benchmark này mới bão hòa gần đây đến mức nào. ↩
-
Liang, P. và cộng sự Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Bảy metric — accuracy, calibration, robustness, fairness, bias, toxicity và efficiency — trên 16 kịch bản lõi và 30 model, với các con số coverage được trích ở trên. Lý do nên đọc nó là framing: bạn báo cáo metric nào trong bảy metric tự nó đã là một lựa chọn. ↩ ↩2
-
Chiang, W.-L. và cộng sự Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Hơn 240K vote tại thời điểm viết, sở thích con người pairwise từ crowdsourcing, và tuyên bố rằng “các vote con người từ crowdsourcing đồng thuận tốt với những người chấm chuyên gia”. ↩
-
Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O. và Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 bài từ 12 repository Python, được chấm bằng test của chính repository, với model tốt nhất lúc đó giải được “chỉ 1.96 %”. Chương 23 dùng nó cho nghĩa khác của từ “harness”. ↩
-
Zhou, S. và cộng sự WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Website hoạt động trên bốn miền, với agent GPT-4 tốt nhất đạt 14.41 % so với 78.24 % của con người. ↩
-
Xie, T. và cộng sự OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 tác vụ trên hệ điều hành thật; con người trên 72.36 %, model tốt nhất 12.24 %, với GUI grounding được nêu là khoảng cách chính. ↩
-
Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. và Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 câu hỏi, con người đạt 92 % so với 15 % của GPT-4 với plugin — phát biểu công khai sạch nhất về khoảng cách giữa điều dễ với con người và điều dễ với assistant. ↩
-
Liu, X. và cộng sự AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Tám môi trường khác nhau, và chênh lệch đáng kể giữa các model thương mại hàng đầu và model open-source có kích thước tương đương. ↩
-
Andriushchenko, M. và cộng sự AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 tác vụ agent độc hại rõ ràng (440 với augmentation) trên 11 hạng mục gây hại, với phát hiện rằng các model dẫn đầu “đáng ngạc nhiên là tuân thủ yêu cầu agent độc hại mà không cần jailbreaking” và các template jailbreak phổ quát đơn giản chuyển sang agent trong khi vẫn giữ năng lực. Nó là cây cầu sang Chương 30: một capability benchmark và một harm benchmark đo cùng một hệ thống và bất đồng về việc nó đã sẵn sàng hay chưa. ↩
-
Anthropic, Is my data used for model training?,
privacy.claude.com, đọc ngày 7 tháng 9 năm 2026. Được trích nguyên văn ở trên, gồm cả ngoại lệ feedback và cửa sổ lưu trữ năm năm cho feedback đã gửi. ↩ -
OpenAI, Your data (tài liệu kiểm soát dữ liệu API),
developers.openai.com, đọc ngày 7 tháng 9 năm 2026. Nguồn của tuyên bố mặc định không training, retention ba mươi ngày cho giám sát lạm dụng, mô tả Zero Data Retention và danh sách endpoint đủ điều kiện, cùng các vùng data residency. ↩