當我們朝著構建能夠推理、計劃和自主行動的智能系統前進時,模型上下文協議 (MCP) 在構建 AI 模型如何與外部工具和數據交互方面扮演著關鍵角色。在采用 MCP 時,一個容易混淆的常見問題是——什么時候使用資源,什么時候使用工具。
在這里,老碼農嘗試對這些概念進行區分,提供一些實際的示例,并總結要點,以便有效地應用它們。
1. 示例場景
假設我們正在開發一個自動化業務工作流的數字助手。例如,當一個新客戶簽訂合同時,助手應該:
- 將客戶添加到 CRM 系統。
- 發一封歡迎電子郵件。
- 通過 Slack 通知銷售團隊。
- 指定一名專門的客戶經理。
我們希望 AI 以最少的人工干預來處理這個端到端的過程。
2.MCP中的工具
MCP 中的工具是模型可以調用的操作ーー執行任務的操作。
例如:
@mcp.tool()
def send_email(to: str, subject: str, body: str) -> str:
“””發送電子郵件到一個給定的地址s”””
...MCP工具的主要特點:
- 模型控制: 人工智能模型決定何時調用它們。
- 自動列出: 它們出現在 /tools 端點中。
- 自主調用: 模型可以確定使用哪種工具,并在必要時請求缺少的參數。
在我們的業務工作流示例中,像add_client_to_crm、send_email 和 notify_sales_team 這樣的操作應該作為工具實現,因為它們需要執行操作,而且模型必須自主決定調用它們。
3. MCP 資源
一般地,資源是由后端公開的只讀數據。可以把它們想象成:
- 現有數據清單。
- 靜態的參考資料或動態數據集。
- 具有結構化標識符 (uri) 的數據項。
例如:
@mcp.resource(“clients://{client_id}”)
def get_client(client_id: str) -> dict:
“““指定ID,返回客戶端的詳細資料”””
...MCP資源的主要特點:
- 客戶端控制: AI 模型不會自動調用資源, 客戶端應用程序必須對訪問進行管理。
- 結構化數據: 它們提供結構化信息,可用于為模型的決策提供信息。
- 上下文管理: 它們通過僅提供相關數據來幫助管理上下文窗口。
在我們的工作流中,使用list_clients, get_client_details和 list_account_managers這樣的資源是合適的。
4.為什么不是全部使用MCP工具?
假設公開了 5000 個操作作為MCP工具 (例如,不同的 CRM 系統,api 等等) ,如果這些都是工具:
- 它們在 /tools 中作為 JSON 返回。
- 人工智能模型試圖解析所有 5000 個數據,以決定該做什么。
- 這會使上下文窗口膨脹,降低推理速度,甚至可能失敗。
相反,可以將 list_crm_systems,list_available_actions或者 list_departments公開為資源。這有助于客戶端根據用戶輸入或身份驗證獲取相關的上下文片段,從而優化性能和可伸縮性。
5. 何時使用MCP工具?又何時使用資源?
MCP工具和MCP資源的選擇依據:
- 是否觸發操作?
- 返回結構化數據是否可選
- AI 模型是否 可以自主調用還是客戶端必須控制訪問
- 是否應用于規劃和鏈接行動,還是只支持上下文抓取
- 是否需要實時的上下文范圍
資源有助于管理身份驗證和授權:
- 特定于用戶的資源列表: 用戶請求資源列表時,服務器只能過濾并返回用戶可以訪問的資源。
- 工具訪問控制: 在列出工具時,確保只返回授權用戶使用的工具。
此策略確保用戶只能看到他們擁有權限的資源和工具,并且可以與它們進行交互,從而增強安全性和用戶體驗。
如果希望 AI 模型自主地識別有缺失的輸入并請求它們,那么必須使用工具。工具是模型控制的,允許模型:
- 讀取工具的描述說明。
- 根據提示詞選擇適當的工具。
- 檢測遺漏的輸入。
- 自動提示用戶輸入所需信息。
資源將不會觸發此行為,除非客戶端應用程序添加了相關邏輯。將數據拉入并將其注入上下文。
雖然 AI 模型本身并不將 tool:// 或 resource:// 解析為協議,但是采用這樣的命名約定可以增強可讀性和結構。一致的 URI 模式 (如 tool://crm/add-client 或 resource://clients/{ id}) 使生態系統可預測,并且在一些工具框架中能夠得到支持。
6.小結
當構建自動化工作流程的智能助手時,在 MCP 工具和資源之間進行選擇至關重要:
- 當模型需要自主行動或推理時,使用工具。
- 利用資源提供有范圍的、結構化的數據,并減少上下文過載。
對于動態且自動化的Agentic系統,工具是動力,對于管理廣泛的參考數據,資源可以幫助我們安全地擴展。
























