Ngày cắt dữ liệu (knowledge cutoff) là thời điểm dữ liệu huấn luyện của mô hình được chốt; mọi thay đổi của ngôn ngữ, thư viện, khung làm việc sau thời điểm đó, mô hình không biết trừ khi được đưa vào ngữ cảnh. Đó là lý do trợ lý AI có lúc viết mã theo cách gọi đã bị khai tử, dùng tuỳ chọn cấu hình đã đổi tên, hoặc khẳng định một tính năng "chưa có" trong khi bản mới đã có từ lâu.
Điều ít người để ý là ngay cả khi mô hình đã biết bản mới, nó vẫn hay viết theo kiểu cũ, vì mã kiểu cũ chiếm phần lớn dữ liệu nó từng đọc. Bài này giải thích cả hai hiện tượng, cách nhận ra và cách bù bằng tài liệu đúng phiên bản.
Ngày cắt dữ liệu nghĩa là gì với người viết mã
Một mô hình ngôn ngữ được huấn luyện trong nhiều tháng trên dữ liệu thu thập tới một mốc nào đó. Sau khi phát hành, nó được dùng thêm nhiều tháng, có khi vài năm. Trong khoảng đó, hệ sinh thái lập trình vẫn chạy: ngôn ngữ ra bản mới, thư viện lớn đổi cách gọi giữa hai phiên bản chính, công cụ đóng gói đổi định dạng tệp cấu hình. Mô hình không tự cập nhật những điều này.
Ngoài ra, ngay cả trước mốc cắt, những thay đổi rất gần mốc thường có ít dữ liệu. Một thư viện ra bản mới hai tháng trước mốc cắt thì trên mạng mới có ít bài viết, ít câu hỏi đáp, ít mã mẫu dùng bản đó. Mô hình biết là có, nhưng không "quen tay" với nó như với bản cũ đã tồn tại năm năm.
Với người viết mã, ngày cắt dữ liệu vì vậy không phải một mốc rõ ràng mà là một vùng mờ: càng gần và càng sau mốc, mô hình càng yếu. Các hãng thường công bố ngày cắt của từng mô hình trong tài liệu, nhưng điều đó chỉ cho bạn biết giới hạn trên, không cho biết mô hình nắm bản mới chắc tới đâu.
Những kiểu thay đổi mô hình hay bị chậm chân
Bảng dưới là vài ví dụ có thật về các thay đổi từng khiến trợ lý AI viết theo kiểu cũ trong một thời gian. Các mô hình mới hơn đã biết những thay đổi này; bảng chỉ để minh hoạ loại thay đổi bạn cần cảnh giác với thư viện của mình.
| Loại thay đổi | Ví dụ có thật | Mã kiểu cũ còn gặp |
|---|---|---|
| Hàm bị khai tử trong thư viện chuẩn | Python 3.12 đánh dấu khai tử datetime.utcnow, khuyến nghị dùng thời gian có múi giờ | Gợi ý vẫn dùng utcnow vì có trong vô số mã cũ |
| Phương thức bị gỡ hẳn ở bản lớn | Thư viện pandas gỡ phương thức append của DataFrame ở bản 2.0, khuyến nghị dùng concat | Mã dùng append chạy được trên bản cũ, báo lỗi trên bản mới |
| Đổi cách khởi tạo khung làm việc | React 18 chuyển cách gắn ứng dụng vào trang sang createRoot, cách cũ ReactDOM.render bị khai tử | Mã mẫu khởi tạo theo cách cũ vẫn xuất hiện nhiều |
| Hàm bị khai tử trong ngôn ngữ | PHP 8.2 khai tử utf8_encode và utf8_decode | Mã xử lý tiếng Việt kiểu cũ vẫn dùng hai hàm này |
| Đổi định dạng tệp cấu hình công cụ | Nhiều công cụ kiểm lỗi, đóng gói chuyển sang định dạng tệp cấu hình mới qua các bản lớn | AI đề xuất tệp cấu hình theo định dạng cũ, công cụ bỏ qua hoặc báo lỗi |
Điểm chung của các ví dụ: mã kiểu cũ thường vẫn chạy được trên bản cũ, nên khi máy cá nhân và máy chủ khác phiên bản, lỗi có thể chỉ lộ ra ở một bên. Đây là lý do ghi rõ phiên bản khi hỏi quan trọng đến vậy.
Vì sao đã biết bản mới mà AI vẫn viết kiểu cũ
Hãy hình dung dữ liệu huấn luyện như một thư viện khổng lồ chứa mã của nhiều năm. Một cách gọi tồn tại suốt mười năm có hàng triệu ví dụ; cách gọi mới thay thế nó mới xuất hiện hai năm, chỉ có một phần nhỏ số ví dụ. Khi bạn hỏi chung chung, xác suất của kiểu cũ vẫn cao hơn, nên mô hình chọn kiểu cũ dù nó "biết" kiểu mới.
Hiện tượng này giải thích một quan sát hay gặp: hỏi trực tiếp "trong bản mới nên dùng cách nào" thì AI trả lời đúng, nhưng khi nhờ viết một hàm hoàn chỉnh thì nó lại dùng cách cũ. Câu hỏi trực tiếp kéo phần kiến thức về bản mới vào ngữ cảnh, còn yêu cầu viết mã chung chung để mô hình đi theo thói quen.
Cách khắc phục rất đơn giản: đưa thông tin phiên bản vào ngay yêu cầu viết mã, và nêu rõ những cách gọi cần tránh. Ví dụ câu lệnh: "Viết hàm đọc tệp CSV bằng pandas 2.x. Không dùng DataFrame.append, dùng pd.concat. Dự án chạy Python 3.12, dùng thời gian có múi giờ thay cho utcnow." Câu lệnh dài thêm một dòng nhưng tiết kiệm một vòng sửa.
Nhận ra AI đang viết theo phiên bản cũ
Có cảnh báo khai tử khi chạy. Nhiều ngôn ngữ và thư viện in cảnh báo khi gặp cách gọi sắp bị gỡ. Đừng bỏ qua dòng cảnh báo vì chương trình vẫn chạy; đó là tín hiệu rõ nhất rằng mã đang theo bản cũ.
Cách khởi tạo dự án khác với tài liệu hiện hành. Nếu cấu trúc thư mục, lệnh tạo dự án hay tệp cấu hình AI đề xuất không giống trang hướng dẫn bắt đầu của thư viện, khả năng cao nó đang mô tả bản cũ.
Tên gói hoặc tên mô-đun đã đổi. Một số thư viện đổi tên gói, tách thành nhiều gói, hoặc chuyển chức năng sang gói riêng. Lệnh cài AI gợi ý báo gói đã ngừng phát triển là dấu hiệu cần kiểm lại.
AI khẳng định một tính năng không tồn tại. Khi AI nói "thư viện này không hỗ trợ việc đó" một cách chắc chắn, hãy kiểm lại tài liệu bản mới. Rất có thể tính năng ra sau ngày cắt dữ liệu.
Trình kiểm lỗi của dự án gạch chân. Các trình kiểm lỗi cấu hình cho phiên bản mới thường đánh dấu cách gọi cũ. Để chúng chạy tự động khi lưu tệp là lưới bắt lỗi rẻ nhất.
Bù phần thiếu: đưa tài liệu đúng phiên bản vào ngữ cảnh
Khi làm với thư viện mới hoặc vừa đổi bản lớn, quy trình dưới đây giúp AI viết theo tài liệu thay vì theo trí nhớ.
- Kiểm phiên bản thật đang dùng trong dự án qua tệp khai báo phụ thuộc hoặc lệnh liệt kê gói đã cài, đừng đoán.
- Mở tài liệu chính thức đúng phiên bản đó, tìm phần mô tả chức năng bạn cần, và trang ghi chú thay đổi hoặc hướng dẫn chuyển phiên bản nếu có.
- Chép đoạn tài liệu liên quan, kèm ví dụ mã chính thức, vào khung trò chuyện. Chỉ chép phần cần thiết để không làm loãng ngữ cảnh.
- Yêu cầu AI viết mã dựa trên đoạn tài liệu đó, nói rõ nếu tài liệu không đề cập điều gì thì phải hỏi lại thay vì tự suy ra.
- Với tác tử có quyền truy cập mạng, có thể chỉ cho nó đọc trang tài liệu cụ thể. Hạn chế để nó tự tìm kiếm rộng, vì kết quả có thể là bài viết cũ hoặc trang không đáng tin.
- Chạy mã, xem có cảnh báo khai tử không, rồi chạy kiểm thử.
Nếu cả nhóm thường xuyên làm với một thư viện mới, có thể lưu đoạn tài liệu then chốt và các quy ước phiên bản vào tệp hướng dẫn dự án, để trợ lý đọc ở mọi phiên mà không phải dán lại.
Hỏi AI về ngày cắt dữ liệu của chính nó có tin được không
Nhiều người hỏi thẳng trợ lý "kiến thức của bạn tới thời điểm nào". Câu trả lời có thể đúng, có thể lệch, vì mô hình không có cách tự đo chính xác giới hạn của mình. Nó trả lời dựa trên thông tin được đưa vào lời dặn hệ thống hoặc những gì học được, và với những tháng sát mốc cắt, dữ liệu mỏng khiến chính nó cũng không chắc.
Nguồn tin cậy hơn là tài liệu của hãng cho từng mô hình. Nhưng như đã nói, biết ngày cắt cũng chỉ là biết giới hạn trên. Cách thực dụng nhất vẫn là kiểm từng chỗ quan trọng: hỏi về một thay đổi bạn biết chắc đã có trong bản mới nhất của thư viện mình dùng, xem AI có nhắc tới không. Nếu nó không biết, hãy mặc định phải cung cấp tài liệu cho mọi việc liên quan tới thư viện đó.
Một số công cụ cho mô hình tìm kiếm trên mạng hoặc đọc tài liệu khi trả lời. Điều này giúp vượt qua ngày cắt, nhưng chất lượng phụ thuộc nguồn nó tìm được. Một bài hướng dẫn cũ đứng đầu kết quả tìm kiếm vẫn có thể kéo câu trả lời về bản cũ.
Danh sách kiểm khi nâng phiên bản thư viện cùng AI
Nâng phiên bản là lúc ngày cắt dữ liệu gây phiền nhất, vì bạn đang đi đúng vào vùng mô hình yếu. Vài điều nên làm:
- Đọc hướng dẫn chuyển phiên bản chính thức trước, đưa phần liệt kê thay đổi phá vỡ tương thích cho AI.
- Nâng từng bước nhỏ khi có thể, mỗi bước chạy kiểm thử, thay vì nhảy liền nhiều bản lớn.
- Yêu cầu AI liệt kê những chỗ trong mã có khả năng bị ảnh hưởng trước khi sửa, đối chiếu với danh sách thay đổi chính thức.
- Bật chế độ cảnh báo khai tử thành lỗi trong kiểm thử, nếu ngôn ngữ cho phép, để không sót chỗ nào.
- Giữ nhánh git riêng cho việc nâng phiên bản để dễ quay lại.
Một lưu ý về môi trường: máy cá nhân, máy kiểm thử và máy chủ thật nên chạy cùng phiên bản ngôn ngữ và thư viện, ghi rõ trong tệp khai báo phụ thuộc có khoá phiên bản. Khi ba môi trường lệch nhau, bạn không biết AI đang viết cho môi trường nào, và lỗi do ngày cắt dữ liệu trở nên rất khó lần ra.
Phần kỹ thuật nâng phiên bản và cải tạo mã cũ có bài chi tiết trong mục đọc hiểu và cải tạo mã cũ của trang.
Câu hỏi thường gặp
Ngày cắt dữ liệu có giống nhau giữa các mô hình không?
Không. Mỗi mô hình, thậm chí mỗi phiên bản của cùng một dòng mô hình, có ngày cắt riêng. Hãng thường ghi trong tài liệu kỹ thuật của từng mô hình, và nên xem ở đó thay vì đoán.
Mô hình có tự cập nhật kiến thức sau khi phát hành không?
Bản thân mô hình không đổi sau khi phát hành. Hãng có thể ra phiên bản mới với dữ liệu mới hơn, hoặc công cụ có thể gắn thêm tìm kiếm mạng, nhưng đó là thay đổi bên ngoài chứ không phải mô hình tự học.
Có nên luôn dùng thư viện phiên bản cũ cho hợp với AI không?
Không nên vì lý do đó. Phiên bản cũ có thể hết được vá lỗi bảo mật. Hãy chọn phiên bản theo nhu cầu dự án, rồi đưa tài liệu cho AI khi cần.
Làm sao biết một cách gọi đã bị khai tử?
Xem ghi chú thay đổi của thư viện, chạy mã và đọc cảnh báo khai tử, hoặc dùng trình kiểm lỗi cấu hình đúng phiên bản. Tài liệu chính thức thường đánh dấu rõ những hàm sắp bị gỡ.
Dán tài liệu dài vào có làm AI kém đi không?
Có thể, nếu dán quá nhiều phần không liên quan. Chỉ chọn đoạn mô tả chức năng cần dùng và ví dụ đi kèm. Tài liệu ngắn và đúng chỗ hiệu quả hơn cả cuốn tài liệu.
Thư viện nội bộ công ty thì AI có biết không?
Không, trừ khi mã hoặc tài liệu của thư viện đó được đưa vào ngữ cảnh. Với thư viện nội bộ, tài liệu ngắn gọn có ví dụ là thứ giúp cả người mới lẫn trợ lý AI dùng đúng.