Prompt là artifact chính của LLM app: sửa một dòng có thể làm sập chất lượng mà không compiler nào báo. Nên quản như code.
Đánh version:
- Đưa prompt ra ngoài code. Để trong repo thì mỗi lần chỉnh chữ phải build và deploy lại. Đặt ở prompt store (Langfuse, PromptLayer) hoặc một bảng trong DB; mỗi version là bất biến, sửa là ra bản mới.
- Version phải gói cả tham số, không chỉ đoạn văn: model nào, temperature bao nhiêu, tool schema ra sao. Đổi model mà giữ nguyên chữ vẫn là một thay đổi hành vi.
- Mỗi version gắn với kết quả eval — chưa qua bộ eval thì không được deploy.
A/B test — chọn hình thức theo thứ tự chi phí:
- Offline trước: chạy A và B trên cùng bộ query chuẩn rồi so điểm. Rẻ, nhanh, không đụng người dùng thật. Khác biệt đã rõ thì dừng ở đây là đủ.
- Chạy ngầm (shadow): traffic thật gửi vào cả hai, chỉ A trả về người dùng, B ghi log để đối chiếu. Không rủi ro, đổi lại tốn gấp đôi lời gọi.
- Chia traffic thật khi cần đo thứ offline không đo được: CSAT, tỉ lệ hoàn thành việc, giữ chân người dùng. Cần feature flag để bật tắt, và phải tính cỡ mẫu trước — dừng sớm vì thấy B "có vẻ tốt hơn" là cách phổ biến nhất để kết luận sai.
Khi đo, nhìn cả ba nhóm: chất lượng (điểm eval, đánh giá người dùng), vận hành (độ trễ, chi phí mỗi request) và guardrail (tỉ lệ từ chối, tỉ lệ vi phạm an toàn) — bản B có thể trả lời hay hơn nhưng từ chối nhiều hơn hẳn.
Rollback:
- Version prompt là config, không phải code — đổi bằng cách sửa config, rollback bằng cách sửa lại. Không rebuild, không chờ deploy.
- Giữ song song bản cũ và mới để chuyển tức thì, kiểu blue-green.
- Tự động revert khi chỉ số chính tụt quá ngưỡng. Muốn vậy phải log version vào từng trace, nếu không sẽ không biết bản nào gây lỗi.
Model cũng phải ghim version như prompt: đừng để tự nâng cấp, thử trên traffic ngầm trước. Nhiều sự cố production đến từ việc provider ngừng hỗ trợ một model rồi ép chuyển.
Suite hồi quy trong CI: 100–500 query kèm kỳ vọng, chạy sau mỗi thay đổi prompt hoặc model, điểm tụt quá ngưỡng thì chặn merge.
Lỗi hay gặp: prompt hardcode trong code nên sửa chữ cũng phải deploy; đẩy thẳng lên production không qua eval; không log version vào trace nên không truy được bản gây lỗi.