Skills, Context, Instructions, MCP: Hiểu Đúng Thuật Ngữ Khi Làm Việc Với AI Agent
Bạn vừa nghe pitch một đồng nghiệp về "agent mới của tụi mình có Skills, có MCP, đọc Context từ folder, có Instructions riêng cho từng vai trò" — và thấy bốn thuật ngữ đó hơi giống nhau? Không chỉ bạn đâu. Mấy tháng nay mình review khá nhiều dự án AI Agent của anh em, lỗi phổ biến nhất không phải bug code mà là dùng sai chỗ giữa Skills, Context, Instructions và MCP. Hậu quả: agent vừa chậm, vừa đốt token, lúc cần nhớ thì quên, lúc không cần thì lôi cả đống prompt vô. Bài này mình xếp lại bốn khái niệm này gọn gàng, vẽ một bức tranh tổng thể để bạn nhìn cái là biết cái nào ở đâu, dùng khi nào.
Kiến trúc một AI Agent gồm những tầng nào?
Nếu xem AI Agent như một "nhân viên", thì bốn thứ Skills / Context / Instructions / MCP đóng vai trò khác nhau hoàn toàn. Mình hay ví: LLM là bộ não, Instructions là bản mô tả công việc, Context là tài liệu đặt trên bàn, Skills là kỹ năng đã được training, còn MCP là cánh tay nối với hệ thống bên ngoài. Nhân viên dù có não thông minh tới đâu mà không có bản mô tả công việc rõ, không có tài liệu để tra cứu, không biết kỹ năng nào áp dụng khi nào, không có công cụ để thao tác — thì cũng chỉ ngồi tám với bạn thôi.
Khổ nỗi là tài liệu chính thống về mấy thuật ngữ này nằm rải rác. Anthropic gọi một thứ, OpenAI gọi khác, cộng đồng dev lại đẻ ra biến thể mới. Mình sẽ thống nhất theo cách dùng phổ biến nhất 2026 — cụ thể là cách Claude Code và Cowork đang phân loại — vì đó là chuẩn rõ ràng nhất hiện nay.
Instructions — bản mô tả công việc (System Prompt)
Instructions là tập rule cố định bạn nhét vào đầu mỗi phiên. Nó trả lời câu hỏi: "Agent này là ai, có nhiệm vụ gì, được phép làm gì, cấm làm gì, văn phong ra sao?". Trong Claude API thì đây chính là system prompt. Trong Cowork thì là phần "User preferences" bạn viết ở Settings — mình ví dụ:
1. Đảm bảo không lộ thông tin bảo mật
2. Trực tiếp — không vòng vo
3. Tận dụng Markdown
4. Không bịa thông tin
5. Phân tích step-by-step trước khi trả lời
Năm dòng đó áp lên mọi cuộc trò chuyện, mọi task. Đặc điểm Instructions: luôn nằm trong context window, không thay đổi giữa các lượt, và token cost đều mỗi turn. Vì vậy đừng nhét vào đó cả 500 dòng "phòng khi cần" — viết càng ngắn càng tốt, chỉ giữ thứ thật sự ảnh hưởng tới mọi response.
Bẫy thường gặp: nhét toàn bộ kiến thức domain vào Instructions cho "chắc". Sai. Kiến thức domain nên ở Context (khi cần thì load) hoặc Skills (skill biết tự kích hoạt). Instructions = quy tắc hành xử, không phải bách khoa.
Context — tài liệu đặt trên bàn làm việc
Context là tất cả nội dung agent đọc được trong một phiên cụ thể. File bạn vừa upload, tin nhắn trong chat, output từ tool call trước đó, kết quả search web — đều là Context. Nó khác Instructions ở chỗ nó biến đổi theo phiên, không cố định.
Trong Claude Agent SDK, context được quản lý qua cái gọi là context window — kích thước tối đa thường 200K token với Claude Sonnet 4.6, lớn hơn với Opus. Nghe to nhưng đốt cũng nhanh: một file PDF 50 trang, một transcript meeting 1 tiếng, vài screenshot — là đầy.
Best practice mình rút ra qua mấy chục dự án:
Đừng load hết một lúc. Lazy load. Cần đoạn nào thì grep/search đoạn đó, đừng quăng nguyên file vào.
Cụ thể: với codebase 10K dòng, đừng cat hết rồi nhét vô — dùng Read với offset, hoặc Grep tìm symbol trước. Agent giỏi không phải agent đọc nhiều, mà là agent biết đọc đúng chỗ.
Skills — kỹ năng đóng gói sẵn, tự kích hoạt khi cần
Đây là khái niệm mới nhất và hay bị hiểu sai nhất. Skill (theo định nghĩa Anthropic 2025) là một thư mục chứa SKILL.md mô tả khi nào dùng + hướng dẫn dùng, kèm các file phụ trợ (script, template, asset). Khác Instructions ở chỗ: skill chỉ load vào context khi agent thấy task phù hợp. Phần nội dung skill (gọi là "progressive disclosure") chỉ được đọc khi cần — đỡ tốn token cực kỳ.
Ví dụ thực tế: skill chiendung-create-blog của mình có ~6500 token mô tả pipeline. Nếu để toàn bộ trong Instructions, mọi câu chat đều mang theo 6500 token thừa. Nhưng dưới dạng skill, nó chỉ load khi user gõ "đăng bài blog" — các phiên khác hoàn toàn miễn phí phần đó.
Cấu trúc một skill tối thiểu:
my-skill/
├── SKILL.md # name, description, hướng dẫn chính
├── scripts/ # tool đi kèm
└── references/ # tài liệu chi tiết, đọc khi cần
Description trong SKILL.md là phần quan trọng nhất — nó quyết định model có triggered đúng skill không. Viết description quá chung chung → skill bị bỏ qua. Viết quá hẹp → skill không trigger khi cần.
Mẹo xương máu: description nên liệt kê các trigger word cụ thể user hay dùng, dạng "Use this skill when user asks: ..., ..., ...". Đừng viết kiểu sách giáo khoa.
MCP — Model Context Protocol, cánh tay nối với thế giới ngoài
MCP là giao thức chuẩn do Anthropic công bố cuối 2024 để LLM nói chuyện với external system (API, database, app, file system). Trước MCP, mỗi tool tích hợp một kiểu, mỗi LLM provider có custom function-calling format riêng. Sau MCP: viết server một lần, dùng được khắp nơi (Claude Desktop, Claude Code, Cursor, Windsurf, Zed...).
Một MCP server expose ba thứ cho agent: tools (hàm có side-effect), resources (data đọc-thuần như file, URL), prompts (template tái sử dụng). Agent thấy danh sách, model tự quyết khi nào gọi.
Ví dụ MCP phổ biến mình hay dùng:
- filesystem : đọc/ghi file local
- github : list PR, đọc issue, comment
- slack : đọc kênh, gửi DM
- postgres : chạy SELECT trên DB
- chrome : điều khiển browser
Khác Skills ở điểm cốt lõi: Skills = knowledge + workflow text, không có code execution. MCP = code thực sự chạy, có thể call API ngoài. Một bài blog cần cả hai: skill biết viết theo style nào, MCP biết upload ảnh, gọi backend, ghi DB.
Phân biệt qua use case thực tế
Mình mô phỏng một workflow đơn giản: "Mỗi sáng tự đăng 1 bài blog SEO lên website". Nghĩ xem mỗi tầng làm gì:
Instructions: "Bạn là content writer 5 năm kinh nghiệm. Văn phong thân thiện. Không bịa thông tin. Cấm cụm sặc mùi AI." — Áp cho mọi phiên, không thay đổi.
Skills: chiendung-create-blog chứa cả pipeline (đọc backlog → gen ảnh → viết content → upload → POST). Chỉ load khi user/scheduler kích "đăng blog".
Context: file post_log.md (backlog topic) + file rules.md (writing style) được đọc trong phiên đó. Phiên tiếp theo cần lại thì lại đọc.
MCP: filesystem MCP để đọc file, chrome MCP để điều khiển ChatGPT-web gen ảnh, custom MCP để POST backend, schedule MCP để chạy auto mỗi sáng.
Bốn tầng phối hợp: brain (LLM) nhận task → check Instructions (mình được phép làm) → skill được trigger → đọc Context theo nhu cầu → gọi MCP để thao tác. Mỗi tầng có vai trò không thể thay thế.
Ổ gà thường mắc khi mới làm AI Agent
Lỗi 1: Nhét tất tần tật vào Instructions. Nhiều bạn copy hết doc, hết FAQ, hết hướng dẫn vào system prompt cho "agent biết hết". Kết quả: mỗi turn ngốn 30K-50K token thừa, response chậm, model dễ lạc focus. Sửa: chỉ giữ rule hành xử, chuyển kiến thức xuống Skills hoặc tool calls.
Lỗi 2: Skill description mơ hồ. Viết kiểu "Helper for content tasks" — không bao giờ trigger. Phải viết cụ thể: "Use when user asks to write a blog post, create a SEO article, or publish to chiendung.com".
Lỗi 3: Lẫn lộn Context và Memory. Context là trong-phiên, mất khi đóng. Memory là cross-session (như "remember the user prefers Vietnamese"). Đừng kỳ vọng context phiên A xuất hiện ở phiên B — nó không tự sang. Phải dùng tool/memory system tách rời.
Lỗi 4: MCP không có schema rõ. Model không gọi đúng tool vì description trả về JSON mơ hồ. Mỗi tool MCP nên có: tên ngắn, mô tả 1-2 câu nêu rõ khi nào dùng, schema với type rõ ràng, ví dụ input/output trong description.
Lỗi 5: Không phân biệt read-only resource và side-effect tool. Resource (như "đọc file") nên dùng resources trong MCP — model có thể list trước không cần permission. Tool ghi/xóa/gửi nên là tools — phải xin xác nhận, nhất là khi irreversible.
FAQ nhanh
Q: Skill và Instructions cái nào nặng hơn về token?A: Instructions luôn nằm trong context mỗi turn — nặng cố định. Skill chỉ load khi trigger — phần lớn phiên nó miễn phí. Nguyên tắc: thứ gì cần luôn → Instructions, thứ gì cần đôi lúc → Skill.
Q: Có cần Skills nếu mình đã dùng MCP tools rồi?A: Có. MCP cho agent khả năng làm, Skill cho agent biết khi nào và làm theo trình tự nào. Workflow phức tạp (5-10 bước có thứ tự) nên gói trong Skill, không nên dồn vào một MCP tool to.
Q: Context window 200K to thế, sao vẫn cần phân biệt?A: 200K nghe to nhưng vẫn hữu hạn — và càng dùng nhiều, response càng chậm + nguy cơ "lost in the middle" (model quên đoạn giữa). Phân biệt giúp giữ context window thoáng, model focus tốt hơn vào task hiện tại.
Q: MCP server tự viết được không, hay phải dùng có sẵn?A: Viết được, khá đơn giản. Anthropic có Python SDK (FastMCP) và TypeScript SDK. Mình viết MCP server cho backend chiendung.com chỉ mất 1 buổi chiều. Quan trọng là design tool/resource schema cẩn thận để model gọi đúng.
Q: Có chuẩn nào cho việc viết SKILL.md không?A: Anthropic có guideline trong agent-skills documentation. Quan trọng nhất: 3 phần — frontmatter (name, description), hướng dẫn chính, references. Description nên có trigger word cụ thể. Mình hay xem skill nguồn từ
anthropic-skillsđể tham khảo cấu trúc.
Một góc nhìn cá nhân
Mình thấy nhiều bạn vào AI Agent với mindset cũ kiểu "một con bot xử lý mọi thứ" — nhồi mọi thứ vào prompt rồi mong nó tự xử. Cách đó đốt token mà kết quả không bằng việc tách rạch ròi bốn tầng này. Instructions giữ identity, Context giữ thông tin phiên, Skills đóng gói workflow tái dùng, MCP cho phép tương tác hệ thống thực. Bốn cái đó không thay thế nhau được. Hiểu đúng chúng là bước đầu để build agent vừa nhanh, vừa rẻ, vừa đáng tin.
Nếu bạn đang lúng túng chỗ nào, comment dưới bài cho mình biết — mình hay viết tiếp về cách tối ưu từng tầng. Còn nếu sắp build agent mới, lời khuyên đầu tiên: vẽ ra cái sơ đồ bốn tầng cho dự án của mình trước khi gõ dòng code đầu tiên. Chỉ cần 15 phút thôi nhưng tiết kiệm cả tuần debug sau này.
