📖 Nội dung bài học
Summary
Giờ đây, khi đã có bộ dữ liệu đánh giá (evaluation dataset), chúng ta sẽ xây dựng pipeline đánh giá cốt lõi. Việc này bao gồm lấy từng test case, ghép nó với prompt của chúng ta, đưa vào Claude, rồi chấm điểm kết quả.

Quy trình đánh giá tuân theo một luồng công việc rõ ràng: chúng ta lấy bộ dữ liệu gồm các test case, kết hợp từng test case với prompt template, gửi đến Claude để xử lý, và sau đó đánh giá output bằng hệ thống chấm điểm (grader).
Xây dựng các Hàm Cốt lõi
Pipeline đánh giá gồm ba hàm chính, mỗi hàm có trách nhiệm cụ thể. Hãy bắt đầu với hàm đơn giản nhất - hàm xử lý các prompt riêng lẻ.
Hàm run_prompt
Hàm này nhận một test case và ghép nó với prompt template của chúng ta:
def run_prompt(test_case):
"""Merges the prompt and test case input, then returns the result"""
prompt = f"""
Please solve the following task:
{test_case["task"]}
"""
messages = []
add_user_message(messages, prompt)
output = chat(messages)
return output
Hiện tại, chúng ta giữ cho prompt cực kỳ đơn giản. Chúng ta không bao gồm bất kỳ hướng dẫn định dạng nào, nên Claude có thể sẽ trả về output dài dòng hơn mức chúng ta cần. Chúng ta sẽ tinh chỉnh điều này sau khi lặp lại thiết kế prompt.
Hàm run_test_case
Hàm này điều phối việc chạy một test case đơn lẻ và chấm điểm kết quả:
def run_test_case(test_case):
"""Calls run_prompt, then grades the result"""
output = run_prompt(test_case)
# TODO - Grading
score = 10
return {
"output": output,
"test_case": test_case,
"score": score
}
Hiện tại, chúng ta dùng điểm số cố định là 10. Logic chấm điểm là nơi chúng ta sẽ dành nhiều thời gian trong các phần sắp tới, nhưng trình giữ chỗ này cho phép chúng ta kiểm tra pipeline tổng thể.
Hàm run_eval
Hàm này phối hợp toàn bộ quy trình đánh giá:
def run_eval(dataset):
"""Loads the dataset and calls run_test_case with each case"""
results = []
for test_case in dataset:
result = run_test_case(test_case)
results.append(result)
return results
Hàm này xử lý mọi test case trong bộ dữ liệu của chúng ta và thu thập tất cả kết quả vào một danh sách duy nhất.
Chạy Đánh giá
Để thực thi pipeline đánh giá, chúng ta tải bộ dữ liệu và chạy nó qua các hàm của mình:
with open("dataset.json", "r") as f:
dataset = json.load(f)
results = run_eval(dataset)
Lần đầu tiên bạn chạy cái này, hãy chuẩn bị tinh thần là nó sẽ mất một chút thời gian - ngay cả với Claude Haiku, cũng có thể mất khoảng 30 giây để xử lý toàn bộ dataset. Chúng ta sẽ đề cập đến các kỹ thuật tối ưu hóa sau.
Xem xét Kết quả
Quá trình đánh giá trả về một mảng JSON có cấu trúc, trong đó mỗi đối tượng đại diện cho kết quả của một test case:
print(json.dumps(results, indent=2))

Mỗi kết quả chứa ba thông tin chính:
- output: Phản hồi đầy đủ từ Claude
- test_case: Test case gốc đã được xử lý
- score: Điểm đánh giá (hiện tại được mã hóa cứng)
Như bạn có thể thấy trong output, Claude tạo ra các phản hồi khá dài dòng vì chúng ta chưa cung cấp hướng dẫn định dạng cụ thể. Đây chính là loại vấn đề chúng ta sẽ giải quyết khi tinh chỉnh prompt của mình.

Những gì chúng ta đã đạt được
Tại thời điểm này, chúng ta đã xây dựng thành công pipeline đánh giá cốt lõi. Chúng ta có thể lấy bộ dữ liệu, xử lý nó qua Claude và thu thập kết quả có cấu trúc. Phần còn thiếu lớn nhất là hệ thống chấm điểm - điểm số cố định 10 đó cần được thay thế bằng logic đánh giá thực tế.
Pipeline này đại diện cho nền tảng của hầu hết các hệ thống đánh giá AI. Mặc dù có vẻ đơn giản, bạn vừa xây dựng phần lớn những gì một pipeline eval thực sự làm. Sự phức tạp nằm ở các chi tiết - prompt tốt hơn, chấm điểm tinh vi và tối ưu hóa hiệu suất.
Tiếp theo, chúng ta sẽ đi sâu vào chủ đề quan trọng về graders, thứ sẽ biến điểm số cố định của chúng ta thành các đánh giá có ý nghĩa về hiệu suất của Claude.
🔁 Bài học liên quan
- Bài tiếp: Model based grading
- Bài trước: Generating test datasets
- Cùng section: Making a request · Multi-turn conversations · Chat exercise
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-with-google-vertex/289166
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01