Cách Claude Code Quản Lý Hội Thoại Vô Tận Trong Giới Hạn Bộ Nhớ Ngữ Cảnh

07 tháng 4, 2026·10 phút đọc

Claude Code cho phép cuộc hội thoại kéo dài vô hạn, nhưng mô hình AI có giới hạn bộ nhớ ngữ cảnh cố định. Hệ thống áp dụng cơ chế nén đa tầng gồm Microcompact, Full compact và Session memory compact để mặc dù giảm dung lượng dữ liệu, vẫn bảo toàn các thông tin quan trọng và tránh mất mát bối cảnh.

Cách Claude Code Quản Lý Hội Thoại Vô Tận Trong Giới Hạn Bộ Nhớ Ngữ Cảnh

Cách Claude Code Quản Lý Hội Thoại Vô Tận Trong Giới Hạn Bộ Nhớ Ngữ Cảnh

Claude Code hỗ trợ hội thoại không giới hạn lượt tương tác, cho phép người dùng làm việc liên tục hàng giờ: đọc file, chạy kiểm thử, gỡ lỗi, cải tiến... Tuy nhiên, mô hình AI dùng có giới hạn bộ nhớ ngữ cảnh cố định. Khi tổng số tin nhắn cộng dồn vượt quá sức xử lý trong một lần gọi API, hệ thống cần có cơ chế nén lại hội thoại mà không làm mất đi bối cảnh quan trọng. Trong bài viết này, Lehuy.net sẽ giải thích chi tiết cơ chế đó dựa trên mã nguồn.

Vấn đề đặt ra

Phương pháp thô sơ nhất là cắt bớt tin nhắn cũ khi bộ nhớ đầy. Điều này thất bại ngay lập tức vì một hội thoại phức tạp có thể liên quan đến quyết định kỹ thuật từ rất lâu trước đó. Nếu cắt bỏ các đoạn này, mô hình không nhớ được quyết định, có thể hỏi lại hoặc mâu thuẫn với những gì nó trả lời trước kia.

Một cách tốt hơn là tóm tắt lại hội thoại bằng một đoạn ngắn gọn giữ được thông tin thiết yếu. Nhưng việc tóm tắt cũng nảy sinh các thách thức:

  • Cần giữ lại những gì? Đường dẫn file, đoạn code, cài đặt người dùng, lỗi đã fix, công việc chưa xong... tất cả đều rất quan trọng. Tóm tắt đơn giản bằng lệnh “tóm tắt hội thoại” không đủ chi tiết.
  • Khi nào thì bắt đầu tóm tắt? Quá sớm thì lãng phí bộ nhớ ngữ cảnh, quá muộn thì chạm giới hạn cứng của mô hình, gây lỗi gọi API.
  • Liên quan đến bộ nhớ đệm (cache)? API của Anthropic có cơ chế cache tiền tố (prompt prefix). Việc nén sẽ thay thế toàn bộ tin nhắn, khiến cache này bị mất tác dụng, gây tốn kém token.
  • Nếu bản tóm tắt cũng quá dài? Khi hội thoại quá đồ sộ, thậm chí một yêu cầu tóm tắt cũng vượt quá giới hạn, hệ thống phải có phương án dự phòng.

Claude Code giải quyết các vấn đề trên qua hệ thống ba tầng Microcompact, Full compactSession memory compact với mức độ hiệu quả và chi phí tăng dần.

Khi nào cần nén (Compact)?

Ngưỡng nén tự động

Hệ thống kích hoạt nén khi tổng số token hội thoại vượt quá ngưỡng:

effectiveWindow = contextWindow - max(maxOutputTokens, 20_000)
autoCompactThreshold = effectiveWindow - 13_000

Với mô hình có bộ nhớ 200K token, ngưỡng này xấp xỉ 167K token. Dự trữ 20K token cho phần tóm tắt sinh ra, và khoảng đệm 13K để tránh tràn do tăng thêm token giữa các lần kiểm tra.

Ngưỡng có thể điều chỉnh qua biến môi trường cho mục đích thử nghiệm hoặc kích hoạt sớm.

Đếm token chính xác

Hàm đếm token tokenCountWithEstimation thực hiện:

  1. Tìm tin nhắn mô hình trả lời API cuối cùng có trường usage, lấy số token xác thực tại thời điểm đó.
  2. Ước lượng token các tin nhắn mới sau đó dựa trên heuristics (1 token ~4 ký tự văn bản; hình ảnh & tài liệu cố định 2.000 token; tool calls tính theo độ dài JSON).

