Hiểu độ phức tạp của ứng dụng mà bạn xây AI agent cho nó là điều quan trọng để làm ra một agent đáng tin cậy. Chúng ta cần xây AI agent quản lý thông tin hiệu quả để đáp ứng những nhu cầu phức tạp, vượt ra ngoài prompt engineering.
Trong bài này, chúng ta sẽ tìm hiểu context engineering là gì và vai trò của nó trong việc xây AI agent.
Video của bài: Context Engineering.
Giới thiệu
Bài này đề cập:
- Context engineering là gì và vì sao nó khác prompt engineering.
- Các chiến lược context engineering hiệu quả, gồm cách ghi, chọn, nén và cô lập thông tin.
- Các lỗi ngữ cảnh thường gặp có thể làm AI agent đi chệch hướng và cách khắc phục.
Mục tiêu học tập
Sau bài này, bạn sẽ hiểu cách:
- Định nghĩa context engineering và phân biệt nó với prompt engineering.
- Xác định các thành phần chính của ngữ cảnh trong ứng dụng Large Language Model (LLM).
- Áp dụng các chiến lược ghi, chọn, nén và cô lập ngữ cảnh để cải thiện hiệu năng agent.
- Nhận ra các lỗi ngữ cảnh thường gặp như đầu độc (poisoning), phân tán (distraction), nhầm lẫn (confusion) và xung đột (clash), và áp dụng kỹ thuật giảm thiểu.
Context engineering là gì?
Với AI agent, ngữ cảnh (context) là thứ dẫn dắt việc lập kế hoạch của agent để thực hiện những hành động nhất định. Context engineering là việc đảm bảo AI agent có đúng thông tin để hoàn thành bước tiếp theo của tác vụ. Cửa sổ ngữ cảnh (context window) có kích thước giới hạn, nên là người xây agent, chúng ta cần xây các hệ thống và quy trình để quản lý việc thêm, bớt và cô đọng thông tin trong cửa sổ ngữ cảnh.
Prompt engineering và context engineering
Prompt engineering tập trung vào một bộ chỉ dẫn tĩnh duy nhất để dẫn dắt AI agent hiệu quả bằng một tập quy tắc. Context engineering là cách quản lý một tập thông tin động, gồm cả prompt ban đầu, để đảm bảo AI agent có những gì nó cần theo thời gian. Ý tưởng chính của context engineering là làm cho quá trình này lặp lại được và đáng tin cậy.
Các loại ngữ cảnh

Cần nhớ rằng ngữ cảnh không chỉ là một thứ. Thông tin mà AI agent cần có thể đến từ nhiều nguồn khác nhau, và việc của chúng ta là đảm bảo agent truy cập được các nguồn này.
Các loại ngữ cảnh mà AI agent có thể cần quản lý gồm:
- Chỉ dẫn: giống như "quy tắc" của agent: prompt, system message, ví dụ few-shot (cho AI thấy cách làm một việc) và mô tả các tool nó dùng được. Đây là nơi trọng tâm của prompt engineering kết hợp với context engineering.
- Kiến thức: gồm các sự kiện, thông tin truy xuất từ cơ sở dữ liệu hoặc bộ nhớ dài hạn mà agent đã tích luỹ. Bao gồm cả việc tích hợp một hệ thống Retrieval Augmented Generation (RAG) nếu agent cần truy cập các kho tri thức và cơ sở dữ liệu khác nhau.
- Tool: định nghĩa của các hàm bên ngoài, API và MCP server mà agent có thể gọi, cùng phản hồi (kết quả) nó nhận được khi dùng chúng.
- Lịch sử hội thoại: cuộc đối thoại đang diễn ra với người dùng. Theo thời gian, các cuộc hội thoại này dài và phức tạp hơn, nghĩa là chúng chiếm chỗ trong cửa sổ ngữ cảnh.
- Sở thích của người dùng: thông tin học được về những gì người dùng thích hoặc không thích theo thời gian. Chúng có thể được lưu lại và gọi ra khi ra các quyết định quan trọng để giúp người dùng.
Chiến lược context engineering hiệu quả
Chiến lược lập kế hoạch

