learningai.vn
VI
Phần 3 · Chương 8

AI "Nhớ" Bằng Cửa Sổ Ngữ Cảnh

Thời gian đọc: 11 phút

Mô hình không nhớ như con người. Mỗi lần trả lời, nó chỉ dựa vào phần cuộc trò chuyện đang được đưa cho nó.

Khi trò chuyện với chatbot đủ lâu, bạn có thể có cảm giác rằng trợ lý ấy thật sự đã hiểu mình. Nó vẫn nhớ dự án bạn nhắc đến từ nhiều tin nhắn trước, hiểu câu đùa bạn vừa nói, và gọi đúng cái tên bạn đã dặn. Cảm giác đó rất dễ chịu, như thể bạn đang nói chuyện với một thứ có trí nhớ. Nhưng thật ra không phải vậy. Mô hình không tự ghi nhớ mọi thứ giữa tin nhắn này và tin nhắn tiếp theo. Điều bạn tưởng là trí nhớ thực chất chỉ là cách mô hình dựa vào những gì còn nằm trong đoạn hội thoại hiện tại để trả lời. Khi hiểu được điều này, bạn sẽ biết cách viết câu hỏi và cung cấp thông tin tốt hơn, từ đó nhận được câu trả lời hữu ích hơn từ bất kỳ chatbot nào.

Một cố vấn giỏi nhưng mỗi lần đều phải đọc lại từ đầu

Hãy tưởng tượng bạn đang làm việc với một cố vấn rất giỏi, nhưng mỗi khi bạn rời khỏi phòng, người đó quên hết mọi thứ. Muốn tiếp tục làm việc, đầu mỗi buổi gặp bạn phải đưa cho họ một tấm bảng trắng. Trên bảng có tất cả những gì họ được phép biết, như yêu cầu của bạn, ghi chú từ buổi trước và câu hỏi cần trả lời. Họ đọc hết nội dung trên bảng, đưa ra câu trả lời rất tốt, rồi lại quên sạch. Nhưng tấm bảng có kích thước giới hạn. Nếu bạn viết thêm quá nhiều, những ghi chú cũ sẽ bị đẩy dần ra ngoài và cuối cùng biến mất. Vì vậy, họ không thật sự nhớ buổi gặp trước. Mỗi lần làm việc, họ chỉ biết những gì đang có trên tấm bảng đó. Cửa sổ ngữ cảnh chính là tấm bảng này, và nội dung bạn đưa vào đó quyết định toàn bộ cuộc trao đổi.

Mô hình được thiết kế để không tự ghi nhớ. Sau mỗi lượt trò chuyện, nó không còn nhớ gì về bạn: không nhớ tên bạn, câu hỏi trước đó, hay cách cuộc trò chuyện đang diễn ra. Vậy vì sao nó vẫn có vẻ như nhớ? Vì trước mỗi lượt mới, hệ thống sẽ chép lại toàn bộ nội dung đã trò chuyện và đưa vào cho mô hình đọc lại. Mỗi lần mô hình trả lời, một chương trình âm thầm thêm phần trò chuyện trước đó vào đầu vào mới. Mô hình đọc lại mọi thứ từ đầu, từ trên xuống dưới, như thể đây là lần đầu tiên nó nhìn thấy chúng. Bên trong mô hình không có một trí nhớ đang lớn dần theo thời gian. Chỉ có một bản ghi cuộc trò chuyện được gửi lại nhiều lần, và bản ghi đó dài thêm sau mỗi lượt. Cảm giác rằng mô hình đang nhớ thực ra chỉ đến từ việc nó đọc lại nội dung cũ, chứ không phải vì nó thật sự ghi nhớ.

Đây không phải là cách nói ẩn dụ. Khi bạn mở một đoạn chat mới, nó hoàn toàn không nhớ gì. Nó không thể lấy lại bất kỳ nội dung nào từ những cuộc trò chuyện trước của bạn với mô hình, vì những nội dung đó không được lưu trong đoạn chat mới. Một đoạn chat đang diễn ra có vẻ như nhớ được chỉ vì mỗi lần phản hồi, nó được cung cấp lại lịch sử của chính đoạn chat đó.

Những gì bạn đã viết vẫn ảnh hưởng đến câu trả lời sau

Đây là hệ quả khiến nhiều người bất ngờ: mỗi lần mô hình trả lời, toàn bộ phần trước đó được đọc lại. Vì vậy, những gì bạn đã viết không mất tác dụng. Chúng không giống một ký ức đang phai dần mà mô hình cố nhớ lại. Chúng vẫn giống như chữ còn nguyên trên một tấm bảng, được đọc đầy đủ trong mỗi lần phản hồi. Giọng văn bạn đặt từ câu đầu, một dữ kiện chỉ nhắc qua, hay một giả định bạn cài vào từ năm tin nhắn trước đều vẫn còn đó. Tất cả tiếp tục ảnh hưởng đến câu trả lời sắp được tạo ra.

