AILapTrinh.comAI Lập Trình
Hiểu trợ lý viết mã

Cửa sổ ngữ cảnh (context window) khi lập trình với AI: vì sao AI quên mã đã đưa

Cửa sổ ngữ cảnh là gì, gồm những gì trong mỗi lượt hỏi, vì sao phiên dài làm AI quên lời dặn và cách đưa đúng đoạn mã để trợ lý trả lời sát dự án.

Top-down view of a desk with sticky notes left blank, a closed laptop, two coffee cups and scattered pens, a pair of hands arranging the notes in a row, soft daylight

Cửa sổ ngữ cảnh là lượng chữ tối đa mà mô hình xem được trong một lượt trả lời, tính bằng token, gồm cả lời dặn của công cụ, mã bạn đưa, lịch sử trò chuyện và chính câu trả lời nó sắp viết. Thứ gì nằm ngoài cửa sổ thì với mô hình là không tồn tại. AI "quên" không phải vì trí nhớ kém, mà vì phần đó đã không còn được gửi kèm, hoặc bị tóm tắt cho gọn.

Với người viết mã, hiểu cửa sổ ngữ cảnh trả lời được nhiều câu hỏi khó chịu: vì sao đầu phiên AI làm đúng quy ước mà cuối phiên lại quên, vì sao dán cả tệp dài mà nó vẫn bỏ sót một hàm, vì sao mở phiên mới đôi khi tốt hơn cố giải thích thêm. Bài này giải thích ở mức thực hành.

Một lượt hỏi thật ra gửi đi những gì

Khi bạn gõ một câu hỏi ngắn trong khung trò chuyện của trình soạn thảo, thứ được gửi cho mô hình dài hơn nhiều so với câu bạn gõ. Thường gồm các phần sau, theo thứ tự tuỳ công cụ:

  • Lời dặn hệ thống của công cụ: mô tả vai trò, quy tắc định dạng, danh sách công cụ được dùng. Phần này bạn không thấy nhưng nó chiếm chỗ.
  • Nội dung tệp hướng dẫn dự án nếu bạn có tạo, như quy ước đặt tên, lệnh chạy kiểm thử, những điều cấm.
  • Mã bạn chọn hoặc đính kèm, và những mẩu mã công cụ tự chọn thêm vì cho là liên quan.
  • Toàn bộ hoặc một phần lịch sử trò chuyện trước đó trong phiên, gồm cả câu trả lời dài của AI.
  • Với tác tử: kết quả của mọi lần đọc tệp, chạy lệnh trước đó, có khi là hàng trăm dòng nhật ký kiểm thử.
  • Câu hỏi mới nhất của bạn.

Tất cả cộng lại phải nằm gọn trong cửa sổ, và còn phải chừa chỗ cho câu trả lời. Đó là lý do một phiên tác tử chạy kiểm thử in ra nhiều nhật ký có thể đầy cửa sổ rất nhanh, dù bạn chỉ gõ vài câu.

Giới hạn đo bằng token, và câu trả lời cũng nằm trong đó

Cửa sổ ngữ cảnh được đo bằng token, đơn vị mà mô hình cắt chữ ra để xử lý. Một token có thể là một từ tiếng Anh ngắn, một phần của từ dài, một dấu câu, hoặc vài ký tự khoảng trắng. Mã nguồn thường tốn token hơn văn xuôi tiếng Anh cùng độ dài, vì nhiều ký hiệu và thụt lề. Cách đếm cụ thể và cách mã tốn token được nói kỹ ở bài riêng về token trong cùng mục này.

Độ dài cửa sổ khác nhau rất nhiều giữa các mô hình và tăng nhanh qua từng thế hệ: có loại vài chục nghìn token, có loại hàng trăm nghìn, có loại công bố tới cả triệu. Con số cụ thể đổi theo phiên bản và gói tài khoản, nên khi cần hãy xem tài liệu chính thức. Ngoài giới hạn đầu vào, mỗi mô hình còn giới hạn riêng số token được viết ra trong một câu trả lời, thường nhỏ hơn nhiều.

Giới hạn đầu ra là nguyên nhân của một hiện tượng quen thuộc: bạn nhờ AI viết lại cả tệp dài, nó viết được hai phần ba rồi dừng giữa chừng, hoặc tự rút gọn bằng câu "phần còn lại giữ nguyên". Cách xử lý không phải ép nó viết dài hơn, mà là chia việc: sửa từng hàm, hoặc yêu cầu chỉ đưa ra phần thay đổi thay vì cả tệp.

Cửa sổ dài hơn không có nghĩa là nhớ đều hơn

Nhiều người nghĩ rằng cửa sổ đủ lớn thì cứ đưa cả dự án vào là xong. Thực tế, mô hình không chú ý đều tới mọi phần trong ngữ cảnh. Một nghiên cứu năm 2023 có tên Lost in the Middle cho thấy với các mô hình được thử nghiệm khi đó, thông tin đặt ở đầu hoặc cuối ngữ cảnh được dùng tốt hơn thông tin nằm ở giữa. Các mô hình mới đã cải thiện nhiều điểm này, nhưng hiện tượng "loãng" khi ngữ cảnh quá dài vẫn là điều người dùng hay gặp.

