Phân tích Kỹ thuật Claude Skills và MCP

Đại mô hình ngôn ngữ (LLM) có khả năng suy luận "thông minh" đến đâu là một chuyện, còn việc chúng có thực sự hoàn thành được công việc trong thế giới thực hay không lại là chuyện khác. Bài viết này không chỉ giới thiệu một khái niệm mới, mà còn đi sâu vào giải đáp câu hỏi mà nhiều kỹ sư đang băn khoăn: Claude Skills và MCP giải quyết vấn đề gì? Tại sao chúng lại "nặng nề" hơn so với Tool/Function Calling truyền thống?

Từ Vấn đề Thực tế

Hãy xem xét một tình huống phổ biến: bạn yêu cầu một LLM thực hiện một tác vụ phức tạp:

"Hãy tra cứu thông tin người dùng, 30 ngày đặt hàng gần nhất của họ, sau đó đưa ra đề xuất vận hành."

Nếu bạn đã từng xây dựng các hệ thống tương tự, phản ứng đầu tiên của bạn sẽ là:

  • Truy vấn bảng người dùng.
  • Truy vấn bảng đơn hàng.
  • Tổng hợp dữ liệu.
  • Phân tích kết quả.

Tuy nhiên, các phương pháp LLM truyền thống thường giải quyết vấn đề này bằng cách:

  • Sử dụng Prompt để yêu cầu mô hình "giả vờ như đã tra cứu cơ sở dữ liệu".
  • Hoặc sử dụng Function Calling để gọi một hoặc hai API một cách miễn cưỡng.
  • Hoặc viết logic quy trình cứng trong mã nguồn bên ngoài.

Các cách tiếp cận này đều có những hạn chế rõ ràng:

  • Prompt mang lại khả năng "ảo".
  • Function Calling chỉ là bán tự động.
  • Quy trình bên ngoài khiến mô hình trở nên thụ động.

Claude Skills và MCP ra đời để giải quyết vấn đề này từ gốc rễ.

Claude Skills: Làm Rõ Sự Nhầm Lẫn

Nhiều người lần đầu nghe đến "Skill" thường mặc định hiểu đó là:

"Ồ, đó là Tool."

Tuy nhiên, thực tế Claude Skills và Tool truyền thống không cùng một cấp độ.

Hiểu một cách trực quan:

  • Tool: "Đây là một hàm, bạn có thể gọi nó."
  • Skills: "Đây là ranh giới năng lực bạn được phép sử dụng, tôi đã định nghĩa sẵn đầu vào, đầu ra và các quy tắc cho bạn."

Skill giống với điều gì hơn?

  • Sự kết hợp giữa API hệ thống + hệ thống kiểu dữ liệu + ranh giới quyền hạn.

Một Skill tối thiểu bao gồm những gì?

Một Claude Skill hoàn chỉnh thường bao gồm:

  • Tên năng lực (Name).
  • Mô tả năng lực (dành cho mô hình).
  • Cấu trúc tham số đầu vào (JSON Schema).
  • Cấu trúc kết quả đầu ra (JSON Schema).
  • Logic thực thi thực tế (chạy trong Skill Server).

Nói cách khác, bản thân Skill là "khai báo", mô hình không quan tâm bạn triển khai bằng Python, Java hay Rust.

MCP (Model Context Protocol) là gì?

Định nghĩa không chính thức nhưng dễ hiểu:

MCP là một bộ giao thức cho phép LLM "sử dụng năng lực bên ngoài một cách an toàn, có kiểm soát và tích hợp kết quả vào quá trình suy luận".

Các từ khóa quan trọng ở đây không phải là "gọi", mà là:

  • An toàn
  • Có kiểm soát
  • Tích hợp

Ba điểm này chính là điều mà nhiều giải pháp Tool gặp khó khăn.

MCP giải quyết cốt lõi vấn đề gì?

MCP không giải quyết "cách gọi hàm", mà tập trung vào các vấn đề sau:

  • Mô hình làm sao biết có những năng lực nào có thể sử dụng?
  • Mô hình làm sao hiểu được các năng lực đó làm gì?
  • Mô hình làm sao đảm bảo không truyền sai tham số?
  • Kết quả thực thi làm sao quay trở lại ngữ cảnh để tiếp tục suy luận?
  • Toàn bộ quá trình làm sao để con người quản lý?

MCP giải quyết "vấn đề giao thức giữa mô hình và hệ thống thực tế".

Kiến trúc Tổng thể: Claude là Bộ Não, MCP là Hệ Thần Kinh

Hãy xem xét sơ đồ tổng thể:

Claude Skills MCP Architecture

Điểm mấu chốt ở đây là:

  • Claude không tương tác trực tiếp với cơ sở dữ liệu.
  • Claude không gửi yêu cầu HTTP trực tiếp.
  • Claude chỉ "nói chuyện" với MCP.

Điều này giống như: Bộ não không điều khiển trực tiếp các sợi cơ, mà truyền tín hiệu thông qua hệ thần kinh.

Quy trình Gọi MCP Hoàn chỉnh

Hãy mổ xẻ một lần gọi đầy đủ:

Kịch bản

Người dùng nói:

"Hãy tra cứu thông tin người dùng test@example.com."

1. Claude làm gì trước?

