MarkTechPost
88

Thủ thuật

Kỹ thuật tối ưu ngữ cảnh cho AI Agent: Giải pháp chống tràn bộ nhớ và mất mục tiêu

(giờ Việt Nam)

Tóm tắt AI

Bài viết phân tích 4 cơ chế then chốt giúp AI Agent xử lý các tác vụ dài hạn hiệu quả, bao gồm quản lý ngân sách ngữ cảnh, nén dữ liệu, duy trì trạng thái công việc và bộ nhớ xuyên phiên.

Bản dịch AI

Context Engineering Inside the Harness: 4 Mechanisms That Beat Context Overflow and Goal Loss on Long-Horizon Tasks

Một agent, ở dạng đơn giản nhất, là một LLM gọi các công cụ trong một vòng lặp. Vòng lặp đó hoạt động tốt với các công việc ngắn. Hãy giao cho nó một nhiệm vụ kéo dài một giờ với 200 lần gọi công cụ, nó sẽ thất bại theo 2 cách có thể dự đoán trước. Hướng dẫn thiết kế AWS Samples cho các agent lập trình đám mây tự hành đã gọi tên trực tiếp vấn đề này: các agent nông (shallow agents) thường bị tràn ngữ cảnh, mất tập trung (mất mục tiêu) và không duy trì được trạng thái trong thời gian dài. Lớp giải quyết vấn đề này không phải là mô hình, mà là bộ khung (harness), thứ mà AWS mô tả là quản lý mọi thứ ngoại trừ chính mô hình đó.

Bài viết này sẽ mở ra lớp đó. Nén dữ liệu (compaction), chiến lược bộ nhớ, quản lý ngân sách ngữ cảnh và trạng thái việc cần làm (todo-state) là những cơ chế biến một vòng lặp nông thành một agent sâu (deep agent). Chúng ta sẽ xem xét cách LangChain Deep Agents, Claude Code, Manus, OpenAI Codex và Amazon Bedrock AgentCore triển khai từng cơ chế này, cùng với các ngưỡng thực tế mà họ áp dụng.

Tại sao cửa sổ ngữ cảnh lớn hơn không giải quyết được vấn đề

Giải pháp hiển nhiên là một cửa sổ ngữ cảnh lớn hơn. Tuy nhiên, bằng chứng cho thấy nó giúp ích ít hơn mong đợi. Báo cáo "Context Rot" của Chroma đã đánh giá 18 LLM, bao gồm GPT-4.1, Claude 4, Gemini 2.5 và Qwen3, và nhận thấy rằng hiệu suất ngày càng trở nên thiếu tin cậy khi độ dài đầu vào tăng lên, ngay cả với các tác vụ truy xuất đơn giản. Hướng dẫn kỹ thuật ngữ cảnh của Anthropic giải thích cơ chế này: cơ chế chú ý (attention) tạo ra n² mối quan hệ cặp cho n token, vì vậy mỗi token được thêm vào sẽ làm cạn kiệt một "ngân sách chú ý" hữu hạn. Ngữ cảnh là một tài nguyên có hiệu suất giảm dần, không phải là một cái thùng chứa vô tận.

Đối với một vòng lặp agent, điều này còn tồi tệ hơn vẻ ngoài của nó. Manus báo cáo rằng một tác vụ điển hình cần khoảng 50 lần gọi công cụ và tỷ lệ token đầu vào/đầu ra xấp xỉ 100:1. Mỗi quan sát đều rơi vào ngữ cảnh và nằm lại ở đó. Chỉ dẫn ban đầu trôi dần về phía giữa cửa sổ, đây chính xác là nơi khả năng ghi nhớ bị suy giảm. Mất mục tiêu không chỉ là lỗi của mô hình. Đó là kết quả tất yếu của một ngữ cảnh không được quản lý trong một tác vụ đủ dài.

Cơ chế 1: Quản lý ngân sách ngữ cảnh và giảm tải (offloading)

