# 🔍 Kiểm chứng đầu ra và vòng lặp đánh giá

## Mục tiêu học tập

- Phát biểu được nguyên lý vì sao mọi đầu ra của mô hình đều phải qua kiểm chứng, và phân biệt ba lớp kiểm chứng: máy móc, AI phản biện, con người.
- Viết được bộ tiêu chí đánh giá (evaluation criteria) quan sát được, có thang điểm mô tả rõ, dùng lại được cho nhiều lần chạy.
- Thiết kế được prompt phản biện để dùng AI như người chấm độc lập, biết các thiên lệch (bias) thường gặp của người chấm AI.
- Thiết lập được vòng lặp đánh giá (evaluation loop) với bộ mẫu kiểm thử hồi quy (regression set) và nhật ký prompt (prompt log), biến mỗi lần thất bại thành một cải tiến có ghi chép.

## Ôn tập nhanh

Bài trước đã cho ba kỹ thuật: **few-shot** cho quy ước khó diễn đạt bằng lời, **chain-of-thought** cho bài toán có chuỗi ràng buộc, **đầu ra có cấu trúc (structured output)** cho yêu cầu định dạng máy đọc được. Cả ba đều làm tăng *xác suất* đúng, không tạo ra bảo đảm. Bài này xử lý phần còn lại: làm sao biết đầu ra đúng tới mức nào, và làm gì khi nó sai.

## Lý thuyết

### 1. Nguyên lý: đầu ra không tự chứng minh

Mô hình ngôn ngữ lớn tối ưu cho tính hợp lý bề mặt (plausibility), không tối ưu cho tính đúng sự thật. Vì vậy ==đầu ra trôi chảy không phải bằng chứng của tính đúng==. Kiểm chứng (verification) là bước chuyển từ "có vẻ đúng" sang "đã biết đúng tới mức nào, ở những tiêu chí nào".

### 2. Tiêu chí đánh giá: quan sát được, có thang, kiểm tra chéo được

Một tiêu chí dùng được phải thỏa ba điều kiện: quan sát được bởi người thứ ba, có thang mức kèm mô tả, và không phụ thuộc cảm giác của người viết prompt. "Văn hay" không phải tiêu chí; "mỗi đoạn mở bằng một câu nêu luận điểm" là tiêu chí.

| Nhóm tiêu chí | Câu hỏi kiểm | Ví dụ mức 4/5 |
| --- | --- | --- |
| Đúng sự thật (factual accuracy) | Có chi tiết nào sai hoặc không có nguồn? | Mọi số liệu đều có nguồn ghi kèm |
| Đầy đủ (coverage) | Có bỏ sót ý bắt buộc nào? | Đủ 5/5 ý trong đề cương |
| Tuân thủ ràng buộc (constraint compliance) | Đúng độ dài, định dạng, từ cấm? | Đúng 200 từ, đúng 3 mục |
| Hữu dụng (usefulness) | Người đọc làm được gì ngay? | Mỗi ý có bước hành động cụ thể |

### 3. Ba lớp kiểm chứng

| Lớp | Công cụ | Kiểm gì | Chi phí | Tần suất |
| --- | --- | --- | --- | --- |
| Máy móc (deterministic) | Kiểm schema, đếm từ, regex, danh sách từ cấm | Ràng buộc hình thức | Rất thấp | 100% mẫu |
| AI phản biện (LLM-as-judge) | Prompt chấm theo rubric | Nội dung, lập luận | Thấp | 100% mẫu |
| Con người (human spot-check) | Đọc mẫu ngẫu nhiên + mẫu rủi ro cao | Tính đúng thực tế | Cao | 5 đến 10% mẫu |

Nguyên tắc vận hành: lớp rẻ chạy trước để loại lỗi thô, lớp đắt chạy sau trên phần đã lọc. Đừng dùng AI để chấm thứ máy đếm được.

### 4. Vòng lặp đánh giá

```mermaid
flowchart LR
    A["🎯<br/>Tiêu chí"] --> B["⚙️<br/>Sinh đầu ra"]
    B --> C["🔍<br/>Chấm điểm"]
    C --> D["🧩<br/>Phân loại lỗi"]
    D --> E["✏️<br/>Sửa một biến"]
    E --> F["📚<br/>Chạy bộ kiểm thử"]
    F --> C
    F --> G["🗂️<br/>Ghi nhật ký"]
    G --> A
```

