Bạn vừa sửa prompt cho agent trả lời ca A tốt hơn. Nhưng liệu nó có làm hỏng 20 ca vốn đang đúng? Golden test trả lời câu đó: đóng băng (freeze) các trace/kết quả "vàng" đã được xác nhận đúng, rồi mỗi lần thay đổi, so lại với bản vàng. Đây là lưới an toàn giúp bạn dám thay đổi.
Golden test là gì
Với một tập input cố định, bạn lưu lại kết quả tham chiếu đã duyệt (golden). Lần sau chạy lại cùng input, so kết quả mới với golden:
- Khớp tiêu chí → pass.
- Lệch → cảnh báo để người xem xét: cải thiện (cập nhật golden) hay hồi quy (sửa lại).
So cái gì? — Đừng so chuỗi ký tự thô
Vì agent phi tất định, so exact string sẽ báo lỗi giả liên tục. Hãy so theo bất biến (invariants):
- Tool trajectory: tập/thứ tự tool được gọi có giữ nguyên không?
- Trường chốt trong output: mã đơn, ngày, con số quan trọng có khớp không?
- Thuộc tính: không chứa PII, đúng ngôn ngữ, đúng format JSON?
- Ngân sách: số bước / token không phình quá X%.
def compare_to_golden(golden, current):
diffs = []
if tools_seq(golden) != tools_seq(current):
diffs.append(f"tool đổi: {tools_seq(golden)} -> {tools_seq(current)}")
for k in golden["key_fields"]:
if current["fields"].get(k) != golden["fields"][k]:
diffs.append(f"trường '{k}' đổi: {golden['fields'][k]} -> {current['fields'].get(k)}")
if current["steps"] > golden["steps"] * 1.5:
diffs.append(f"số bước phình: {golden['steps']} -> {current['steps']}")
return diffs # rỗng = pass
Các bước dựng golden suite
- Chọn 15-40 ca đại diện đã được xác nhận đúng (gồm ca khó & ca gài bẫy).
- Chạy agent, lưu golden cho mỗi ca: tool trajectory, các trường chốt, số bước, thuộc tính bắt buộc.
- Định nghĩa invariants so sánh (không so string thô) như trên.
- Đưa vào CI: mỗi lần đổi prompt/model/tool, chạy golden suite tự động.
- Khi có diff: người xem xét → nếu là cải thiện đã duyệt thì cập nhật golden có chủ đích; nếu là hồi quy thì chặn.
- Ghi version cho golden (kèm model + prompt version) để biết bản vàng thuộc cấu hình nào.
Khung tư duy: "Cải thiện hay Hồi quy?"
Mỗi diff phải được phân loại có ý thức:
Diff xuất hiện
├─ Kết quả mới ĐÚNG hơn? -> Cải thiện -> cập nhật golden (ghi lý do)
├─ Kết quả mới SAI/kém? -> Hồi quy -> chặn, sửa
└─ Không rõ? -> đưa human review, KHÔNG tự cập nhật
Kỷ luật này ngăn "golden trôi" — cập nhật bừa làm bản vàng mất giá trị.Phân loại ca golden theo mức độ nghiêm ngặt
Không phải ca nào cũng đáng chặn deploy như nhau. Gắn nhãn cho từng ca:
- hard (cứng): ca sống-còn (thanh toán đúng, không lộ PII, không bịa số liệu). Bất kỳ diff nào ở nhóm này → chặn deploy ngay.
- soft (mềm): ca mong muốn giữ ổn định nhưng diff chỉ cảnh báo để người xem, không chặn (VD: cách diễn đạt câu trả lời).
golden_hard_diffs == 0 (tuyệt đối) trong khi vẫn khoan dung với thay đổi văn phong — tránh chặn oan những cải tiến nhỏ.Sai lầm thường gặp
- So khớp chuỗi thô: Với hệ phi tất định → hàng loạt lỗi giả, đội bỏ qua cả test.
- Tự động cập nhật golden khi thấy diff: Bản vàng "trôi" theo mọi thay đổi → mất tác dụng chống hồi quy.
- Golden suite quá ít ca: Không phủ được đường đi quan trọng.
- Không ghi version cấu hình: Không biết golden ứng với model/prompt nào, khó truy vết.
- Chỉ golden output cuối, bỏ trajectory: Agent đi đường vòng tốn kém vẫn "pass" vì output tình cờ giống.
Checklist kết bài
- [ ] 15-40 ca golden đại diện, đã duyệt đúng.
- [ ] So theo invariants (trajectory + trường chốt + budget), không so string thô.
- [ ] Chạy trong CI mỗi lần thay đổi.
- [ ] Mỗi diff được phân loại cải thiện/hồi quy có chủ đích.
Học xong bài này rồi?
Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu,
và học hết khóa thì có chứng chỉ.
Lưu tiến độ của tôi