Công việc đầu tiên của bộ khung là quyết định những gì không bao giờ được đưa vào cửa sổ ngữ cảnh. Deep Agents áp dụng 2 quy tắc giảm tải với các con số cụ thể. Khi phản hồi của một công cụ vượt quá 20.000 token, nó sẽ được ghi vào hệ thống tệp và thay thế bằng đường dẫn tệp cùng bản xem trước 10 dòng đầu tiên. Khi ngữ cảnh phiên vượt quá 85% cửa sổ của mô hình, các lệnh gọi công cụ ghi và chỉnh sửa cũ (với nội dung tệp đầy đủ đã nằm trên đĩa) sẽ bị cắt bớt thành một con trỏ. Chỉ khi việc giảm tải không còn đủ chỗ, bộ khung mới quay sang sử dụng phương pháp tóm tắt.

Claude Code áp dụng cách quản lý ngân sách tương tự cho những gì được tải trước lời nhắc (prompt) đầu tiên. Bộ nhớ tự động (auto memory) được giới hạn ở 200 dòng đầu tiên hoặc 25KB. Các lược đồ công cụ MCP mặc định được trì hoãn, chỉ liệt kê tên công cụ, và lược đồ đầy đủ sẽ được tải theo yêu cầu thông qua tìm kiếm công cụ. Sau khi nén, bất kỳ tệp nào được đọc lại có dung lượng trên 5.000 token sẽ quay lại dưới dạng tham chiếu đường dẫn thay vì nội dung. Mô phỏng cửa sổ ngữ cảnh trong tài liệu của Claude Code làm cho lợi ích này trở nên cụ thể: một subagent nghiên cứu đọc 6.100 token tệp và trả về kết quả 420 token cho agent cha.

Mô hình subagent đó chính là việc quản lý ngân sách ở cấp độ kiến trúc. Hướng dẫn của Anthropic lưu ý rằng mỗi subagent có thể tiêu tốn hàng chục nghìn token để khám phá, nhưng trả về một bản tóm tắt cô đọng, thường từ 1.000 đến 2.000 token. Hướng dẫn của AWS AgentCore xây dựng chính xác điều này: một điều phối viên tạo ra 3 subagent trình duyệt chạy song song, mỗi cái trong một MicroVM riêng, và một subagent phân tích chỉ nhận các kết quả đã được cấu trúc của chúng. AWS báo cáo thời gian chạy dự kiến từ 4 đến 6 phút và lưu ý rằng xử lý tuần tự sẽ mất thời gian lâu gấp 3 lần.

Cơ chế 2: Nén dữ liệu (Compaction)

Khi giảm tải là không đủ, bộ khung sẽ thực hiện tóm tắt. Nén dữ liệu là việc lấy một cuộc hội thoại đang tiến gần đến giới hạn cửa sổ, tóm tắt nó và khởi tạo lại một ngữ cảnh mới với bản tóm tắt đó. Đây cũng là nơi tình trạng mất mục tiêu thường xảy ra nhất, vì một bản tóm tắt bị mất dữ liệu có thể loại bỏ mất ràng buộc quan trọng nhất.

Các cách triển khai khác nhau ở những gì chúng cam kết giữ lại. Lời nhắc nén của Claude Code bảo tồn các quyết định kiến trúc, các lỗi chưa được giải quyết và các chi tiết triển khai trong khi loại bỏ các đầu ra công cụ dư thừa. Ngay sau khi nén, nó đọc lại tối đa 5 tệp được sửa đổi gần đây nhất, tải lại các quy tắc khớp với các tệp đó và chèn lại các nội dung kỹ năng đã được gọi, giới hạn ở 5.000 token mỗi kỹ năng và tổng cộng 25.000 token. Tài liệu nêu rõ rằng các hướng dẫn chi tiết từ đầu cuộc hội thoại có thể bị mất, đó là lý do tại sao các quy tắc bền vững nên nằm trong tệp CLAUDE.md ở thư mục gốc của dự án, tệp này sẽ được chèn lại từ đĩa. Người dùng có thể điều hướng quá trình này bằng lệnh /compact focus vào bản sửa lỗi xác thực hoặc di chuyển điểm kích hoạt bằng /autocompact.

Deep Agents biến việc bảo tồn mục tiêu thành một tính năng cấu trúc. Bản tóm tắt của nó là một tài liệu có cấu trúc với các trường dành riêng cho ý định phiên, các thành phần (artifacts) đã tạo và các bước tiếp theo. Nhóm LangChain đã thêm các trường đó sau khi các thí nghiệm tóm tắt cưỡng bức cho thấy sự thay đổi này cải thiện hiệu suất. Toàn bộ bản ghi gốc cũng được ghi vào hệ thống tệp, vì vậy một thông tin đã bị tóm tắt mất vẫn có thể được khôi phục bằng read_file sau đó.

