MCP 課程文件
理解 MCP 能力
並獲得增強的文件體驗
開始使用
理解 MCP 能力
MCP 伺服器透過通訊協議向客戶端公開各種能力。這些能力分為四個主要類別,每個類別都有獨特的特徵和用例。讓我們來探索構成 MCP 功能基礎的這些核心原語。
在本節中,我們將以每種語言的框架無關函式的形式展示示例。這是為了專注於概念以及它們如何協同工作,而不是任何框架的複雜性。
在接下來的單元中,我們將展示這些概念如何在 MCP 特定程式碼中實現。
工具 (Tools)
工具是 AI 模型可以透過 MCP 協議呼叫的可執行函式或操作。
- 控制:工具通常是模型控制的,這意味著 AI 模型 (LLM) 根據使用者的請求和上下文決定何時呼叫它們。
- 安全性:由於它們能夠執行具有副作用的操作,工具執行可能很危險。因此,它們通常需要明確的使用者批准。
- 用例:傳送訊息、建立工單、查詢 API、執行計算。
示例:一個用於獲取給定位置當前天氣資料的天氣工具
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 端點。
- 安全性:由於它們是隻讀的,因此通常比工具呈現較低的安全風險。
- 用例:訪問檔案內容、檢索資料庫記錄、讀取配置資訊。
示例:提供檔案內容訪問的資源
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 模型開始處理之前選擇一個提示,為互動設定上下文。
- 用例:常見工作流、專業任務模板、引導式互動。
示例:用於生成程式碼審查的提示模板
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 互動。
- 控制:抽樣是伺服器發起的,但需要客戶端/宿主協助。
- 目的:它支援伺服器驅動的代理行為以及潛在的遞迴或多步互動。
- 安全性:與工具類似,抽樣操作通常需要使用者批准。
- 用例:複雜的多步任務、自主代理工作流、互動式流程。
示例:伺服器可能請求客戶端分析它已處理的資料
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..."
}
抽樣流程遵循以下步驟:
- 伺服器向客戶端傳送 `sampling/createMessage` 請求
- 客戶端審查請求並可以修改它
- 客戶端從 LLM 抽樣
- 客戶端審查完成情況
- 客戶端將結果返回給伺服器
這種“人在迴路”的設計確保使用者保持對 LLM 看到和生成的內容的控制。在實施抽樣時,提供清晰、結構良好的提示幷包含相關上下文非常重要。
能力如何協同工作
讓我們看看這些能力如何協同工作以實現複雜的互動。在下表中,我們概述了能力、控制者、控制方向以及其他一些詳細資訊。
能力 | 控制者 | 方向 | 副作用 | 需要批准 | 典型用例 |
---|---|---|---|---|---|
工具 | 模型 (LLM) | 客戶端 → 伺服器 | 是(潛在) | 是 | 操作、API 呼叫、資料操作 |
資源 | 應用 | 客戶端 → 伺服器 | 否(只讀) | 通常不需要 | 資料檢索、上下文收集 |
提示 | 使用者 | 伺服器 → 客戶端 | 否 | 否(使用者選擇) | 引導式工作流、專業模板 |
取樣 | 伺服器 | 伺服器 → 客戶端 → 伺服器 | 間接 | 是 | 多步任務、代理行為 |
這些能力旨在以互補的方式協同工作
- 使用者可以選擇一個提示來啟動一個專業工作流
- 該提示可能包含來自資源的上下文
- 在處理過程中,AI 模型可能會呼叫工具來執行特定操作
- 對於複雜操作,伺服器可能會使用抽樣請求額外的 LLM 處理
這些原語之間的區別為 MCP 互動提供了清晰的結構,使 AI 模型能夠訪問資訊、執行操作並參與複雜的工作流,同時保持適當的控制邊界。
發現過程
MCP 的主要功能之一是動態能力發現。當客戶端連線到伺服器時,它可以透過特定的列表方法查詢可用的工具、資源和提示:
- `tools/list`:發現可用的工具
- `resources/list`:發現可用的資源
- `prompts/list`:發現可用的提示
這種動態發現機制允許客戶端適應每個伺服器提供的特定功能,而無需硬編碼伺服器功能的知識。
結論
理解這些核心原語對於有效使用 MCP 至關重要。透過提供具有明確控制邊界的不同型別能力,MCP 實現了 AI 模型和外部系統之間強大的互動,同時保持了適當的安全和控制機制。
在下一節中,我們將探討 Gradio 如何與 MCP 整合,為這些功能提供易於使用的介面。
< > 在 GitHub 上更新