Công cụ lập trình AI ZCode của Zhipu, vào ngày 18/9, bị một nhà phát triển tố cáo là âm thầm đóng gói và tải lên toàn bộ không gian làm việc ở chế độ nền, bao gồm toàn bộ lịch sử Git, bộ nhớ đệm tệp lớn LFS và cấu hình máy cục bộ. Tối cùng ngày, ZCode đã đưa ra lời xin lỗi, thừa nhận việc tải lên có xảy ra, quy nguyên nhân cho tính năng "lập chỉ mục kho mã", và cho biết vấn đề đã được khắc phục.
Nhà phát triển đã lật tẩy điều gì
Người đầu tiên đưa chi tiết ra ánh sáng là blogger công nghệ Ferstar. Trên blog của mình, anh đã phân tích cơ chế chụp nhanh cục bộ của ZCode: sau khi đăng nhập, một tiến trình nền khởi động cùng chương trình sẽ đóng gói toàn bộ không gian làm việc, mã hóa nội dung tệp bằng AES-256-CTR, sau đó dùng khóa công khai RSA do máy chủ cấp để bọc khóa mã hóa, cuối cùng gửi thẳng lên Alibaba Cloud OSS bằng hình thức tải lên qua biểu mẫu. Khóa riêng dùng để giải mã chỉ nằm trên đám mây, người dùng không thể tự mở tệp .enc trên máy mình.
Mẫu cụ thể mà anh đưa ra: không gian làm việc chưa nén nặng 345MB, sau khi mã hóa còn 313MB, danh sách gồm 42411 tệp. Phần lớn dung lượng thuộc về thư mục .git, chiếm tổng cộng 86,6%, trong đó bộ nhớ đệm LFS chiếm 196,1MB, các đối tượng Git chiếm 102,2MB, còn mã nguồn và cấu hình chỉ khoảng 46MB. Có hai thời điểm kích hoạt: một là trước mỗi lần gửi prompt, hai là sau khi tác vụ kết thúc và cập nhật Repo Wiki; trong một phiên làm việc, số lần chụp nhanh được ghi nhận nhiều nhất là 62 lần.
Cùng ngày, một nhà phát triển đã mở issue trên kho phản hồi công khai của Zhipu, tiêu đề đặt liền ba câu hỏi "tại sao": tại sao âm thầm tải lên toàn bộ lịch sử Git, tại sao mã hóa đến mức chính người dùng cũng không mở được, và tại sao không có cả công tắc để tắt. Issue này còn nhắc đến việc chụp nhanh sau khi tải lên thất bại trên máy sẽ tự động thử lại nhiều lần, ghi nhận tới 564 lần. Một nhà phát triển khác đã tái hiện trên máy của mình: một bản chụp dự án nặng 748MiB, tỷ lệ .git chiếm tới 98,91%, phiên bản là ZCode 3.12.3.
Công tắc không có tác dụng là điểm gây tranh cãi gay gắt nhất lần này. Theo Ferstar, các công tắc "tối ưu trải nghiệm" và "lập chỉ mục chụp nhanh kho mã" trên giao diện thực chất chỉ kiểm soát việc máy chủ có dùng dữ liệu để huấn luyện mô hình hay không, còn việc đóng gói và tải lên cục bộ vẫn diễn ra như thường. Trong lịch sử Git có thể còn nằm những khóa bí mật đã xóa từ lâu, cấu hình cũ đã bỏ, các bản ghi nhánh chưa từng push và tên miền nội bộ — những thứ không còn thấy trong mã hiện tại nhưng vẫn nguyên vẹn trong .git.
Zhipu nói gì
Lời xin lỗi của ZCode quy nguyên nhân việc tải lên cho tính năng "lập chỉ mục kho mã": khi tạo trang Repo Wiki có thể kích hoạt việc tải lên dữ liệu kho mã, dữ liệu sau khi tạo xong Wiki trên đám mây sẽ bị hủy ngay, không được lưu lại. Tính năng này mặc định bật khi mới ra mắt, khiến một số người dùng bị ảnh hưởng, hiện đã được khắc phục.
Biện pháp khắc phục gồm ba điều: sắp tới sẽ mở mã nguồn kho ZCode, mời bên thứ ba đánh giá và công khai tiến trình xem xét; ngay trong ngày, cấp thêm cho toàn bộ người dùng một lần đặt lại hạn mức tuần. Một số điều mà bản thông báo chưa nói rõ, hiện vẫn chưa thể kiểm chứng: có bao nhiêu người dùng và kho mã bị ảnh hưởng, dữ liệu thực tế nằm trên OSS bao lâu, việc "hủy dữ liệu" có được kiểm toán độc lập hay không, và phiên bản sau khi khắc phục là số mấy. Thời gian mở mã nguồn cũng chỉ được ghi là "sắp tới".
Cùng ngày, Zhipu còn công bố mô hình mới GLM-5.3-FlashX, quảng bá tốc độ xuất ra 200 token mỗi giây. Có nhà phát triển đã đặt hai sự kiện này cạnh nhau trên blog và châm biếm rằng cả mạng đang hỏi mã nguồn bị gửi đi đâu, còn Zhipu thì bận ra mắt mô hình mới.
Các nhà phát triển tại Trung Quốc có thể làm gì lúc này
Không ít người dùng ZCode đang thử nghiệm công cụ này trên các dự án của công ty, mà mức độ nhạy cảm của lịch sử Git đối với doanh nghiệp thường còn cao hơn cả mã nguồn hiện tại. Với những ai vẫn đang dùng phiên bản cũ, ba bước sau được xem là tương đối an toàn: trước tiên nâng cấp lên phiên bản đã khắc phục; kiểm tra xem thư mục ~/.zcode/v2/checkpoints trên máy có còn bản chụp nào đang chờ tải lên hay không; sau đó xoay vòng lại toàn bộ khóa bí mật và token từng xuất hiện trong lịch sử, đừng trông chờ việc "đã hủy" sẽ bao phủ luôn phần dữ liệu đã bị gửi đi.
Ferstar còn đưa ra một cách làm cứng rắn hơn: trên macOS dùng lệnh chflags uchg, trên Linux dùng chattr +i để khóa thư mục chụp nhanh ở chế độ chỉ đọc, chặn việc tạo bản chụp ngay từ tầng hệ thống tệp. Cái giá phải trả là các tính năng khôi phục checkpoint và dòng thời gian sẽ ngừng hoạt động theo.
Việc các AI Agent lập trình cần đọc kho mã để hoạt động, bản thân việc lập chỉ mục cục bộ không có gì lạ. Điểm bất đồng nằm ở ranh giới: đọc trên máy cục bộ và tải lên đám mây là hai chuyện khác nhau, tải mã hiện tại và tải toàn bộ lịch sử cũng là hai chuyện khác nhau. Nếu cam kết mở mã nguồn của Zhipu thực sự được thực hiện, bên ngoài ít nhất có thể tự mình xem module chụp nhanh đã đóng gói những đường dẫn nào, và các công tắc thực sự được nối tới đâu.
Nguồn tham khảo: phân tích ngược của blog công nghệ Ferstar về cơ chế chụp nhanh và cấu trúc tệp, issue công khai trên zai-org/feedback, Ifeng Tech, CocoLoop, Elliot's Harness Lab; lời xin lỗi của ZCode dùng để kiểm chứng quy kết nguyên nhân, tình trạng khắc phục và biện pháp bồi hoàn.