Nén dữ liệu cũng đã chuyển sang lớp API. Responses API của OpenAI cung cấp tính năng nén phía máy chủ thông qua context_management với tham số compact_threshold, cộng với một endpoint độc lập /responses/compact trả về một cửa sổ ngữ cảnh đã nén chứa một mục nén được mã hóa; OpenAI hướng dẫn các nhà phát triển chuyển cửa sổ đã trả về đó vào lệnh gọi tiếp theo mà không thay đổi gì. OpenAI cho biết Codex dựa vào cơ chế này để duy trì các tác vụ lập trình dài hạn. Claude Developer Platform cung cấp tính năng chỉnh sửa quản lý ngữ cảnh compact_20260112 với các hướng dẫn tùy chỉnh và tùy chọn pause_after_compaction để chèn nội dung trước khi mô hình tiếp tục. Khi bạn viết các hướng dẫn tùy chỉnh ở đó, chúng sẽ thay thế hoàn toàn lời nhắc mặc định, vì vậy lời nhắc nén là một thành phần kỹ thuật thực sự, không phải là một cài đặt đơn thuần.

Cơ chế 3: Trạng thái việc cần làm (Todo-state) và đọc lại (recitation)

Nén dữ liệu bảo vệ mục tiêu tại thời điểm tóm tắt. Trạng thái việc cần làm bảo vệ nó trong mọi lượt ở giữa. Manus mô tả thủ thuật này một cách đơn giản: agent của nó tạo ra một tệp todo.md và viết lại nó từng bước, đánh dấu các mục đã hoàn thành. Việc viết lại danh sách này sẽ đọc lại các mục tiêu vào cuối ngữ cảnh, đẩy kế hoạch tổng thể vào phạm vi chú ý gần đây của mô hình và giảm thiểu sự trôi dạt "lạc lối ở giữa". Không cần thay đổi kiến trúc. Đó là ngôn ngữ tự nhiên được sử dụng để định hướng sự chú ý của chính mô hình.

Bằng chứng về trạng thái việc cần làm không chỉ có một chiều. Deep Agents đã cung cấp công cụ write_todos theo mặc định cho đến phiên bản v0.7 vào tháng 7 năm 2026, khi LangChain chuyển TodoListMiddleware sang dạng tùy chọn (opt-in) sau khi các đánh giá trên 3 danh mục tác vụ cho thấy phần thưởng tốt hơn một chút và chi phí thấp hơn khi tắt tính năng này. LangChain vẫn khuyến nghị bật lại nó cho các tác vụ dài nhiều bước, các mô hình kém năng lực hơn và các giao diện người dùng hiển thị tiến trình. Claude Code giữ một danh sách việc cần làm và chèn lại kế hoạch đã viết ở chế độ plan từ đĩa sau khi nén. Hướng dẫn của Anthropic gọi mô hình chung này là ghi chú có cấu trúc: agent viết một tệp NOTES.md hoặc TODO bên ngoài cửa sổ và tải lại nó. Ví dụ Claude Plays Pokémon của họ đã duy trì các bảng kiểm kê qua hàng nghìn bước trò chơi, sau đó đọc lại ghi chú của chính nó sau mỗi lần đặt lại ngữ cảnh và tiếp tục các chuỗi tác vụ kéo dài nhiều giờ.

Mô hình đằng sau tất cả những điều này là mục tiêu tồn tại như một thành phần có thể thay đổi, không chỉ là một tin nhắn trong lịch sử. Các tin nhắn sẽ cũ đi và bị tóm tắt. Một tệp được viết lại sau mỗi vài lượt luôn là dữ liệu gần đây, ngắn gọn và tồn tại sau bất kỳ lần đặt lại nào. Việc liệu điều đó có xứng đáng với chi phí token mỗi lượt hay không phụ thuộc vào mô hình và độ dài tác vụ, đó chính xác là những gì các đánh giá của Deep Agents đã đo lường.