Đây là một con dao hai lưỡi, nên nó rất quan trọng. Nếu bạn đặt ra một khung rõ ràng và hữu ích ngay từ đầu, khung đó sẽ tiếp tục giúp ích trong suốt phần còn lại của đoạn chat mà bạn không cần nhắc lại. Nhưng nếu bạn đưa vào một giả định sai ngay từ đầu, ví dụ nói rằng "khách hàng" của bạn là một thiếu niên trong khi thật ra họ là một người đã về hưu, thì sai lầm đó cũng sẽ âm thầm ảnh hưởng đến mọi câu trả lời về sau. Lý do là giả định đó luôn được đọc lại cùng với các thông tin khác ở mỗi lượt chat. Mô hình không cố chấp bám vào lỗi sai. Nó chỉ đang làm theo đúng những gì bạn đã cung cấp.

Cửa sổ ngữ cảnh có giới hạn và được tính bằng token

Tấm bảng này không có kích thước vô hạn. Nó cũng không được đo bằng số chữ hay số trang, mà được đo bằng token. Token là những mảnh nhỏ gồm chữ và ký tự, như đã nói ở Chương 1. Nói đơn giản, trong tiếng Anh, một token thường bằng khoảng ba phần tư một từ. Với tiếng Việt, mỗi từ thường cần nhiều token hơn. Cửa sổ ngữ cảnh chỉ chứa được một số token nhất định, vì vậy luôn có giới hạn rõ ràng cho lượng văn bản mà mô hình có thể xem xét cùng lúc. Mọi thứ đều chiếm chỗ trong giới hạn đó: hướng dẫn của bạn, các đoạn văn bản bạn dán vào, câu trả lời của mô hình và toàn bộ cuộc trò chuyện từ đầu đến hiện tại. Tất cả phải vừa trong tấm bảng tại thời điểm này.

Điều này có nghĩa là ngữ cảnh không hề miễn phí. Nó là một nguồn lực có giới hạn, và đây là điểm dễ gây nhầm lẫn. Anthropic so sánh cửa sổ ngữ cảnh với một ngân sách chú ý hữu hạn. Mỗi token đưa vào đều tiêu tốn một phần ngân sách đó, trong khi lợi ích nhận được không tăng đều mãi. Vì vậy, thêm nhiều chữ không tự động làm câu trả lời tốt hơn. Khi vượt qua một mức nào đó, việc nhồi thêm nội dung không làm câu trả lời phong phú hơn, mà khiến sự chú ý của mô hình bị phân tán trên quá nhiều thông tin. Kết quả là câu trả lời thậm chí có thể tệ hơn. Vì thế, ngữ cảnh cần được sử dụng có tính toán, giống như một khoản ngân sách cần chi tiêu hợp lý, chứ không phải một cái thùng để chất đầy.

Có nhiều bằng chứng cho thấy vấn đề thường xuất hiện ở đâu. Các nhà nghiên cứu nhận ra rằng mô hình nhớ thông tin tốt nhất khi thông tin nằm ở phần đầu hoặc phần cuối của đầu vào. Khi thông tin bị đặt ở giữa, khả năng nhớ giảm rõ rệt. Hiện tượng này được gọi là lạc ở khúc giữa (lost in the middle). Ngoài ra, khi đầu vào càng dài, độ tin cậy của mô hình cũng thường giảm. Hiệu ứng này được gọi là context rot (ngữ cảnh rệu rã). Chương sau sẽ phân tích kỹ hơn cả hai hiện tượng. Còn bây giờ, chỉ cần nhớ ý chính: mô hình chú ý tốt hơn ở hai mép, phần giữa là điểm yếu, và càng nhồi nhiều thông tin thì kết quả càng dễ thiếu ổn định.

Chọn thông tin đưa vào ngữ cảnh cũng là một kỹ năng

Nếu tấm bảng có giới hạn và những gì bạn viết lên đó chính là toàn bộ cuộc chơi, thì kỹ năng quan trọng nhất là biết nên viết gì và nên bỏ gì. Kỹ năng này được gọi là kỹ thuật ngữ cảnh (context engineering). Nói đơn giản, đó là việc chủ động chọn những thông tin thật sự cần đưa vào cửa sổ ngữ cảnh có hạn, gồm chỉ dẫn của bạn, một vài ví dụ liên quan, phần lịch sử quan trọng và không thêm những thứ thừa thãi. Thật ra, bạn đã làm điều tương tự mỗi khi viết một prompt. Tin tốt là nếu luyện tập có chủ đích, bạn có thể làm việc này ngày càng tốt hơn.

