Claude viết 80% code, CI không chịu nổi

Ngày 14 tháng 9, Anthropic đăng một bài viết trên blog kỹ thuật, tác giả Sachin Malhotra kể lại chuyện một dịch vụ nội bộ của công ty bị quá tải rồi phải viết lại từ đầu. Dịch vụ này tên là phân tích tác động kiểm thử (test impact analysis), nhiệm vụ khá đơn giản: mỗi khi có một thay đổi code đưa vào, nó phải xác định test nào bắt buộc phải chạy, test nào có thể bỏ qua. Nghe qua thì giống một thành phần hậu trường, nhưng lý do khiến nó gục ngã lại khá tiêu biểu.

Vài con số trước đã

Bộ số đầu tiên bài blog đưa ra thuộc về phía đầu ra: hiện tại lượng code trung bình mỗi kỹ sư của Anthropic viết ra theo quý cao gấp 8 lần so với giai đoạn 2021-2025, trong đó 80% là do Claude viết, và Claude cũng đảm nhận phần lớn công việc review và phê duyệt pull request.

Bộ số thứ hai thuộc về phía áp lực: tổng số test trong codebase tăng gấp 10 lần, số tác vụ CI tăng gấp 25 lần chỉ trong sáu tháng.

Bộ số thứ ba mới thực sự cho thấy nhịp độ của tình hình. Để chống đỡ tải, đội ngũ đã triển khai ba đợt giải pháp tạm thời, mỗi đợt mua được thêm lần lượt 70 ngày, 29 ngày và chưa đầy 1 ngày. Giải pháp thứ ba vừa ra mắt đã bị "ăn hết" ngay trong ngày.

Dịch vụ cũ kẹt ở đâu

Kiến trúc cũ có một listener chạy đơn tiến trình, phải ghi kết quả của từng test vào bộ lưu trữ theo thứ tự. Ghi đơn nghĩa là không thể mở rộng theo chiều ngang, và khi tốc độ PR đổ vào vượt quá tốc độ xử lý, hàng đợi bắt đầu chất đống. Nguyên văn trong bài blog là listener "starts to increasingly fall behind the PR queue" (ngày càng tụt lại phía sau hàng đợi PR).

Độ trễ kéo theo hậu quả dây chuyền. Ví dụ bài viết đưa ra là độ trễ 20 phút tương đương với hàng chục nghìn cập nhật kết quả test chưa kịp ghi vào bộ lưu trữ. Trong khi việc chọn test lại dựa vào kết quả lịch sử để phán đoán, lịch sử không chính xác thì tập test được chọn ra cũng không đáng tin. Tệ hơn nữa, tiến trình này còn bị rò rỉ bộ nhớ, chiều nào cũng chạm trần.

Đã đổi thành gì

Hướng viết lại là chuyển trạng thái ra khỏi tiến trình. Kiến trúc mới đưa vào một kho dữ liệu trong bộ nhớ: bất kỳ worker listener nào cũng có thể xử lý bất kỳ kết quả nào, nó chỉ có nhiệm vụ ghi nối tiếp vào log, tự thân không lưu trạng thái, nên có thể thêm máy khi cần. Ngoài ra còn có một tiến trình tiêu thụ độc lập, cứ vài giây lại gấp log lại thành lịch sử theo từng test riêng lẻ. Khi bộ chọn cần ra quyết định, nó truy vấn thẳng vào phần lịch sử này.

Cái giá phải trả là chi phí tăng lên. Bài blog cũng thừa nhận điều đó, lý do là đổi lấy khả năng mở rộng và khả năng quan sát — đoạn nào chậm, chậm ở đâu, giờ đây đều có thể đo riêng được. Toàn bộ quá trình thiết kế lại do một kỹ sư hoàn thành trong ba tuần.

Đường cong mang tên 25 lần

Sáu tháng tăng 25 lần, quy đổi ra tốc độ tăng trưởng kép theo tháng vào khoảng 1,71 lần (tính nhẩm: căn bậc sáu của 25). Nếu ngoại suy tiếp theo độ dốc này cho sáu tháng nữa, con số sẽ là 625 lần. Câu "always plan for the exponential" (luôn phải chuẩn bị cho tăng trưởng theo cấp số nhân) mà tác giả viết ở cuối bài không phải là hoa mỹ, nó ứng với một đường cong đã được đo đạc thật.

Việc ngoại suy đường cong này tất nhiên không đáng tin cậy — tốc độ tăng trưởng có thể đổi hướng vì chính sách nội bộ, hạn mức, hay thói quen kỹ thuật thay đổi. Anthropic cũng không công bố con số tuyệt đối của hóa đơn CI, không nói rõ dịch vụ mới lọc bỏ được bao nhiêu phần trăm test, càng không đưa ra mức độ trễ sau khi viết lại. Câu hỏi tiết kiệm được bao nhiêu tiền thì không thể suy ra từ thông tin công khai.

Nhưng áp lực truyền từ khâu nào sang khâu nào thì đầu mối khá rõ ràng. Tháng 4 năm nay GitHub ngừng nhận đăng ký mới cho các gói cá nhân trả phí của Copilot, lý do đưa ra là mức tiêu thụ tính toán của các tác vụ agent chạy dài vượt quá thiết kế của gói dịch vụ; trước đó nữa, làn sóng commit do AI tạo ra từng khiến GitHub gặp sự cố, có lúc Microsoft phải mượn tạm năng lực từ AWS để chống đỡ. Ba sự việc hình thái khác nhau nhưng chỉ về cùng một hướng: khâu sinh code tăng tốc trước, rồi đến review, sau đó lần lượt từng hệ thống được thiết kế dung lượng theo "tốc độ con người viết code" đều sẽ bị va chạm. Phân tích tác động kiểm thử chỉ là cái báo động sớm của vòng này.

Nguồn tham khảo: CocoLoop, blog kỹ thuật của Anthropic; các con số về mức tăng code, test và tác vụ CI, cũng như thời hạn hiệu lực của ba đợt giải pháp tạm thời đều lấy theo số liệu công bố trong bài viết đó.