Anthropic nhờ Claude viết lại API, giảm 40-50% CPU

Anthropic đã chuyển toàn bộ Messages API đứng sau Claude từ Python sang Rust. Katelyn Lesse, phụ trách kỹ thuật, và Angela Jiang, phụ trách sản phẩm, kể lại quá trình này trên podcast Latent Space: sau khi chuyển, mức dùng CPU giảm khoảng 40% đến 50%, thời gian phản hồi của token đầu tiên rút ngắn khoảng 10% đến 20%, và với các tác vụ chạy lâu thì mức cải thiện còn rõ hơn. Theo lời hai khách mời, API bản Rust đã được triển khai toàn bộ một tuần trước khi ghi hình.

Messages API là cửa ngõ chính để nhà phát triển gọi Claude. Angela Jiang nhớ lại rằng khi cô gia nhập cách đây khoảng một năm, hệ thống này vẫn là một dịch vụ Python nguyên khối, chỉ chạy trong một vùng GCP.

Điểm nghẽn là CPU

Khi nói về nút thắt của các công ty mô hình lớn, bên ngoài thường chỉ nhìn vào GPU, nhưng trong buổi phỏng vấn này thứ được nhắc đi nhắc lại lại là CPU. Sau khi lượng sử dụng tăng nhanh, dịch vụ API, backend sản phẩm, sandbox mã và tích hợp liên tục (CI) đều tranh nhau CPU; mã được viết càng nhiều thì CI chạy càng thường xuyên. Theo mô tả của các khách mời, nhóm nghiên cứu và sandbox sản phẩm dùng chung một hạn mức CPU, bên này dùng nhiều thì bên kia phải dùng ít. Trong môi trường như vậy, dịch vụ bản Python tỏ ra đặc biệt tốn tài nguyên.

Việc chọn Rust gây tranh cãi trong nội bộ, và lý do rất thẳng thắn:

"we don't have a single Rust developer in the room."
(Trong phòng họp không có lấy một lập trình viên Rust nào.)

Sau đó nhóm mới lần lượt tuyển thêm các kỹ sư có kinh nghiệm Rust.

Illustration: twin pipes link old and new machines, depicting shadow traffic checks during the Anthropic Rust migration

Con người vẽ kiến trúc, Claude viết phần triển khai

Cách phân công như sau: kỹ sư chịu trách nhiệm thiết kế và kiểm chứng hệ thống phân tán, phần lớn mã triển khai giao cho Claude viết, và Claude cũng được dùng để giúp kỹ sư bổ sung kiến thức Rust cần thiết. Các khách mời nhấn mạnh rằng lập kế hoạch và kiểm chứng quan trọng hơn bản thân việc viết mã.

Cách kiểm chứng khá truyền thống. Nhóm trước hết dựng một nhánh API Rust hoàn chỉnh, sao chép bóng (shadow) lưu lượng thật sang đó, so sánh từng yêu cầu xem đầu ra của hệ thống cũ và mới có khớp nhau không, rồi dùng cờ tính năng (feature flag) và bộ cân bằng tải để chuyển dần lưu lượng thật sang. Việc chuyển đổi do một nhóm chuyên trách đảm nhiệm, các kỹ sư khác vẫn phát triển tính năng mới như bình thường; để hai bên không ngày càng lệch nhau, nhóm dùng phân tích tĩnh để đánh dấu những tính năng mới thêm vào ở Python mà bản Rust chưa có phần tương ứng, còn nhóm chuyển đổi thì cố gắng từ chối thêm yêu cầu mới trong thời gian di chuyển.

Ước tính của các khách mời là nếu làm theo cách thông thường, di chuyển dần từng phần, có thể mất vài năm; lần này là một cuộc chuyển đổi toàn bộ trong một lần. Còn mất bao lâu và Claude tạo ra bao nhiêu phần trăm mã thì buổi phỏng vấn không đưa ra con số, và bên ngoài hiện cũng không thể kiểm chứng.

Đặt cạnh các vụ viết lại tương tự

Kiểu viết lại quy mô lớn theo mô hình "mô hình viết chính, con người đỡ phía sau" này gần đây đã xuất hiện vài lần. GitHub trước đó công bố đã dùng Copilot để viết lại runtime của chính mình thành khoảng 830.000 dòng Rust; khoảng thời điểm Opus 5.5 ra mắt cũng có nhóm dùng nó chuyển trình biên dịch TypeScript sang Rust trong hai tuần. Điểm chung của các vụ này là ngôn ngữ đích đều là Rust, và việc kiểm chứng đều dựa vào đối chiếu đầu ra cũ và mới hoặc một bộ kiểm thử đầy đủ làm chốt chặn.

Khác biệt nằm ở cái giá của sai sót. Trình biên dịch và công cụ phát triển gặp lỗi thì ảnh hưởng phần nhiều dừng ở máy cục bộ của nhà phát triển; Messages API thì tiếp nhận toàn bộ lời gọi từ bên ngoài, một khi hành vi không nhất quán sẽ rơi thẳng vào hệ thống production của khách hàng. Việc Anthropic có thể chuyển đổi toàn bộ trên tuyến này là nhờ phương pháp cũ gồm lưu lượng bóng và đối chiếu từng yêu cầu, chứ riêng việc mô hình viết nhanh thì không đủ để chống đỡ.

Với các công ty khác, phần có thể học hỏi có lẽ là quy trình kiểm chứng chứ chưa chắc là lựa chọn ngôn ngữ. Nếu không có điều kiện về lưu lượng bóng và đối chiếu đầu ra, thì lượng mã lớn do mô hình tạo ra trong một lần rất khó xác định có hành xử giống hệ thống cũ hay không.

Bước tiếp theo: trạng thái hội thoại

Nhóm cho biết sau này sẽ điều chỉnh ở tầng kiến trúc, trong đó một hướng là lưu trạng thái hội thoại ở phía máy chủ, để máy khách không phải gửi lại toàn bộ lịch sử ở mỗi lượt. Trong các cuộc hội thoại dài, việc này có thể tiết kiệm rất nhiều truyền tải và xử lý lặp lại. Thay đổi này bao giờ ra mắt, có ảnh hưởng đến giao diện hiện có và cách tính phí hay không, hiện Anthropic chưa công bố.

Nguồn tham khảo: buổi phỏng vấn podcast Latent Space, CocoLoop, tài liệu dành cho nhà phát triển của Anthropic; mức giảm CPU, khoảng cải thiện độ trễ token đầu tiên và tình trạng triển khai toàn bộ được đối chiếu qua buổi phỏng vấn.