AI-native development⏱ 12 phút đọc · 25 thg 9, 2026

Context engineering là gì: quản lý ngữ cảnh để AI agent code đúng

Prompt hay mà AI vẫn code sai sau vài chục lượt chat? Thủ phạm thường là context. Bài này giải thích context engineering là gì, khác prompt engineering ra sao, vì sao context 1M token vẫn cần quản lý, và cách áp dụng cụ thể trong Claude Code, Cursor, Copilot, Codex.

HOLETEX · POST
CONTEXT
engineering

Bạn mở Claude Code hay Cursor, giao một task, mười phút đầu mọi thứ trơn tru. Hai tiếng sau, cũng phiên chat đó, agent bắt đầu quên quy ước đã thống nhất, sửa lại chỗ vừa sửa xong, hoặc tự tin gọi một hàm không tồn tại. Model không kém đi. Thứ thay đổi là context: lượng thông tin mà model đang phải "ôm" trong đầu.

Prompt tốt là điều kiện cần, nhưng với AI agent chạy nhiều bước, nó không còn đủ. Kỹ năng dev cần thêm ở đây gọi là context engineering. Bài này giải thích nó là gì, vì sao ngay cả model context 1M token như Claude Opus 5.5 hay GPT-6 Sol vẫn cần quản lý ngữ cảnh, và cách áp dụng cụ thể trong công cụ bạn đang dùng.

Nếu bạn chưa nắm cách viết prompt cho code, nên đọc trước bài Prompt cho lập trình, vì context engineering xây tiếp trên nền đó.

Context engineering là gì

Thuật ngữ này phổ biến từ giữa năm 2025. Tobi Lütke (CEO Shopify) nói ông thích từ "context engineering" hơn "prompt engineering", và mô tả nó là nghệ thuật cung cấp đủ ngữ cảnh để task "có thể giải được" với LLM. Vài ngày sau, Andrej Karpathy đồng tình và gọi đó là việc lấp đầy context window với đúng thông tin cho bước tiếp theo: mô tả task, ví dụ, dữ liệu truy xuất (RAG), tool, trạng thái và lịch sử.

Anthropic đưa ra định nghĩa thực dụng hơn trong bài "Effective context engineering for AI agents": đó là các chiến lược để chọn lọc và duy trì tập token tối ưu mà model nhìn thấy trong lúc làm việc. Nguyên tắc dẫn đường của họ gói trong một câu: tìm tập token nhỏ nhất nhưng giàu tín hiệu nhất để có kết quả mong muốn.

Nói đơn giản: prompt là câu bạn gõ, còn context là toàn bộ những gì model đọc được trước khi trả lời. Với một coding agent, context gồm:

  • System prompt và file quy tắc (CLAUDE.md, AGENTS.md, Cursor rules...)
  • Định nghĩa các tool, kể cả tool từ MCP server
  • Nội dung file agent đã đọc, output lệnh terminal, kết quả search
  • Toàn bộ lịch sử hội thoại, kể cả những lần sửa sai

Context engineering là việc quyết định cái gì được vào, cái gì phải ra, và cái gì nên để bên ngoài chờ lúc cần mới lấy.

Khác gì prompt engineering

Prompt engineeringContext engineering
Trọng tâmViết một yêu cầu rõ ràngQuản toàn bộ thông tin model nhìn thấy
Phạm viMột lượt hỏi đápCả phiên làm việc nhiều bước
Đối tượngCâu chữ trong promptFile quy tắc, tool, lịch sử, dữ liệu ngoài
Câu hỏi chính"Nói sao cho AI hiểu?""AI cần biết gì, lúc nào, và bỏ gì đi?"

Hai thứ không loại trừ nhau. Prompt engineering là một phần của context engineering. Simon Willison nhận xét: "prompt engineering" dần bị hiểu thành "gõ gì đó vào chatbot", còn cách hiểu tự nhiên của "context engineering" gần với ý nghĩa thật hơn.

Vì sao context 1M token vẫn cần quản lý

Năm 2026, context 1M token đã thành chuẩn ở các model lớn: Claude Opus 5.5, Sonnet 5, GPT-6 Astra, Sol, Luna đều có context window khoảng 1M token (trên API; trong từng công cụ có thể thấp hơn). Nghe như cứ nhét hết vào là xong. Thực tế không đơn giản vậy, vì ba lý do.