Trong lập trình, điều đó có nghĩa là dán mười tệp để hỏi về một hàm có thể cho kết quả kém hơn dán đúng hai tệp liên quan. Mô hình phải tự tìm cái kim trong đống rơm, và đôi khi nó lấy nhầm một hàm trùng tên ở tệp khác. Ngữ cảnh tốt là ngữ cảnh đủ và gọn, không phải ngữ cảnh nhiều.

Có một hệ quả thực hành nữa: chỉ dẫn quan trọng nên đặt ở chỗ dễ được chú ý. Ví dụ đặt yêu cầu chính ở cuối tin nhắn, ngay sau đoạn mã, thay vì chôn giữa hai đoạn mã dài. Với tác tử, lời dặn cố định nên nằm trong tệp hướng dẫn dự án, vì công cụ thường đưa tệp này vào vị trí nổi bật ở mỗi lượt.

Dấu hiệu phiên làm việc đã quá tải ngữ cảnh

AI lặp lại lỗi bạn đã chỉ ra. Bạn đã nói rõ cột trong bảng tên là ngay_tao, nửa giờ sau nó lại viết created_at. Lời nhắc ban đầu đã trôi xa hoặc bị tóm tắt mất chi tiết.

AI nhắc tới mã của phiên bản cũ. Bạn đã sửa một hàm ba lần trong phiên, AI lại trích dẫn bản đầu tiên. Ngữ cảnh chứa cả ba bản, và nó lấy nhầm.

Câu trả lời chậm hơn và chung chung hơn. Ngữ cảnh càng dài, mỗi lượt xử lý càng lâu. Câu trả lời cũng có xu hướng né chi tiết vì có quá nhiều thứ phải dung hoà.

Công cụ báo đã tóm tắt hoặc nén cuộc trò chuyện. Nhiều công cụ tự rút gọn lịch sử khi gần đầy. Sau thông báo đó, những chi tiết nhỏ như tên biến, giá trị cấu hình rất dễ mất.

Các công cụ xoay xở với giới hạn ngữ cảnh ra sao

Mỗi trợ lý có chiến lược riêng để đưa đúng thứ cần vào cửa sổ có hạn. Biết các chiến lược này giúp bạn hiểu vì sao công cụ thấy hoặc không thấy một tệp.

Cách làmNguyên lýĐiểm yếu cần biết
Tóm tắt lịch sửKhi gần đầy, phần đầu cuộc trò chuyện được nén thành bản tóm tắt ngắnMất chi tiết nhỏ: tên biến, con số, ngoại lệ bạn từng dặn
Tìm kiếm theo nghĩaMã được chia khúc và đánh chỉ mục; khi hỏi, công cụ tìm các khúc gần nghĩa nhất để gửi kèmCó thể bỏ sót khúc liên quan nhưng dùng từ khác, hoặc lấy nhầm khúc giống tên
Tìm kiếm theo chữTác tử tự chạy lệnh tìm theo tên hàm, tên biếnChính xác với tên, kém khi bạn mô tả hành vi mà không biết tên
Tệp hướng dẫn dự ánMột tệp văn bản được tự động đưa vào mọi lượtTệp dài quá thì tự nó chiếm chỗ và làm loãng phần còn lại
Đọc theo nhu cầuTác tử chỉ mở tệp khi cần, đọc từng đoạn thay vì cả tệpTốn nhiều vòng hơn, và nó có thể dừng đọc trước khi tới đoạn quan trọng

Không cách nào hoàn hảo, nên phần đóng góp của bạn vẫn quan trọng: chỉ tên tệp, tên hàm cụ thể khi biết, và nói rõ phạm vi khi giao việc.

Đưa đúng ngữ cảnh cho một câu hỏi lập trình

Một quy trình ngắn giúp câu hỏi trúng đích hơn mà không làm đầy cửa sổ:

  1. Nêu mục tiêu trong một câu ở đầu: muốn sửa lỗi gì, muốn thêm gì, ở ngôn ngữ và phiên bản nào.
  2. Đưa đúng hàm đang hỏi và những định nghĩa nó dùng trực tiếp, như cấu trúc dữ liệu, lớp, cấu trúc bảng. Không dán cả thư mục.
  3. Với lỗi, dán nguyên văn thông báo lỗi và phần ngăn xếp lời gọi liên quan, che hết mật khẩu, khoá và dữ liệu cá nhân trong đó.
  4. Nêu ràng buộc: không đổi tên hàm công khai, không thêm thư viện mới, giữ tương thích với phiên bản đang chạy.
  5. Đặt câu hỏi chính ở cuối tin nhắn, ngắn và cụ thể.
  6. Khi phiên đã dài và AI bắt đầu lặp lỗi, mở phiên mới, chép sang bản tóm tắt ngắn những gì đã chốt, thay vì tiếp tục giải thích.

