Prompt engineering từng là một cách nói khá hấp dẫn, nhưng nó không còn mô tả đúng bài toán khi bạn xây dựng AI agent thực sự. Một câu lệnh tốt vẫn quan trọng, nhưng không đủ để một agent hiểu doanh nghiệp, truy cập dữ liệu riêng, dùng công cụ và xử lý công việc kéo dài qua nhiều bước.
Điểm then chốt là context engineering, tức thiết kế và quản lý chính xác mọi thông tin được đưa vào cửa sổ ngữ cảnh của mô hình ngôn ngữ lớn. Đây là bài toán về giới hạn tài nguyên, chất lượng dữ liệu và cách tổ chức luồng làm việc, không đơn thuần là viết câu lệnh khéo léo hơn.
Vì sao prompt đơn lẻ không đủ cho AI agent?
Một mô hình ngôn ngữ lớn, hay LLM, về bản chất là một hệ thống không có trạng thái lưu giữ sẵn giữa các lần gọi. Nó nhận các token đầu vào, xử lý chúng, rồi tạo ra các token có khả năng xuất hiện tiếp theo. Token có thể hiểu đơn giản là các mảnh nhỏ của từ hoặc ký tự.
LLM có thể rất thông minh, nhưng bản thân nó không tự nhớ cuộc trao đổi trước đó và cũng không thể tự hành động ngoài đời thực. Nó chỉ tạo đầu ra. Muốn xây dựng một AI agent có ích cho doanh nghiệp, bạn cần kết nối mô hình với quy trình, công cụ và nguồn dữ liệu phù hợp.
Cửa sổ ngữ cảnh có thể dao động từ khoảng một trăm nghìn token đến một triệu token tùy mô hình. Nghe có vẻ rất lớn, nhưng không gian đó phải chứa toàn bộ hướng dẫn, lịch sử hội thoại, dữ liệu nghiệp vụ, mô tả công cụ và kết quả gọi công cụ. Với tác vụ phức tạp, dung lượng này nhanh chóng trở nên chật chội.
Thậm chí, lấp đầy toàn bộ cửa sổ ngữ cảnh không đồng nghĩa với kết quả tốt hơn. Với một số mô hình có cửa sổ ngữ cảnh một trăm nghìn token, chất lượng có thể tốt hơn khi chỉ dùng khoảng 60 đến 70% dung lượng. Vì vậy, vấn đề không phải là nhét càng nhiều thông tin càng tốt, mà là đưa đúng thông tin vào đúng thời điểm.
AI agent hoạt động theo vòng lặp, không phải một lần hỏi đáp
Một agent thường bắt đầu từ yêu cầu của người dùng. Sau đó, agent gọi LLM để suy luận, gọi công cụ để lấy dữ liệu hoặc thực hiện hành động, rồi tiếp tục gọi LLM với thông tin mới. Quá trình này có thể lặp lại nhiều lần trước khi hoàn thành công việc.
Ví dụ, agent có thể nhận một yêu cầu hỗ trợ khách hàng, tìm hồ sơ người dùng, tra cứu tài liệu nội bộ, kiểm tra trạng thái đơn hàng và mới tạo phản hồi cuối cùng. Mỗi bước có thể làm tăng lượng dữ liệu tích lũy, khiến việc quản trị ngữ cảnh trở thành một phần cốt lõi của kiến trúc hệ thống.
Sáu thành phần phải quản lý trong cửa sổ ngữ cảnh
Để thiết kế context engineering tốt, trước hết bạn cần nhìn rõ những gì đang cạnh tranh không gian trong cửa sổ ngữ cảnh. Có sáu thành phần chính, và mỗi thành phần có vai trò khác nhau.
| Thành phần | Vai trò trong AI agent | Rủi ro khi quản lý kém |
|---|---|---|
| Thông điệp người dùng | Yêu cầu hoặc mục tiêu ban đầu của người dùng. | Agent hiểu sai vấn đề hoặc thiếu điều kiện cần thiết. |
| System prompt | Định nghĩa vai trò, giới hạn, phong cách và mục tiêu của agent. | Agent hành xử thiếu nhất quán hoặc quá cứng nhắc. |
| Tools | Mô tả các công cụ agent có thể gọi để lấy dữ liệu hoặc thực hiện hành động. | Agent không biết khi nào và cách nào để dùng công cụ. |
| Resources | Dữ liệu riêng như tài liệu nội bộ, wiki, ticket hỗ trợ và hồ sơ doanh nghiệp. | Đưa quá nhiều dữ liệu không liên quan hoặc thiếu dữ liệu quan trọng. |
| Assistant messages | Các phản hồi trung gian của agent trong quá trình suy luận. | Lịch sử kéo dài và tiêu tốn cửa sổ ngữ cảnh. |
| Tool calls và kết quả | Lịch sử lời gọi công cụ cùng dữ liệu trả về. | Kết quả lặp lại, cồng kềnh hoặc không còn cần thiết vẫn chiếm chỗ. |
Thông điệp người dùng là phần quen thuộc nhất. Đây là nội dung bạn nhập vào một giao diện trò chuyện. Tuy nhiên, nó chỉ là đầu vào khởi đầu, không phải toàn bộ bối cảnh cần thiết để agent làm việc.
System prompt luôn hiện diện ở phía sau. Nó có thể xác định agent là một cố vấn nghiêm khắc, một trợ lý hỗ trợ tận tâm, hoặc một hệ thống phải trả lời chi tiết và nêu nguồn tham khảo. Nó cũng là nơi đặt các rào chắn an toàn và tiêu chuẩn đầu ra.
Tools là cầu nối để agent tác động ra thế giới bên ngoài. Một công cụ có thể tra cứu dữ liệu, cập nhật trạng thái, gửi yêu cầu hoặc thực hiện một hành động nghiệp vụ. Resources là phần dữ liệu riêng của doanh nghiệp, những thứ không có sẵn trong dữ liệu huấn luyện công khai của mô hình.
Ba thành phần dễ phình to nhất là lịch sử thông điệp người dùng, lịch sử phản hồi của assistant, và lịch sử gọi công cụ. Resources cũng có thể rất lớn nếu bạn đưa cả tài liệu dài vào mỗi lần gọi. Đây là lý do context engineering phải được xem như một bài toán thiết kế hệ thống.
Thiết kế system prompt: tránh mơ hồ và tránh kiểm soát quá mức
System prompt là phần bạn nên đầu tư kỹ vì nó thường được thiết kế riêng cho từng agent. Nhưng một prompt dài hơn không tự động tốt hơn. Bạn cần tìm được điểm cân bằng giữa hai cực đoan.
Một bên là quá mơ hồ, kiểu như yêu cầu agent “hãy làm tốt và tìm mọi thứ cần thiết”. Hướng dẫn này gần như không giúp agent biết kết quả nào được coi là đúng, đâu là phạm vi công việc và những ràng buộc cần tuân thủ.
Bên còn lại là quá áp đặt, nơi bạn viết hệ thống bằng chuỗi điều kiện nếu thì. Khi system prompt bắt đầu chứa quá nhiều logic chi tiết về mọi tình huống, bạn đang cố thay thế phần suy luận mà LLM vốn nên xử lý.
Điểm cân bằng tốt hơn là xác định rõ kết quả mong muốn, các nguyên tắc tiếp cận và các giới hạn quan trọng. Bạn chỉ dẫn agent cần đạt điều gì, thay vì ra lệnh cho nó thực hiện từng nhánh quyết định nhỏ.
Mô tả tools để agent biết chính xác cách hành động
Agent chỉ dùng được công cụ khi nó hiểu công cụ đó làm gì, cần đầu vào nào và sẽ nhận lại đầu ra nào. Vì vậy, phần mô tả tools phải cụ thể, rõ ràng và đủ chi tiết, nhưng không nên dài dòng.
Mỗi tool cần một schema đầy đủ. Schema cho biết dữ liệu đầu vào có cấu trúc gì, trường nào bắt buộc, công cụ trả về loại kết quả nào và kết quả đó có thể được dùng ở bước tiếp theo ra sao.
Chẳng hạn, khi agent có một mã người dùng thay vì toàn bộ hồ sơ dài, nó cần biết có công cụ hay resource nào có thể biến mã đó thành hồ sơ đầy đủ. Nếu mô tả công cụ không rõ, agent khó đánh giá liệu nó đã có đủ dữ liệu để gọi công cụ hay chưa.
Truy xuất dữ liệu: từ RAG đến lựa chọn resource có chủ đích
Dữ liệu doanh nghiệp thường không nằm trong dữ liệu huấn luyện của LLM. Đó có thể là tài liệu Google Docs riêng tư, bài viết wiki nội bộ, ticket hỗ trợ, hồ sơ khách hàng hoặc quy định vận hành. Agent cần được cấp đúng resource để xử lý yêu cầu, nhưng không nên nhận toàn bộ kho dữ liệu trong một lần.
RAG, hay retrieval augmented generation, là cách tiếp cận phổ biến: đưa tài liệu vào cơ sở dữ liệu vector, dùng yêu cầu người dùng để tìm các tài liệu có vẻ liên quan rồi thêm chúng vào ngữ cảnh. Cách này vẫn hữu ích cho chatbot hỏi đáp hoặc tra cứu thông tin.
Tuy nhiên, RAG đơn lẻ không phải context engineering đủ chính xác cho các agent hiện đại. Một agent phức tạp cần dùng cửa sổ ngữ cảnh tiết kiệm hơn, lựa chọn dữ liệu theo từng bước và chỉ truy xuất phần thật sự cần thiết.
Model Context Protocol, hay MCP, hỗ trợ cách làm này bằng việc công bố các resource có thể truy vấn. Resource có thể được mô tả giống như tool, kèm theo các tham số truy vấn. Agent có thể thực hiện một lần gọi LLM chỉ để hỏi resource nào cần lấy cho yêu cầu hiện tại, sau đó mới lấy dữ liệu và đưa vào lần gọi tiếp theo.
Thay vì đổ nguyên một hồ sơ người dùng rất dài vào ngữ cảnh, bạn có thể chỉ đưa mã người dùng. Nếu agent nhận thấy cần thêm chi tiết, nó sẽ gọi tool hoặc truy vấn resource ở bước sau. Cách này giúp ngữ cảnh gọn hơn và dữ liệu được sử dụng có mục đích hơn.
Xử lý tác vụ dài bằng compaction, memory và nhiều agent
Các agent chạy trong thời gian dài là nơi context engineering trở nên khó nhất. Càng nhiều vòng lặp, lịch sử hội thoại, phản hồi trung gian và dữ liệu từ công cụ càng tăng. Nếu không có chiến lược, agent sẽ chạm giới hạn ngữ cảnh hoặc giảm chất lượng suy luận.
Compaction: nén thông tin đã dùng
LLM rất giỏi tóm tắt. Nếu một resource đã truy xuất ở bước trước dài hàng chục nghìn token, bạn không nhất thiết phải đưa lại toàn bộ tài liệu vào bước tiếp theo. Bạn có thể thực hiện một lời gọi riêng để yêu cầu tóm tắt tài liệu trong một giới hạn rõ ràng, chẳng hạn vài trăm từ.
Bản tóm tắt này trở thành resource gọn hơn cho các lần gọi sau. Compaction đặc biệt hữu ích khi thông tin cũ vẫn quan trọng nhưng không cần giữ lại toàn bộ chi tiết ban đầu.
Memory: lưu dữ liệu ngoài cửa sổ ngữ cảnh
Memory trong bối cảnh này có thể là một kho khóa và giá trị nằm bên ngoài agent. Agent có thể lưu một kết quả trung gian, một thông điệp dài, dữ liệu có cấu trúc như JSON hoặc CSV dưới một khóa cụ thể, rồi truy xuất lại khi cần.
Điểm quan trọng là memory giúp bạn chuyển những dữ liệu tốn chỗ ra khỏi context window. Nó tương tự việc truy xuất resource, nhưng thuộc phạm vi cục bộ của agent và phục vụ chính luồng thực thi đó.
Composition: tách agent lớn thành các agent chuyên trách
Khi một agent lớn dần và bắt đầu xử lý quá nhiều loại công việc, nó có thể trở thành một “nguyên khối nhỏ”. Đây là dấu hiệu quen thuộc trong phát triển phần mềm: một thành phần quá phức tạp cần được tách thành các phần có trách nhiệm rõ ràng.
Ví dụ, nếu việc tìm kiếm trong kho tài liệu hoặc wiki có logic phức tạp, nhiều vòng lặp và cần đánh giá mức độ liên quan, hãy tách nó thành một agent riêng. Agent chính chỉ cần gửi yêu cầu, còn agent chuyên trách sẽ tìm kiếm, sắp xếp ưu tiên và trả về một bản tóm tắt cô đọng.
Cách tổ chức này giảm áp lực ngữ cảnh cho agent chính. Nó cũng cho phép từng agent tối ưu theo nhiệm vụ của mình, thay vì để một agent duy nhất phải mang toàn bộ lịch sử và logic của mọi phần việc.
Khung thực hành context engineering cho doanh nghiệp
Khi triển khai AI agent cho vận hành, chăm sóc khách hàng hoặc xử lý dữ liệu, bạn không cần bắt đầu bằng một system prompt khổng lồ. Hãy xem ngữ cảnh là ngân sách hữu hạn và thiết kế từng phần theo vai trò của nó.
- Xác định đầu ra mong muốn: Agent cần giải quyết việc gì, được phép làm gì và không được làm gì.
- Viết system prompt theo kết quả: Đặt mục tiêu, nguyên tắc và giới hạn, thay vì mã hóa mọi nhánh quyết định.
- Chuẩn hóa mô tả tools: Mỗi công cụ phải có mục đích rõ, schema đầu vào và đầu ra dễ hiểu.
- Chỉ truy xuất dữ liệu theo nhu cầu: Đưa mô tả resource vào trước, sau đó để agent yêu cầu dữ liệu cụ thể khi cần.
- Nén lịch sử theo thời gian: Tóm tắt thông tin cũ còn giá trị thay vì giữ nguyên dữ liệu thô.
- Lưu dữ liệu lớn vào memory: Giữ các kết quả trung gian bên ngoài cửa sổ ngữ cảnh.
- Tách agent khi logic phình to: Biến các phần việc chuyên biệt thành agent độc lập có đầu vào và đầu ra gọn.
Context engineering không thay thế prompt engineering hoàn toàn. Viết prompt tốt vẫn là việc cần làm, nhưng nó chỉ là một thành phần trong kiến trúc lớn hơn. Khi agent cần dữ liệu doanh nghiệp, công cụ và nhiều bước suy luận, chất lượng hệ thống phụ thuộc vào cách bạn tổ chức toàn bộ ngữ cảnh.
FAQ
Context engineering khác gì prompt engineering?
Prompt engineering tập trung chủ yếu vào cách viết hướng dẫn cho mô hình. Context engineering rộng hơn, bao gồm system prompt, tools, resources, lịch sử hội thoại, kết quả gọi công cụ và cách quản lý chúng trong cửa sổ ngữ cảnh giới hạn.
RAG có còn hữu ích khi xây dựng AI agent không?
RAG vẫn phù hợp cho tra cứu thông tin và chatbot hỏi đáp. Tuy nhiên, với agent thực hiện tác vụ nhiều bước, RAG đơn lẻ thường chưa đủ chính xác vì bạn cần chọn resource theo từng giai đoạn và quản lý chặt chi phí ngữ cảnh.
Khi nào nên dùng memory cho AI agent?
Bạn nên dùng memory khi agent cần giữ kết quả trung gian dài, dữ liệu có cấu trúc hoặc thông tin cần truy xuất lại ở bước sau. Memory giúp dữ liệu không phải nằm liên tục trong cửa sổ ngữ cảnh.
Khi nào cần tách một agent thành nhiều agent?
Hãy cân nhắc tách khi một phần chức năng có logic riêng, nhiều vòng lặp hoặc cần xử lý sâu, như tìm kiếm và đánh giá tài liệu nội bộ. Agent chính sẽ nhẹ hơn khi nhận lại kết quả cô đọng từ agent chuyên trách.
Nếu bạn cần biến các quy trình dữ liệu và vận hành thành hệ thống số rõ ràng, một nền tảng website có kiến trúc tốt sẽ là điểm khởi đầu vững chắc cùng dịch vụ thiết kế website của MintStack.