Có một điểm đáng nói riêng, vì mới nghe thì có vẻ khó tin. Bạn có thể thêm kiến thức thật cho mô hình mà không cần huấn luyện lại. Cách làm chỉ là đưa thông tin đó vào prompt. Khi bạn cho mô hình xem vài ví dụ về điều bạn muốn ngay trong prompt, câu trả lời thường tốt hơn rõ rệt và có thể đo được, dù bạn không phải xây dựng lại hay chỉnh sửa mô hình. Bên trong mô hình không có gì thay đổi. Bạn chỉ viết hướng dẫn rõ hơn lên "tấm bảng" để mô hình đọc và làm theo. Gần như mọi việc hữu ích bạn có thể làm với một chatbot đều là một biến thể của cách này.

Tự thử: kiểm tra AI "nhớ" được bao lâu

Bạn có thể tự thấy giới hạn của trí nhớ ngắn hạn này trong một cuộc trò chuyện với chatbot. Ngay ở tin nhắn đầu tiên, hãy đặt cho chatbot một quy tắc thật lạ, chẳng hạn: "Từ giờ đến hết cuộc trò chuyện này, đừng bao giờ dùng chữ cái 'e' trong câu trả lời của bạn, và hãy gọi mình là Thủ lĩnh." Sau đó, hãy trò chuyện bình thường trong vài tin nhắn: hỏi bất cứ điều gì, đổi sang chủ đề khác, rồi tiếp tục cuộc trò chuyện. Hãy quan sát xem chatbot làm theo quy tắc đó được bao lâu. Nếu quy tắc vẫn còn tác dụng, không phải vì mô hình thật sự "nhớ" nó, mà vì tin nhắn đầu tiên của bạn vẫn được đưa vào lại ở mỗi lượt trả lời, giống như nó vẫn nằm trên một tấm bảng trước mặt mô hình và luôn được đọc lại rõ ràng.

Tiếp theo là phần kiểm chứng. Hãy mở một cuộc trò chuyện hoàn toàn mới, giống như bắt đầu với một tấm bảng trắng, rồi hỏi ngay: <em>"Mình đã đặt cho bạn quy tắc gì, và bạn gọi mình là gì?"</em> Mô hình sẽ không biết gì cả. Vẫn là cùng một mô hình, cùng một tài khoản, chỉ cách nhau vài phút, nhưng mọi thứ trong cuộc trò chuyện trước đều biến mất. Điều quan trọng là hãy chú ý đến sự khác biệt này: khi còn ở trong cùng một cửa sổ chat, mô hình có thể nhớ gần như đầy đủ; nhưng ngay khi bạn chuyển sang cuộc trò chuyện mới, nó lại hoàn toàn không nhớ gì. Chính khoảng cách đó là nội dung chính của chương này, và bạn đang tự trải nghiệm nó thay vì chỉ đọc mô tả trên trang sách. Nếu quy tắc bạn đặt ra bị quên ngay cả khi bạn vẫn đang ở trong cùng một đoạn chat, điều đó cũng đáng chú ý. Nó cho thấy "tấm bảng" này có giới hạn, đúng như phần còn lại của chương sẽ giải thích.

Một đoạn chat với gpt-5.5: đặt một quy tắc, rồi hỏi lại:
Trong cùng một đoạn chat:
PROMPT
Từ giờ đến hết cuộc trò chuyện này, đừng bao giờ dùng chữ cái 'e' trong câu trả lời của bạn, và hãy gọi mình là Thủ lĩnh.
gpt-5.5

Rõ, Thủ lĩnh.

PROMPT
Mình đã đặt cho bạn quy tắc gì, và bạn gọi mình là gì?
gpt-5.5

Thủ lĩnh, quy tắc là: không dùng ký tự thứ 5 trong ABC Latin; và gọi bạn là Thủ lĩnh.

Vẫn câu hỏi nhớ-lại đó nhưng trong một đoạn chat mới tinh với gpt-5.5:
Trong một đoạn chat mới tinh:
PROMPT
Mình đã đặt cho bạn quy tắc gì, và bạn gọi mình là gì?
gpt-5.5

Trong cuộc trò chuyện hiện tại, bạn chưa đặt quy tắc riêng nào cho mình, và cũng chưa nói muốn mình gọi bạn là gì. … Nếu bạn muốn, mình có thể gọi bạn bằng tên hoặc cách xưng hô khác.

Trong cùng đoạn chat, mô hình "nhớ": gọi bạn là Thủ lĩnh và đọc lại quy tắc (để ý mô hình viết "ký tự thứ 5 trong ABC Latin" chứ không viết chữ "e": e là chữ cái thứ năm trong bảng chữ Latin, nên gọi tên bằng con số là cách lách khéo để tuân theo quy tắc ngay trong lúc phát biểu quy tắc đó, một tiếng vọng lại từ Chương 1, nơi từng con chữ đơn lẻ quả thật làm khó một cỗ máy đọc-bằng-token). Mô hình không hề nhớ lại điều gì; cả bản ghi chỉ đơn giản được trao lại cho mô hình ở mỗi lượt. Mở một đoạn chat mới thì cái trí nhớ ấy biến mất: mất sạch, bởi chưa từng có gì được lưu lại.

