Đang tải danh sách bài viết
Đang tải danh sách bài viết
Đang tải bài viết
Ba từ bạn sẽ nghe ngay khi nói mình làm app bằng AI. Mỗi cái thật ra là gì, cái nào giải quyết đúng vấn đề của bạn, và chỗ nào chọn sai sẽ tốn tiền thật. Không cần biết code vẫn hiểu được.
Đọc 24 phút
Thử tưởng tượng bạn vừa loay hoay làm xong một cái app AI chạy khá ổn. Hớn hở khoe lên Discord, và rồi ai đó phán: "Nhớ set up skill đàng hoàng nha", "Gắn MCP vào chưa?", hoặc "Cái này chạy bằng subagent mới mượt". Bạn khựng lại, đi tìm hiểu, và nhận ra hầu hết các bài hướng dẫn dường như đều mặc định bạn đã rành mấy chữ này từ kiếp nào rồi.
Tóm lại trong một câu cho dễ nhớ:
Skill thay đổi thứ AI của bạn biết. MCP thay đổi thứ nó chạm được. Subagent thay đổi ai là người làm việc đó.
Chỉ vậy thôi. Phần còn lại của bài viết này sẽ đi sâu vào việc: mỗi công cụ trông như thế nào trong thực tế, làm sao để biết vấn đề bạn đang gặp cần dùng cái nào, và quan trọng nhất là những chỗ nếu chọn sai, bạn sẽ tốn tiền thật.
Và bạn yên tâm, không cần phải là lập trình viên hay biết đọc code để theo dõi bài này.
| Skill | MCP | Subagent | |
|---|---|---|---|
| Gói gọn trong một chữ | Biết cách làm | Với tới được | Tay làm việc |
| Ví như con người | Cuốn cẩm nang bạn viết sẵn cho nhân viên mới | Chùm chìa khoá và tài khoản bạn cấp cho họ | Một người thứ hai bạn thuê về |
| Giải quyết nỗi đau | "Nó cứ làm sai đúng một kiểu, nhắc hoài không nhớ" | "Nó không nhìn thấy database, bản design hay ticket của mình" | "Chạy được nửa việc là nó quên sạch phần đầu" |
| Thực chất nó là gì | Một thư mục chứa các file văn bản (markdown) | Một chương trình chạy nền để AI kết nối vào hệ thống khác | Một phiên làm việc AI riêng biệt, có bộ nhớ riêng |
| Chi phí đánh đổi | Gần như không tốn gì | Một cổng kết nối, và một quyết định về bảo mật | Tốn khoảng 15× lượng token so với chat bình thường |
| Bạn tạo ra nó bằng cách | Viết bằng tiếng Việt/Anh như nói chuyện bình thường | Thường là tải và cài đặt của người khác làm sẵn | Viết bằng tiếng Việt/Anh như nói chuyện bình thường |
Có một sự thật thú vị: hai trong ba thứ ở trên hoàn toàn có thể được tạo ra bởi người không biết code, bằng ngôn ngữ giao tiếp hàng ngày. Skill và Subagent đúng nghĩa đen chỉ là những file text bình thường đi kèm vài dòng tiêu đề. Lát nữa chúng ta sẽ xem ví dụ cụ thể.
Cả ba công cụ này sinh ra để giải quyết chung một giới hạn cốt lõi. Hiểu được giới hạn này, mọi thứ sẽ tự động hợp lý.
AI của bạn có một thứ gọi là context window — cứ hiểu nó như bộ nhớ làm việc tạm thời cho cuộc hội thoại hiện tại. Mọi thứ bạn trao đổi đều bị nhồi nhét vào không gian đó: câu bạn dặn dò, file bạn yêu cầu nó mở, mã lỗi nó gặp phải, và cả những câu trả lời trước đó của chính nó. Bộ nhớ này rất lớn, nhưng nó có giới hạn, và đặc biệt là nó không tự biết dọn dẹp.
Vì thế, câu chuyện quen thuộc này hay xảy ra:
Bạn nhờ AI sửa một lỗi nhỏ
Để tìm đúng chỗ cần sửa, agent (trợ lý AI) rà soát qua 40 file khác nhau
Toàn bộ nội dung của 40 file đó nằm bẹp lại trong bộ nhớ làm việc suốt phần còn lại của buổi chat
Câu dặn dò cẩn thận của bạn từ 20 phút trước giờ đây phải chen lấn chỗ đứng với khoảng 40.000 từ nội dung mà không ai thèm đọc lại
AI "quên" mất một quy tắc quan trọng bạn đã đặt ra, và hồn nhiên làm hỏng lại đúng cái tính năng nó vừa sửa xong
Ở bước số 5, bạn sẽ có cảm giác: "Sao chiều nay con AI này tự nhiên ngốc đi vậy?". Sự thật là nó không ngốc đi. Nó chỉ bị quá tải thông tin. Nhìn từ góc độ "giải phóng bộ nhớ" này, ba công cụ lập tức tìm được chỗ đứng của mình:
Skill đơn giản là một thư mục, trong đó chứa một file có tên là SKILL.md. File này có vài dòng tiêu đề (header) ở trên cùng, phần còn lại là những hướng dẫn bằng ngôn ngữ tự nhiên về cách bạn muốn một việc gì đó được thực hiện.
Phần header chỉ bắt buộc có đúng hai thông tin: name (tên) và description (mô tả) — theo tài liệu chính thức về Agent Skills của Anthropic. Trong đó, description là phần sống còn, vì AI sẽ đọc nó để tự quyết định xem skill này có liên quan tới yêu cầu hiện tại của bạn hay không. Do đó, mô tả phải nói rõ cả skill này làm việc gì và trong trường hợp nào thì nên lấy ra dùng. Đây là một ví dụ thực tế (đã rút gọn):
---
name: deploy-checklist
description: những thứ phải kiểm tra trước khi đẩy app lên production — bao gồm env var, luật database, trang lỗi. dùng mỗi khi user nhắc tới các từ như deploy, ship, hoặc go live.
---
# trước khi deploy
1. kiểm tra đảm bảo không có api key nào nằm trong biến bắt đầu bằng NEXT_PUBLIC_.
2. kiểm tra xem row level security đã được bật cho mọi bảng chứa dữ liệu khách hàng chưa.
3. kiểm tra các trang báo lỗi 404 và 500 có render ra giao diện thật không.
...Đơn giản vậy là xong một skill. Bạn cứ viết bằng lời nói bình thường, lưu vào đúng thư mục, và từ đó về sau mọi phiên làm việc đều tự động áp dụng các quy tắc này mà bạn chẳng cần tốn công nhắc lại.
Điều này khá thú vị và đáng để hiểu, vì nó giải thích tại sao bạn có thể cài sẵn 30 skill nhưng lại không tốn kém gì cho 29 cái đang nằm im.
Anthropic gọi cơ chế này là progressive disclosure (nạp thông tin luỹ tiến theo nhu cầu). Họ mô tả nó hoạt động hệt như cách bạn dùng một cuốn sổ tay được thiết kế tốt: đầu tiên chỉ đọc mục lục, tiếp theo mới lật tới chương cần đọc, và chỉ dở tới phần phụ lục nếu thực sự cần tra cứu chi tiết (Nguồn: Anthropic Engineering).
Những con số cụ thể sau đây được lấy trực tiếp từ tài liệu do chính hãng công bố.
| AI nạp cái gì | Khi nào nạp | Tốn bao nhiêu dung lượng |
|---|---|---|
Chỉ nạp name và description | Luôn luôn, ngay lúc khởi động phiên chat | ~100 token cho mỗi skill |
| Toàn bộ phần nội dung hướng dẫn | Chỉ nạp khi skill đó được kích hoạt | Dưới 5.000 token |
| Các file đính kèm phụ, script, tài liệu tham khảo | Chỉ nạp khi AI thực sự mở file đó ra | Bằng 0 cho tới thời điểm đó |
100 token chỉ tương đương với khoảng một câu nói ngắn. Vậy nên nếu bạn thắc mắc "tạo bao nhiêu skill là quá nhiều?", thì câu trả lời thực tế là: cứ tạo thoải mái, giới hạn duy nhất là thời gian bạn ngồi viết ra chúng.
Bất cứ khi nào bạn nhận ra mình đang phải gõ lại cùng một câu nhắc nhở đến lần thứ ba. Chỉ đơn giản vậy thôi.
Mỗi câu cằn nhằn đó xứng đáng là một skill, và bạn chỉ mất chưa tới bốn phút để viết nó ra. Skill được lưu ở ~/.claude/skills/ nếu bạn muốn AI nhớ nó ở mọi dự án, hoặc lưu ở .claude/skills/ ngay trong thư mục dự án nếu nó chỉ dành riêng cho project đó.
Skill giúp AI biết cách làm. Nhưng bản thân skill không giúp AI nhìn thấy được những dữ liệu mới. Việc đó là nhiệm vụ của MCP.
MCP (Model Context Protocol) là một tiêu chuẩn mở, sinh ra để kết nối các ứng dụng AI với các hệ thống dữ liệu bên ngoài. Trang tài liệu chính thức miêu tả nó rất hình tượng: đây là "cổng USB-C cho các ứng dụng AI" (Nguồn: modelcontextprotocol.io). Sự ví von này vô cùng chính xác: trước đây, muốn AI đọc được Notion hay Github, mỗi công cụ phải tự chế ra một loại "đầu cắm" riêng. Giờ đây, tất cả thống nhất dùng chung một chuẩn kết nối.
Để làm được việc này, bạn kết nối AI với một MCP server — hiểu nôm na là một phần mềm trung gian nhỏ gọn đứng giữa AI và hệ thống bạn muốn truy cập. Hiện tại đã có sẵn server cho Figma, Github, Stripe, Postgres, và thậm chí là hệ thống file trên chính máy tính của bạn. Vì nó là tiêu chuẩn mở chứ không phải đặc quyền riêng của Anthropic, nên từ Claude, ChatGPT cho đến VS Code hay Cursor đều có thể giao tiếp mượt mà qua giao thức này.
Một MCP server có thể cung cấp cho AI của bạn ba thứ (Kiến trúc MCP):
Server này có thể chạy ngay trên máy tính của bạn (local), hoặc chạy trên một máy chủ xa xôi qua Internet. Sự khác biệt này không phải là tiểu tiết — nó chính là lằn ranh quyết định độ an toàn cho dữ liệu của bạn.
Việc cấp quyền truy cập thẳng vào database production cho một con AI là một quyết định cần sự nghiêm túc. Tuy nhiên, rủi ro lớn nhất không nằm ở viễn cảnh khoa học viễn tưởng rằng "AI bỗng nhiên nổi loạn phá hoại". Rủi ro thực tế là: bất cứ thứ gì agent của bạn đọc được, đều có thể chứa những dòng lệnh ẩn mà nó sẽ ngây thơ làm theo. Trong ngành bảo mật, hai rủi ro này đã được đặt tên rõ ràng.
1. Tool poisoning (Đầu độc công cụ). Một server MCP độc hại có thể lén giấu những câu lệnh thao túng ngay trong phần mô tả của tool — đây là đoạn văn bản mà chỉ có AI đọc để hiểu công cụ, còn bạn thì gần như không bao giờ nhìn thấy. Một nghiên cứu công bố năm 2026 khảo sát qua bảy ứng dụng hỗ trợ MCP (MCP client) đã kết luận đây là lỗ hổng phía client phổ biến và nghiêm trọng nhất. Họ cũng nhận thấy khả năng phòng thủ của các client hiện nay là rất chênh lệch (Nguồn: arXiv:2603.22489 — lưu ý đây là bản preprint, nên hãy coi nó là một bằng chứng có sức nặng chứ chưa phải kết luận cuối cùng).
2. Indirect prompt injection (Bơm lệnh gián tiếp). Giả sử agent của bạn được giao đi đọc nội dung của một trang web, một ticket báo lỗi, hay tiêu đề của một pull request trên Github. Kẻ xấu chỉ cần viết sẵn các câu lệnh thao túng vào những chỗ đó. Khi AI lấy dữ liệu về đọc, đoạn văn bản đó hoà vào bộ nhớ, và một agent thiếu cơ chế phòng thủ sẽ tự động thực hiện các câu lệnh ẩn kia (Nguồn: Đội ngũ Unit 42, Palo Alto Networks). Không cần phải có hacker cao siêu nào phá vỡ tường lửa. Họ chỉ cần thả văn bản vào đúng nơi AI sẽ quét qua.
Nhưng bạn không cần phải học làm kỹ sư bảo mật để dùng AI. Chỉ cần duy trì ba thói quen thực tế sau đây:
Subagent đơn giản là một phiên làm việc AI phụ, do phiên làm việc chính tạo ra để giao việc. Đặc điểm nhận diện cốt lõi của nó là nó sở hữu một context window hoàn toàn riêng biệt — nghĩa là nó có trí nhớ riêng, được dặn dò bằng một câu lệnh hệ thống (system prompt) riêng, và bộ công cụ (tool) của nó cũng được cấp phát riêng rẽ (Nguồn: Tài liệu Claude Code).
Hãy quay lại ví dụ 40 file làm tràn bộ nhớ ở đầu bài. Khi có subagent, việc lục lọi tìm kiếm sẽ diễn ra ở "bàn làm việc" của nó. 40 file đó có thể làm đầy bộ nhớ của con subagent, nhưng thứ cuối cùng nó báo cáo lại cho bạn chỉ gọn gàng trong ba ý: file cần sửa nằm đây, ở dòng này, và lý do lỗi là đây. Phiên làm việc chính của bạn vẫn sạch sẽ, không hề bị rác bởi 39 file không liên quan kia.
Về cách tạo, subagent cũng giống skill, chỉ là một file markdown kèm vài dòng tiêu đề:
---
name: code-improver
description: chuyên quét các file và đề xuất cách tối ưu. dùng ngay sau khi bạn vừa viết xong tính năng hoặc sửa code.
tools: Read, Grep, Glob
model: sonnet
---
bạn là một chuyên gia tối ưu mã nguồn. với mỗi vấn đề tìm thấy, hãy giải thích lỗi,
trích dẫn đoạn code hiện tại, và sau đó đưa ra phiên bản đã được sửa chữa.Đừng đánh giá thấp hai dòng thông số trong cấu hình trên. Dòng tools: Read, Grep, Glob chính là ranh giới quyền lực — bạn đang giới hạn rõ ràng những gì subagent này được phép làm. Cả ba công cụ này đều chỉ có chức năng đọc (read-only), nên dù subagent có "nổi hứng" quyết định gì đi nữa, về mặt vật lý, nó hoàn toàn không có khả năng tự ý sửa đổi file của bạn. Còn dòng model: sonnet giúp bạn điều phối công việc phụ sang một mô hình AI có chi phí rẻ hơn so với phiên làm việc chính. Việc này quan trọng hơn bạn nghĩ rất nhiều.
Sử dụng subagent, bạn nhận được đúng những lợi ích mà Anthropic thiết kế: tách bạch quá trình dò dẫm khỏi luồng suy nghĩ chính, giới hạn rủi ro cho một tác vụ cụ thể, và tối ưu chi phí bằng cách đẩy việc vặt cho model rẻ hơn.
Đây là phần bạn cần nhớ kỹ. Đội ngũ kỹ sư (engineering) của Anthropic đã trực tiếp đo lường trên hệ thống của họ và công bố những con số sau: một agent đơn lẻ tốn khoảng 4× lượng token so với việc bạn chat bình thường, còn nếu chạy một hệ thống nhiều agent cùng lúc (multi-agent), chi phí vọt lên khoảng 15× so với chat thường (Nguồn: Anthropic Engineering).
Con số 15× không phải sinh ra để doạ bạn không dùng subagent. Nó sinh ra để nhắc bạn rằng tư duy "cứ ném cho 5 con agent tự chạy" là một quyết định đốt tiền, và bạn cần cân nhắc xem kết quả thu về có đáng với chi phí đó không.
Hãy đọc kỹ đoạn này, vì nó đi ngược lại với rất nhiều lời khuyên "thần thánh hoá AI" bạn hay thấy trên mạng. Chính bài viết phân tích của Anthropic đã khẳng định rằng: kiến trúc nhiều agent (multi-agent) không hề phù hợp cho những công việc đòi hỏi các agent phải liên tục chia sẻ context (ngữ cảnh) cho nhau, các tác vụ mà bước sau phụ thuộc quá chặt vào bước trước, hoặc — nói thẳng ra — phần lớn các công việc lập trình thông thường. Đơn giản vì lập trình thường không có nhiều tác vụ thực sự có thể băm nhỏ để chạy song song độc lập.
Nơi subagent thực sự toả sáng, và xứng đáng tới từng xu, là những công việc đòi hỏi "bề rộng": cày xới một hệ thống mã nguồn khổng lồ, nghiên cứu song song nhiều phương án giải quyết cùng lúc, hoặc đi kiểm tra chéo một lỗi ở hàng loạt hệ thống khác nhau. Trên bài đánh giá (benchmark) nội bộ do chính Anthropic công bố, mô hình kết hợp một agent chính giao việc cho các subagent đã vượt trội hơn agent đơn lẻ tới 90,2% (Anthropic Engineering — benchmark nội bộ, do nhà cung cấp tự công bố). Dù vậy, hãy nhớ đây là kết quả trên các tác vụ thiên về "nghiên cứu" (research). Bạn nên xem con số này là kim chỉ nam về tiềm năng, chứ không phải lời cam kết chắc nịch cho ứng dụng của bạn.
Nguyên tắc vàng: Hãy xuất phát từ nỗi đau (triệu chứng) của bạn, đừng xuất phát từ việc thấy công cụ hay quá nên cố tìm chỗ nhét vào.
| Bạn đang gặp tình huống | Thứ bạn thực sự cần |
|---|---|
| "Nó cứ kiên trì lặp lại đúng cái lỗi mình đã bắt nó sửa 5 lần rồi." | Hãy viết một Skill |
| "Code nó viết chạy được, nhưng không đúng chuẩn mực (convention) của dự án." | Hãy viết một Skill |
| "Nó toàn đoán mò xem cấu trúc database / thiết kế UI / ticket yêu cầu trông như thế nào." | Hãy cài một MCP server |
| "Mình cứ phải hì hục copy dữ liệu bên ngoài rồi dán tay vào khung chat." | Hãy cài một MCP server |
| "20 phút đầu làm việc cực mượt, nhưng càng về sau nó càng rối tung lên." | Hãy nghĩ tới Subagent |
| "Mình muốn nó tự đi lùng sục thông tin, nhưng đừng vứt đống tài liệu đó vào phiên làm việc của mình." | Hãy dùng Subagent |
| "Nhìn chung là... nó làm việc này quá dở." | Đừng dùng công cụ nào vội — hãy thử viết lại câu yêu cầu (prompt) rõ ràng hơn |
Cái dòng cuối cùng trong bảng không phải là lời nói đùa. Trong thực tế, phần lớn những vấn đề trông có vẻ như "tôi đang thiếu công cụ xịn", thật ra lại là "tôi đang thiếu hướng dẫn rõ ràng". Nếu yêu cầu của bạn vốn đã mơ hồ, thì Skill, MCP hay Subagent cũng chỉ là những cỗ máy khuếch đại một yêu cầu mơ hồ thành một kết quả mơ hồ lớn hơn mà thôi.
Chúng không phải là ba lựa chọn để bạn cân nhắc bỏ cái này lấy cái kia. Anthropic mô tả Skill như một mảnh ghép bổ trợ hoàn hảo cho MCP server: MCP cung cấp công cụ, còn Skill sẽ dạy agent quy trình cách sử dụng công cụ đó. Nói gọn lại là: "MCP nối Claude với dữ liệu; còn Skill dạy Claude phải làm gì với mớ dữ liệu đó" (Nguồn: Bài viết Skills Explained, Anthropic).
Hãy xem một ví dụ thực tế. Giả sử bạn muốn AI làm báo cáo hàng tuần về những khách hàng có nguy cơ rời bỏ ứng dụng (churn).
Với tới được (MCP), biết cách làm (Skill), và có người cày cuốc (Subagent). Mỗi công cụ gánh vác đúng phần việc mà hai cái kia không làm được.
Nếu muốn ứng dụng ngay, hãy đi theo thứ tự sau (ưu tiên cái rẻ và nhanh trước):
.claude/skills/ trong project, thả vào đó một file SKILL.md. Nhớ viết name và description (nói rõ khi nào thì AI nên dùng cái này), và dán câu nhắc nhở thường ngày của bạn xuống dưới. Mất đúng bốn phút. Thậm chí bạn có thể nhờ chính AI viết hộ cái file đó, bạn chỉ cần đọc lại và sửa phần description sao cho chuẩn — vì nó là thứ duy nhất bắt buộc phải chính xác.Một thực tế thú vị: những người vắt kiệt được nhiều giá trị nhất từ các công cụ AI này hiếm khi là những lập trình viên lõi đời — con số 80% ở đầu bài rất khớp với xu hướng chúng tôi quan sát thấy. Kỹ năng thực sự ở kỷ nguyên này không phải là viết code giỏi, mà là hiểu thật rõ quy trình làm việc của chính mình để có thể viết nó ra rành mạch. Và tin vui là, phần đó thì bạn đã có sẵn rồi.
Với Skill và Subagent thì hoàn toàn được — vì cả hai thực chất chỉ là những file văn bản bình thường chứa lời dặn dò, thêm vài dòng cấu hình kỹ thuật nhỏ. Với MCP thì bạn làm được một phần: việc cài đặt server thường chỉ dừng ở mức copy và dán một đoạn cấu hình (config) người khác cho sẵn, cảm giác giống như làm theo công thức nấu ăn hơn là lập trình phần mềm.
Khác rất nhiều, và điểm khác biệt cốt lõi nằm ở "cách nạp dữ liệu". Hướng dẫn dự án (Project Rules/Instructions) sẽ bị ép phải đọc trong mọi phiên chat, dù bạn có đang làm việc liên quan đến nó hay không. Còn Skill hoạt động theo cơ chế luỹ tiến — nó chỉ tốn khoảng 100 token cho đến khi có một câu lệnh nào đó của bạn "đánh thức" nó dậy, lúc đó nó mới nạp toàn bộ nội dung. Nhờ vậy, bạn có thể tạo cả một thư viện hàng chục Skill, trong khi chỉ nên giữ vài dòng hướng dẫn chung thường trực.
Bản thân giao thức kết nối (protocol) thì rất chuẩn mực, và các server phổ biến được cộng đồng sử dụng rộng rãi. Rủi ro không nằm ở giao thức, mà nằm ở việc bạn cho phép server đó được làm những gì, và bạn có tin tưởng người tạo ra nó không. Hãy giữ tư duy như khi cài app vào điện thoại: chọn nhà phát triển có tên tuổi, cấp quyền vừa đủ dùng, và đừng bao giờ kết nối hệ thống dữ liệu thật (production) vào một phiên chat AI vô thưởng vô phạt rồi bỏ mặc nó.
Đôi khi, nếu công việc đó thực sự có thể xé lẻ thành nhiều phần độc lập. Nhưng với phần lớn các tác vụ lập trình thì không, chính tài liệu của Anthropic cũng thừa nhận thường không có đủ các phần việc chạy song song được. Giá trị lớn nhất mà Subagent mang lại là sức bền — nó giúp giải quyết dứt điểm căn bệnh "chat sau một tiếng là AI ngáo ngơ" của các phiên làm việc dài.
Trên thực tế, bạn sẽ cạn kiệt ý tưởng để viết trước khi chạm tới giới hạn của hệ thống. Mỗi Skill khi không dùng tới chỉ chiếm dung lượng bằng khoảng một câu nói ngắn.
Với Skill và Subagent đặt trong thư mục dự án (project) thì hoàn toàn được — chúng chỉ là file văn bản, bạn cứ commit đẩy lên Github là cả team tự động có. Tuy nhiên, nếu bạn tạo Skill ngay trên giao diện web của Claude.ai thì nó thuộc về tài khoản cá nhân và không tự đồng bộ cho người khác. Hãy kiểm tra lại tài liệu hướng dẫn của Anthropic để xem các thay đổi mới nhất về tính năng chia sẻ này.