Chú ý: với các tool call song song cùng nhóm tin nhắn (được định danh bằng cùng ID), hàm đếm sẽ lùi về tin nhắn đầu tiên của nhóm để tránh thiếu sót token.

Tổng token bao gồm token nhập, tạo cache, đọc cache và token đầu ra – để phản ánh đúng mức tiêu thụ bộ nhớ ngữ cảnh.

Cơ chế ngắt mạch

Nếu nén thất bại liên tiếp 3 lần, hệ thống dừng tự động nén để tránh phí phí tổn API lớn không kiểm soát. Trước đây từng ghi nhận có hơn 1.200 phiên bị lỗi hơn 50 lần liên tục, lãng phí khoảng 250.000 lượt gọi API/ngày. Cơ chế này sẽ reset khi một nén thành công diễn ra.

Tránh tự kẹt (recursion)

Hệ thống không kích hoạt nén khi nguồn truy vấn là chính quy trình nén hoặc từ quá trình trích xuất bộ nhớ phiên, nhằm ngăn deadlock do hồi quy.

Tầng 1: Microcompact – Xóa kết quả công cụ cũ

Microcompact là phương án tối giản, không gọi mô hình hay tóm tắt, chỉ xóa bớt kết quả công cụ lỗi thời để giải phóng token.

Xóa dựa trên thời gian

Cache API prompt có thời gian sống khoảng 1 giờ. Khi người dùng ngưng tương tác lâu rồi quay lại, cache hết hạn — tất cả token sẽ phải xử lý lại. Lúc này là thời điểm phù hợp để xóa kết quả tool cũ.

Cơ chế rất đơn giản: thay nội dung các block kết quả của các công cụ như đọc file, shell, grep, tìm kiếm web,... bằng dòng: [Old tool result content cleared]. Giữ lại N kết quả gần nhất (mặc định 5), xóa bớt các kết quả cũ hơn.

Microcompact dựa trên cache

Nếu cache còn còn hiệu lực, việc sửa tin nhắn sẽ làm mất cache. Thay vào đó, hệ thống dùng chức năng cache_edits của API để xóa kết quả công cụ phía server mà không làm thay đổi dữ liệu client.

Công cụ cho phép xóa

  • Đọc file (có thể đọc lại)
  • Kết quả shell (tạm thời)
  • Kết quả grep/glob (có thể chạy lại)
  • Lấy dữ liệu web, tìm kiếm (có thể lấy lại)
  • Kết quả chỉnh sửa/ghi file (có thể loại bỏ)

Các kết quả từ công cụ như hỏi đáp người dùng, chỉnh sửa notebook không được xóa vì có thể không tái tạo được.

Quản lý ngữ cảnh qua API

API cho phép quản lý ngữ cảnh qua các chiến lược xóa token theo loại nội dung (kết quả công cụ, tool use, thinking steps), giúp tự động giải phóng bộ nhớ một cách thông minh.

Tầng 2: Full Compact – Tóm tắt toàn bộ hội thoại

Khi Microcompact không đủ, Claude Code gọi mô hình để tóm tắt toàn bộ lịch sử hội thoại.

Tiền xử lý

  • Loại bỏ hình ảnh, tài liệu thay bằng [image] vì không phù hợp để tóm tắt.
  • Loại bỏ tệp đính kèm liệt kê kỹ năng, sẽ được phục hồi sau.

Prompt tóm tắt

Chi tiết và nghiêm ngặt với 2 phần:

  • Phần phân tích (<analysis>): Mô hình đi qua từng tin nhắn để tóm tắt, lập luận, ghi nhận quyết định, lỗi lẫn sửa lỗi.
  • Phần summary (<summary>): Tóm tắt cuối cùng hợp nhất những thông tin quan trọng.

Mô hình bị cấm gọi tool trong khi tóm tắt.

Nội dung tóm tắt gồm 9 phần cụ thể:

  1. Yêu cầu và mục đích chính của người dùng
  2. Những khái niệm kỹ thuật quan trọng
  3. File và đoạn code được xem xét/chỉnh sửa
  4. Lỗi gặp và cách sửa
  5. Các vấn đề đã giải quyết
  6. Tất cả tin nhắn người dùng (không tính kết quả tool) để giữ nguyên ngữ cảnh và sửa đổi
  7. Công việc còn dang dở
  8. Công việc hiện tại trước khi tóm tắt
  9. Bước tiếp theo đề xuất kèm trích dẫn trực tiếp từ hội thoại

