Bài toán: ~700 PR/ngày, phản hồi phải dưới 5 phút để không chặn dev, và code không được rời khỏi tổ chức.
Luồng: webhook PR → hàng đợi (gộp trùng khi rebase, ưu tiên repo quan trọng) → orchestrator dựng context → các agent chấm song song → gộp thành comment trên PR.
Bốn quyết định đáng nói:
- Context quyết định chất lượng, không phải model. Chỉ đưa diff vào thì nhận lại nhận xét chung chung. Cần thêm: nội dung file bị đụng, nơi hàm vừa sửa được gọi (lấy từ tree-sitter/language server), file test tương ứng, và convention của repo. Index symbol dựng sẵn, cập nhật theo từng commit.
- Tách agent theo khía cạnh — bảo mật, lỗi logic, hiệu năng, độ phủ test — mỗi agent một system prompt hẹp rồi chạy song song. Một prompt "review giúp tôi" ôm hết sẽ bỏ sót đều ở mọi mặt.
- Chọn model theo kích thước PR: PR nhỏ dùng model rẻ; PR lớn chia theo file rồi gộp lại; repo nhạy cảm (thanh toán, auth) luôn dùng model mạnh nhất.
- Vòng phản hồi mới là thứ giữ chất lượng. Ghi nhận reviewer chấp nhận/từ chối từng comment, đo tỉ lệ báo nhầm, tắt hẳn loại comment gây nhiễu. Thiếu vòng này thì hệ chỉ tệ dần vì dev học cách bỏ qua toàn bộ.
Riêng tư: repo nhạy cảm chạy model self-host; quét secret trước khi gửi prompt; ký thoả thuận không lưu dữ liệu với provider; log lại mọi lời gọi.
Con số để cân: 700 PR × ~6 agent ≈ 4.2k lời gọi/ngày, bật prompt cache còn khoảng một phần ba. Chi phí cỡ 1–3 USD/PR — rẻ hơn nhiều so với thời gian người review.
Ra mắt theo bậc: chạy ngầm đối chiếu với người trong 2 tuần → mở cho vài team đăng ký → bật mặc định nhưng tắt được → khi độ chính xác đã chứng minh mới cho chặn merge với lỗi nghiêm trọng.
Lỗi hay gặp: comment quá nhiều thành nhiễu rồi dev bỏ qua hết; chặn merge dựa trên nhận xét AI khi chưa đủ tin cậy; dùng một model cho mọi PR nên vừa đắt vừa yếu.