Cơ chế 4: Chiến lược bộ nhớ giữa các phiên

Phần cuối cùng là những gì tồn tại sau khi tác vụ kết thúc. Claude Code chèn lại tệp CLAUDE.md ở thư mục gốc và bộ nhớ tự động từ đĩa sau mỗi lần nén. AgentCore Memory lưu trữ các sự kiện và chạy các chiến lược trích xuất được cấu hình trong nền, vì vậy một điều phối viên có thể gọi công cụ truy xuất (recall) trong lần chạy tiếp theo thay vì phải nghiên cứu lại. AWS cảnh báo rằng nếu không có ít nhất 1 chiến lược trích xuất được cấu hình, các sự kiện thô sẽ được lưu trữ nhưng không có gì được trích xuất để truy xuất. Công cụ bộ nhớ dựa trên tệp của Anthropic phục vụ mục đích tương tự trên nền tảng Claude.

Hạn chế là ngữ cảnh bền vững không miễn phí. Nghiên cứu của ETH Zurich mà chúng tôi đã đề cập vào tháng 2 cho thấy các tệp ngữ cảnh kho lưu trữ như AGENTS.md thường không cải thiện thành công tác vụ mà lại làm tăng chi phí suy luận: các tệp do LLM tạo ra làm tăng chi phí thêm 20% và 23% trên 2 tiêu chuẩn đánh giá, và các tệp do nhà phát triển cam kết tăng tới 19%. Bộ nhớ tải lại mỗi phiên là một loại thuế đánh vào ngân sách chú ý. Tài liệu của Claude Code đưa ra lời khuyên tương tự: giữ tệp CLAUDE.md dưới 200 dòng và chuyển tài liệu tham khảo vào các kỹ năng hoặc quy tắc theo phạm vi đường dẫn chỉ tải khi cần.

Giải thích tương tác: xem cửa sổ 200K token được lấp đầy

Trình mô phỏng bên dưới chạy một tác vụ di chuyển 60 bước qua cửa sổ 200K token. Bật/tắt 4 cơ chế, đặt ngưỡng kích hoạt nén và nhấn Run. Khi tắt mọi thứ, cửa sổ sẽ bị tràn trước khi tác vụ hoàn thành một nửa. Với việc bật giảm tải, nén, đọc lại việc cần làm và ủy quyền subagent, cùng một tác vụ đó sẽ hoàn thành với mục tiêu vẫn nằm trong sự chú ý gần đây. Số lượng token chỉ mang tính minh họa; các ngưỡng khớp với mặc định của Deep Agents.

Kiểm tra xem bộ khung có thực sự giữ được mục tiêu hay không

Quản lý ngữ cảnh chỉ hữu ích nếu agent vẫn có thể hoàn thành tác vụ và khôi phục các chi tiết mà nó không còn nhìn thấy. LangChain duy trì các đánh giá mục tiêu cho chính xác điều này: các bài kiểm tra kích hoạt tóm tắt giữa tác vụ và kiểm tra xem agent có tiếp tục hướng tới mục tiêu của mình hay không, và các trường hợp "kim đáy bể" nơi một thông tin bị tóm tắt mất và phải được khôi phục thông qua tìm kiếm hệ thống tệp. Để tạo đủ sự kiện nhằm so sánh các biến thể lời nhắc, nhóm kích hoạt tóm tắt ở mức 10 đến 20% cửa sổ thay vì mức mặc định 85%, và đã sử dụng ngưỡng 25% với Claude Sonnet 4.5 trên terminal-bench-2 để nghiên cứu hiệu ứng.

Lỗi cần theo dõi, theo quan điểm của LangChain, là sự trôi dạt mục tiêu: một agent yêu cầu làm rõ ngay sau khi tóm tắt, hoặc tuyên bố sai rằng tác vụ đã hoàn thành. AgentCore Evaluations cung cấp một trình đánh giá tỷ lệ thành công mục tiêu có thể chấm điểm các dấu vết tương tự. Nếu bạn chạy một bộ khung mà chưa ép buộc nén trong một bài kiểm tra, bạn vẫn chưa biết lời nhắc tóm tắt của mình đã loại bỏ những gì.

Những điểm chính cần ghi nhớ

Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ MarkTechPost. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.