基于 MCP 實現智能體案例架構設計 原創
最近,AI Agent 和外部工具之間的互動變得越來越流行。從 OpenAI 最先推出的 Function Calling 功能,到各種插件和框架,大家都在努力讓 AI 模型能更有效地調用外部的功能。不過,目前這些集成方式還是比較分散,開發者需要為每個服務手動設置接口、處理認證和邏輯,而且不同平臺之間還互不兼容,確實挺麻煩的。
就在這種情況下,Anthropic 在2024年底推出了一個叫做模型上下文協議(Model Context Protocol,簡稱 MCP)的新東西。這個協議的野心不小,它想做的事情就像編程語言里的 LSP(Language Server Protocol)一樣,為 AI 和工具之間的互動設定一個標準,讓 AI Agent 能動態地發現、選擇和組織工具,甚至還支持人在操作過程中插手。
自從 MCP 推出以來,它的發展速度非常快,社區里已經出現了好幾千個 MCP 服務器,能連接到 GitHub、Slack 甚至 Blender 這樣的 3D 設計工具。像 Cursor、Claude Desktop 這樣的應用也開始支持 MCP了,只要裝上新的服務器,就能擴展它們的能力。
1、MCP 架構設計剖析
MCP 架構設計分為核心組件、傳輸層和通信、MCP 服務器生命周期等構成,下面詳細剖析之。
1.1、核心組件
MCP 架構由三個核心組件組成:MCP 主機(MCP Host)、MCP 客戶端(MCP Client)和 MCP 服務器(MCP Server)。這些組件協同工作,以促進 AI 應用、外部工具和數據源之間的無縫通信,確保操作的安全性和正確管理。如圖 2 所示,在典型工作流程中,用戶向 MCP 客戶端發送提示詞,客戶端分析意圖,通過 MCP 服務器選擇適當的工具,并調用外部 API 來檢索和處理所需的信息,然后通知用戶結果。
1.1.1 MCP 主機
MCP 主機是一個 AI 應用,它在運行 MCP 客戶端的同時,為執行基于 AI 的任務提供環境。它集成交互工具和數據,以實現與外部服務的順暢通信。比如: Claude Desktop 用于 AI 輔助內容創建,Cursor 是一個 AI 驅動的 IDE,用于代碼補全和軟件開發,以及執行復雜任務的 AI Agent。MCP 主機承載 MCP 客戶端,并確保與外部 MCP 服務器通信。
1.1.2 MCP 客戶端
MCP 客戶端在主機環境中充當中介,管理 MCP 主機與一個或多個 MCP 服務器之間的通信。它向 MCP 服務器發起請求,查詢可用功能,并獲取描述服務器能力的響應。這確保了主機與外部工具之間的無縫互動。除了管理請求和響應外,MCP 客戶端還處理來自 MCP 服務器的通知,提供有關任務進度和系統狀態的實時更新。它還執行采樣,收集有關工具使用和性能的數據,使優化和明智的決策成為可能。MCP 客戶端通過傳輸層與 MCP 服務器通信,促進主機與外部資源之間的安全、可靠的數據交換和順暢互動。
1.1.3 MCP 服務器
MCP 服務器使 MCP 主機和客戶端能夠訪問外部系統并執行操作,提供三種核心能力:工具、資源和提示詞。
- 工具:啟用外部操作。工具允許 MCP 服務器調用外部服務和 API,代表 AI 大模型執行操作。當客戶端請求操作時,MCP 服務器識別適當的工具,與服務互動,并返回結果。比如:如果 AI 大模型需要實時天氣數據或情感分析,MCP 服務器連接到相關 API,檢索數據,并將其傳遞給主機。與傳統的函數調用不同,這需要多個步驟并將調用與執行分開,MCP 服務器的工具簡化了這一過程,允許模型根據上下文自主選擇和調用適當的工具。一旦配置,這些工具遵循標準化的供應和消費模型,使它們模塊化、可重用,并且易于其他應用程序訪問,從而提高系統效率和靈活性。
- 資源:向 AI 大模型公開數據。資源提供 MCP 服務器可以向 AI 大模型公開的結構化和非結構化數據集的訪問。這些數據集可能來自本地存儲、數據庫或云平臺。當 AI 大模型請求特定數據時,MCP 服務器檢索和處理相關信息,使大模型能夠做出數據驅動的決策。比如:推薦系統可能訪問客戶互動日志,或者文檔摘要任務可能查詢文本庫。
- 提示詞:用于工作流程優化的可重用模板。提示詞是 MCP 服務器生成和維護的預定義模板和工作流程,以優化 AI 響應并簡化重復任務。它們確保響應的一致性并提高任務執行效率。比如:客戶支持聊天機器人可能使用提示詞模板提供統一和準確的響應,而注釋任務可能依賴于預定義的提示詞來保持數據標注的一致性。
1.2 傳輸層和通信
傳輸層確保安全、雙向通信,允許主機環境與外部系統之間的實時互動和有效數據交換。傳輸層管理客戶端的初始請求傳輸、服務器響應的傳遞以及保持客戶端了解正在進行的更新的通知交換。MCP 客戶端和 MCP 服務器之間的通信遵循結構化過程,從客戶端查詢服務器功能開始。收到請求后,服務器以初始響應回應,列出客戶端可以利用的可用工具、資源和提示。一旦建立連接,系統保持持續的通知交換,確保服務器狀態的變化或更新實時反饋給客戶端。這種結構化通信確保了高性能互動,并使 AI 大模型與外部資源保持同步,提高 AI 應用的效果。
1.3 MCP 服務器生命周期
如圖3所示,MCP 服務器的生命周期包括三個關鍵階段:創建、運行和更新。每個階段定義了確保 MCP 服務器安全和高效運行的關鍵活動,使 AI 大模型和外部工具、資源和提示之間能夠無縫互動。
1.3.1 MCP 服務器組件
MCP 服務器負責管理外部工具、數據源和工作流程,為 AI 大模型提供執行任務所需的必要資源,確保高效和安全。它包括幾個關鍵組件,確保順暢和有效的操作。元數據包括有關服務器的基本信息,比如:其名稱、版本和描述,允許客戶端識別和與適當的服務器互動。配置涉及源代碼、配置文件和清單,定義服務器的操作參數、環境設置和安全策略。工具列表存儲可用工具的目錄,詳細說明其功能、輸入輸出格式和訪問權限,確保適當的工具管理和安全。資源列表管理對外部數據源的訪問,包括 Web API、數據庫和本地文件,指定允許的端點及其相關權限。最后,提示詞和模板包括預配置的任務模板和工作流程,提高 AI 大模型執行復雜操作的效率。這些組件共同使 MCP 服務器能夠為 AI 應用提供無縫工具集成、數據檢索和任務編排。
1.3.2 創建階段
創建階段是 MCP 服務器生命周期的初始階段,在此階段,服務器被注冊、配置并準備運行。此階段涉及三個關鍵步驟。服務器注冊為 MCP 服務器分配唯一名稱和身份,允許客戶端發現并連接到適當的服務器實例。安裝程序部署涉及安裝 MCP 服務器及其相關組件,確保正確的配置文件、源代碼和清單到位。代碼完整性驗證驗證服務器代碼庫的完整性,以防止未經授權的修改或篡改,使服務器在運行前保持完整性。創建階段的成功完成確保 MCP 服務器準備好處理請求并與外部工具和數據源安全互動。
1.3.3 運行階段
運行階段是 MCP 服務器積極處理請求、執行工具調用并促進 AI 應用與外部資源之間無縫互動的階段。工具執行允許 MCP 服務器根據 AI 應用的請求調用適當的工具,確保所選工具執行其預期操作。斜杠命令處理使服務器能夠解釋和執行多個命令,包括通過用戶界面或 AI Agent 發出的命令,同時管理潛在的命令重疊以防止沖突。沙箱機制執行確保執行環境隔離和安全,防止未經授權的訪問并減輕潛在風險。在整個運行階段,MCP服務器保持穩定和受控的環境,使可靠和安全的任務執行成為可能。
1.3.4 更新階段
更新階段確保 MC P服務器保持安全、最新,并能夠適應不斷變化的需求。此階段包括三個關鍵任務。授權管理驗證更新后訪問權限保持有效,防止更新后服務器資源的未經授權使用。版本控制維護不同服務器版本之間的一致性,確保新更新不會引入漏洞或沖突。舊版本管理停用或刪除過時版本,防止攻擊者利用以前版本的已知漏洞。了解MCP服務器的生命周期對于識別潛在漏洞和設計有效的安全措施至關重要。每個階段引入了必須仔細處理的獨特挑戰,以保持MCP服務器在動態 AI 環境中的安全性、效率和適應性。
2、基于 MCP 實現客服智能體案例
智能客服是目前企業落地智能體應用的典型應用,每個企業都需要。智能客戶常常用來回答產品問題、售后處理、訂單查詢等服務。
智能客服智能體可以采用基于 MCP 的 AI Agent 架構來設計,通過 MCP 協議調用多個內部系統(商品系統、訂單系統、售后系統、知識庫等),架構設計如下圖所示:
客戶智能體的關鍵代碼實現如下:
# 使用 Anthropic的 SDK實現基于 MCP的智能客服智能體
import anthropic
from anthropic.tools import Tool
# 定義 MCP工具
tools = [
Tool(
name="search_product",
descriptinotallow="查詢商品信息",
input_schema={
"type": "object",
"properties": {
"query": {"type": "string", "description": "查詢關鍵詞"}
},
"required": ["query"]
},
functinotallow=lambda params: product_database.search(params["query"])
),
Tool(
name="get_order",
descriptinotallow="查詢訂單信息",
input_schema={
"type": "object",
"properties": {
"order_id": {"type": "string", "description": "訂單ID"}
},
"required": ["order_id"]
},
functinotallow=lambda params: order_system.get_order(params["order_id"])
),
# 更多工具...
]
# 創建客戶端
client = anthropic.Client(api_key="your_api_key")
# 處理用戶請求
def process_user_query(user_message):
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1000,
tools=tools,
messages=[{"role": "user", "content": user_message}]
)
return message.content
該智能客服智能體已經能夠順利解決 90% 的客戶咨詢,且平均響應時間保持在2秒以內。然而,隨著系統功能的不斷擴展,智能體的編排邏輯也變得越來越復雜。這就需要我們經常更新提示詞,以便更精準地選擇和使用工具。此外,在訪問高峰時段,系統還會面臨著性能瓶頸的問題。
本文轉載自??玄姐聊AGI??? 作者:玄姐