Context engineering tốt bắt đầu từ lập kế hoạch tốt. Đây là một cách tiếp cận giúp bạn bắt đầu nghĩ về việc áp dụng khái niệm context engineering:
- Xác định kết quả rõ ràng: kết quả của các tác vụ giao cho AI agent cần được xác định rõ. Hãy trả lời câu hỏi: "Thế giới sẽ trông thế nào khi AI agent làm xong tác vụ?" Nói cách khác, người dùng nên có thay đổi, thông tin hay phản hồi gì sau khi tương tác với AI agent.
- Lập bản đồ ngữ cảnh: khi đã xác định kết quả của AI agent, bạn cần trả lời câu hỏi "AI agent cần thông tin gì để hoàn thành tác vụ này?". Nhờ đó bạn có thể bắt đầu lập bản đồ nơi chứa những thông tin đó.
- Tạo pipeline ngữ cảnh: khi đã biết thông tin nằm ở đâu, bạn cần trả lời câu hỏi "Agent sẽ lấy thông tin này bằng cách nào?". Có thể làm theo nhiều cách, gồm RAG, dùng MCP server và các tool khác.
Chiến lược thực hành
Lập kế hoạch là quan trọng, nhưng khi thông tin bắt đầu chảy vào cửa sổ ngữ cảnh của agent, chúng ta cần các chiến lược thực hành để quản lý nó.
Quản lý ngữ cảnh
Dù một số thông tin sẽ được tự động thêm vào cửa sổ ngữ cảnh, context engineering là việc chủ động hơn với thông tin này, có thể làm bằng vài chiến lược:
- Scratchpad của agent: cho phép AI agent ghi chú thông tin liên quan về tác vụ hiện tại và tương tác với người dùng trong một phiên. Scratchpad nên nằm ngoài cửa sổ ngữ cảnh, trong một file hoặc object lúc chạy mà agent có thể lấy lại sau trong phiên này nếu cần.
- Bộ nhớ (memory): scratchpad tốt cho việc quản lý thông tin bên ngoài cửa sổ ngữ cảnh của một phiên. Bộ nhớ cho phép agent lưu và truy xuất thông tin liên quan qua nhiều phiên. Có thể gồm các bản tóm tắt, sở thích của người dùng và phản hồi để cải thiện sau này.
- Nén ngữ cảnh: khi cửa sổ ngữ cảnh lớn dần và gần chạm giới hạn, có thể dùng các kỹ thuật như tóm tắt và cắt bớt. Nghĩa là hoặc chỉ giữ thông tin liên quan nhất, hoặc bỏ các tin nhắn cũ hơn.
- Hệ đa agent: phát triển hệ đa agent là một dạng context engineering vì mỗi agent có cửa sổ ngữ cảnh riêng. Ngữ cảnh được chia sẻ và chuyển cho các agent khác nhau thế nào là một điều nữa cần lên kế hoạch khi xây các hệ thống này.
- Môi trường sandbox: nếu agent cần chạy code hoặc xử lý lượng lớn thông tin trong một tài liệu, việc xử lý kết quả có thể tốn rất nhiều token. Thay vì lưu tất cả trong cửa sổ ngữ cảnh, agent có thể dùng một môi trường sandbox chạy được code này và chỉ đọc kết quả cùng các thông tin liên quan khác.
- Object trạng thái lúc chạy: tạo các "thùng chứa" thông tin để quản lý những tình huống agent cần truy cập thông tin nhất định. Với một tác vụ phức tạp, cách này cho phép agent lưu kết quả của từng tác vụ con từng bước, giữ cho ngữ cảnh chỉ gắn với đúng tác vụ con đó.
Kiểm tra ngữ cảnh
Sau khi áp dụng một trong các chiến lược trên, nên kiểm tra xem lần gọi model tiếp theo thực sự nhận được gì. Một câu hỏi gỡ lỗi hữu ích là:
Agent đã nạp quá nhiều ngữ cảnh, nạp sai ngữ cảnh, hay thiếu ngữ cảnh nó cần?
Bạn không cần ghi log prompt thô, đầu ra của tool hay nội dung bộ nhớ để trả lời câu hỏi đó. Trên production, nên ưu tiên các bản ghi kiểm tra ngữ cảnh nhỏ gọn, chứa số đếm, id, hash và nhãn chính sách:
- Chọn lọc: theo dõi bao nhiêu đoạn (chunk), tool hay bộ nhớ ứng viên đã được xem xét, bao nhiêu được chọn, và quy tắc hay điểm số nào khiến các mục còn lại bị lọc.
- Nén: ghi lại khoảng nguồn hoặc trace id, id bản tóm tắt, số token ước tính trước và sau khi nén, và nội dung thô có bị loại khỏi lần gọi tiếp theo không.
- Cô lập: ghi chú tác vụ con nào đã chạy trong agent, phiên hoặc sandbox riêng, bản tóm tắt giới hạn nào được trả về, và đầu ra lớn của tool có nằm ngoài ngữ cảnh của agent cha không.
- Bộ nhớ và RAG: lưu id tài liệu truy xuất, id bộ nhớ, điểm số, id được chọn và trạng thái che dữ liệu, thay vì toàn bộ văn bản truy xuất.
- An toàn và quyền riêng tư: ưu tiên hash, id, nhóm token và nhãn chính sách thay cho văn bản prompt nhạy cảm, đối số tool, kết quả tool hay nội dung bộ nhớ người dùng.
Mục tiêu không phải là giữ thêm ngữ cảnh, mà là để lại đủ bằng chứng giúp nhà phát triển biết chiến lược ngữ cảnh nào đã chạy và nó có thay đổi lần gọi model tiếp theo đúng như ý định không.
Ví dụ về context engineering
Giả sử chúng ta muốn AI agent thực hiện yêu cầu "Đặt cho tôi một chuyến đi Paris."
- Một agent đơn giản chỉ dùng prompt engineering có thể chỉ trả lời: "Được, bạn muốn đi Paris khi nào?". Nó chỉ xử lý câu hỏi trực tiếp tại thời điểm người dùng hỏi.
- Một agent dùng các chiến lược context engineering đã nêu sẽ làm nhiều hơn thế. Trước cả khi trả lời, hệ thống của nó có thể:
- Kiểm tra lịch của bạn để tìm ngày trống (truy xuất dữ liệu thời gian thực).
- Nhớ lại sở thích du lịch trước đây (từ bộ nhớ dài hạn), như hãng bay ưa thích, ngân sách, hay bạn có thích bay thẳng không.
- Xác định các tool có sẵn để đặt vé máy bay và khách sạn.
- Khi đó, một câu trả lời ví dụ có thể là: "Chào [Tên bạn]! Mình thấy bạn rảnh tuần đầu tháng Mười. Mình tìm chuyến bay thẳng tới Paris của [Hãng bay ưa thích] trong mức ngân sách thường lệ [Ngân sách] của bạn nhé?". Câu trả lời phong phú, nhận biết ngữ cảnh này thể hiện sức mạnh của context engineering.
Các lỗi ngữ cảnh thường gặp
Context poisoning (đầu độc ngữ cảnh)
Là gì: khi một ảo giác (thông tin sai do LLM sinh ra) hoặc một lỗi lọt vào ngữ cảnh và bị tham chiếu lặp đi lặp lại, khiến agent theo đuổi mục tiêu bất khả thi hoặc phát triển chiến lược vô lý.
Nên làm gì: áp dụng kiểm tra hợp lệ ngữ cảnh và cách ly. Kiểm tra thông tin trước khi thêm vào bộ nhớ dài hạn. Nếu phát hiện khả năng bị đầu độc, bắt đầu luồng ngữ cảnh mới để ngăn thông tin xấu lan ra.
Ví dụ đặt chuyến du lịch: agent của bạn ảo giác ra một chuyến bay thẳng từ một sân bay địa phương nhỏ tới một thành phố quốc tế xa xôi, trong khi sân bay đó thực tế không có chuyến quốc tế. Chi tiết chuyến bay không tồn tại này được lưu vào ngữ cảnh. Sau đó, khi bạn yêu cầu đặt vé, agent cứ cố tìm vé cho tuyến bất khả thi này, dẫn đến lỗi lặp lại.
Giải pháp: thêm một bước xác minh chuyến bay và tuyến bay có tồn tại bằng API thời gian thực trước khi thêm chi tiết chuyến bay vào ngữ cảnh làm việc của agent. Nếu xác minh thất bại, thông tin sai bị "cách ly" và không được dùng tiếp.
Context distraction (phân tán ngữ cảnh)
Là gì: khi ngữ cảnh trở nên quá lớn đến mức model tập trung quá nhiều vào lịch sử tích luỹ thay vì dùng những gì nó học được trong huấn luyện, dẫn đến hành động lặp lại hoặc vô ích. Model có thể bắt đầu mắc lỗi ngay cả trước khi cửa sổ ngữ cảnh đầy.
Nên làm gì: dùng tóm tắt ngữ cảnh. Định kỳ nén thông tin tích luỹ thành các bản tóm tắt ngắn hơn, giữ chi tiết quan trọng trong khi bỏ lịch sử thừa. Việc này giúp "đặt lại" sự tập trung.
Ví dụ đặt chuyến du lịch: bạn đã bàn rất lâu về nhiều điểm đến mơ ước, kể cả kể chi tiết chuyến du lịch bụi hai năm trước. Khi cuối cùng bạn yêu cầu "tìm cho tôi vé máy bay rẻ cho tháng sau", agent sa lầy vào những chi tiết cũ, không liên quan và cứ hỏi về đồ đạc du lịch bụi hay lịch trình cũ của bạn, bỏ qua yêu cầu hiện tại.
Giải pháp: sau một số lượt nhất định hoặc khi ngữ cảnh quá lớn, agent nên tóm tắt những phần gần đây và liên quan nhất của cuộc hội thoại (tập trung vào ngày đi và điểm đến hiện tại của bạn) và dùng bản tóm tắt cô đọng đó cho lần gọi LLM tiếp theo, bỏ đi phần lịch sử trò chuyện ít liên quan.
Context confusion (nhầm lẫn ngữ cảnh)
Là gì: khi ngữ cảnh không cần thiết, thường ở dạng quá nhiều tool có sẵn, khiến model sinh phản hồi kém hoặc gọi tool không liên quan. Model nhỏ đặc biệt dễ gặp vấn đề này.
Nên làm gì: áp dụng quản lý bộ tool mang theo (tool loadout) bằng kỹ thuật RAG. Lưu mô tả tool trong một vector database và chỉ chọn các tool liên quan nhất cho từng tác vụ cụ thể. Nghiên cứu cho thấy nên giới hạn số tool được chọn dưới 30.
Ví dụ đặt chuyến du lịch: agent của bạn có hàng chục tool: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations… Bạn hỏi "Cách tốt nhất để đi lại ở Paris là gì?". Vì số tool quá nhiều, agent bị rối và cố gọi book_flight bên trong Paris, hoặc rent_car dù bạn thích phương tiện công cộng, vì mô tả các tool có thể chồng lấn hoặc đơn giản là nó không phân biệt được tool nào tốt nhất.
Giải pháp: dùng RAG trên mô tả tool. Khi bạn hỏi về đi lại ở Paris, hệ thống truy xuất động chỉ những tool liên quan nhất như rent_car hoặc public_transport_info dựa trên câu hỏi, đưa cho LLM một "bộ tool mang theo" tập trung.
Context clash (xung đột ngữ cảnh)
Là gì: khi trong ngữ cảnh có thông tin mâu thuẫn nhau, dẫn đến suy luận không nhất quán hoặc câu trả lời cuối cùng kém. Điều này thường xảy ra khi thông tin đến theo từng giai đoạn, và các giả định sai ban đầu vẫn còn trong ngữ cảnh.
Nên làm gì: dùng cắt tỉa ngữ cảnh (pruning) và chuyển tải ra ngoài (offloading). Cắt tỉa nghĩa là bỏ thông tin đã cũ hoặc mâu thuẫn khi có chi tiết mới. Chuyển tải ra ngoài cho model một không gian "scratchpad" riêng để xử lý thông tin mà không làm rối ngữ cảnh chính.
Ví dụ đặt chuyến du lịch: ban đầu bạn nói với agent: "Tôi muốn bay hạng phổ thông." Sau đó trong cuộc trò chuyện, bạn đổi ý: "Thật ra chuyến này mình đi hạng thương gia đi." Nếu cả hai chỉ dẫn vẫn còn trong ngữ cảnh, agent có thể nhận kết quả tìm kiếm mâu thuẫn hoặc rối không biết ưu tiên sở thích nào.
Giải pháp: áp dụng cắt tỉa ngữ cảnh. Khi chỉ dẫn mới mâu thuẫn với chỉ dẫn cũ, chỉ dẫn cũ bị xoá hoặc được ghi đè rõ ràng trong ngữ cảnh. Hoặc agent có thể dùng một scratchpad để dung hoà các sở thích mâu thuẫn trước khi quyết định, đảm bảo chỉ chỉ dẫn cuối cùng, nhất quán mới định hướng hành động của nó.
Còn câu hỏi về context engineering?
Tham gia Microsoft Foundry Discord để gặp gỡ những người cùng học, dự các buổi office hours và được giải đáp thắc mắc về AI agent.
Nguồn
- Dịch và biên tập từ microsoft/ai-agents-for-beginners · 12-context-engineering/README.md, giấy phép MIT.