Khi bộ eval có hàng nghìn task chạy mỗi đêm, eval trở thành hạ tầng. Phân tầng smoke/regression/full, runner có cache, giới hạn đồng thời và thử lại, manifest phiên bản để tái lập, xử lý task flaky, ước lượng ngân sách và tổ chức quyền sở hữu eval.
Một bộ dữ liệu nội bộ khác một benchmark nhiều người dùng. Construct validity, bão hoà và vòng đời benchmark, phát hiện nhiễm dữ liệu bằng trùng n-gram và câu diễn đạt lại, canary string, mô hình Rasch để ước lượng độ khó và chọn tập con giữ đúng thứ hạng.
Lỗi của chatbot thường chỉ lộ ra sau vài lượt. Kịch bản có persona, mục tiêu và thông tin ẩn; người dùng giả lập bằng LLM; điều kiện dừng; grader cấp hội thoại; kiểm tra người dùng giả có giống người thật không; replay tiền tố hội thoại thật.
Agent gọi công cụ qua nhiều bước nên không chấm như chatbot. Môi trường có trạng thái reset mỗi trial, chấm trạng thái thật thay cho lời agent tự nhận, bắt agent nói dối, đo pass@1 và pass^k, ma trận lỗi chuyển trạng thái, eval agent có công cụ bằng Inspect.
Khi điểm judge quyết định phát hành, judge phải chịu được áp lực. So judge với trần đồng thuận người–người, hội đồng judge khác họ mô hình, xếp hạng phiên bản bằng Bradley-Terry có khoảng tin cậy, đo thiên kiến độ dài bằng hồi quy, chống Goodhart và trôi judge.
Khi câu hỏi theo nhóm, mỗi câu chạy nhiều lần và bạn thử cả chục biến thể prompt, công thức sai số đơn giản không còn đúng. Sai số theo cụm, phân rã phương sai để chọn số trial, power analysis cho MDE, và kiểm soát phát hiện sai bằng Holm, Benjamini-Hochberg.
Ghép mọi thứ đã học thành một dự án chạy được: bộ dữ liệu có regression và capability suite, grader cho từng nhóm lỗi, chạy nhiều trial, báo cáo có khoảng tin cậy Wilson và so sánh ghép cặp, cổng chặn phát hành với GitHub Actions, unit test cho chính grader và mẫu báo cáo dạng câu chuyện.
Chuyển harness tự viết sang công cụ chuẩn: Inspect AI với Sample, solver, scorer tự viết, epochs, thử bằng mô hình giả mockllm; promptfoo so sánh hai prompt bằng YAML với assertion code và llm-rubric; cách chọn Inspect, promptfoo, DeepEval, Langfuse, Braintrust.
Hệ thống RAG hỏng ở hai nơi: tìm sai tài liệu hoặc trả lời sai dù tài liệu đúng. Tự viết recall@k, precision@k, MRR, nDCG; so sánh hai retriever và thấy bộ câu hỏi trùng từ thổi phồng điểm thế nào; đo faithfulness bằng tách mệnh đề, các metric kiểu RAGAS và ma trận chẩn đoán lỗi.
Khi code không chấm được, dùng LLM chấm LLM — nhưng chỉ sau khi kiểm chứng. Thiết kế judge nhị phân cho đúng một nhóm lỗi, prompt có định nghĩa và ví dụ, structured output; chia nhãn train/dev/test, đo TPR và TNR, chống thiên kiến vị trí và độ dài, hiệu chỉnh tỉ lệ đạt kèm khoảng tin cậy.
Grader bằng code rẻ, nhanh, tất định — luôn là lựa chọn đầu tiên. Chuẩn hoá chuỗi, exact match và token F1 kiểu SQuAD, kiểm tra JSON schema, chấm lời gọi công cụ, chạy unit test cho code do mô hình sinh, ước lượng không chệch pass@k, và vì sao BLEU/ROUGE không đo được chất lượng.
Hoạt động có giá trị nhất trong eval là đọc dữ liệu. Quy trình error analysis từng bước: lấy mẫu trace, ghi chú lỗi đầu tiên (open coding), gom nhóm thành bảng phân loại lỗi (axial coding), đếm và ưu tiên, dừng khi bão hoà — kèm công cụ gán nhãn tối giản và phân tích bằng pandas.
Bộ eval tốt quyết định mọi thứ phía sau. Lấy câu hỏi từ production, ticket và chuyên gia; sinh dữ liệu tổng hợp có kiểm soát bằng chiều và tuple; viết hướng dẫn gán nhãn, đo đồng thuận bằng Cohen's kappa; chia dev/test phân tầng và phiên bản hoá dữ liệu.
90% trên 40 câu có thật sự hơn 85%? Tính sai số chuẩn và khoảng tin cậy Wilson cho tỉ lệ đạt, bootstrap, cần bao nhiêu câu hỏi, chạy nhiều trial để giảm nhiễu, và so sánh hai prompt bằng phép thử ghép cặp, McNemar — tất cả bằng NumPy và SciPy.
Các khái niệm nền của evals cho LLM: task, trial, grader, transcript, outcome, harness; eval năng lực và eval hồi quy; offline và online; nhãn nhị phân thay cho thang 1–5. Tự viết một harness eval khoảng 80 dòng Python, chạy nhiều lần mỗi task.
Phần toán tối thiểu để đọc hiểu ML và Deep Learning: tích vô hướng, nhân ma trận, gradient, quy tắc chuỗi, phân phối xác suất, kỳ vọng, Bayes — mỗi khái niệm đi kèm vài dòng NumPy và chỗ nó xuất hiện trong mô hình thật.
Bộ công cụ hằng ngày của AI Engineer: vector hoá với NumPy, đọc–lọc–gộp–làm sạch dữ liệu với Pandas, vẽ biểu đồ khám phá với Matplotlib. Thực hành trọn một vòng EDA trên Titanic, kết thúc bằng bảng đặc trưng sẵn sàng cho mô hình.