{"product_id":"context-engineering-nghệ-thuật-quản-ly-context-cho-claude","title":"Context Engineering — Nghệ thuật quản lý context cho Claude","description":"\n\u003ch2\u003eContext Engineering là gì — và tại sao nó quan trọng hơn Prompt Engineering\u003c\/h2\u003e\n\u003cp\u003eTrong cộng đồng AI, \"Prompt Engineering\" đã trở thành buzzword phổ biến từ 2022-2023. Tuy nhiên, khi các LLM ngày càng mạnh hơn và context window ngày càng lớn hơn, một kỹ năng mới nổi lên quan trọng hơn: \u003cstrong\u003eContext Engineering\u003c\/strong\u003e.\u003c\/p\u003e\n\n\u003cp\u003ePrompt Engineering tập trung vào việc viết câu hỏi\/lệnh tốt hơn. Context Engineering tập trung vào việc quản lý \u003cem\u003etoàn bộ thông tin\u003c\/em\u003e mà model nhận được — không chỉ câu hỏi, mà còn là system prompt, lịch sử conversation, tài liệu tham chiếu, output từ tools, và mọi thứ khác nằm trong context window.\u003c\/p\u003e\n\n\u003cp\u003eSự khác biệt thực tế: Một prompt tốt giúp Claude trả lời một câu hỏi tốt hơn. Context Engineering tốt giúp Claude hoạt động như một chuyên gia thực sự trong suốt một cuộc trò chuyện dài hoặc một hệ thống phức tạp.\u003c\/p\u003e\n\n\u003ch2\u003eContext Window — Hiểu đúng về \"bộ nhớ làm việc\" của Claude\u003c\/h2\u003e\n\u003cp\u003eClaude Opus 4 và Sonnet 4 hỗ trợ context window 200.000 tokens — tương đương khoảng 150.000 từ tiếng Anh, hay một cuốn sách dày 500 trang. Đây là con số ấn tượng, nhưng hiểu \u003cem\u003ecách\u003c\/em\u003e Claude sử dụng context mới là điều quan trọng.\u003c\/p\u003e\n\n\u003ch3\u003eGiải phẫu một context window\u003c\/h3\u003e\n\u003cp\u003eMỗi API call gửi đến Claude bao gồm các phần sau (theo thứ tự):\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSystem prompt:\u003c\/strong\u003e Hướng dẫn về vai trò, hành vi, giới hạn của model\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eConversation history:\u003c\/strong\u003e Toàn bộ lịch sử tin nhắn user\/assistant trong session\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTool results:\u003c\/strong\u003e Kết quả từ các function calls đã thực thi\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCurrent user message:\u003c\/strong\u003e Yêu cầu hiện tại\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eClaude không có \"bộ nhớ\" thực sự giữa các API call. Mỗi request là một slate trắng — nhưng bạn có thể cung cấp toàn bộ lịch sử cần thiết trong context. Đây là cả cơ hội lẫn trách nhiệm của Context Engineering.\u003c\/p\u003e\n\n\u003ch3\u003eToken cost và tradeoffs\u003c\/h3\u003e\n\u003cp\u003eInput tokens (những gì bạn gửi) thường rẻ hơn output tokens (những gì Claude tạo ra). Tuy nhiên, với context window 200K tokens, chi phí input có thể tích lũy nhanh chóng trong production systems. Context Engineering là về việc đưa vào context \u003cem\u003eđúng thông tin\u003c\/em\u003e, không phải \u003cem\u003enhiều thông tin nhất có thể\u003c\/em\u003e.\u003c\/p\u003e\n\n\u003ch2\u003eInformation Hierarchy — Thứ tự ưu tiên trong context\u003c\/h2\u003e\n\u003cp\u003eKhông phải tất cả thông tin trong context đều có trọng số bằng nhau. Nghiên cứu về attention patterns của LLM cho thấy mô hình có xu hướng chú ý nhiều hơn đến:\u003c\/p\u003e\n\n\u003cul\u003e\n  \u003cli\u003eThông tin ở đầu context (primacy effect)\u003c\/li\u003e\n  \u003cli\u003eThông tin ở cuối context, gần với message hiện tại (recency effect)\u003c\/li\u003e\n  \u003cli\u003eThông tin được nhấn mạnh bằng cấu trúc rõ ràng (headers, lists, code blocks)\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eHàm ý thực tế: Đặt thông tin quan trọng nhất ở đầu system prompt hoặc ở cuối conversation (ngay trước câu hỏi). Thông tin ở giữa một context dài có thể bị \"lãng quên\" — hiện tượng này được gọi là \u003cem\u003elost in the middle\u003c\/em\u003e.\u003c\/p\u003e\n\n\u003ch2\u003eSystem Prompt Design — Nền tảng của mọi ứng dụng\u003c\/h2\u003e\n\u003cp\u003eSystem prompt là nơi bạn định nghĩa \"con người\" của Claude trong ứng dụng của bạn. Một system prompt được thiết kế tốt có thể biến Claude thành chuyên gia domain cụ thể mà không cần fine-tuning.\u003c\/p\u003e\n\n\u003ch3\u003eCấu trúc system prompt hiệu quả\u003c\/h3\u003e\n\n\u003cpre\u003e\u003ccode\u003e# Role Definition\nBạn là [tên\/vai trò], chuyên gia về [domain].\n\n# Context\n[Mô tả ngắn về ứng dụng\/business context]\n\n# Capabilities\nBạn có thể:\n- [Capability 1]\n- [Capability 2]\n\n# Constraints\nBạn KHÔNG được:\n- [Constraint 1]\n- [Constraint 2]\n\n# Output Format\nLuôn trả lời theo format:\n[Mô tả format mong muốn]\n\n# Examples (optional)\n[1-2 ví dụ input\/output nếu cần]\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eSystem prompt cho nhiều ngôn ngữ\u003c\/h3\u003e\n\u003cp\u003eKhi build ứng dụng cho người dùng Việt Nam, system prompt nên chỉ định rõ ngôn ngữ:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eLuôn trả lời bằng tiếng Việt, trừ khi user explicitly yêu cầu\ntiếng Anh. Giữ nguyên các thuật ngữ kỹ thuật tiếng Anh khi\nkhông có bản dịch tốt (ví dụ: API, token, context window).\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eFew-shot Examples — Dạy bằng ví dụ thực tế\u003c\/h2\u003e\n\u003cp\u003eFew-shot prompting là kỹ thuật đặt 2-5 ví dụ input\/output trong context để Claude hiểu chính xác format và style bạn mong muốn. Đây là một trong những kỹ thuật có ROI cao nhất trong Context Engineering.\u003c\/p\u003e\n\n\u003ch3\u003eKhi nào dùng few-shot\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eKhi output cần format đặc biệt (JSON schema cụ thể, table format, etc.)\u003c\/li\u003e\n  \u003cli\u003eKhi tone\/style cần nhất quán với brand voice\u003c\/li\u003e\n  \u003cli\u003eKhi task phức tạp và khó mô tả bằng lời\u003c\/li\u003e\n  \u003cli\u003eKhi zero-shot cho kết quả không ổn định\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eVị trí đặt few-shot examples\u003c\/h3\u003e\n\u003cp\u003eCó hai chiến lược:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTrong system prompt:\u003c\/strong\u003e Phù hợp khi examples tương đối ngắn và ít thay đổi\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eĐầu conversation (user turn đầu tiên):\u003c\/strong\u003e Linh hoạt hơn, dễ cập nhật dynamic\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eRAG Integration — Mở rộng knowledge base vô hạn\u003c\/h2\u003e\n\u003cp\u003eRetrieval-Augmented Generation (RAG) là pattern phổ biến nhất để vượt qua giới hạn của context window: thay vì nhét toàn bộ knowledge base vào context, bạn chỉ retrieve những đoạn relevant nhất tại runtime.\u003c\/p\u003e\n\n\u003ch3\u003eRAG pipeline cơ bản\u003c\/h3\u003e\n\u003col\u003e\n  \u003cli\u003eChunk tài liệu thành đoạn nhỏ (500-1000 tokens mỗi chunk)\u003c\/li\u003e\n  \u003cli\u003eEmbed từng chunk thành vector (dùng embedding model)\u003c\/li\u003e\n  \u003cli\u003eLưu vào vector database (Pinecone, Weaviate, pgvector...)\u003c\/li\u003e\n  \u003cli\u003eKhi có query, embed query và tìm top-K chunks tương đồng nhất\u003c\/li\u003e\n  \u003cli\u003eInject chunks vào context của Claude kèm theo câu hỏi\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Ví dụ context injection pattern\nconst relevantChunks = await vectorDB.search(userQuery, topK=5);\n\nconst systemPrompt = \"Bạn là trợ lý hỗ trợ khách hàng.\n\" +\n  \"Trả lời dựa trên tài liệu được cung cấp bên dưới.\n\" +\n  \"Nếu không tìm thấy thông tin liên quan, hãy nói rõ.\n\n\" +\n  \"--- TÀI LIỆU THAM CHIẾU ---\n\" +\n  relevantChunks.map(c =\u0026gt; c.text).join('\n\n') +\n  \"\n---\";\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eTối ưu RAG context\u003c\/h3\u003e\n\u003cp\u003eMột số kỹ thuật nâng cao:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eContextual chunking:\u003c\/strong\u003e Thêm metadata (title, section, date) vào mỗi chunk\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eHybrid search:\u003c\/strong\u003e Kết hợp semantic search (embedding) với keyword search (BM25)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRe-ranking:\u003c\/strong\u003e Dùng cross-encoder để re-rank kết quả trước khi inject vào context\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSelf-querying:\u003c\/strong\u003e Để Claude tự phân tích query và generate sub-queries tốt hơn\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eContext Compression — Nén thông tin mà không mất ý nghĩa\u003c\/h2\u003e\n\u003cp\u003eKhi conversation dài ra, context window đầy dần. Context compression là tập hợp kỹ thuật để giữ lại information density cao nhất trong không gian token giới hạn.\u003c\/p\u003e\n\n\u003ch3\u003eSummarization của conversation history\u003c\/h3\u003e\n\u003cp\u003eThay vì giữ toàn bộ conversation cũ, định kỳ yêu cầu Claude tóm tắt:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Khi conversation vượt ngưỡng token\nif (conversationTokens \u0026gt; THRESHOLD) {\n  const summary = await claude.complete({\n    messages: oldMessages,\n    system: \"Tóm tắt cuộc trò chuyện này thành bullet points\n             ngắn gọn, giữ lại các quyết định và thông tin\n             quan trọng. Tối đa 500 từ.\"\n  });\n\n  \/\/ Thay thế old messages bằng summary\n  messages = [{ role: 'user', content: '[TÓM TẮT TRƯỚC ĐÓ]: ' + summary }];\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eStructured context format\u003c\/h3\u003e\n\u003cp\u003eThông tin có cấu trúc tốt được compress hiệu quả hơn văn xuôi. Thay vì:\u003c\/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\"User đã đề cập rằng họ đang làm việc tại một công ty startup ở Hà Nội, team có 5 người, budget khoảng 10 triệu mỗi tháng, và họ đang tìm giải pháp CRM...\"\u003c\/p\u003e\n\u003c\/blockquote\u003e\n\u003cp\u003eHãy dùng:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eUSER_PROFILE:\n- Company: Startup, Hà Nội\n- Team size: 5 người\n- Budget: 10M VND\/tháng\n- Need: CRM solution\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eChunking Strategies — Chia nhỏ thông tin đúng cách\u003c\/h2\u003e\n\u003cp\u003eKhi xử lý tài liệu dài, cách bạn chunk ảnh hưởng trực tiếp đến chất lượng retrieval và inference.\u003c\/p\u003e\n\n\u003ch3\u003eCác chiến lược chunking\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eFixed-size chunking:\u003c\/strong\u003e Chia theo số token cố định — đơn giản nhưng có thể cắt giữa ý\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSemantic chunking:\u003c\/strong\u003e Chia theo paragraph\/section — tự nhiên hơn nhưng size không đều\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eHierarchical chunking:\u003c\/strong\u003e Lưu cả chunk lớn (context) và chunk nhỏ (precision) — search chunk nhỏ nhưng inject chunk lớn vào context\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSliding window:\u003c\/strong\u003e Overlap giữa các chunks để tránh mất thông tin ở ranh giới\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eTool Use như cách mở rộng context\u003c\/h2\u003e\n\u003cp\u003eTool use (function calling) không chỉ là cách để Claude thực hiện hành động — nó còn là cơ chế để inject thông tin động vào context mà không cần pre-load tất cả lên front.\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\/\/ Thay vì inject toàn bộ database vào context:\nconst tools = [\n  {\n    name: \"get_customer_info\",\n    description: \"Lấy thông tin khách hàng theo ID\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        customer_id: { type: \"string\" }\n      }\n    }\n  },\n  {\n    name: \"search_orders\",\n    description: \"Tìm kiếm đơn hàng theo các tiêu chí\",\n    input_schema: { \/* ... *\/ }\n  }\n];\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eClaude sẽ chủ động gọi tool khi cần thông tin, chỉ inject đúng data cần thiết vào context tại thời điểm cần — đây là dạng \"lazy loading\" cho context.\u003c\/p\u003e\n\n\u003ch2\u003eMemory và Persistence Patterns\u003c\/h2\u003e\n\u003cp\u003eClaude không có memory native giữa các session. Nhưng bạn có thể build memory layer bên ngoài:\u003c\/p\u003e\n\n\u003ch3\u003eUser memory pattern\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\/\/ Đầu mỗi session, load memory của user\nconst userMemory = await db.getUserMemory(userId);\n\nconst systemPrompt = BASE_SYSTEM_PROMPT +\n  \"\n\n--- BỘ NHỚ VỀ USER ---\n\" +\n  userMemory.preferences + \"\n\" +\n  userMemory.history_summary + \"\n\" +\n  userMemory.key_facts + \"\n---\";\n\n\/\/ Cuối session, extract và save new facts\nconst newFacts = await claude.extractFacts(conversation);\nawait db.updateUserMemory(userId, newFacts);\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eEntity memory pattern\u003c\/h3\u003e\n\u003cp\u003eTheo dõi các entities quan trọng (người, dự án, khái niệm) và lưu trữ riêng để inject có chọn lọc vào context khi liên quan.\u003c\/p\u003e\n\n\u003ch2\u003eĐo lường chất lượng context\u003c\/h2\u003e\n\u003cp\u003eContext Engineering tốt cần được đo lường, không phải chỉ cảm nhận. Các metrics cần theo dõi:\u003c\/p\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRelevance score:\u003c\/strong\u003e % thông tin trong context thực sự được dùng trong response\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGrounding rate:\u003c\/strong\u003e % claims trong response có thể trace về context (không hallucinate)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eToken efficiency:\u003c\/strong\u003e Quality của output \/ số input tokens sử dụng\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTask success rate:\u003c\/strong\u003e % requests được hoàn thành đúng theo yêu cầu\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eReal Architectures — Từ đơn giản đến phức tạp\u003c\/h2\u003e\n\n\u003ch3\u003eArchitecture 1: Simple Q\u0026amp;A với tài liệu\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003eSystem prompt (role + instructions)\n  + Retrieved document chunks (RAG)\n  + User question\n= Claude response\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eArchitecture 2: Multi-turn conversation agent\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003eSystem prompt (persona + tools definition)\n  + Compressed history (summary of old messages)\n  + Recent messages (last 10-20 turns)\n  + Tool results (if any)\n  + Current user message\n= Claude response (possibly with tool calls)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eArchitecture 3: Complex agentic pipeline\u003c\/h3\u003e\n\u003cpre\u003e\u003ccode\u003eOrchestrator system prompt\n  + Task definition\n  + Memory (user + project + session)\n  + Available sub-agents (descriptions)\n  + Previous agent outputs\n  + Current step instructions\n= Orchestrator decision → sub-agent call\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eContext Engineering là kỹ năng kết hợp giữa khoa học (token counting, information theory, attention patterns) và nghệ thuật (structure, clarity, emphasis). Khi bạn master k�� năng này, bạn sẽ xây dựng được các ứng dụng AI không chỉ hoạt động đúng, mà còn hoạt động \u003cem\u003etốt\u003c\/em\u003e — nhất quán, chính xác, và có chi phí tối ưu.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003eBài viết liên quan\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/building-effective-agents-v%E1%BB%9Bi-claude-h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-ki%E1%BA%BFn-truc\"\u003eBuilding Effective Agents với Claude — Hướng dẫn kiến trúc\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/fine-tuning-alternatives-khi-nao-c%E1%BA%A7n-tuy-ch%E1%BB%89nh-claude\"\u003eFine-tuning Alternatives — Khi nào cần tùy chỉnh Claude\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/claude-code-toan-t%E1%BA%ADp-l%E1%BA%ADp-trinh-v%E1%BB%9Bi-ai-agent-trong-terminal\"\u003eClaude Code toàn tập — Lập trình với AI agent trong terminal\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/extended-thinking-tool-use-suy-lu%E1%BA%ADn-sau-k%E1%BA%BFt-h%E1%BB%A3p-cong-c%E1%BB%A5\"\u003eExtended Thinking + Tool Use — Suy luận sâu kết hợp công cụ\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/10-sai-l%E1%BA%A7m-ph%E1%BB%95-bi%E1%BA%BFn-khi-dung-claude-va-cach-kh%E1%BA%AFc-ph%E1%BB%A5c\"\u003e10 sai lầm phổ biến khi dùng Claude — và cách khắc phục\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47721064956116,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/context-engineering-ngh_-thu_t-qu_n-ly-context-cho-claude.jpg?v=1774521542","url":"https:\/\/claude.vn\/en\/products\/context-engineering-ngh%e1%bb%87-thu%e1%ba%adt-qu%e1%ba%a3n-ly-context-cho-claude","provider":"CLAUDE.VN","version":"1.0","type":"link"}