Tại sao AI agent giỏi viết code phần mềm nhưng lại loay hoay với code data science?
Phân tích hàng trăm kho code trên GitHub cho thấy AI agent lập trình thường kém hiệu quả hơn trong dự án data science không phải vì thiếu công cụ mà vì ý nghĩa của code data science sống ở nơi khác hoàn toàn so với code phần mềm thông thường. Infinity tổng hợp và diễn giải nghiên cứu này, cho thấy đây không phải khoảng cách có thể thu hẹp bằng cách thêm tính năng, mà là sự khác biệt cấu trúc sâu hơn về cách thông tin được lưu trữ trong hai loại code.
Tóm tắt các điểm chính
- Code data science có bề mặt trông phức tạp hơn, nhưng code phần mềm lại có cấu trúc nội tại phức tạp hơn, điều các công cụ đo lường theo ba cấp độ đã xác nhận
- Trong phần mềm, ý nghĩa được mã hóa bên trong code qua hàm, lớp và giao diện. Trong data science, ý nghĩa chỉ ra bên ngoài: dữ liệu, cột, kết quả trung gian và quyết định phân tích đang thay đổi
- Notebook không phải dự án phần mềm thất bại mà là công cụ khác cho mục đích khác: giữ code và ngữ cảnh gần nhau trong khi câu hỏi phân tích vẫn đang hình thành
- Agent được xây dựng để điều hướng cấu trúc code sẽ tự nhiên hoạt động tốt trong phần mềm nhưng bỏ lỡ phần lớn ý nghĩa trong data science
- Cơ hội thực sự không phải sao chép những gì đã hiệu quả trong phần mềm mà là giúp thu hẹp khoảng cách từ khám phá trong notebook đến workflow có thể triển khai
Infinity phân tích từng phát hiện dưới đây theo bối cảnh của ai đang xây dựng hoặc sử dụng AI agent cho công việc phân tích dữ liệu.
Điều gì thực sự được đo trong nghiên cứu này?
Nghiên cứu đo Shannon entropy tại ba cấp độ trừu tượng khác nhau trên hàng trăm kho code, mỗi cấp độ nắm bắt một chiều biến đổi khác nhau trong code. Shannon entropy là thước đo độ ngẫu nhiên và khó đoán có thể định lượng được, tức là code càng biến đổi và ít lặp lại thì entropy càng cao.
Ba cấp độ đo: cấp ký tự (nhìn vào từng ký tự một, gần nhất với bề mặt raw của code), cấp token (nhìn vào các đơn vị ngữ nghĩa như từ khóa và tên biến), và cấp cấu trúc cú pháp (nhìn vào cách code được tổ chức thành các khối logic như hàm, lớp và vòng lặp).
Ngoài ra, nghiên cứu đo mật độ tham chiếu: code đang trỏ ra ngoài (đến dataset, bảng, biến tạm) hay trỏ vào trong (đến hàm, lớp, module định nghĩa trong chính codebase).
Nghịch lý entropy: code data science có thực sự phức tạp hơn không?
Kết quả đo đạc tiết lộ một nghịch lý bất ngờ: code data science trông phức tạp hơn ở bề mặt, nhưng code phần mềm lại phức tạp hơn về cấu trúc nội tại.

Ở cấp ký tự, code data science có entropy cao hơn. Điều này hợp lý trực giác: data science đầy tên cột biến đổi, nhãn dataset, biến tạm và định danh chuyên ngành làm code trông rối và không đều. Ở cấp token, hai lĩnh vực khá gần nhau vì cả hai dùng nhiều cấu trúc cú pháp giống nhau. Nhưng ở cấp cấu trúc cú pháp, bức tranh lật ngược.
Code phần mềm mã hóa nhiều hành vi khác nhau hơn thông qua trừu tượng hóa, giao diện, module và logic nội tại. Code data science thường tái sử dụng một tập nhỏ hơn các thao tác trên ngữ cảnh thay đổi: tải dữ liệu, lọc, nhóm, tổng hợp, trực quan hóa, kiểm tra, điều chỉnh.
Nói đơn giản: code data science thường trông phức tạp hơn ở bề mặt, còn code phần mềm thường mang phức tạp nhiều hơn trong cấu trúc. Đây không phải khác biệt về phong cách mà là chỉ số về nơi ý nghĩa được lưu trữ trong mỗi loại code.
Ý nghĩa của code sống ở đâu: trỏ vào trong hay trỏ ra ngoài?
Nghịch lý entropy trở nên dễ hiểu hơn khi nhìn vào hướng mà code "trỏ đến" để tạo ra ý nghĩa.
Trong phần mềm, ý nghĩa thường được nén vào cấu trúc. Hàm, giao diện, module, kiểu dữ liệu và ranh giới lớp làm phần lớn công việc. Khi các trừu tượng hóa này được thiết lập, chúng ổn định hành vi và giảm bất định về sau. Phần lớn ý nghĩa nằm trong chính code.
Trong data science, ý nghĩa gắn chặt hơn nhiều với ngữ cảnh bên ngoài. Nó phụ thuộc vào dataset, các cột, kết quả trung gian, giả định đằng sau một phép biến đổi, và câu hỏi đang thay đổi mà nhà phân tích đang cố trả lời. Code không chỉ biểu đạt logic mà đang chỉ đến một tình huống phân tích cụ thể.

