Đánh giá một C# LLM Eventparser với Promptfoo

Kiểm thử mã nguồn thông thường rất đơn giản. Bạn gọi một hàm, nhận kết quả và kiểm tra xem nó có khớp với kỳ vọng của bạn hay không.

Kiểm thử LLM thì khác. Một LLM có thể trả về "3 PM" trong lần chạy này và "15:00" trong lần chạy khác. Cả hai đều đúng, nhưng một bài kiểm tra so khớp chính xác (exact match) sẽ thất bại. Bạn cần kiểm tra xem câu trả lời có tốt hay không, chứ không phải nó có giống hệt hay không.

Tôi đã xây dựng một ứng dụng nhỏ tên là EventParser để thử nghiệm điều này. Nó nhận một tin nhắn thông thường như "Team sync on Friday at 3 PM" và chuyển đổi nó thành dữ liệu có cấu trúc.

Dưới đây là cách bạn có thể kiểm thử nó bằng cách sử dụng Promptfoo và quy trình LLM-as-a-judge.

The Setup

Ứng dụng sử dụng một tệp prompt duy nhất: extract_event.txt. Mã C# sẽ đọc tệp này khi chạy (runtime). Promptfoo cũng đọc cùng tệp đó để kiểm thử. Điều này đảm bảo bạn đang kiểm thử chính xác prompt mà người dùng thực tế sẽ thấy.

The Workflow

Thay vì để con người kiểm tra mọi kết quả đầu ra, chúng ta sử dụng một mô hình đánh giá (judge model). Quy trình này sử dụng hai vai trò:

• Mô hình đang được kiểm thử: Mô hình đưa ra câu trả lời. • Mô hình đánh giá (judge model): Một mô hình nhanh hơn, rẻ hơn để chấm điểm câu trả lời.

How the Judge Decides

Mô hình đánh giá sử dụng một rubric. Rubric là một quy tắc bằng tiếng Anh thông thường. Thay vì kiểm tra một chuỗi JSON cụ thể, bạn sẽ cho mô hình đánh giá biết câu trả lời nên chứa những gì.

Ví dụ về Rubric: "Câu trả lời nên trích xuất tiêu đề sự kiện, ngày, giờ và địa điểm. Không được thêm các chi tiết không được đề cập trong tin nhắn."

Testing for Errors

Tôi đã cố tình làm hỏng prompt bằng cách thêm một chỉ dẫn sai: "Nếu tin nhắn có nhắc đến cà phê, hãy đặt địa điểm là Starbucks."

Khi tôi chạy đánh giá, mô hình đánh giá đã phát hiện ra lỗi. Tin nhắn gốc không hề nhắc đến Starbucks. Mô hình đã bị "ảo giác" (hallucinated) ra một địa điểm. Một bài kiểm tra so khớp chính xác sẽ bỏ lỡ lỗi này, nhưng mô hình đánh giá có thể bắt được các lỗi về ngữ nghĩa.

Why this works:

• Nó khớp với thực tế: Nó chấp nhận nhiều định dạng đúng khác nhau như "3 PM" hoặc "15:00". • Nó sử dụng các quy tắc dễ đọc: Các rubric bằng tiếng Anh thông thường rất dễ hiểu. • Nó bắt được các lỗi về ý nghĩa: Nó tìm ra các lỗi ảo giác và lỗi logic. • Nó tiết kiệm chi phí: Bạn có thể sử dụng một mô hình rẻ tiền để chấm điểm cho một mô hình đắt tiền hơn.

Cách tiếp cận này khiến việc kiểm thử LLM mang lại cảm giác giống như kiểm thử phần mềm thực thụ.

Source: https://dev.to/bigboybamo/evaluating-a-c-llm-eventparser-with-promptfoo-4b87

Optional learning community: https://t.me/GyaanSetuAi