41 điểm bởi GN⁺ 2025-01-06 | 3 bình luận | Chia sẻ qua WhatsApp
  • “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
    1. Ngữ cảnh trước tiên: bắt đầu từ việc hiểu toàn bộ hệ thống
    2. Đối sánh mẫu: nhóm các file tương tự để tìm logic lặp lại
    3. Phân tích tác động: nhận ra ảnh hưởng của thay đổi đến toàn bộ hệ thống
    4. 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

 
savvykang 2025-01-06

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.

 
yangeok 2025-01-06

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.

 
GN⁺ 2025-01-06
Ý 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ý

    • Mạch kể chuyện kiểu "Senior vs Junior Developer" có thể hơi cường điệu, nhưng cốt lõi của bài viết là rất tốt
    • Tò mò không biết có phải mọi người cảm thấy bị đe dọa nên mới tức giận hay không
  • Đâ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ó ví dụ phân tích tệp của hệ thống xác thực
    • Chuỗi hardcode này đóng vai trò quan trọng, nhưng sẽ không có gì đặc biệt cho đến khi nó được tạo ra chính xác và nhất quán cho mọi PR
    • Cần thiết lập đánh giá thông qua nhiều codebase khác nhau và các PR thực tế
  • 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ã

    • Chỉ thị cho Claude/chatGPT và các công cụ tương tự không viết mã ngay. Hãy tạo cấu trúc ban đầu trước rồi mới 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ạ

    • Có khá nhiều nhận thức sai về "junior developer"
  • 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ì

    • Khó hiểu "shared pattern" là gì và tại sao nó lại gây ra race condition
    • Mối liên hệ giữa thay đổi xác thực và PR về "retry logic" không rõ ràng
  • 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

    • AI hoạt động tốt khi nhiều người đang viết loại mã mà trước đó đã có rất nhiều người viết rồi
  • 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

    • Sản phẩm Bismuth chia dự án thành các khu vực logic theo yêu cầu của người dùng và truy xuất thông tin symbol để khám phá codebase
    • Chỉ một số ít sản phẩm cạnh tranh cung cấp mức độ tìm kiếm như vậy
  • 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

    • Mong cộng đồng vận dụng tư duy phản biện và sự rèn luyện
  • 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

    • Khi đọc tiêu đề, tôi đã tưởng đó sẽ là nội dung về việc AI phớt lờ công việc của người khác và chỉ nhấn mạnh công việc của chính nó
  • 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()shouldStartNewGroup()