```steps
1. Chốt tiêu chí và rubric trước khi nhìn đầu ra, để tránh chấm theo cảm tính.
2. Dựng bộ mẫu kiểm thử nhỏ (5 đến 15 mẫu), gồm mẫu dễ, mẫu khó và mẫu từng thất bại.
3. Chạy prompt hiện tại trên toàn bộ bộ mẫu, ghi lại điểm từng tiêu chí.
4. Phân loại lỗi theo nguyên nhân, không theo triệu chứng.
5. Chỉ sửa một biến trong prompt, rồi chạy lại trên cùng bộ mẫu.
6. Ghi nhật ký: phiên bản, giả thuyết, thay đổi, điểm trước và sau, kết luận.
```

Thước đo cơ bản của vòng lặp là tỉ lệ đạt:

$$
\text{Tỉ lệ đạt} = \frac{\text{Số mẫu đạt tiêu chí}}{\text{Tổng số mẫu kiểm thử}}
$$

Điểm số chỉ là phương tiện. Mục tiêu thật là giảm **số loại lỗi lặp lại**, vì mỗi loại lỗi cần một cách sửa khác nhau.

### 5. AI làm người phản biện

Điều kiện tiên quyết là tách vai: người viết và người chấm phải là hai lần chạy khác nhau, lý tưởng là khác prompt và khác mô hình. Nếu để mô hình vừa viết vừa tự chấm trong cùng một lượt, nó sẽ có xu hướng khen lại chính mình (self-preference) và chiều theo người dùng (sycophancy).

Prompt phản biện tốt phải buộc: nêu lỗi kèm trích dẫn nguyên văn, xếp mức nghiêm trọng, không khen, không viết lại bài. Việc viết lại phải là một lượt riêng, nếu không tín hiệu lỗi sẽ bị hòa vào bản sửa.

```text
Vai trò: người phản biện độc lập, không phải người viết.
Nhiệm vụ: chấm bản tóm tắt dưới đây theo 4 tiêu chí, mỗi tiêu chí cho điểm 1 đến 5.
Ràng buộc:
- Mỗi điểm phải kèm một trích dẫn nguyên văn làm bằng chứng.
- Không khen, không đề xuất bản sửa, không viết lại.
- Nếu một tiêu chí không đủ thông tin để chấm, ghi "không đủ dữ liệu".
Định dạng: bảng gồm tiêu chí, điểm, trích dẫn, mức nghiêm trọng (thấp/vừa/cao).
```

Các thiên lệch cần bù: ưu ái văn dài, ưu ái vị trí đầu, ưu ái mô hình cùng họ, và xu hướng đồng ý với người hỏi. Cách bù: chấm từng tiêu chí riêng, ẩn nguồn tài liệu, đảo thứ tự khi so sánh hai bản, luôn đòi bằng chứng trích dẫn.

### 6. Biến thất bại thành cải tiến có ghi chép

| Loại lỗi | Dấu hiệu | Cách sửa đúng |
| --- | --- | --- |
| Thiếu ngữ cảnh | Nội dung đúng chung chung, sai với tình huống của bạn | Bổ sung ngữ cảnh, đối tượng đọc, ràng buộc |
| Thiếu ví dụ | Định dạng hoặc giọng điệu lệch | Thêm few-shot |
| Nhiệm vụ mơ hồ | Mỗi lần ra một kiểu | Tách thành hai prompt hoặc chốt định dạng |
| Ràng buộc ngầm | Vi phạm độ dài, từ cấm | Nêu rõ ràng buộc và kiểm bằng máy |
| Giới hạn mô hình | Bịa nguồn, kiến thức cũ | Buộc trích nguồn, cho phép trả lời "không biết" |

Nhật ký prompt tối thiểu gồm năm cột: phiên bản, giả thuyết, thay đổi, điểm trước và sau, kết luận giữ hay bỏ. Không có nhật ký thì bạn đang lặp lại thí nghiệm cũ mà không biết.

Củng cố nhanh:

```cloze
Ba lớp kiểm chứng xếp theo chi phí tăng dần là: kiểm tra {{c1::máy móc (deterministic)}}, rồi {{c2::AI phản biện (LLM-as-judge)}}, cuối cùng là {{c3::con người (human spot-check)}}.
Trong một vòng lặp, mỗi lần chỉ nên thay đổi {{c4::một biến}} để giữ được quan hệ nhân quả.
Bộ mẫu kiểm thử phải luôn giữ lại các {{c5::mẫu từng thất bại}} để tránh tái phát.
```

## Ví dụ có lời giải

Tác vụ trong capstone: "Tóm tắt một báo cáo nghiên cứu 200 từ, phục vụ phần tổng quan tài liệu".

