Contextual prompting là kỹ thuật cung cấp thông tin nền, chi tiết tình huống và các tham số liên quan để mô hình ngôn ngữ lớn (LLM) hiểu rõ ý định của bạn trước khi thực hiện một yêu cầu cụ thể.
Thay vì chỉ đưa ra một câu lệnh đơn lẻ, bạn xây dựng một bộ hồ sơ đầy đủ bao gồm mục tiêu, đối tượng và các ràng buộc. Nói nôm na, đây là cách "mớm" dữ liệu để mô hình kích hoạt đúng các vùng tri thức cần thiết, tránh việc nó phải "đoán" mò ý định người dùng.
Khi bạn giao việc cho một đồng nghiệp thân thiết, bạn chỉ cần nói: "Tóm tắt cuộc họp sáng nay đi". Họ sẽ làm đúng vì họ có kiến thức ngầm định (implicit knowledge) về dự án, biết tóm tắt cho ai và cần chi tiết đến mức nào. Nhưng với một LLM, nó không có trải nghiệm chung đó với bạn. Nếu bạn không cung cấp thông tin tường minh, nó sẽ trả về một kết quả chung chung, vô thưởng vô phạt. Contextual prompting chính là cầu nối để bù đắp khoảng trống kiến thức ngầm định này giữa người và máy.
Với tư cách là một kỹ sư hệ thống, tôi không coi contextual prompting là một mẹo vặt ngôn ngữ. Nó là một bài toán tối ưu hóa tài nguyên. Khi bạn thiết lập ngữ cảnh tốt, bạn đang hướng dẫn mô hình lọc bỏ nhiễu và tập trung toàn bộ "ngân sách chú ý" vào dữ liệu quan trọng nhất. Kết quả là phản hồi của AI sẽ sát với thực tế nghiệp vụ, giảm thiểu tình trạng "hallucinate" (ảo giác) do thiếu dữ liệu đầu vào.

Bản chất và cơ chế In-Context Learning
Về mặt kỹ thuật, contextual prompting chính là việc tận dụng cơ chế học trong ngữ cảnh (In-Context Learning, viết tắt là ICL). Đây là khả năng của mô hình ngôn ngữ trong việc tự thích nghi và học hỏi từ các ví dụ, dữ liệu được cung cấp ngay trong cửa sổ ngữ cảnh (context window) mà không cần phải trải qua quá trình tái huấn luyện (retraining) hay tinh chỉnh (fine-tuning) tốn kém. Khi bạn nạp ngữ cảnh vào, bạn đang tạm thời thay đổi xác suất xuất hiện của các token tiếp theo, ép mô hình phải suy luận dựa trên tập dữ liệu bạn vừa đưa ra thay vì chỉ dựa trên dữ liệu huấn luyện cũ kỹ.

Việc cung cấp ngữ cảnh đầy đủ giúp mô hình thu hẹp không gian xác suất, tập trung vào những mẫu dữ liệu liên quan nhất. Bạn hãy tưởng tượng mô hình như một thư viện khổng lồ. Ngữ cảnh chính là tấm bản đồ chỉ dẫn AI phải tìm sách ở khu vực nào. Nếu không có bản đồ, AI sẽ lục lọi khắp nơi và khả năng cao là sẽ đưa cho bạn một cuốn sách không liên quan. Một prompt được ngữ cảnh hóa tốt sẽ làm tăng "tín hiệu" và giảm "nhiễu", giúp mô hình hoạt động hiệu quả hơn hẳn.
Lợi ích thực tế của kỹ thuật này có thể đo lường được qua việc giảm chu kỳ thử sai (iteration cycles). Thay vì phải sửa prompt 10 lần, bạn có thể đạt được kết quả mong muốn ngay từ lần đầu nếu cấu trúc ngữ cảnh chặt chẽ. Độ chính xác và tính nhất quán cũng tăng lên đáng kể, đặc biệt trong các tác vụ yêu cầu tuân thủ phong cách thương hiệu hoặc định dạng kỹ thuật phức tạp. Ngoài ra, nó giúp quản lý rủi ro tốt hơn bằng cách thiết lập các ranh giới an toàn, ngăn chặn mô hình đưa ra các thông tin sai lệch hoặc không phù hợp với chuẩn mực dự án.
Mỗi token bạn đưa vào prompt đều tiêu tốn tài nguyên tính toán, vì vậy chúng ta cần tối ưu hóa "ngân sách chú ý" (attention budget). Những mô hình hiện đại có khả năng "Context Awareness" — tức là chúng tự theo dõi được dung lượng token còn lại để quyết định khi nào cần nén thông tin hoặc tóm tắt lại trạng thái. Việc hiểu rõ bản chất ICL sẽ giúp bạn không còn viết prompt theo kiểu "cầu may" nữa, mà chuyển sang tư duy thiết kế hệ thống dữ liệu cho AI.
Contextual prompt khác system prompt và role prompt ở đâu
Trong kiến trúc hệ thống AI, quyền hạn của các loại prompt được phân cấp rõ rệt. Chúng ta cần phân biệt ba lớp chính để tránh việc chỉ dẫn bị chồng chéo hoặc bị mô hình phớt lờ.