Context rot: càng dài càng kém

Nhóm nghiên cứu của Chroma thử 18 model (Claude, GPT, Gemini, Qwen) và thấy hiệu năng giảm dần và không đồng đều khi input dài ra, kể cả với task đơn giản. Thông tin gây nhiễu làm model trả lời sai nhiều hơn. Hiện tượng này được gọi là context rot. Chính docs của Anthropic cũng ghi rõ: nhiều context hơn không tự động tốt hơn, độ chính xác giảm khi số token tăng.

Anthropic giải thích nguyên nhân bằng khái niệm attention budget. Trong kiến trúc transformer, mỗi token "để ý" tới mọi token khác, tạo ra n² quan hệ. Mỗi token thêm vào là tiêu bớt một phần ngân sách chú ý có hạn. Context càng đầy, những chỉ dẫn quan trọng càng dễ bị chìm.

Docs best practices của Claude Code tóm lại thành một ràng buộc: context window đầy rất nhanh, và hiệu năng giảm khi nó đầy.

Chi phí và độ trễ

Mỗi request gửi lại toàn bộ lịch sử phiên. Context càng dài thì càng tốn token và phản hồi càng chậm. Anthropic công bố: trong một bài đánh giá web search 100 lượt, context editing (tự dọn tool output cũ) giảm 84% token tiêu thụ. Ở một bộ đánh giá agentic search khác, riêng context editing đã tăng hiệu năng 29%. Ít context hơn nhưng đúng context thì agent làm tốt hơn.

Thông tin sai sẽ bám theo

Một lần AI "bịa" ra tên hàm mà bạn không chặn lại, nó nằm trong context và ảnh hưởng mọi lượt sau. Drew Breunig gọi đây là context poisoning, bên cạnh context distraction (context quá dài khiến model bám vào lịch sử hội thoại thay vì kiến thức đã học), context confusion (thông tin thừa lái câu trả lời) và context clash (các phần context mâu thuẫn nhau).

4 chiến lược: write, select, compress, isolate

Một cách phân loại phổ biến đến từ LangChain. Mỗi chiến lược đều có công cụ tương ứng trong các coding agent hiện nay.

1. Write: ghi ra ngoài context. Thay vì bắt model nhớ mọi thứ trong hội thoại, cho nó ghi chú ra file: kế hoạch, tiến độ, quyết định kiến trúc. Anthropic gọi đây là structured note-taking. Với task dài, họ khuyên agent duy trì một file tiến độ và làm từng tính năng một, mỗi phiên mới bắt đầu bằng việc đọc file tiến độ và git log.

2. Select: chỉ lấy thứ cần. Đừng nạp trước cả codebase. Giữ các "con trỏ" nhẹ (đường dẫn file, tên hàm) và để agent dùng tool như grep, glob để lấy nội dung đúng lúc cần. Anthropic gọi là just-in-time retrieval. Claude Code chạy theo kiểu lai: CLAUDE.md nạp từ đầu, còn file code thì tìm khi cần.

3. Compress: nén khi gần đầy. Tóm tắt lịch sử khi context sắp chạm ngưỡng, giữ lại quyết định kiến trúc và bug chưa xử lý, bỏ output tool dư thừa. Đây là việc lệnh /compact làm.

4. Isolate: tách ra context riêng. Giao việc điều tra cho một subagent có context riêng, nó đọc bao nhiêu file tùy ý rồi chỉ trả về bản tóm tắt ngắn. Trong mô phỏng ở trang Context window của docs Claude Code, subagent đọc khoảng 6.100 token file nhưng chỉ trả về 420 token cho phiên chính.

Áp dụng thực tế trong Claude Code, Cursor, Copilot, Codex

File quy tắc: ngắn và chính xác

Mọi công cụ lớn đều có một file quy tắc nạp tự động vào context. Đây là chỗ đặt những thứ AI không tự đoán được: lệnh build, quy ước code khác mặc định, các "bẫy" riêng của dự án.

