MCP 課程文件

理解 MCP 能力

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

理解 MCP 能力

MCP 伺服器透過通訊協議向客戶端公開各種能力。這些能力分為四個主要類別,每個類別都有獨特的特徵和用例。讓我們來探索構成 MCP 功能基礎的這些核心原語。

在本節中,我們將以每種語言的框架無關函式的形式展示示例。這是為了專注於概念以及它們如何協同工作,而不是任何框架的複雜性。

在接下來的單元中,我們將展示這些概念如何在 MCP 特定程式碼中實現。

工具 (Tools)

工具是 AI 模型可以透過 MCP 協議呼叫的可執行函式或操作。

  • 控制:工具通常是模型控制的,這意味著 AI 模型 (LLM) 根據使用者的請求和上下文決定何時呼叫它們。
  • 安全性:由於它們能夠執行具有副作用的操作,工具執行可能很危險。因此,它們通常需要明確的使用者批准。
  • 用例:傳送訊息、建立工單、查詢 API、執行計算。

示例:一個用於獲取給定位置當前天氣資料的天氣工具

python
javascript
def get_weather(location: str) -> dict:
    """Get the current weather for a specified location."""
    # Connect to weather API and fetch data
    return {
        "temperature": 72,
        "conditions": "Sunny",
        "humidity": 45
    }

資源 (Resources)

資源提供對資料來源的只讀訪問,允許 AI 模型檢索上下文而無需執行復雜的邏輯。

  • 控制:資源是應用程式控制的,這意味著宿主應用程式通常決定何時訪問它們。
  • 性質:它們旨在用於資料檢索,計算量最小,類似於 REST API 中的 GET 端點。
  • 安全性:由於它們是隻讀的,因此通常比工具呈現較低的安全風險。
  • 用例:訪問檔案內容、檢索資料庫記錄、讀取配置資訊。

示例:提供檔案內容訪問的資源

python
javascript
def read_file(file_path: str) -> str:
    """Read the contents of a file at the specified path."""
    with open(file_path, 'r') as f:
        return f.read()

提示 (Prompts)

提示是預定義的模板或工作流,用於指導使用者、AI 模型和伺服器功能之間的互動。

  • 控制:提示是使用者控制的,通常作為宿主應用程式 UI 中的選項呈現。
  • 目的:它們構造互動以最佳化可用工具和資源的使用。
  • 選擇:使用者通常在 AI 模型開始處理之前選擇一個提示,為互動設定上下文。
  • 用例:常見工作流、專業任務模板、引導式互動。

示例:用於生成程式碼審查的提示模板

python
javascript
def code_review(code: str, language: str) -> list:
    """Generate a code review for the provided code snippet."""
    return [
        {
            "role": "system",
            "content": f"You are a code reviewer examining {language} code. Provide a detailed review highlighting best practices, potential issues, and suggestions for improvement."
        },
        {
            "role": "user",
            "content": f"Please review this {language} code:\n\n```{language}\n{code}\n```"
        }
    ]

抽樣 (Sampling)

抽樣允許伺服器請求客戶端(特別是宿主應用程式)執行 LLM 互動。

  • 控制:抽樣是伺服器發起的,但需要客戶端/宿主協助。
  • 目的:它支援伺服器驅動的代理行為以及潛在的遞迴或多步互動。
  • 安全性:與工具類似,抽樣操作通常需要使用者批准。
  • 用例:複雜的多步任務、自主代理工作流、互動式流程。

示例:伺服器可能請求客戶端分析它已處理的資料

python
javascript
def request_sampling(messages, system_prompt=None, include_context="none"):
    """Request LLM sampling from the client."""
    # In a real implementation, this would send a request to the client
    return {
        "role": "assistant",
        "content": "Analysis of the provided data..."
    }

抽樣流程遵循以下步驟:

  1. 伺服器向客戶端傳送 `sampling/createMessage` 請求
  2. 客戶端審查請求並可以修改它
  3. 客戶端從 LLM 抽樣
  4. 客戶端審查完成情況
  5. 客戶端將結果返回給伺服器

這種“人在迴路”的設計確保使用者保持對 LLM 看到和生成的內容的控制。在實施抽樣時,提供清晰、結構良好的提示幷包含相關上下文非常重要。

能力如何協同工作

讓我們看看這些能力如何協同工作以實現複雜的互動。在下表中,我們概述了能力、控制者、控制方向以及其他一些詳細資訊。

能力 控制者 方向 副作用 需要批准 典型用例
工具 模型 (LLM) 客戶端 → 伺服器 是(潛在) 操作、API 呼叫、資料操作
資源 應用 客戶端 → 伺服器 否(只讀) 通常不需要 資料檢索、上下文收集
提示 使用者 伺服器 → 客戶端 否(使用者選擇) 引導式工作流、專業模板
取樣 伺服器 伺服器 → 客戶端 → 伺服器 間接 多步任務、代理行為

這些能力旨在以互補的方式協同工作

  1. 使用者可以選擇一個提示來啟動一個專業工作流
  2. 該提示可能包含來自資源的上下文
  3. 在處理過程中,AI 模型可能會呼叫工具來執行特定操作
  4. 對於複雜操作,伺服器可能會使用抽樣請求額外的 LLM 處理

這些原語之間的區別為 MCP 互動提供了清晰的結構,使 AI 模型能夠訪問資訊、執行操作並參與複雜的工作流,同時保持適當的控制邊界。

發現過程

MCP 的主要功能之一是動態能力發現。當客戶端連線到伺服器時,它可以透過特定的列表方法查詢可用的工具、資源和提示:

  • `tools/list`:發現可用的工具
  • `resources/list`:發現可用的資源
  • `prompts/list`:發現可用的提示

這種動態發現機制允許客戶端適應每個伺服器提供的特定功能,而無需硬編碼伺服器功能的知識。

結論

理解這些核心原語對於有效使用 MCP 至關重要。透過提供具有明確控制邊界的不同型別能力,MCP 實現了 AI 模型和外部系統之間強大的互動,同時保持了適當的安全和控制機制。

在下一節中,我們將探討 Gradio 如何與 MCP 整合,為這些功能提供易於使用的介面。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.