Role-based prompting là cấp độ đơn giản nhất, nơi bạn gán một chức năng chuyên môn cho mô hình (ví dụ: "Bạn là chuyên gia phân tích dữ liệu"). Persona-based prompting đi sâu hơn một bước khi gán một danh tính cụ thể với tính cách rõ rệt (ví dụ: "Bạn là một kỹ sư hệ thống lâu năm, nói chuyện mộc mạc và thực dụng"). Vai trò giúp AI xác định tông giọng và độ sâu kiến thức, nhưng nó vẫn chưa đủ để thực hiện một tác vụ cụ thể nếu thiếu dữ liệu nền.
System prompt (hoặc Developer message) nằm ở tầng cao nhất của "chuỗi mệnh lệnh". Đây là nơi thiết lập các quy tắc nền tảng, logic nghiệp vụ và ranh giới an toàn. Đây là "Hiến pháp" của hệ thống. Nếu bạn yêu cầu AI "Luôn trả về kết quả dưới dạng JSON" trong system prompt, nó sẽ có ưu tiên cao hơn bất kỳ yêu cầu nào khác của người dùng. Tuy nhiên, sai lầm thường gặp là nhồi nhét quá nhiều dữ liệu thay đổi liên tục vào system prompt, khiến nó trở nên cồng kềnh và tốn kém.
Contextual information (thông tin ngữ cảnh) lại mang tính thời điểm và tác vụ. Nếu System prompt là luật chơi, thì Contextual prompt là dữ liệu của ván đấu hiện tại. Sự bổ trợ giữa bộ ba này rất quan trọng: Role định hướng phong cách, System thiết lập quy tắc, và Context cung cấp dữ liệu thực thi. Một lỗi phổ biến là để ngữ cảnh mâu thuẫn với rules trong system prompt, dẫn đến việc mô hình bị bối rối hoặc tệ hơn là gặp hiện tượng "false refusals" (từ chối phản hồi sai lầm) do vô cớ chạm phải các bộ lọc an toàn.
Một prompt có ngữ cảnh gồm những thành phần nào
Để một prompt hoạt động ổn định trong môi trường sản xuất, nó cần 4 thành phần cơ bản: Chỉ dẫn (Instruction - tác vụ cụ thể), Ngữ cảnh (Context - thông tin nền), Dữ liệu đầu vào (Input Data - đối tượng xử lý), và Chỉ báo đầu ra (Output Indicator - định dạng kết quả).
Để đạt độ chính xác cao nhất, hãy tách ngữ cảnh thành 8 lớp thông tin:
- Tình huống (Scenario): Mô tả hoàn cảnh diễn ra tác vụ để mô hình không bị lạc hướng.
- Đối tượng (Audience): Xác định người đọc cuối là ai để AI điều chỉnh độ phức tạp của ngôn ngữ.
- Mục tiêu (Goal): Định nghĩa rõ ràng kết quả thành công trông như thế nào.
- Ràng buộc (Constraint): Các giới hạn về độ dài, ngôn ngữ, hoặc những điều tuyệt đối không được làm.
- Lĩnh vực (Domain): Thiết lập khung kiến thức chuyên môn cần kích hoạt.
- Thông tin nền: Các dữ liệu, tài liệu tham khảo hoặc lịch sử liên quan trực tiếp đến tác vụ.
- Ví dụ/Tham chiếu (Few-shot): Cung cấp các mẫu "đầu vào - đầu ra" chuẩn để AI bắt chước.
- Tiêu chí thành công: Cách để mô hình tự kiểm chứng xem kết quả đã đạt yêu cầu chưa.
Dưới đây là một ví dụ về cách lồng ghép các thành phần này bằng thẻ XML để mô hình dễ dàng phân tách logic:
<context>
<scenario>Chúng ta đang xây dựng nội dung cho bảo tàng game retro tại TP.HCM.</scenario>
<audience>Các bạn trẻ Gen Z đam mê công nghệ, thích phong cách hiện đại nhưng vẫn hoài cổ.</audience>
<domain>Lịch sử trò chơi điện tử thập niên 80.</domain>
<background_info>Pac-Man ra đời năm 1980 bởi Namco, đã thay đổi hoàn toàn bộ mặt của ngành arcade vốn chỉ toàn trò chơi bắn súng.</background_info>
</context>
<instructions>
Viết một bài blog ngắn về tầm ảnh hưởng văn hóa của Pac-Man.
</instructions>
<constraints>
- Độ dài: Dưới 300 từ.
- Tông giọng: Sôi nổi, dùng một ít từ lóng công nghệ hiện đại.
- Tránh: Các thông số kỹ thuật khô khan về chip xử lý.
</constraints>
<success_criteria>
Bài viết phải trả lời được câu hỏi: "Tại sao Pac-Man lại là biểu tượng của văn hóa đại chúng?"
</success_criteria>Cách tiếp cận có cấu trúc này giúp loại bỏ sự mơ hồ. Việc sử dụng văn xuôi để dẫn dắt kết hợp với các thẻ XML giúp AI hiểu rõ "ranh giới" của từng loại thông tin, từ đó xử lý chính xác hơn các chỉ dẫn phức tạp.
Đặt ngữ cảnh vào đâu trong prompt
Vị trí sắp xếp thông tin trong prompt không phải là chuyện ngẫu nhiên, nó ảnh hưởng trực tiếp đến hiệu suất và chi phí của hệ thống. Hãy cấu trúc hóa prompt bằng Markdown (tiêu đề #, ##) và thẻ XML (như <context>, <instructions>). Việc này tạo ra các ranh giới logic rõ rệt, giúp AI không bị nhầm lẫn giữa dữ liệu tham khảo và lệnh thực thi.

Một quy tắc sống còn mà bạn cần nhớ là: "dữ liệu dài ở trên, câu lệnh ở dưới". Hãy đặt các tài liệu tham khảo, thông tin nền và ví dụ ở phần đầu của prompt, sau đó mới đưa ra yêu cầu cụ thể ở cuối. Điều này cực kỳ quan trọng đối với các ngữ cảnh dài (trên 20k token). Các nghiên cứu và thực tế triển khai cho thấy mô hình thường chú ý tốt nhất đến thông tin ở phần cuối của prompt ngay trước khi bắt đầu tạo phản hồi.
Về mặt tối ưu hóa chi phí, việc sắp xếp các thông tin cố định ở đầu prompt là điều bắt buộc để tận dụng tính năng Prompt Caching. Cơ chế này hoạt động dựa trên prefix matching (khớp tiền tố chính xác). Nếu bạn thay đổi dù chỉ một dấu cách hoặc một ký tự ở phần đầu prompt, bộ đệm (cache) sẽ bị phá vỡ, buộc hệ thống phải tính toán lại từ đầu, làm tăng độ trễ và chi phí. Hãy giữ cho phần ngữ cảnh chung luôn tĩnh và đặt các biến số (như câu hỏi của người dùng) ở cuối cùng để tối đa hóa hiệu quả kinh tế.
Những sai lầm thường gặp khi thêm ngữ cảnh
Sai lầm lớn nhất là rơi vào hiện tượng "Context rot" (suy giảm ngữ cảnh). Do kiến trúc Transformer dựa trên các mối quan hệ n² giữa các token, khi cửa sổ ngữ cảnh càng đầy, khả năng truy xuất chính xác của mô hình càng giảm. Điều này dẫn đến hiện tượng "Lost-in-the-middle", nơi mô hình bỏ quên thông tin nằm ở giữa đoạn văn dài và chỉ chú ý đến phần đầu hoặc phần cuối. Trong các hệ thống lớn, điều này thường gây ra các đợt latency spikes (độ trễ tăng đột biến) và chi phí vận hành nhảy vọt mà hiệu quả lại kém đi.

Bên cạnh đó, nhiều người thường rơi vào hai thái cực nằm ngoài "Goldilocks Zone" (Vùng vừa đủ). Một bên là quá cứng nhắc khi "hardcode" các logic if-else phức tạp bằng ngôn ngữ tự nhiên, khiến prompt trở nên mỏng manh (fragile) và dễ gãy khi dữ liệu đầu vào thay đổi nhẹ. Bên kia là đưa ra chỉ dẫn quá mơ hồ, giả định AI đã biết hết thông tin ngầm định, dẫn đến kết quả sai lệch. Bạn cần tìm được "độ cao" (altitude) phù hợp: đủ cụ thể để dẫn dắt nhưng đủ linh hoạt để mô hình sử dụng khả năng suy luận của nó.
Đừng nhồi nhét thông tin nhiễu; hãy nhớ rằng mục tiêu là cung cấp các heuristic (nguyên tắc kinh nghiệm) sạch để dẫn dắt hành vi, chứ không phải là tạo ra một đống rác dữ liệu để AI tự dọn.
Từ contextual prompting đến context engineering
Chúng ta đang dịch chuyển từ việc tìm từ ngữ đúng (prompt engineering) sang quản lý tập hợp token tối ưu (context engineering). Đây là tư duy của một kiến trúc sư hệ thống: thay vì chỉ viết prompt, bạn thiết kế luồng dữ liệu sao cho mô hình luôn ở trạng thái minh mẫn nhất. Đặc biệt với các dòng mô hình mới có khả năng "Context Awareness", chúng có thể tự giám sát ngân sách token để quyết định khi nào cần nén thông tin hoặc lưu trữ trạng thái.
Đối với các tác vụ dài hạn (long-horizon tasks), bạn nên áp dụng các chiến thuật sau:
- Nén (Compaction): Khi lịch sử hội thoại quá dài, hãy yêu cầu mô hình tự tóm tắt các ý chính, giữ lại các quyết định quan trọng và loại bỏ những thông tin thừa như kết quả thô của các tool call cũ.
- Ghi chú có cấu trúc (Structured note-taking): Cho phép AI lưu trạng thái vào một "bộ nhớ ngoài" (như file
notes.md). AI sẽ đọc lại file này sau mỗi lần làm mới cửa sổ ngữ cảnh để duy trì tính nhất quán. - Kiến trúc Sub-agent: Thay vì dồn toàn bộ tài liệu vào một agent duy nhất, hãy chia nhỏ cho các sub-agent chuyên biệt. Một sub-agent có thể tiêu tốn hàng chục nghìn token để đọc tài liệu thô, rồi chỉ trả về một bản tóm tắt cô đọng khoảng 1.000-2.000 token cho agent chính. Cách này giúp giữ cho ngữ cảnh của agent chính luôn "sạch" và tập trung.
Một chiến thuật quan trọng khác là "Just-in-time context" kết hợp với RAG (Retrieval-Augmented Generation: truy xuất dữ liệu ngoài rồi mới sinh câu trả lời). Đừng nhồi nhét tất cả dữ liệu từ đầu. Hãy để AI sử dụng các công cụ tìm kiếm hoặc truy vấn database để chỉ nạp đúng mẩu thông tin cần thiết tại thời điểm thực thi. Nếu chỉ nhớ một điều, hãy nhớ điều này: ưu tiên bộ token "tín hiệu cao". Một ví dụ chuẩn xác (canonical example) luôn đáng giá hơn cả ngàn dòng dữ liệu nhiễu.
Tài liệu tham khảo
- Prompt Engineering (Whitepaper) — Lee Boonstra, Google
- Contextual Prompting — GeeksforGeeks
- Prompting best practices — Claude Platform Docs
- Prompt engineering — OpenAI API
- Elements of a Prompt — Prompt Engineering Guide
- The Difference Between System Messages and User Messages in Prompt Engineering — PromptHub
- Effective context engineering for AI agents — Anthropic
- Context is King: How Contextual Prompting Transforms AI Outputs — DEV Community