Dữ liệu đo đạc xác nhận sự phân biệt này. Code data science tham chiếu ra ngoài thường xuyên hơn: đến dataset, bảng, cột, đối tượng tạm và trạng thái tồn tại bên ngoài code. Code phần mềm tự tham chiếu vào trong nhiều hơn, xây dựng ý nghĩa bằng cách trỏ đến hàm, lớp, module và trừu tượng được định nghĩa trong chính codebase.
Code data trỏ ra ngoài. Code phần mềm trỏ vào trong. Điều đó quan trọng với agent: trong phần mềm, phần lớn ngữ cảnh liên quan nằm trong codebase. Trong data science, phần lớn nằm trong trạng thái phân tích xung quanh.
Tại sao cách tổ chức code hoạt động khác nhau trong data science?
Một phát hiện thú vị là notebook và workflow khám phá dữ liệu cho thấy mức độ phụ thuộc chặt chẽ hơn giữa các phần code so với codebase phần mềm, và điều này không phải thiết kế tệ mà là phản ánh điều căn bản về phân tích khám phá.
Trong phân tích khám phá, câu hỏi bản thân thường vẫn đang di chuyển. Bạn đang kiểm tra giả định, theo dõi kết quả bất thường, kiểm tra các trường hợp đặc biệt và thay đổi hướng khi học được thêm. Trong bối cảnh đó, việc tổ chức code thành các module tách biệt trước khi hiểu rõ điều gì quan trọng thường không mang lại lợi ích như trong phần mềm. Tổ chức sớm có thể giảm khả năng thích nghi trước khi bạn hiểu những gì thực sự cần.
Ngoài ra có sự khác biệt quan trọng trong cách hai lĩnh vực tự giải thích. Trong phần mềm, code thường tự giải thích qua cấu trúc. Kiểu dữ liệu, giao diện và trừu tượng mang phần lớn ý nghĩa, còn comment thường là thứ yếu. Trong data science, comment, đầu ra và trạng thái thường mang một phần ý nghĩa. Một ghi chú như "đã loại outlier trên phân vị thứ 99, xác nhận điều này không ảnh hưởng đến nhóm chính" không chỉ là tài liệu thêm. Nó ghi lại quyết định phân tích có thể không khôi phục được từ code đơn thuần. Một bảng hay biểu đồ giữa notebook có thể giải thích tại sao phần phân tích tiếp theo lại tồn tại.
Điều này quan trọng với agent. Agent bỏ qua comment, kết quả trung gian và trạng thái đang thay đổi trong notebook đang bỏ lỡ một phần phân tích. Trong codebase phần mềm, thông tin đó thường là bổ sung. Trong data science, nó thường không phải vậy.
Điều này có nghĩa gì với AI agent thực tế?
Hàm ý thực tế là agent hoạt động tốt nhất khi công cụ của chúng khớp với nơi ý nghĩa sống.
Trong phần mềm, agent hiệu quả điều hướng kiến trúc. Nó theo dõi đồ thị lời gọi hàm, tôn trọng giao diện và giữ thay đổi nhất quán trên codebase. Điều đó hiệu quả vì phần lớn ý nghĩa được mã hóa trong cấu trúc.
Trong data science, agent hiệu quả cần làm nhiều hơn điều hướng code. Nó cần hiểu dữ liệu thực sự chứa gì, theo dõi trạng thái qua các bước, theo dõi nguồn gốc của biến, và suy luận về lý do tại sao một phép biến đổi hay bộ lọc được áp dụng nhiều bước trước đó.
Agent được xây dựng cho phần mềm sẽ không tự động chuyển sang data science tốt. Vấn đề không chỉ là cú pháp. Đó là cấu trúc thông tin nền tảng khác nhau.
Infinity ghi nhận điều này có hàm ý thực tế với người xây dựng hoặc đánh giá AI agent cho công việc phân tích. Câu hỏi thực sự không phải là agent có thể viết Python đúng không. Mà là nó có hiểu dữ liệu thực sự là gì, tại sao phân tích có hình dạng như vậy, và những quyết định gì đã được đưa ra dọc đường mà không hiển thị trong code hay không.
Tại sao notebook vẫn tồn tại dù có nhiều hạn chế rõ ràng?
Câu hỏi này thường làm kỹ sư phần mềm bối rối, nhưng câu trả lời nằm chính xác trong những gì phân tích này tiết lộ: notebook giữ ý nghĩa gần với dữ liệu trong khi câu hỏi phân tích vẫn đang thay đổi.
Notebook không phải module Python được cấu trúc tệ. Nó là loại tài liệu khác được xây dựng cho giai đoạn công việc khác. Nó giữ code, kết quả và quyết định gần nhau trong khi phân tích vẫn đang hình thành.
Đó là lý do tại sao notebook có thể trực giác với nhà phân tích đã sống trong ngữ cảnh đó, và khó xử với agent chỉ thấy code. Tái cấu trúc notebook thành code module sạch sẽ trước khi câu hỏi phân tích được giải quyết thường không phải là cải thiện. Nó có thể tách logic khỏi ngữ cảnh đã tạo ra ý nghĩa cho nó ngay từ đầu.
Cơ hội thực sự là gì?
Cơ hội thực sự cho AI agent trong data science không phải sao chép những gì đã hiệu quả trong phần mềm mà là giúp thu hẹp khoảng cách từ khám phá đến triển khai sản xuất. Khoảng cách đó tồn tại vì notebook bảo toàn ngữ cảnh phân tích nhưng đánh đổi bằng sự sạch sẽ cấu trúc.
Agent có thể hiểu cả ngữ cảnh phân tích lẫn yêu cầu cấu trúc của hệ thống sản xuất có thể giúp thu hẹp khoảng cách đó mà không buộc nhà phân tích phải rời khỏi chế độ khám phá quá sớm.
Đó là bài toán khó hơn việc điều hướng codebase. Nhưng cũng là bài toán quan trọng hơn. Một agent data science thực sự cần duy trì nhận thức về trạng thái dữ liệu, đầu ra và nguồn gốc biến, không chỉ mã nguồn. Nó cần coi comment và kết quả trung gian là ngữ cảnh có ý nghĩa, và giúp chuyển đổi công việc khám phá thành workflow có thể tái tạo trong sản xuất.
Những điểm cốt lõi từ phân tích
Để tóm tắt những gì dữ liệu gợi ý trên các kho code được nghiên cứu:
Code data science thường có entropy bề mặt cao hơn, trong khi code phần mềm thường có entropy cấu trúc cao hơn. Code data science tham chiếu ra ngoài thường xuyên hơn, đến trạng thái dữ liệu, đầu ra và biến tạm, trong khi code phần mềm tự tham chiếu vào trong nhiều hơn. Workflow dạng notebook có xu hướng phụ thuộc chặt chẽ hơn giữa các phần, thường là hệ quả của khám phá hơn là thực hành kém. Comment, đầu ra và trạng thái đang thay đổi là một phần nội dung ngữ nghĩa của công việc data science, không phải chi tiết ngoại vi. Agent được tối ưu cho ngữ cảnh phần mềm thường sẽ kém hiệu quả trong data science trừ khi được thiết kế để suy luận trên dữ liệu, đầu ra và ngữ cảnh song song với cấu trúc code.
Kết luận
Infinity nhận thấy toàn bộ phân tích này chỉ về một kết luận: code data science không phải phiên bản kém trưởng thành của phần mềm mà là tối ưu hóa khác hoàn toàn.
Khi bắt đầu phân tích, kỳ vọng là tìm thấy code data science đơn giản là ít cấu trúc hơn. Điều tìm thấy thay vào đó là nó được cấu trúc khác nhau vì những lý do chính đáng, với ý nghĩa thường sống ở nơi khác. Điều đó có hàm ý thực tế cho bất kỳ ai xây dựng hoặc đánh giá AI agent cho công việc phân tích: agent hiệu quả trong data science cần đọc được ngữ cảnh bên ngoài code, không chỉ đọc code. Đó là thách thức thiết kế khác hoàn toàn với điều hướng kiến trúc phần mềm.
Khi hiểu điều đó, notebook ngừng trông như dự án phần mềm thất bại và bắt đầu trông giống như thực sự là gì: bề mặt làm việc để suy luận trên dữ liệu đang thay đổi.
All rights reserved