Xiaomi mổ xẻ lỗi gọi công cụ lặp lại của MiMo, sửa tốn 90.000 USD

Ngày 27 tháng 9, đội ngũ MiMo của Xiaomi đăng một bài blog kỹ thuật để mổ xẻ một lỗi mà các nhà phát triển liên tục phàn nàn kể từ khi MiMo-V2.6 ra mắt: trong các tác nhân lập trình, mô hình liên tục phát ra các lệnh gọi công cụ giống hệt hoặc gần giống hệt nhau, đốt sạch ngữ cảnh và tài nguyên tính toán mà nhiệm vụ vẫn giậm chân tại chỗ. Bộ trọng số đã sửa được mở nguồn, tên tệp có hậu tố MOPD; nền tảng API đã chuyển sang phiên bản mới từ 6 giờ sáng ngày 25 tháng 9 (giờ Bắc Kinh), và người dùng MiMo Desktop được đặt lại toàn bộ hạn mức còn lại trong kỳ như một hình thức đền bù.

Tách bạch "gọi nhiều" và "gọi lặp"

Bài blog không xem mọi trường hợp "gọi quá nhiều" đều là lỗi. Xiaomi liệt kê ba tình huống: gọi song song là tối ưu hóa bình thường, khi nhiều lệnh gọi cùng lúc tra cứu các thông tin khác nhau; gọi tràn lan là số lượng vượt quá mức nhiệm vụ cần; còn gọi lặp là khi trạng thái môi trường và thông tin đã biết đều không thay đổi nhưng mô hình vẫn lặp lại cùng một hành động. Đội ngũ chỉ sửa trường hợp thứ ba.

Theo đánh giá nội bộ của Xiaomi, tỷ lệ lặp ở cấp độ phản hồi vượt ngưỡng chấp nhận 0,05%, với chênh lệch đáng kể giữa các môi trường:

Môi trườngFlashPro
OpenCode1,02%0,54%
Claude Code0,27%0,10%
MiMo Desktop0,19%0,19%
MiMo Code0,11%0,07%

Bản Flash trên OpenCode có con số tệ nhất, cứ khoảng 100 lượt phản hồi thì có 1 lượt bị lặp vòng.

Gốc rễ nằm ở giai đoạn học tăng cường

Đội ngũ đã xem lại từng điểm kiểm tra trong quá trình học tăng cường và phát hiện tỷ lệ mẫu có hơn 10 lượt gọi công cụ trong một lượt tăng từ 11,1% ở bước 0 lên 24,6% ở bước 20; trong môi trường MiMo Code mức tăng còn mạnh hơn, từ 30,6% lên 41,7%. Ban đầu quá trình huấn luyện có đặt một mức phạt: chỉ khi vượt quá 32 lượt gọi trong một lượt mới bị trừ điểm. Từ bước 15 trở đi, số mẫu kích hoạt mức phạt này tăng rõ rệt, cho thấy ngưỡng 32 quá lỏng lẻo, không ngăn được mô hình hình thành thói quen "gọi thêm vài lần cũng chẳng sao".

Bài blog đưa ra một con số rất trực quan: trước khi sửa, xác suất mô hình chọn tiếp tục gọi công cụ ở lượt gọi thứ 12 là 94,56%, trong khi xác suất dừng lại chỉ 5,43%. Nói nôm na, nó gần như không tự dừng lại được.

Hai cách sửa, chênh nhau cả một bậc độ lớn

Cách đầu tiên trực tiếp nhất: hạ ngưỡng phạt từ 32 xuống 8, rồi huấn luyện lại bằng quy trình MixRL cũ. Trong thử nghiệm nội bộ, tỷ lệ lặp giảm từ 13,45% xuống 3,83%, nhưng phải lùi lại 20 bước huấn luyện để chạy lại từ đầu; Xiaomi ước tính chi phí khoảng 2,31 triệu USD, và nếu đổi bộ dữ liệu khác thì hiệu quả không ổn định.

Phương án cuối cùng được chọn là MOPD — chưng cất trực tuyến đa giáo viên (multi-teacher online distillation). Cách làm là dùng các mẫu lặp thu thập được nội bộ để huấn luyện riêng một "giáo viên" học tăng cường chuyên học "khi nào nên dừng", chỉ chạy 12 bước với khoảng 7.000 mẫu; sau đó lùi mô hình chính lại 5 bước rồi huấn luyện tiếp dưới sự dẫn dắt của giáo viên này. Toàn bộ quá trình tốn khoảng 90.000 USD, chỉ bằng khoảng 4% phương án trước.

Về hiệu quả, xác suất dừng lại ở lượt gọi thứ 12 tăng từ 5,43% lên 92,17%. Theo đường cong dừng tích lũy trong bài blog, trước khi sửa phải đến lượt gọi thứ 59, xác suất mô hình dừng lại mới vượt quá 50%; sau khi sửa, đến lượt gọi thứ 8, xác suất này đã đạt 99,87%. Xiaomi cho biết tỷ lệ lặp giảm mạnh trên mọi nền tảng, hiệu năng nhất quán ở các độ dài ngữ cảnh khác nhau, và điểm số benchmark tổng thể không bị giảm.

Nhìn lại trong bối cảnh V2.6

MiMo-V2.6 ra mắt và mở nguồn vào ngày 22 tháng 9, khi đó Xiaomi nhấn mạnh nhất là quy mô hậu huấn luyện: theo số liệu được truyền thông tiết lộ, cả Pro và Flash đều chạy 30 bước học tăng cường, tổng chi phí khoảng 3,5 triệu USD. Năm ngày sau, bài mổ xẻ này coi như phơi bày một tác dụng phụ để lại từ đợt huấn luyện đó, thậm chí còn nêu rõ con số "lẽ ra có thể phải tốn thêm 2,31 triệu USD".

Các đội ngũ mô hình trong nước hiếm khi công khai mổ xẻ sự cố sau khi phát hành, và càng hiếm hơn khi liệt kê cả chi phí của phương án thất bại. Với các nhà phát triển đang dùng mô hình nội địa trong OpenCode, Claude Code, điểm thực tế hơn là: nếu vài ngày trước từng gặp MiMo đọc đi đọc lại cùng một tệp, chạy đi chạy lại cùng một lệnh, thì API hiện tại đã là bản đã sửa; người tự triển khai cần đổi sang bộ trọng số có hậu tố MOPD. Toàn bộ các con số tỷ lệ lặp này đều đến từ đánh giá nội bộ của Xiaomi, kết quả kiểm chứng độc lập từ bên thứ ba hiện chưa có.

Nguồn tham khảo: Blog kỹ thuật của đội ngũ MiMo (Xiaomi), CocoLoop; tỷ lệ lặp, tỷ lệ gọi tràn lan ở từng môi trường và chi phí của hai phương án sửa lỗi đều theo đánh giá nội bộ của Xiaomi.