Các bài viết trong series:
  1. MCP - Prompts & Resources 👈
Series

MCP - Prompts & Resources

3 months ago

Đây có thể là bài viết cuối cùng của chuỗi MCP cơ bản trong chuyên mục Posts của blog. Đúng ra dự định không viết thêm nữa do Prompts & Resources trong MCP có tài liệu rất hạn chế, nhưng vì đây là hai phần thú vị nên giới thiệu chúng đến bạn đọc.

Mình đã đọc và nghiên cứu tài liệu về hai mục này trên trang chủ của MCP, sau khi hiểu được nguyên tắc và trường hợp sử dụng thì sau đó có đi tìm một số dự án đã tích hợp với dự định bổ sung thêm ví dụ trong bài viết, nhưng xem ra rất ít dự án triển khai hai thành phần này. Tại sao?

Theo quan điểm cá nhân của mình thì có khả năng là do một số vấn đề sau:

Thứ nhất là vấn đề tương thích, không có nhiều máy khách MCP hỗ trợ Prompts & Resources, nếu có thì cách triển khai và sử dụng chúng không đơn giản. Phần lớn phụ thuộc vào triển khai của máy khách, mà mỗi máy lại triển khai theo các cách khác nhau, không đồng nhất nên gây khó khăn cho cả người lập trình lẫn người dùng.

Ngoài ra còn có thể do số lượng máy chủ MCP áp dụng hai loại tài nguyên này chưa nhiều nên chưa thể hiện được tính hiệu quả. Có thể đây chỉ là tính năng như là Add-on, có cũng được, không có cũng chẳng sao nên chưa nhận được nhiều sự quan tâm của cộng đồng.

Vậy thì Prompts & Resources trong MCP là gì?

Prompts là một khuôn mẫu yêu cầu (template) mà máy khách có thể gọi để yêu cầu mô hình thực hiện một nhiệm vụ cụ thể. Prompts được máy chủ MCP định nghĩa sẵn, máy khách có thể truy cập để đọc, lấy về làm dữ liệu đầu vào. Prompts bao gồm cả các tham số.

Ví dụ định nghĩa một prompts trông giống như sau:

{
  "name": "plan-vacation",
  "title": "Plan a vacation",
  "description": "Guide through vacation planning process",
  "arguments": [
    { "name": "destination", "type": "string", "required": true },
    { "name": "duration", "type": "number", "description": "days" },
    { "name": "budget", "type": "number", "required": false },
    { "name": "interests", "type": "array", "items": { "type": "string" } }
  ]
}

Khi máy khách MCP phát hiện máy chủ hỗ trợ Prompts, nó tiến hành lấy danh sách prompts về, hiển thị lên cho người dùng chọn. Giả sử người dùng chọn mẫu prompts plan-vacation ở trên, dựa theo cấu hình trong arguments mà tiếp tục yêu cầu người dùng chọn/nhập vào các trường dữ liệu tương ứng như destination, duration... trong đó destination là bắt buộc bởi vì có thuộc tính required bằng true. Sau khi nhập xong, máy khách dùng dữ liệu đó làm đầu vào. Hãy tưởng tượng Prompts là thành phần giúp chúng ta nhập liệu vào ứng dụng thay vì phải ngồi gõ văn bản từ đầu.

Resource là một nguồn dữ liệu có thể truy cập, được server cung cấp cho client hoặc mô hình. Resource có thể là tệp tin, văn bản... với đường dẫn được cấu hình để máy khách có thể dễ dàng truy cập và truy xuất dữ liệu. Nói một cách đơn giản, Resources như một phần mở rộng của máy chủ MCP, nhằm cung cấp thêm thông tin, tài liệu mà máy chủ cho là hữu ích để máy khách thu thập, sử dụng thông tin tốt hơn.

Ví dụ một resource trông giống như sau:

{
  "uriTemplate": "weather://forecast/{city}/{date}",
  "name": "weather-forecast",
  "title": "Weather Forecast",
  "description": "Get weather forecast for any city and date",
  "mimeType": "application/json"
}

Nhìn vào chúng ta hiểu ngay resource này dùng để lấy dự báo thời tiết của thành phố theo ngày. Máy khách dựa vào để lấy thông tin, tạo ngữ cảnh tốt hơn trong các yêu cầu.

Tóm lại Prompts & Resource là hai thành phần được bổ sung thêm vào trong máy chủ MCP nhằm gợi ý cách sử dụng máy chủ MCP & cung cấp thêm ngữ cảnh cho máy khách. Vì chưa tìm được nguồn tài liệu nào nói về việc triển khai có hệ thống hai thành phần này cho nên bài viết chỉ dừng lại ở mức giới thiệu mà không có ví dụ mã đi kèm. Nếu bạn đọc có nguồn tài liệu tham khảo xin hãy để lại dưới phần bình luận. Xin cảm ơn!