Đầu tiên, Claude thực hiện phân tích ngữ nghĩa:

  • Đây là yêu cầu "tra cứu người dùng".
  • Trong ngữ cảnh hiện tại, có Skill nào có thể thực hiện việc này không?
  • Nếu MCP Client đã đăng ký một Skill tương tự như:
    get_user_by_email
    
    Claude sẽ tiếp tục.

2. Claude tạo yêu cầu gọi MCP (có cấu trúc)

Không phải ngôn ngữ tự nhiên, mà là một yêu cầu có cấu trúc dạng:

{
  "tool": "get_user_by_email",
  "arguments": {
    "email": "test@example.com"
  }
}

Bước này rất quan trọng: Mô hình đã chuyển từ "tạo văn bản" sang "tạo ý định có cấu trúc".

3. MCP Client thực hiện kiểm tra

MCP Client sẽ kiểm tra:

  • Skill có tồn tại không?
  • Tham số có khớp với Schema không?
  • Có quyền gọi không?

Nếu không vượt qua, yêu cầu sẽ bị chặn ngay lập tức.

4. Skill Server thực thi logic thực tế

Ví dụ:

  • Truy vấn cơ sở dữ liệu.
  • Gọi API nội bộ.
  • Đọc tệp.

5. Trả về kết quả có cấu trúc

{
  "id": "u_123",
  "name": "Alice",
  "email": "test@example.com",
  "level": "VIP"
}

6. Claude "tiêu hóa" kết quả vào ngữ cảnh

Lưu ý ở đây không phải là "hiển thị cho người dùng", mà là: Kết quả được sử dụng làm ngữ cảnh mới để tiếp tục suy luận. Claude có thể phân tích thêm, so sánh, tóm tắt và cuối cùng mới tạo ra phản hồi ngôn ngữ tự nhiên.

Ví dụ Tối thiểu về MCP Skill

Ví dụ dưới đây rất đơn giản, nhưng đã bao gồm đầy đủ hình thức của MCP:

from mcp.server import Server

server = Server("user_service")

@server.tool()
def get_user_by_email(email: str) -> dict:
    """
    Truy vấn thông tin người dùng bằng email
    """
    if email == "test@example.com":
        return {
            "id": "u_123",
            "name": "Alice",
            "email": email,
            "level": "VIP"
        }
    return {}

server.run()

Bạn sẽ thấy:

  • Không có Prompt.
  • Không có logic AI.
  • Chỉ là định nghĩa năng lực thuần túy.

Tuy nhiên, Claude sẽ tự động hiểu:

  • Khi nào nên sử dụng nó.
  • Cách sử dụng nó.
  • Cách tiếp tục suy nghĩ sau khi sử dụng.

Tại sao MCP Quan trọng với Agent?

Nếu bạn đã từng làm Agent, chắc chắn bạn đã gặp những vấn đề sau:

  • Quy trình cứng nhắc.
  • Khó khăn trong việc quản lý trạng thái.
  • Một lỗi có thể làm sụp đổ toàn bộ.
  • Càng nhiều năng lực càng trở nên rối rắm.

Lợi ích của MCP là:

  • Agent không cần viết sẵn quy trình cứng, mô hình có thể lập kế hoạch động.

Hành vi Agent điển hình:

Yêu cầu người dùng:

"Phân tích tình hình chi tiêu gần đây của người dùng này và đưa ra đề xuất."

Claude có thể:

  • Gọi get_user_profile.
  • Gọi search_orders.
  • Tổng hợp dữ liệu.
  • Đưa ra phân tích và đề xuất.
  • Bạn không cần viết logic if/else.

Sự Khác Biệt Cốt Lõi giữa MCP và Function Calling

Nhiều người sẽ hỏi:

"Điều này khác gì với Function Calling của OpenAI?"

Nói một cách đơn giản:

  • Function Calling là một điểm năng lực, MCP là một hệ thống năng lực.

Sử dụng MCP Hiệu quả trong Kỹ thuật Thực tế

Một số kinh nghiệm:

Lời khuyên thiết kế Skill:

  • Mỗi Skill chỉ làm một việc.
  • Đầu vào và đầu ra phải ổn định.
  • Không trả về ngôn ngữ tự nhiên.
  • Lỗi cũng phải có cấu trúc.

Những điều không nên làm:

  • Viết logic nghiệp vụ vào Prompt.
  • Một Skill làm 5-6 việc.
  • Để mô hình tự ghép nối câu lệnh SQL.
  • Để Skill trả về "kết luận phân tích".

Đánh giá của tôi về MCP

Từ góc độ kỹ thuật, tôi tin rằng:

  • MCP là một trong những thiết kế gần nhất với "giao diện hệ điều hành cho LLM".

MCP không làm cho mô hình "thông minh hơn", mà làm cho mô hình:

  • Đáng tin cậy hơn.
  • Dễ kiểm soát hơn.
  • Giống một thành phần hệ thống có thể triển khai thực tế hơn.

Nếu bạn chỉ làm demo, MCP có vẻ hơi "nặng nề". Nhưng nếu bạn đang xây dựng:

  • Trợ lý AI cấp doanh nghiệp.
  • Hệ thống lập trình AI.
  • Nền tảng tự động hóa đa Agent.

Thì MCP không phải là "tùy chọn", mà là con đường tất yếu.

Thẻ: Claude MCP Skills agent Function Calling

Đăng vào ngày 16 tháng 10 lúc 00:47