Công cụFileKhuyến nghị độ dài
Claude CodeCLAUDE.md (dùng AGENTS.md khi không có CLAUDE.md, từ v2.1.277)Dưới 200 dòng mỗi file
Cursor.cursor/rules/*.mdc, hỗ trợ AGENTS.mdDưới 500 dòng mỗi rule
GitHub Copilot.github/copilot-instructions.md, đọc cả AGENTS.mdKhông quá 2 trang
OpenAI CodexAGENTS.md (tổng các file mặc định tối đa 32 KiB, phần thừa bị cắt)Ngắn và chính xác

AGENTS.md giờ đã thành định dạng mở chung, được hơn 60.000 dự án open source dùng và đang do Agentic AI Foundation (thuộc Linux Foundation) quản lý. Nếu team bạn dùng nhiều công cụ, viết một AGENTS.md là cách gọn nhất để mọi agent cùng đọc một bộ quy tắc.

Docs Claude Code đưa ra một câu hỏi để lọc từng dòng: "Xóa dòng này đi thì Claude có mắc lỗi không?" Nếu không, xóa. Một file quy tắc gọn có thể trông như sau:

text
# Project notes

## Commands
- Dev: pnpm dev (port 3000)
- Test một file: pnpm vitest run path/to/file.test.ts
- Trước khi commit: pnpm lint && pnpm tsc --noEmit

## Conventions
- Stack: Next.js App Router + TypeScript strict; form dùng react-hook-form + zod
- Gọi API qua src/lib/api.ts, không fetch trực tiếp trong component
- Tiền tệ lưu dạng số nguyên (VND), không dùng float

## Gotchas
- Không sửa file trong src/generated/ (sinh tự động từ schema)

Không cần giải thích React là gì, không cần dán cả style guide. Những gì đọc code là thấy được thì AI tự thấy.

Khi quy tắc chỉ áp dụng cho một vùng code, tách ra thay vì nhồi vào file chính. Claude Code có thư mục .claude/rules/ với frontmatter paths để rule chỉ nạp khi agent làm việc với file khớp. Cursor có chế độ "Apply to Specific Files" theo glob. Copilot có .github/instructions/*.instructions.md với applyTo.

Dọn context: /clear và /compact

/compact có ở Claude Code, Codex và Copilot (CLI lẫn VS Code). /clear có ở Claude Code, Codex CLI và Copilot CLI; trong Cursor hay chat của IDE, mở chat mới là tương đương.

  • /clear: xóa sạch context. Dùng khi chuyển sang task không liên quan. Không tốn thêm request, thường là cách dọn context hiệu quả nhất.
  • /compact: thay lịch sử bằng bản tóm tắt. Dùng khi đang giữa một task dài và muốn giữ mạch. Có thể kèm chỉ dẫn, ví dụ /compact Tập trung vào các thay đổi ở API. Lưu ý bản thân lệnh này cũng tốn một request lớn vì phải đọc hết hội thoại.

Trong Claude Code, lệnh /context cho bạn xem context đang bị chiếm bởi cái gì. Copilot CLI tự nén nền khi context đạt khoảng 80% và tạm dừng ở khoảng 95% để nén xong.

Một quy tắc thực chiến từ docs Claude Code: nếu đã sửa AI hơn hai lần cho cùng một lỗi, context đã đầy những lần thử hỏng. Dừng lại, /clear, rồi viết prompt mới tốt hơn, thay vì cố sửa lần thứ ba.

Một điểm dễ bỏ sót: chỉ dẫn bạn gõ trong chat có thể mất sau khi compact, còn CLAUDE.md ở thư mục gốc được đọc lại từ đĩa. Quy tắc nào muốn AI nhớ lâu dài thì ghi vào file, đừng chỉ nói trong chat.

Subagent cho việc điều tra

Câu "tìm xem luồng thanh toán xử lý ở đâu" có thể khiến agent đọc vài chục file. Làm trong phiên chính là tự nhồi context. Thay vào đó, yêu cầu agent dùng subagent để điều tra và chỉ báo lại kết luận. Claude Code, Cursor và Copilot trong VS Code đều đã hỗ trợ subagent. Chi tiết cách tạo subagent riêng trong Claude Code có ở bài Claude Code nâng cao.

Giữ gọn danh sách tool

Mỗi MCP server bạn cài đều thêm tool mà agent phải biết tới. Anthropic cho biết họ từng thấy định nghĩa tool chiếm tới 134.000 token trước khi tối ưu. Các công cụ mới đã tự xử lý một phần (Claude Code mặc định hoãn nạp schema MCP, Cursor nạp mô tả tool MCP theo nhu cầu, thử nghiệm A/B cho thấy tổng token giảm 46,9% ở các lần chạy có gọi MCP tool), nhưng thói quen tốt vẫn là:

  • Tắt MCP server không dùng tới (lệnh /mcp trong Claude Code).
  • Ưu tiên CLI có sẵn như gh, aws khi được, vì chúng không thêm danh sách tool vào context.
  • Lọc output dài trước khi đưa cho AI, ví dụ grep log lấy dòng ERROR thay vì dán cả file log.

Spec và plan cho task lớn

Với tính năng lớn, đừng để mọi thứ trôi trong chat. Quy trình Anthropic khuyên là explore, plan, implement, commit: bật plan mode, để agent đọc code và lập kế hoạch, bạn duyệt, rồi mới cho code. Với việc lớn hơn nữa, cho agent phỏng vấn bạn và viết ra file SPEC.md, sau đó mở một phiên mới để implement theo spec. Phiên mới có context sạch, còn spec là bản tóm tắt chất lượng cao nhất bạn có thể đưa cho nó.

GitHub cũng đi theo hướng này với Spec Kit (quy trình Specify, Plan, Tasks, Implement). Lập luận của họ: model giỏi hoàn thiện theo mẫu, nhưng không đọc được suy nghĩ của bạn.

Sai lầm thường gặp

  • Một phiên cho mọi việc. Fix bug, viết test, hỏi chuyện deploy trong cùng một chat. Context đầy thông tin không liên quan. Chuyển task thì /clear.
  • File quy tắc phình to. Mỗi lần AI sai lại thêm một dòng, sau vài tháng file dài hàng trăm dòng và quy tắc quan trọng bị chìm. Định kỳ cắt tỉa, chuyển quy trình dài sang skill hoặc rule theo đường dẫn.
  • Quy tắc mâu thuẫn giữa các file. CLAUDE.md nói dùng pnpm, file rule con nói dùng npm. Model có thể chọn ngẫu nhiên một bên.
  • Để agent khám phá không giới hạn. "Tìm hiểu codebase này đi" mà không có phạm vi thì agent có thể đọc hàng trăm file. Khoanh vùng rõ hoặc giao cho subagent.
  • Nghĩ context 1M token là khỏi cần quản lý. Context lớn cho bạn thêm chỗ, không cho model thêm khả năng tập trung. Docs Anthropic hiện vẫn cảnh báo context rot, kể cả với model 1M token.

Tóm lại

Model ngày càng mạnh, nhưng chất lượng output vẫn phụ thuộc vào thứ bạn đưa cho nó đọc. Context engineering không phải kỹ thuật cao siêu: giữ file quy tắc ngắn và đúng, dọn context khi đổi việc, tách việc điều tra ra subagent, và ghi những gì quan trọng ra file thay vì chỉ nói trong chat.

Có một điều kiện ẩn phía sau mọi thói quen trên: bạn phải hiểu dự án của mình đủ sâu để biết AI cần biết gì. Người nắm chắc kiến trúc React sẽ viết được CLAUDE.md sắc bén và nhận ra ngay khi agent đi lạc. Nếu bạn muốn xây nền đó, khóa React PRO của HoleTex dạy React tới mức bạn làm chủ được code do AI sinh ra. Còn nếu muốn rèn tư duy giải quyết vấn đề mà AI không làm thay được, thử luyện thuật toán trên HoleTex Algo.

Bài liên quan

Nguồn tham khảo: Effective context engineering for AI agents (anthropic.com), Context windows (platform.claude.com), Best practices for Claude Code, Claude Code memory, Context rot (trychroma.com), Managing context (claude.com), How contexts fail (dbreunig.com), Advanced tool use (anthropic.com), Effective harnesses for long-running agents (anthropic.com), Dynamic context discovery (cursor.com), Context window (code.claude.com), AGENTS.md cho Codex (developers.openai.com), Context engineering for agents (langchain.com), Context engineering (simonwillison.net), AGENTS.md, Cursor rules, Copilot custom instructions (docs.github.com), Copilot CLI context management, Spec-driven development (github.blog). Cập nhật 2026-09-26.

Thấy hay? Chia sẻ