Context Engineering: Kỹ thuật ngữ cảnh cho AI Agent 2026
Posted on: 6/8/2026 1:09:23 AM
Table of contents
- Từ Prompt Engineering đến Context Engineering
- Context là tài nguyên hữu hạn: hiện tượng "Context Rot"
- Bốn kỹ thuật cốt lõi để quản lý ngữ cảnh
- System prompt ở "đúng độ cao"
- Thiết kế công cụ: ít chồng lấn, đậm tín hiệu
- Just-in-time vs Pre-retrieval
- Kỹ thuật cho tác vụ dài hơi (long-horizon)
- Hành trình tiến hóa
- Checklist thực chiến
- Kết luận
Năm 2024 chúng ta nói về prompt engineering — gọt giũa từng câu chữ trong lời nhắc. Năm 2026, khi AI Agent chạy hàng trăm bước, gọi hàng chục công cụ và sống qua những phiên làm việc dài hàng giờ, câu hỏi không còn là "viết prompt thế nào cho hay" mà là "đưa thông tin gì, vào lúc nào, và bao nhiêu là vừa đủ". Đó chính là Context Engineering — kỹ năng định hình của kỷ nguyên agent.
Bài viết này đi sâu vào lý do vì sao "nhồi" thêm context không làm agent thông minh hơn mà thường khiến nó kém đi, và bốn nhóm kỹ thuật để giữ cho cửa sổ ngữ cảnh luôn gọn gàng, đậm tín hiệu.
Từ Prompt Engineering đến Context Engineering
Prompt engineering là việc rời rạc: bạn soạn một lời nhắc tốt rồi dùng lại. Context engineering thì lặp đi lặp lại — ở mỗi lượt suy luận, agent phải quyết định lại xem cửa sổ ngữ cảnh nên chứa những gì. Như Anthropic định nghĩa, đây là "tập hợp các chiến lược để tuyển chọn và duy trì bộ token tối ưu trong suốt quá trình suy luận của LLM".
Khác biệt cốt lõi: prompt engineering chỉ bận tâm cách diễn đạt chỉ dẫn, còn context engineering làm chủ toàn bộ vòng đời token — từ token đầu tiên của system prompt đến bản tóm tắt cuối cùng sau khi nén. Với agent chạy dài hơi, nó thay thế chứ không bổ sung cho prompt engineering.
Nguyên lý xuyên suốt
Toàn bộ context engineering quy về một câu: tìm tập token nhỏ nhất, đậm tín hiệu nhất, đủ để tối đa hóa khả năng đạt kết quả mong muốn. Mọi token thêm vào đều phải "trả phí" — và cái phí đó không hề rẻ.
Context là tài nguyên hữu hạn: hiện tượng "Context Rot"
Trực giác sai lầm phổ biến nhất: cửa sổ ngữ cảnh 200K hay 1M token nghĩa là cứ đổ đầy thông tin vào là tốt. Thực tế ngược lại. Nghiên cứu của Chroma năm 2025 trên 18 mô hình tiên tiến cho thấy tất cả đều suy giảm độ chính xác khi đầu vào dài ra — hiện tượng được gọi là context rot (ngữ cảnh "mục ruỗng").
Vì sao? Kiến trúc transformer buộc mỗi token phải "chú ý" tới mọi token khác, tạo ra n² quan hệ cặp. Khi context phình to, "ngân sách chú ý" (attention budget) bị pha loãng. Cộng thêm việc dữ liệu huấn luyện thiên về văn bản ngắn, mô hình có ít tham số chuyên cho các phụ thuộc trải dài toàn cục. Kết quả là ba lỗi kinh điển:
- Lost in the middle — thông tin nằm giữa khối context dài dễ bị bỏ quên hơn so với ở đầu và cuối.
- Attention dilution — càng nhiều token, sự chú ý dành cho mỗi token càng loãng.
- Distractor interference — token gây nhiễu (gần đúng nhưng không liên quan) kéo mô hình đi sai hướng.
Lập ngân sách theo phần trăm, không theo token tuyệt đối
Đừng đợi đến khi gần chạm giới hạn 200K mới lo. Hãy quản lý theo tỷ lệ lấp đầy: qua mốc ~50% mô hình bắt đầu thiên vị token gần nhất, qua ~75% chất lượng rớt mạnh. Nén chủ động trước ngưỡng luôn rẻ hơn nhiều so với cứu vãn một thất bại do ngữ cảnh gây ra.
Bốn kỹ thuật cốt lõi để quản lý ngữ cảnh
Dù khung tư duy mỗi nơi mỗi khác, các kỹ thuật context engineering thực chiến đều quy về bốn nhóm. Hãy xem chúng như bốn chiếc van để điều tiết dòng token chảy vào cửa sổ ngữ cảnh.
flowchart TB
CTX["Cửa sổ ngữ cảnh
(tài nguyên hữu hạn)"]
subgraph TECH["4 kỹ thuật điều tiết"]
OFF["Offload — Giảm tải
tóm tắt kết quả công cụ,
giữ tham chiếu tới dữ liệu gốc"]
RED["Reduce — Nén gọn
compaction & summarization
khi gần chạm ngưỡng"]
RET["Retrieve — Truy hồi
nạp đúng thứ cần, đúng lúc
(just-in-time)"]
ISO["Isolate — Cô lập
sub-agent với context riêng,
trả về bản tóm tắt"]
end
OFF --> CTX
RED --> CTX
RET --> CTX
ISO --> CTX
CTX --> OUT["Bộ token nhỏ nhất,
đậm tín hiệu nhất"]
style CTX fill:#e94560,stroke:#fff,color:#fff
style OUT fill:#2c3e50,stroke:#fff,color:#fff
style OFF fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style RED fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style RET fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style ISO fill:#f8f9fa,stroke:#e94560,color:#2c3e50
1. Offload — Giảm tải kết quả công cụ
Một lệnh gọi công cụ có thể trả về 50.000 token JSON, nhưng agent thường chỉ cần 3 dòng. Kỹ thuật offload: tóm tắt phản hồi công cụ trước khi đưa vào context, đồng thời lưu dữ liệu đầy đủ ra ngoài (file, object store) và giữ lại một tham chiếu nhẹ. Thực nghiệm cho thấy hóa đầu ra công cụ có thể cắt tới 99% số token trước khi nó chạm vào cửa sổ ngữ cảnh.
2. Reduce — Nén gọn hội thoại
Khi lịch sử hội thoại phình to, compaction sẽ tóm tắt nó và khởi tạo lại cửa sổ ngữ cảnh mới từ bản tóm tắt. Đây là kỹ thuật long-horizon quan trọng nhất, sẽ bàn kỹ ở phần sau.
3. Retrieve — Truy hồi đúng lúc
Thay vì nhồi sẵn mọi tài liệu vào context, agent giữ các "định danh nhẹ" (đường dẫn file, truy vấn đã lưu, link) rồi nạp dữ liệu theo nhu cầu tại thời điểm chạy. Đây là bước dịch chuyển từ RAG kiểu pre-retrieval sang just-in-time.
4. Isolate — Cô lập bằng sub-agent
Giao tác vụ con cho các sub-agent, mỗi cái có cửa sổ ngữ cảnh riêng, system prompt riêng và quyền dùng công cụ bị giới hạn. Chúng làm việc độc lập, không "làm bẩn" ngữ cảnh chính của agent điều phối.
System prompt ở "đúng độ cao"
System prompt tốt nằm ở vùng Goldilocks giữa hai thái cực:
| Thái cực | Biểu hiện | Hậu quả |
|---|---|---|
| Quá cụ thể | Hardcode logic phức tạp, liệt kê mọi tình huống if-else | Giòn, khó bảo trì, dễ vỡ khi gặp ca lạ |
| Quá mơ hồ | Chỉ dẫn chung chung, giả định agent đã "ngầm hiểu" | Hành vi thiếu định hướng, kết quả chệch choạc |
| Đúng độ cao | Đủ cụ thể để dẫn dắt, đủ linh hoạt để mô hình tự suy luận heuristic mạnh | Ổn định và dễ tiến hóa theo lỗi thực tế |
Thực hành tốt: chia prompt thành các khối rõ ràng (bối cảnh, chỉ dẫn, hướng dẫn dùng công cụ, mô tả đầu ra) bằng thẻ XML hoặc tiêu đề Markdown; bắt đầu với prompt tối giản trên mô hình mạnh, rồi chỉ bổ sung chỉ dẫn dựa trên phân tích các lỗi thực tế thay vì cố phủ mọi trường hợp ngay từ đầu.
Thiết kế công cụ: ít chồng lấn, đậm tín hiệu
Phép thử của kỹ sư
"Nếu một kỹ sư con người không thể nói chắc chắn nên dùng công cụ nào trong một tình huống, thì đừng mong AI Agent làm tốt hơn." Bộ công cụ phình to và chồng chéo chức năng là một trong những nguyên nhân thất bại bị xem nhẹ nhất.
Công cụ tốt cần tự chứa, chống lỗi, và cực kỳ rõ ràng về mục đích sử dụng. Mỗi công cụ nên trả về thông tin súc tích và có ít chồng lấn chức năng với các công cụ khác — vừa tiết kiệm token, vừa giúp agent chọn đúng. Với ví dụ minh họa, đừng liệt kê đủ mọi ca biên; hãy tuyển một bộ ví dụ đa dạng, kinh điển phản ánh đúng hành vi kỳ vọng — "ví dụ là bức tranh đáng giá ngàn lời".
Just-in-time vs Pre-retrieval
Trào lưu đang dịch từ việc nhúng và truy hồi toàn bộ dữ liệu trước khi suy luận, sang chiến lược nạp đúng lúc. Cách tiếp cận này phản chiếu cách con người làm việc: ta không thuộc lòng mọi thứ, mà dùng hệ thống tổ chức bên ngoài (thư mục, sổ tay, dấu trang) để lấy ra khi cần.
| Tiêu chí | Pre-retrieval (RAG cổ điển) | Just-in-time |
|---|---|---|
| Thời điểm nạp | Trước suy luận, một lần | Tại runtime, theo nhu cầu |
| Thứ giữ trong context | Cả khối dữ liệu đã embedding | Định danh nhẹ: path, query, link |
| Tín hiệu metadata | Bị làm phẳng khi chunk | Giữ nguyên: tên file, timestamp, cấu trúc thư mục |
| Khám phá lũy tiến | Khó | Tự nhiên (progressive disclosure) |
| Nhược điểm | Dễ nhồi token thừa, mất tín hiệu | Chậm hơn runtime, đòi thiết kế công cụ kỹ lưỡng |
Trong thực tế, nhiều hệ thống dùng kết hợp: pre-retrieval cho phần kiến thức ổn định, just-in-time cho dữ liệu động và lớn.
Kỹ thuật cho tác vụ dài hơi (long-horizon)
Compaction — Nén để khởi tạo lại
Khi hội thoại sắp chạm giới hạn, compaction tóm tắt nội dung rồi bắt đầu một cửa sổ ngữ cảnh mới chỉ với bản tóm tắt đó. Mấu chốt là cân bằng: nén quá tay sẽ đánh rơi những chi tiết tưởng nhỏ nhưng về sau mới lộ ra là tối quan trọng. Lời khuyên: ưu tiên khả năng nhớ lại (recall) trước, rồi mới tinh chỉnh độ chính xác; và hãy dùng trigger theo ngưỡng thay vì cắt cụt phản xạ khi tràn.
flowchart LR
A["Hội thoại dài
~75% cửa sổ"] --> B{"Chạm
ngưỡng?"}
B -- "Chưa" --> A
B -- "Rồi" --> C["Tóm tắt
(ưu tiên recall)"]
C --> D["Khởi tạo lại
cửa sổ mới + tóm tắt"]
D --> E["Agent tiếp tục
với context gọn"]
E --> A
style A fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style B fill:#ff9800,stroke:#fff,color:#fff
style C fill:#e94560,stroke:#fff,color:#fff
style D fill:#16213e,stroke:#fff,color:#fff
style E fill:#2c3e50,stroke:#fff,color:#fff
Ghi chú có cấu trúc — bộ nhớ ngoài context
Agent có thể tự ghi chú ra bộ nhớ bên ngoài cửa sổ ngữ cảnh, rồi nạp lại khi cần. Một file NOTES.md đơn giản đủ để agent theo dõi tiến độ, ghi lại các phụ thuộc và quyết định quan trọng xuyên suốt một tác vụ kéo dài hàng nghìn bước — thứ mà nếu để trong context sẽ bị compaction cuốn trôi. Đây là cách tạo "bộ nhớ bền" với chi phí cực thấp.
Kiến trúc sub-agent — chia để trị ngữ cảnh
Thay vì một agent ôm toàn bộ trạng thái dự án, một agent điều phối giữ kế hoạch tổng, còn các sub-agent chuyên biệt xử lý từng tác vụ với cửa sổ ngữ cảnh sạch. Mỗi sub-agent có thể khám phá rất sâu (đọc hàng chục file, chạy nhiều truy vấn) nhưng chỉ trả về một bản tóm tắt cô đọng, thường chỉ 1.000–2.000 token. Nhờ đó ngữ cảnh của agent chính luôn gọn và tách bạch mối quan tâm rõ ràng.
flowchart TB
ORC["Agent điều phối
giữ kế hoạch tổng"]
ORC --> S1["Sub-agent A
context riêng"]
ORC --> S2["Sub-agent B
context riêng"]
ORC --> S3["Sub-agent C
context riêng"]
S1 -- "tóm tắt 1-2K token" --> ORC
S2 -- "tóm tắt 1-2K token" --> ORC
S3 -- "tóm tắt 1-2K token" --> ORC
ORC --> RES["Tổng hợp kết quả
context vẫn gọn"]
style ORC fill:#e94560,stroke:#fff,color:#fff
style RES fill:#2c3e50,stroke:#fff,color:#fff
style S1 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style S2 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style S3 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
Hành trình tiến hóa
Checklist thực chiến
Việc nên làm
- Theo dõi số token theo thời gian thực — không đo thì không phải đang làm context engineering.
- Có file onboarding
AGENTS.md/CLAUDE.mdđể định hình hành vi nền. - Sandbox hóa đầu ra công cụ trước khi nó chạm context.
- Nén theo trigger ngưỡng, ưu tiên khả năng đảo ngược hơn là nén tối đa.
- Đẩy tác vụ nặng context cho sub-agent; chỉ kéo về bản tóm tắt.
Việc nên tránh
- Nhồi mọi tài liệu "cho chắc" — đó là cách nhanh nhất gây distractor interference.
- Đợi tràn context rồi mới cắt cụt phản xạ (reactive truncation).
- Bộ công cụ chồng chéo, mô tả mơ hồ.
- Compaction quá tay làm rơi mất chi tiết quan trọng tiềm ẩn.
Kết luận
Context engineering không phải là chiêu trò nhỏ mà là môn học nền của kỷ nguyên agent. Khi mô hình ngày càng mạnh, lợi thế cạnh tranh không nằm ở việc có cửa sổ ngữ cảnh to hơn, mà ở việc biết đưa đúng thông tin, đúng lúc, đúng liều lượng. Hãy coi mỗi token như một khoản chi từ "ngân sách chú ý" hữu hạn — và tiêu nó một cách khôn ngoan. Câu thần chú để ghi nhớ vẫn là: tìm tập token nhỏ nhất, đậm tín hiệu nhất, đủ để agent hoàn thành việc.
Nguồn tham khảo
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.