Chia sẻ cache

Lệnh tóm tắt được thực hiện dưới dạng một “agent con” (forked agent) để tận dụng cache tiền tố của hội thoại chính, giảm chi phí token và thời gian tính toán.

Thao tác hậu tóm tắt

  • Gắn dấu biên giới hệ thống chứa meta dữ liệu tóm tắt
  • Phục hồi các tệp đọc gần nhất, kỹ năng sử dụng, todo list, trạng thái agent nền
  • Dọn sạch cache liên quan phiên bản trước tóm tắt
  • Giữ lại toàn bộ tính nhất quán truy vấn và theo dõi thất bại tái nén

Nếu bản tin tóm tắt dài vượt quá giới hạn token, sẽ có vòng lặp cắt bớt đầu hội thoại để thử lại (retry loop).

Tầng 3: Session Memory Compact – Tóm tắt dựa trên ghi chú trích xuất

Đây là cách nén thử nghiệm giảm chi phí nhất, không gọi mô hình.

Quá trình có một subagent chạy nền trích xuất bộ nhớ phiên dưới dạng file markdown cấu trúc bao gồm các phần như: trạng thái hiện tại, yêu cầu, file/code quan trọng, lỗi/sửa lỗi, nhật ký công việc.

Theo các điều kiện trigger đặc biệt, file này được cập nhật thường xuyên.

Khi cần nén, hệ thống sẽ dùng nội dung session memory này làm bản tóm tắt thay thế.

Phương án này nhanh và gần như không tốn token đầu ra, nhưng phụ thuộc chất lượng ghi chú, có thể bỏ sót chi tiết.

Chuỗi khắc phục khi nén thất bại

  • Session memory compact (nhanh, rẻ)
  • Full compact dùng cache prefix
  • Full compact streaming (dùng khi cache fail)
  • Cắt bớt đầu hội thoại sau mỗi lần retry nếu quá dài prompt
  • Báo lỗi người dùng với đề nghị quay lui vài câu tin nhắn

Mô hình chi phí tóm tắt

Giai đoạnToken đầu vàoToken đầu raĐộ trễ
Microcompact (cache)00~0
Microcompact (time-gap)00~0
Session memory compact00~0
Full compact~167Kđến 20K1 lượt gọi mô hình

Tóm tắt giúp tiết kiệm khoảng 147K token so với giữ nguyên lịch sử.

Toàn bộ quá trình vòng đời nén tự động

  1. Người dùng gửi tin nhắn, giao diện gọi hàm xử lý (REPL, query generator).
  2. Microcompact chạy trước, xóa các kết quả tool cũ nếu cần.
  3. Kiểm tra ngưỡng token để quyết định có cần nén.
  4. Nếu có, thử session memory compact trước, nếu thất bại mới gọi full compact.
  5. Tín hiệu nén thành công được gửi đến giao diện, thay thế lịch sử tin nhắn phù hợp.
  6. Tiếp tục vòng lặp hội thoại mới với bộ nhớ ngữ cảnh đã được nén.

Trường hợp lỗi do prompt quá dài, có cơ chế kích hoạt hoạt động “phục hồi nén” (reactive compact).

Kết luận

Claude Code xây dựng một pipeline quản lý bộ nhớ ngữ cảnh hội thoại tinh vi, đáp ứng ba ưu tiên:

  • Đảm bảo đúng đắn: không mất ngữ cảnh quan trọng, không tự ý xóa tin nhắn người dùng.
  • Tối ưu chi phí: hạn chế số lần gọi mô hình và số token dùng.
  • Giảm độ trễ: giải phóng token cũ nhanh, giảm chờ đợi user thấy hiệu ứng.

Hệ thống gồm ba tầng Microcompact, Full compact, Session memory compact với cơ chế fallback, guard circuit-breaker và dọn dẹp tinh tế. Tất cả diễn ra ẩn sau hậu trường, giúp người dùng trải nghiệm mượt mà và liên tục dù hội thoại rất dài.

Đây là một trong những giải pháp tiên tiến nhất hiện nay về quản lý bộ nhớ context cho mô hình AI hội thoại, đặc biệt hữu ích cho các dự án phát triển phần mềm, debug và phân tích đa bước phức tạp.


Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