- Nghiên cứu mới từ HKUST, NUS và PKU chỉ ra các coding agent train trên task tổng hợp (fix GitHub issue, pass test suite) chỉ học được heuristic của benchmark — không học được cách code.
- Lời giải: dạy 5 kỹ năng nguyên tử, train chung bằng joint RL.
- Kết quả: +18.7% trên cả 10 task, trong đó 5 task chưa từng có trong training.
TL;DR
Một paper vừa lên arXiv (2604.05013) từ nhóm HKUST, NUS và PKU chỉ ra vấn đề cốt lõi của mọi AI coding agent hiện nay: train trên task tổng hợp kiểu "fix GitHub issue, pass test suite" sản sinh ra model chỉ giỏi đúng benchmark đó. Nhóm tác giả đề xuất phân rã software engineering thành 5 kỹ năng nguyên tử (atomic skills), train chung bằng joint reinforcement learning. Kết quả: cải thiện trung bình 18.7% trên 10 task, trong đó 5 task (refactoring, security, multilingual, terminal) chưa từng xuất hiện trong training.
Cái mới ở đây là gì
Hầu hết AI coding agent hôm nay — Cursor, GitHub Copilot, Claude Code, Codex — đều train theo cùng công thức: lấy hàng nghìn task thực tế (fix bug, đóng issue, pass test), cho model học, rồi hy vọng model "giỏi code nói chung". Paper này chỉ thẳng: không hề. Model chỉ giỏi đúng task đó. Ra ngoài task đó, nó gần như không cải thiện.
Nhóm tác giả test trực tiếp giả thuyết: họ train một model chỉ duy nhất trên SWE-bench Verified — benchmark fix bug GitHub phổ biến nhất. SWE-bench Verified điểm tăng đúng kỳ vọng. Nhưng refactoring, issue reproduction, code review, security — "barely moved". Model học cách pass SWE-bench, không học cách code.
Họ gọi đây là vấn đề "black-box" của composite task training: khi tối ưu cho mục tiêu tổng hợp (pass test suite, close issue), model memoryze heuristic đặc trưng benchmark — không học được năng lực nền tạo ra những heuristic đó. Task đổi → pattern không transfer.
Vì sao điều này quan trọng
Mọi điểm benchmark bạn thấy trong press release coding agent đều phản ánh đúng thứ này: model được tối ưu cho benchmark. Không phải cho code nói chung. Đó là lý do Cursor xử lý tốt ticket bug-fix quen thuộc nhưng khựng lại khi bạn đưa codebase lạ, hoặc nhờ nó refactor một module phức tạp.
Sự khác biệt giữa "model pass SWE-bench" và "model biết code" — paper gọi đó là gap. Và paper cho thấy cách thu hẹp gap đó.
Technical facts
Giải pháp của nhóm: thôi train trên task, bắt đầu train trên skill. Họ phân rã software engineering thành 5 kỹ năng nguyên tử, mỗi skill có input chính xác, output chính xác, reward verifiable:
- Code localization — cho issue, tìm đúng file/vị trí cần sửa.
- Code editing — cho vị trí + instruction, tạo diff tối thiểu đúng.
- Unit test generation — cho function, viết test pass trên implementation đúng và catch bug trên implementation sai.
- Issue reproduction — cho bug report, viết script fail trước patch, pass sau patch.
- Code review — cho PR, phán đoán PR có thực sự giải quyết vấn đề hay không.
Không mơ hồ. Không heuristic đặc trưng task. Chỉ năng lực nền, đánh giá trực tiếp.
Setup training: base model GLM-4.5-Air-Base (106B params, 12B active, MoE). SFT bootstrap bằng 1,500 trajectory đã được judge verify (300 cho mỗi skill). Sau đó GRPO (Group-based Relative Policy Optimization) train chung cả 5 skill simultaneously — một policy, một objective, năm capability cùng cải thiện một lúc.
Điểm Avg@3 trên 5 atomic skills
| Skill | Trước | Sau |
|---|---|---|
| Code localization | 0.665 | 0.712 |
| Code editing | 0.458 | 0.611 |
| Issue reproduction | 0.542 | 0.605 |
| Unit test generation | 0.359 | 0.472 |
| Code review | 0.563 | 0.622 |
So sánh: task training vs skill training
Đây là phần làm rõ sự khác biệt. 5 benchmark dưới đây model chưa bao giờ thấy trong RL training:
| Benchmark (OOD) | Trước | Sau |
|---|---|---|
| SWE-bench Verified | 0.507 | 0.585 |
| SWE-bench Multilingual | 0.300 | 0.389 |
| Terminal Bench | 0.151 | 0.182 |
| Code Refactoring | 0.146 | 0.171 |
| SEC-Bench (security) | 0.136 | 0.169 |
Model chưa từng thấy refactoring task, chưa từng thấy security task, chưa từng thấy multilingual bug-fixing trong RL. Nó cải thiện trên tất cả — vì nó đã giỏi hơn ở các skill nền mà các task đó cần.
Đối chiếu với single-task baseline: train chỉ trên bug-fixing → giỏi bug-fixing, yếu mọi thứ khác. Train trên atomic skills → mạnh ở bug-fixing và mạnh ở mọi thứ khác. Overall average nhảy từ 0.383 lên 0.452 — 18.7% lift.
Ai được hưởng lợi
Nếu bạn đang xây coding agent: đây là blueprint cụ thể. Decompose domain thành skill có reward verifiable, joint-train, đừng optimize end-to-end cho benchmark.
Nếu bạn đang dùng coding agent hàng ngày: đây là lý do vì sao agent tốt ở ticket đơn giản nhưng khựng khi bạn nhờ refactor module lạ. Và đây là hướng các tool thế hệ sau sẽ đi.
Nếu bạn làm research: paper mở ra câu hỏi — atomic skill nào nữa? Làm sao scale số lượng skill? Transfer sang model nhỏ hơn có được không?
Limitations & pricing
- Điểm tuyệt đối trên task khó vẫn thấp: Terminal Bench 0.182, Refactoring 0.171, SEC-Bench 0.169 — atomic skill training nâng sàn, chưa giải task.
- Paper là preprint (arxiv), chưa peer-reviewed.
- Pipeline yêu cầu judge-verified data cho mỗi skill — chi phí engineering đáng kể.
- Base là GLM-4.5-Air; chưa có bằng chứng gain transfer sang model nhỏ/khác kiến trúc.
- Không có bản thương mại. Code release chưa được xác nhận trong abstract.
What's next
Tác giả nhắm tới mở rộng thư viện atomic skill, scale data per skill, test transfer qua base model khác. Về mặt ecosystem: nếu kết luận này đúng — và bằng chứng 5 OOD task đều cải thiện là mạnh — các AI coding tool thế hệ sau sẽ không còn train trên hàng triệu PR nữa. Sẽ train trên các skill nền tạo nên bất kỳ PR nào.
Như paper nói: một engineer giỏi không phải người đã thấy mọi bug trước đó. Mà là người biết đọc code, định vị vấn đề, viết test, và reason về behavior. Đó là thứ atomic skill training đang cố xây.
Nguồn: arxiv.org/abs/2604.05013, full HTML, thread @alex_prompter.