**Bước 1, chốt tiêu chí.** Bốn tiêu chí: (a) mọi số liệu có nguồn trong báo cáo, (b) đủ 3 ý bắt buộc gồm câu hỏi nghiên cứu, phương pháp, phát hiện chính, (c) đúng 200 từ, không dùng từ "rất", (d) mỗi ý có một câu hàm ý cho người đọc.

**Bước 2, dựng bộ kiểm thử.** Năm mẫu: hai báo cáo định lượng, một báo cáo định tính, một báo cáo có nhiều bảng, một báo cáo từng bị tóm tắt sai.

**Bước 3, chạy và chấm.** Kết quả vòng đầu: 3/5 mẫu đạt. Hai mẫu hỏng đều thiếu số liệu.

**Bước 4, phân loại lỗi.** Không phải lỗi định dạng (lớp máy đã đạt), mà là ràng buộc ngầm: prompt cũ chỉ nói "tóm tắt trung thực", chưa buộc trích số liệu.

**Bước 5, sửa một biến.** Thêm đúng một dòng: "Mỗi phát hiện định lượng phải kèm số liệu và tên bảng trong báo cáo gốc". Chạy lại toàn bộ 5 mẫu: 5/5 đạt tiêu chí (a), 4/5 đạt tiêu chí (d).

**Bước 6, ghi nhật ký.** Dòng ghi: `v3 | giả thuyết: thiếu ràng buộc trích số liệu | thay đổi: thêm 1 dòng ràng buộc | điểm: 3/5 lên 5/5 (a), 4/5 (d) | giữ`.

Lưu ý phương pháp: nếu vòng đó sửa cả độ dài lẫn ràng buộc trích dẫn, bạn sẽ không biết cái nào tạo ra cải thiện.

## Luyện tập có hướng dẫn

Bài tập gắn với capstone của bạn (quy trình AI cá nhân cho nghiên cứu, lập kế hoạch, viết nội dung).

**Bài 1.** Chọn một tác vụ lặp lại trong quy trình của bạn. Viết 4 tiêu chí, mỗi tiêu chí có mô tả mức 1 và mức 5.

**Bài 2.** Viết prompt phản biện cho tác vụ đó, bảo đảm có đủ: vai trò tách biệt, thang điểm, yêu cầu trích dẫn, cấm viết lại.

**Bài 3.** Lấy một lần thất bại thật gần đây, viết một dòng nhật ký theo mẫu năm cột.

<details><summary>Gợi ý đáp án</summary>

**Bài 1.** Với tác vụ "lập kế hoạch tuần": tiêu chí (a) mỗi đầu việc gắn với một mục tiêu trong quý, mức 1 là không gắn, mức 5 là gắn kèm mã mục tiêu; (b) tổng thời lượng không vượt 25 giờ, mức 1 là vượt quá 30 giờ, mức 5 là trong khoảng 20 đến 25 giờ; (c) mỗi đầu việc có bước kiểm chứng hoàn thành; (d) có ít nhất một khối thời gian dự phòng.

**Bài 2.** Đáp án đạt yêu cầu khi có đủ bốn thành phần: tuyên bố vai trò độc lập, bảng điểm theo từng tiêu chí với mô tả mức, điều kiện trích dẫn nguyên văn cho mỗi điểm, và điều khoản "không viết lại, không khen". Thiếu bất kỳ thành phần nào thì người chấm AI sẽ có xu hướng chấm rộng tay.

**Bài 3.** Ví dụ: `v2 | giả thuyết: kế hoạch quá tải vì thiếu ràng buộc thời gian | thay đổi: thêm "tổng không quá 25 giờ" | điểm: vượt giờ ở 4/5 mẫu xuống 0/5 | giữ`.

</details>

## Góc chuyên gia

- **Chấm theo tiêu chí, không chấm tổng thể.** Một điểm tổng che mất việc tiêu chí nào hỏng, và bạn mất tín hiệu để sửa.
- **Một biến mỗi lần.** Sửa ba thứ cùng lúc là cách nhanh nhất để có một prompt tốt hơn mà không hiểu vì sao.
- **Đừng xóa mẫu thất bại.** Mẫu hỏng chính là thứ bảo vệ bạn khỏi tái phát; xóa nó là tự tháo lưới an toàn.
- **Biết ngưỡng dừng.** Khi đã đạt ngưỡng chất lượng và lỗi còn lại cùng một loại do giới hạn mô hình, hãy dừng và ghi vào nhật ký thay vì tối ưu vô hạn.
- **Cẩn thận với điểm cao tự tạo.** Nếu người chấm và người viết là cùng một lượt chạy, điểm cao thường là dấu hiệu của thiên lệch, không phải chất lượng.

