
macOS 27 có LLM chạy local: lệnh fm và cái bẫy JSON hợp lệ
Apple đưa model on-device vào macOS 27 qua lệnh fm. Một bài test cho thấy JSON trả về đúng schema nhưng sai số liệu, và giới hạn context không như tin đồn.
macOS 27 mang theo một LLM chạy thẳng trên máy, gọi qua lệnh fm trong Terminal — không cần cài model runner, không cần API key. Một bài thử nghiệm trên dev.to cho thấy phần tiện lợi đó đi kèm một kiểu lỗi mới: câu trả lời yếu vẫn có thể đến trong JSON đúng chuẩn production.
Có sẵn, không phải cài
Tác giả thử trên macOS 27.0.1 với máy Mac chạy chip Apple M5. Ba lệnh đầu tiên là fm license --status, fm available và fm respond. Máy trả về System model available, file thực thi nằm ở /usr/bin/fm — không tải weights thủ công, không cấu hình provider. Theo bài viết, Apple nói CLI này ship kèm macOS 27, và Apple Intelligence hỗ trợ Mac từ M1 trở lên.
Bài học đầu tiên khá đắt với ai đọc tin qua ảnh chụp màn hình. Một post lan truyền mô tả token-count, quota-usage và một model pcc; bản 27.0.1 mà tác giả test lại liệt kê count-tokens và chỉ có model on-device. Apple từng demo Private Cloud Compute tại WWDC26, nhưng nó không xuất hiện trong help của build được thử. Interface đã đổi giữa ảnh chụp và bản phát hành.
Tóm tắt thì tốt, trích xuất thì phải canh
Với một báo cáo sự cố dài 203 token, tác giả yêu cầu đúng 3 gạch đầu dòng và giữ nguyên mọi con số. Kết quả chính xác, trả về sau 2,62 giây, giữ đúng vai trò của 240, 37, 3 giờ 28 phút và 42 phút.
Bài test tiếp theo mới là phần đáng chú ý. Cùng văn bản đó, tác giả tạo schema bằng fm schema object rồi gọi fm respond --schema. JSON trả về hợp lệ, tên trường đúng, kiểu dữ liệu đúng — nhưng affected_items nhận giá trị 240 thay vì 37. Báo cáo nói 240 sản phẩm được xử lý và 37 sản phẩm bị trống mô tả; model chọn nhầm con số.
Cách sửa không phải đổi model lớn hơn. Tác giả thêm --description "Number of products that ended with blank copy in staging" và siết lại prompt; với greedy sampling, kết quả trả về 37. Schema bảo đảm hình dạng câu trả lời, nó không bảo đảm model hiểu ý nghĩa từng trường.
Giới hạn context: đừng hardcode theo tin đồn
Post lan truyền nói mỗi phiên giới hạn 4.096 token. Tác giả đo lại bằng fm count-tokens: prompt 8.108 token chạy OK trong 9,24 giây, prompt 8.308 token thất bại với lỗi "The session's transcript exceeded the model's context size." Bài viết dẫn một hướng dẫn độc lập đã test context 8.192 token trên build macOS 27 cũ hơn, và chính tác giả cũng nói rõ không nên coi 8.192 là cam kết vĩnh viễn.
Code và toán là vùng yếu rõ nhất. Qua 2 lần thử viết một hàm TypeScript, model đạt được logic thuộc tính hoặc ràng buộc kiểu, không đạt cả hai cùng lúc — lần hai nó chèn const obj = input as any dù prompt cấm any. Ở bài toán thời gian, câu trả lời đầu tiên bịa ra mốc kết thúc 11:18 và tổng thời lượng 11 giờ 18 phút; prompt chặt hơn mới cho ra 208 phút và 20,29%.
Nên dùng vào việc gì
Đây là công cụ tốt cho các tác vụ biên giới rõ ràng: tóm tắt tài liệu ngắn, phân loại thư mục, trích vài trường từ văn bản bạn vẫn kiểm tra lại được. Chạy ngay trên máy nghĩa là bỏ được độ trễ mạng và chi phí token — hai điểm đáng giá với dân văn phòng xử lý tài liệu nội bộ.
Việc cần làm trước khi đưa fm vào bất kỳ script nào: đặt tên trường schema kèm --description mang nghĩa nghiệp vụ, và viết validator riêng cho từng giá trị số. JSON hợp lệ chỉ giảm rủi ro parse, nó không giảm rủi ro nghiệp vụ — hai việc khác nhau. Và đừng hardcode flag hay giới hạn context lấy từ ảnh chụp màn hình của người khác: chạy fm count-tokens trên đúng build của bạn.
Không spam, hủy đăng ký bất kỳ lúc nào.