Bước cuối là thói quen ít người làm nhưng hiệu quả nhất. Một phiên mới với năm dòng tóm tắt rõ ràng thường tốt hơn một phiên cũ với năm mươi tin nhắn chồng chéo.

Cùng một câu hỏi, hai cách đưa ngữ cảnh: ví dụ giả định

Ví dụ giả định: một trang bán hàng viết bằng JavaScript báo lỗi khi khách nhập mã giảm giá. Cùng một người hỏi, cùng một công cụ, chỉ khác cách đưa ngữ cảnh.

Khía cạnhCách thứ nhấtCách thứ hai
Câu hỏiSửa lỗi mã giảm giá không chạyHàm ap_dung_ma_giam trả về tổng âm khi mã giảm theo phần trăm lớn hơn tổng đơn; cần chặn không cho tổng dưới 0
Mã đưa kèmDán cả thư mục giỏ hàng, khoảng hai mươi tệpDán hàm ap_dung_ma_giam, cấu trúc đối tượng mã giảm và một ca dữ liệu gây lỗi
Thông tin lỗiKhông cóGiá trị vào, giá trị ra thực tế, giá trị mong đợi
Kết quả thường gặpAI đoán một nguyên nhân phổ biến, sửa nhầm hàm khác có tên gần giốngAI chỉ đúng dòng tính, thêm điều kiện chặn và gợi ý một ca kiểm thử

Cách thứ hai tốn của bạn thêm hai phút để khoanh vùng, nhưng tiết kiệm nhiều vòng hỏi qua lại. Phần lớn thời gian "AI không hiểu ý" thật ra là thời gian ngữ cảnh chưa đủ hoặc đủ mà quá nhiễu.

Ngữ cảnh và chuyện dữ liệu nhạy cảm

Mọi thứ nằm trong ngữ cảnh đều được gửi tới nơi mô hình chạy. Với trợ lý dùng mô hình trên máy chủ của hãng, đó là máy chủ bên ngoài công ty bạn. Điều này đúng với cả những thứ bạn không trực tiếp dán: tệp công cụ tự chọn thêm, kết quả lệnh tác tử chạy, nhật ký có in biến môi trường.

Vì vậy hãy coi việc chọn ngữ cảnh cũng là việc chọn dữ liệu đi ra ngoài. Không đặt tệp chứa khoá thật trong thư mục mà tác tử được đọc, dùng tính năng loại trừ thư mục nếu công cụ có, và trước khi dán nhật ký lỗi thì lướt qua tìm mật khẩu, mã thông báo truy cập, số điện thoại, địa chỉ khách hàng. Dữ liệu mẫu dùng để hỏi AI nên là dữ liệu giả, giữ đúng định dạng nhưng không có thông tin của người thật.

Câu hỏi thường gặp

Cửa sổ ngữ cảnh lớn có giúp AI hiểu cả dự án không?

Giúp đưa được nhiều mã hơn vào một lượt, nhưng không bảo đảm AI dùng tốt tất cả. Với dự án lớn, đưa đúng phần liên quan và chỉ rõ tệp, tên hàm vẫn cho kết quả ổn định hơn.

Mở phiên trò chuyện mới có làm mất gì không?

Mất lịch sử của phiên cũ, nên mô hình không còn biết những gì đã bàn. Bù lại, ngữ cảnh sạch và gọn. Chép sang vài dòng tóm tắt các quyết định đã chốt là đủ để tiếp tục.

Vì sao AI viết lại cả tệp thì bị cắt ngang giữa chừng?

Mỗi câu trả lời có giới hạn số token đầu ra, thường nhỏ hơn nhiều so với cửa sổ đầu vào. Yêu cầu AI chỉ đưa phần thay đổi, hoặc sửa từng hàm một, sẽ tránh được chuyện này.

Tệp hướng dẫn dự án cho AI nên dài bao nhiêu?

Đủ ngắn để đọc trong vài phút: lệnh chạy và kiểm thử, quy ước quan trọng, những điều cấm. Tệp quá dài tự chiếm chỗ trong cửa sổ và làm các chỉ dẫn quan trọng bị loãng.

Mô hình có nhớ phiên làm việc hôm qua không?

Bản thân mô hình không nhớ. Một số công cụ có tính năng lưu ghi nhớ hoặc tự đọc lại tệp ghi chú, nhưng đó là phần mềm đưa lại thông tin vào ngữ cảnh, không phải mô hình tự nhớ.

Làm sao biết công cụ đã gửi những tệp nào cho mô hình?

Nhiều công cụ hiển thị danh sách tệp hoặc đoạn mã được tham chiếu trong mỗi câu trả lời. Nếu không thấy, hãy chủ động chỉ định tệp và hỏi AI tóm tắt lại những gì nó đang dựa vào.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138