AI Agents & Skills

claude plugin eval: kiểm thử skill và plugin như kiểm thử code

Tóm tắt

claude plugin eval chạy skill hoặc plugin trên bộ case thật, mỗi case 3 lần, so sánh với nhánh không có plugin để đo đóng góp thật. Viết prompt như người dùng, mỗi case một grader kết quả và một grader quá trình, chạy lại khi đổi model.

Bạn viết một skill, thử vài lần thấy chạy được, rồi phát hành cho team. Một tuần sau model mới ra, hoặc ai đó sửa description, và skill âm thầm không còn được gọi nữa. Không ai biết cho tới khi có người phàn nàn. Claude Code giờ có lệnh claude plugin eval để kiểm thử plugin và skill bằng bộ test case thật, chấm điểm, và so sánh với trường hợp không có plugin để biết plugin thực sự đóng góp bao nhiêu.

Một lần chạy eval diễn ra thế nào?

  • Bộ eval nằm trong thư mục evals/ của plugin; mỗi case là một thư mục con gồm prompt.md (câu người dùng sẽ gõ) và một hoặc nhiều grader.
  • Mỗi lần chạy mở một phiên non-interactive cô lập, chỉ nạp plugin của bạn, gửi prompt và để Claude làm tới khi xong.
  • Mỗi case chạy 3 lần mặc định vì agent không tất định; điểm case là trung bình các lần.
  • Mặc định chạy thêm nhánh không có plugin để so sánh: cột Δ dương nghĩa là plugin làm kết quả tốt hơn.

Bắt đầu

claude plugin eval init            # Claude hỏi bạn, đề xuất case và grader, chạy thử, ghi file
claude plugin eval .               # chạy toàn bộ case
claude plugin eval . --case <tên> --runs 1 --ablation none   # lặp nhanh một case

Kết quả in bảng WITH, W/OUT, Δ, COST và tạo báo cáo HTML xem từng grader ở từng lần chạy.

Sáu loại grader

LoạiKiểm traChi phí
regexKhớp mẫu trên câu trả lời hoặc fileMiễn phí
tool_usedMột tool (ví dụ Skill) có được gọiMiễn phí
tool_orderThứ tự gọi toolMiễn phí
file_existsFile được tạo raMiễn phí
llmModel giám khảo chấm theo rubricTốn gọi model
baselineSo với nhánh không pluginTốn gọi model

Không có grader bằng code tuỳ biến. Mỗi grader có thể đặt weight; case đạt khi điểm ≥ --threshold (mặc định 1.0).

Mẹo viết case cho tín hiệu ổn định

  • Viết prompt như người dùng thật: không nêu tên skill, để kiểm tra Claude có tự chọn skill theo description không.
  • Mỗi case hai grader: một chấm kết quả (câu trả lời, file), một chấm quá trình (tool_used, tool_order).
  • Output dài dùng regex: giữ grader llm cho output ngắn, rubric ghi điều kiện PASS/FAIL cụ thể.
  • Có cả case không nên kích hoạt: grader "không gọi skill" với arm: both để bắt việc skill bị gọi nhầm.
  • Phát hiện phổ biến nhất: Δ gần 0 và grader tool_used: Skill trượt, nghĩa là Claude không chọn skill với cách nói tự nhiên; sửa description rồi chạy lại.

Rủi ro và lưu ý

  • Tốn tiền thật: mỗi lần chạy và mỗi grader llm là lời gọi model tính vào hạn mức hoặc hoá đơn. Số lần gọi xấp xỉ case × lần chạy × 2 nhánh, cộng thêm lời gọi giám khảo. Dùng --ablation none khi chỉ đang chỉnh grader.
  • Giám khảo nhỏ có thể chấm sai: nếu skill được gọi đúng mà Δ âm, nghi giám khảo trước; thử --judge-model sonnet.
  • Tính năng đang ở early access: có thể chưa bật cho mọi tài khoản.
  • Khác skill-creator: plugin skill-creator có định dạng evals/evals.json riêng; hai công cụ không đọc file của nhau.

Áp dụng thế nào?

  • Dev: Chạy claude plugin eval init cho skill bạn dùng nhiều nhất; sửa description tới khi grader tool_used: Skill đạt ổn định.
  • Tech Lead: Đưa eval vào CI cho repo plugin nội bộ; chạy lại mỗi khi có model mới.
  • PM: Dùng cột Δ để quyết định skill nào đáng duy trì; skill không cải thiện kết quả thì bỏ cho gọn context.

Nguồn & tham khảo

  1. Test plugins with evals — Claude Code Docs