- “Thí nghiệm gây bối rối đã thay đổi cách tôi nghĩ về việc AI phân tích code”
- Đã chứng kiến nhiều tình huống AI hiện tại thường thất bại khi phân tích codebase React
- Tác giả nhận ra nguyên nhân nằm ở cách tiếp cận chỉ phân tích theo từng dòng, giống như khi một lập trình viên junior đọc code lần đầu
Khác biệt giữa thời bootcamp và tư duy của senior
- Khi còn junior, nhiều người thường đọc file theo thứ tự, từng dòng một rồi nhanh chóng bị lạc hướng
- Lập trình viên senior khi xem một PR lớn thường dùng cách sau
- Kiểm tra các file cốt lõi trước
- Nhóm các thay đổi theo từng tính năng để nắm bắt
- Hiểu kiến trúc tổng thể trước, rồi mới xem chi tiết triển khai
- Tác giả quyết định áp dụng cách tiếp cận này cho AI
Thí nghiệm
- Tác giả thử cách nhóm file theo chức năng và cung cấp trước cho AI thông tin ngữ cảnh về từng nhóm
- Trong đoạn code ví dụ, tác giả định nghĩa interface
FileGroup và xử lý file bằng cách gom nhóm theo chức năng liên quan và kích thước file
- Ở cấp độ từng nhóm, tác giả xây dựng prompt để hướng dẫn AI về “đây là khu vực chức năng nào, cần tập trung xem điều gì”
Khoảnh khắc thay đổi đáng kinh ngạc
- Trước đây, AI chỉ phản hồi đơn giản kiểu như “có bao gồm logic xác thực token JWT”
- Sau đó, AI bắt đầu đưa ra những nhận định ở mức senior như “ảnh hưởng đến kết nối WebSocket, khả năng xảy ra race condition với PR mới được merge gần đây”
- AI bắt đầu chỉ ra vấn đề khi đã cân nhắc ngữ cảnh của toàn bộ hệ thống
Điều thực sự đã thay đổi
- Cốt lõi không phải là dùng mô hình machine learning phức tạp hơn, mà là trao cho AI trình tự suy nghĩ giống một senior developer
- Ngữ cảnh trước tiên: bắt đầu từ việc hiểu toàn bộ hệ thống
- Đối sánh mẫu: nhóm các file tương tự để tìm logic lặp lại
- Phân tích tác động: nhận ra ảnh hưởng của thay đổi đến toàn bộ hệ thống
- Hiểu lịch sử: lần theo cả lý do và ngữ cảnh của các thay đổi code trong quá khứ
Tác dụng phụ ngoài dự kiến
- AI không chỉ sửa đúng chỗ được yêu cầu mà còn phát hiện thêm các insight như sau
- Nhận diện các khối code trùng lặp do copy-paste
- Cảnh báo các mẫu xử lý lỗi thiếu nhất quán
- Xác định khả năng tồn tại các điểm nghẽn hiệu năng
- Đề xuất cải thiện kiến trúc dựa trên mẫu sử dụng
Vì sao điều này quan trọng
- Các IDE dùng AI gần đây đang tập trung vào việc tự động sinh code
- Nhưng nếu chỉ đưa ra gợi ý đơn thuần mà không có ngữ cảnh của toàn hệ thống, nó có thể nguy hiểm như “một lập trình viên junior vừa mới gia nhập”
- Điều thực sự quan trọng là “khả năng hiểu code một cách sâu sắc”
Những câu hỏi còn lại
- Bài toán quyết định khi nào nên cập nhật và khi nào nên giữ nguyên context (thông tin lịch sử)
- Cần phản ứng thế nào khi phát hiện các pattern mâu thuẫn lẫn nhau
- Nên hiển thị cho người dùng ra sao với các kết quả phân tích có độ bất định cao
Hướng đi tiếp theo
- Tác giả đang cân nhắc liệu có thể dạy AI cả những cảm giác kiểu senior developer như sau hay không
- Khả năng phát hiện technical debt từ sớm
- Năng lực chủ động đề xuất phương án cải thiện kiến trúc
- Khả năng phát hiện vấn đề bảo mật từ các mẫu sử dụng
- Cảm nhận để nhận ra các quy tắc phi chính thức trong nội bộ nhóm
- Mục tiêu cuối cùng không phải là tạo ra “nhiều code hơn”, mà là dạy AI “cách hiểu sâu toàn bộ code như một senior developer”
3 bình luận
Chẳng phải những câu hỏi nên đặt ra để phân tích và cải thiện codebase vốn đã khá khuôn mẫu rồi sao? Có vẻ tác giả đang hơi quá phấn khích.
Có vẻ cũng cùng ngữ cảnh với việc giải thích tổng thể dự án trong cursor bằng notepad.
Ý kiến trên Hacker News
Mọi người trong phần bình luận khá chỉ trích. Bài viết này nói về một kết quả ngắn gọn và tích cực liên quan đến khả năng của công cụ mới, đồng thời có chứa những suy nghĩ thẳng thắn và hợp lý
Đây là thêm một ví dụ nữa cho thấy LLM làm được những việc đáng kinh ngạc. Tuy nhiên, việc xây dựng một hệ thống hoạt động nhất quán và chính xác với mọi đầu vào là rất khó
Có lẽ sẽ rút ra được bài học cho các hệ thống agent tốt hơn trong việc viết mã
Đọc dòng đầu tiên của bài viết khiến tôi thấy như người ngoài hành tinh. Có lẽ phải đọc hết bài, nhưng việc đọc tuần tự mã nguồn hiện có vẫn tạo cảm giác kỳ lạ
Nhấn mạnh tầm quan trọng của yếu tố con người. Nếu không hiểu ngữ cảnh của codebase thì không thể biết cảnh báo của AI có ý nghĩa gì
Rất khó ngăn AI bịa ra những API không tồn tại. Khi nó hoạt động tốt thì rất hay, nhưng phần lớn là không hoạt động tốt
Ngữ cảnh và sự hiểu biết về mã rất quan trọng để cải thiện chất lượng mã do LLM tạo ra
Giống như lời phàn nàn của John McCarthy, đây là một câu chuyện chứ không phải thí nghiệm hay bằng chứng
Kết quả khá ấn tượng. Có phê bình về phong cách và tính thống nhất, nhưng kết quả có vẻ hữu ích
Có vẻ như một phần quan trọng của công nghệ này đã bị bỏ qua trong bài viết. Không có phần triển khai của
getFileContext()vàshouldStartNewGroup()