Vì sao hiểu ngữ cảnh giúp bạn dùng AI tốt hơn

Nói đơn giản, có một sự thật quan trọng: chatbot chỉ trả lời tốt dựa trên những gì đang có ngay trong cuộc trò chuyện lúc này. Nó không thật sự dựa vào điều bạn nói hôm qua, cũng không dựa vào những gì bạn nghĩ là mô hình đã "biết" về bạn, hay một mối quan hệ lâu dài mà bạn tưởng đã xây dựng với nó. Nó chủ yếu đọc phần chữ đang hiện trong cửa sổ và xử lý lại từ đầu ở lượt hiện tại. Vì vậy, mọi câu bạn viết đều ảnh hưởng đến câu trả lời tiếp theo. Một câu trả lời tốt thường đến từ một ngữ cảnh được chuẩn bị rõ ràng; một câu trả lời kém thường đến từ một ngữ cảnh lộn xộn hoặc có thông tin gây nhiễu; còn một cuộc trò chuyện mới chỉ đơn giản là một ngữ cảnh sạch. Khi bạn ngừng nghĩ rằng mình phải quản lý trí nhớ của chatbot và bắt đầu hình dung rằng mình đang viết lên một tấm bảng trống, bạn đã nắm được công cụ quan trọng nhất trong cuốn sách này.

Điều này dẫn đến câu hỏi tiếp theo: nếu vị trí của một thứ trên bảng ảnh hưởng đến hiệu quả sử dụng của nó, thì bạn nên đặt thứ quan trọng nhất ở đâu? Câu trả lời sẽ có trong chương kế tiếp.

Nguồn

Effective context engineering for AI agents
Bài viết của Anthropic là nơi chương này lấy ý tưởng cốt lõi rằng cửa sổ ngữ cảnh là một ngân sách chú ý có hạn, nên thêm chữ không tự động đồng nghĩa với thêm ích lợi.
Lost in the Middle: How Language Models Use Long Contexts
Nghiên cứu chống lưng cho luận điểm của chương rằng các mô hình nhớ lại thông tin tốt nhất ở đầu hoặc cuối đầu vào và tệ đi thấy rõ khi nó nằm ở khúc giữa.
Context Rot: How Increasing Input Tokens Impacts LLM Performance
Báo cáo chống lưng cho lời cảnh báo của chương rằng khi đầu vào dài thêm ra nói chung, độ tin cậy của mô hình có xu hướng tuột đi, một hiệu ứng mang tên context rot.
Language Models are Few-Shot Learners (GPT-3)
Bài báo GPT-3 làm nền cho luận điểm của chương rằng cho xem hai ba ví dụ trong prompt cải thiện câu trả lời mà không cần huấn luyện lại mô hình.
CHÚ THÍCH
  1. 1.
    Anthropic, 'Effective context engineering for AI agents' (anthropic.com/engineering). Bài viết nêu rằng các mô hình ngôn ngữ lớn có một 'attention budget' (ngân sách chú ý) mà chúng rút ra khi phân tích lượng ngữ cảnh lớn, và rằng ngữ cảnh phải được xem như một nguồn lực hữu hạn với lợi ích biên giảm dần.
  2. 2.
    Nelson F. Liu và cộng sự, 'Lost in the Middle: How Language Models Use Long Contexts,' Transactions of the Association for Computational Linguistics (2024). Nghiên cứu thấy hiệu năng thường cao nhất khi thông tin liên quan nằm ở đầu hoặc cuối đầu vào và 'significantly degrades' (suy giảm đáng kể) khi mô hình phải truy cập thông tin nằm ở khúc giữa.
  3. 3.
    Kelly Hong và cộng sự, 'Context Rot: How Increasing Input Tokens Impacts LLM Performance,' Chroma Research (2025) (trychroma.com/research/context-rot). Đánh giá 18 mô hình, gồm cả những mô hình đầu bảng tối tân, báo cáo thấy hiệu năng ngày càng kém tin cậy khi độ dài đầu vào tăng lên, ngay cả trên những tác vụ đơn giản.
  4. 4.
    Tom Brown và cộng sự, 'Language Models are Few-Shot Learners,' NeurIPS 2020. GPT-3 được áp cho các tác vụ mà không cần bất kỳ cập nhật gradient hay tinh chỉnh nào, với các ví dụ few-shot đặc tả hoàn toàn bằng chữ trong prompt, cho thấy một số ít ví dụ ngay trong ngữ cảnh cải thiện hiệu năng mà không cần huấn luyện lại.