> [!TIP]
> Hãy đặt ngưỡng chất lượng trước khi chạy, ví dụ "đạt khi 5/5 mẫu qua lớp máy và không mẫu nào dưới 4/5 ở tiêu chí đúng sự thật". Ngưỡng đặt trước thì không bị dịch theo kết quả.

> [!WARNING]
> Không dùng tỉ lệ đạt trên bộ mẫu nhỏ làm bằng chứng cho toàn bộ tác vụ. Năm mẫu chỉ đủ để phát hiện lỗi hệ thống, không đủ để khẳng định chất lượng tổng thể.

## Tóm tắt và bước tiếp theo

- Kiểm chứng là bắt buộc vì mô hình tối ưu cho tính hợp lý bề mặt, không phải tính đúng.
- Tiêu chí phải quan sát được, có thang mức, kiểm tra chéo được; ba lớp kiểm chứng chạy theo thứ tự chi phí tăng dần.
- AI chỉ làm người phản biện tốt khi vai được tách và prompt buộc trích dẫn bằng chứng.
- Vòng lặp đánh giá chỉ có giá trị khi mỗi vòng thay đổi một biến và mỗi lần thất bại đều được ghi vào nhật ký và bộ mẫu hồi quy.

**Bộ thẻ ôn tập:**

```flashcard
[
  { "front": "Vì sao đầu ra trôi chảy không được xem là bằng chứng của tính đúng?", "back": "Vì mô hình tối ưu cho tính hợp lý bề mặt, không tối ưu cho tính đúng sự thật." },
  { "front": "Ba điều kiện của một tiêu chí đánh giá dùng được là gì?", "back": "Quan sát được bởi người thứ ba, có thang mức kèm mô tả, không phụ thuộc cảm giác người viết prompt." },
  { "front": "Ba lớp kiểm chứng xếp theo chi phí tăng dần?", "back": "Máy móc, AI phản biện, con người đọc mẫu." },
  { "front": "Lớp kiểm chứng nào nên chạy trên 100% mẫu trước tiên?", "back": "Lớp máy móc: schema, đếm từ, regex, danh sách từ cấm." },
  { "front": "Vì sao phải tách vai người viết và người chấm?", "back": "Để tránh thiên lệch tự ưu ái và xu hướng chiều theo người dùng của mô hình." },
  { "front": "Prompt phản biện tốt phải cấm điều gì?", "back": "Cấm khen, cấm viết lại, cấm đề xuất bản sửa trong cùng lượt chấm." },
  { "front": "Mỗi vòng lặp nên thay đổi bao nhiêu biến trong prompt?", "back": "Một biến, để giữ được quan hệ nhân quả giữa thay đổi và kết quả." },
  { "front": "Bộ mẫu kiểm thử hồi quy phải luôn chứa loại mẫu nào?", "back": "Các mẫu từng thất bại, cộng mẫu khó và mẫu rủi ro cao." },
  { "front": "Bốn nhóm tiêu chí đánh giá thường dùng?", "back": "Đúng sự thật, đầy đủ, tuân thủ ràng buộc, dễ đọc." },
  { "front": "Nhật ký prompt nên ghi những gì?", "back": "Mục tiêu, phiên bản prompt, bộ mẫu kiểm thử, kết quả chấm và thay đổi dự kiến ở vòng kế tiếp." },
  { "front": "Vì sao phải chấm trên cùng một bộ mẫu cố định?", "back": "Để so sánh được giữa các phiên bản prompt và biết thay đổi nào thực sự tạo ra cải thiện." },
  { "front": "Khi nào nên dừng vòng lặp đánh giá?", "back": "Khi điểm trên bộ mẫu đạt ngưỡng đặt trước và không còn lỗi nghiêm trọng nào lặp lại." },
  { "front": "Rủi ro lớn nhất khi để AI tự chấm bài của chính nó?", "back": "Mô hình có xu hướng khen và chiều theo người dùng, nên điểm số bị thổi phồng." }
]
```

**Điền khuyết:**

```cloze
Ba lớp kiểm chứng xếp theo chi phí tăng dần: {{c1::máy móc}}, AI phản biện và con người đọc mẫu.
Mỗi vòng lặp chỉ nên thay đổi {{c2::một biến}} trong prompt để giữ được quan hệ nhân quả giữa thay đổi và kết quả.
Bộ mẫu {{c3::hồi quy}} phải luôn chứa các mẫu từng thất bại để lỗi cũ không quay lại.
Để tránh thiên lệch tự ưu ái, cần tách vai {{c4::người viết}} và vai người chấm.
```
