MCP出現的意義是什么?讓 AI 智能體更模塊化

AI 智能體現在能做的事情真的很厲害,可以思考、規劃,還能執行各種復雜任務,而且代碼量并不大。這讓開發者看到了一個機會:把那些龐大復雜的代碼庫和 API 拆解成更實用的模塊。

不過要讓這些智能變成現實世界里真正能用的東西,還需要模塊化、標準化和強大的接口支持。模型上下文協議(Model Context Protocol,簡稱 MCP) 就是為了解決這個問題而出現的。

什么樣的智能體才算是好智能體?

一開始構建智能體挺簡單的:給大型語言模型寫一些專門的指令來執行任務,再可選地提供一些函數工具,讓它能調用外部 API。

但真正優秀的智能體應該具備這些特點:

  • 模塊化:每個任務都是獨立定義且可重用的
  • 可組合:智能體可以智能地委派任務或協同工作
  • 接地:通過工具與現實世界數據交互
  • 可編排:行動序列可根據輸入和上下文進行路由
  • 可維護:邏輯和工具可以獨立演進

比如說,有人之前構建了一個處理文檔的應用,這個多智能體流水線可以:

  • 讀取文檔(PDF/圖片)
  • 提取原始文本
  • 對內容進行摘要
  • 提取元數據
  • 存儲數據
  • 回答用戶關于存儲數據的問題

聽起來很不錯,但最初的設計方式其實有不少限制。

MCP 的客戶端-宿主-服務器架構是怎么工作的

MCP 的核心遵循客戶端-宿主-服務器模型,既抽象了工具的集成方式,又保留了靈活性和控制力。

  • 宿主(Host) 是整個操作的大腦,通常是像 Claude、ChatGPT 這樣的 AI 接口,或者自己的編排器應用。它負責啟動 MCP 客戶端、執行安全和權限策略,并決定何時調用外部工具。

  • 客戶端(Client) 充當宿主和單個服務器之間的橋梁。一旦啟動,它會處理所有通信,格式化結構化請求,將其傳遞給相應的服務器,并將結果返回給宿主。這里不需要寫很多定制代碼,因為客戶端 SDK 處理了大部分復雜性。

  • 服務器(Server) 是真正實現功能的地方,也是開發者需要構建的部分。比如 OCR 微服務,它公開了特定的能力。OCR 服務器可能提供一個名為 extract_text 的工具,檢索服務器則可以提供 query_documentssemantic_lookup 等工具。

服務器可以公開三種能力:

  • Prompts(提示詞):預定義的模板或指令,用于指導模型
  • Resources(資源):結構化的上下文數據,如 PDF 文檔、數據庫記錄或向量嵌入
  • Tools(工具):可調用的函數,讓模型能夠采取行動

可以把 MCP 看作連接智能體與外部能力的結締組織,它通過標準化、可內省和可互操作的接口實現連接。

乍一看,它可能跟傳統 API 差不多,但有個關鍵區別:API 是直接暴露功能供使用,而 MCP 允許智能體通過 JSON Schema 動態地發現、描述和調用工具。

比如說,Firestore 服務器可以輕松替換為 MongoDB 版本,而無需更改編排器代碼。或者可以將 OCR 服務器接入到另一個項目中,只要它符合 MCP 清單的要求,就能正常運行。

用 OpenAI Agents 和函數工具構建的傳統方式

使用像 OpenAI 的 Agents SDK 或 LangChain 這樣的框架時,可以將工具定義為 Python 函數,然后將它們傳遞給智能體。

這是一個用于 OCR 的工具示例:

@tool
def extract_text(file_bytes: bytes) -> str:image = vision.Image(content=file_bytes)response = client.document_text_detection(image=image)return response.full_text_annotation.text

然后將它包裝成一個智能體:

extract_text_agent = Agent(instructions="Extract text using OCR.",tools=[extract_text],model="gpt-4o-mini"
)

用編排器將這些智能體鏈式連接起來:

orchestrator = Agent(instructions="""1. Use the OCR tool to extract text2. Summarize the text3. Extract metadata4. Store everything""",tools=[extract_text_agent.as_tool("ocr"),summarizer_agent.as_tool("summarize"),metadata_agent.as_tool("extract_metadata"),firestore_agent.as_tool("store")])

這種做法是可行的,但它緊密耦合了代碼、智能體和服務。如果想要:

  • 將 OCR 服務從 GCP 換到 Azure
  • 從 Firestore 遷移到 PostgreSQL
  • 添加緩存層

這都意味著需要修改核心的智能體邏輯和編排器指令,增加了額外的工作量,并限制了系統的擴展能力。

MCP 登場:解決模塊化問題

模型上下文協議(MCP) 是 Anthropic 提出的一項標準,用于通過結構化的 JSON 接口向 LLM 公開工具。它實現了:

  • 可發現性:模型通過清單內省工具能力
  • 解耦:工具是服務器,而不是內聯函數
  • 標準化:輸入和輸出使用類型化 Schema
  • 可替換性:通過指向新的清單來替換工具
  • 兼容性:與 GPT、Claude、LLaMA 及其他 LLM 宿主兼容

把 MCP 想象成工具與 AI 運行時之間的契約。現在構建的是帶有清單的 REST 服務器,而不是函數工具。

AI 智能體能發揮多大作用,很大程度上取決于它們能訪問的數據。如果沒有能夠連接到互聯網或數據庫的函數工具,那么能力會受到嚴重限制。MCP 為 AI 工具提供了一種標準化的方法來發現其他 API 和工具,讓 AI 工具能找到新的信息源并執行動作,而不僅僅是提供洞察。

以往,這意味著需要創建自定義集成才能讓 AI 應用連接外部工具。MCP 使開發者能夠更容易、更快速地構建工具集成,同時也方便在不同的工具之間切換,從而實現模塊化和可擴展性。

構建 MCP 兼容工具服務器

讓我們演示如何構建一個遵循 MCP 標準的 OCR 工具。

第 1 步:將 OCR 工具構建為服務器

# ocr_mcp_server.pyfrom typing import Any
from mcp.server.fastmcp import FastMCP
from google.cloud import vision
import base64
import asyncio# Initialize MCP server
mcp = FastMCP("ocr")# OCR Tool
@mcp.tool()
async def extract_text(file_content: str) -> str:"""Extract text from a base64-encoded PDF or image content."""client = vision.ImageAnnotatorClient()# Decode the base64 content back to bytesimage_bytes = base64.b64decode(file_content.encode("utf-8"))image = vision.Image(content=image_bytes)response = await asyncio.to_thread(client.document_text_detection, image=image)if not response.full_text_annotation or not response.full_text_annotation.text:return "No text found in document."return response.full_text_annotation.text# Run the server
if __name__ == "__main__":print("MCP Server starting in stdio mode...")mcp.run(transport="stdio")

第 2 步:定義 MCP 清單

{"name": "OCR MCP Server","description": "使用 Google Cloud Vision API 從 Base64 編碼的 PDF 或圖像文件中提取原始文本。","tools": [{"name": "extract_text","description": "從 Base64 編碼的文件內容字符串中提取完整的文檔文本。","input_schema": {"type": "object","properties": {"file_content": {"type": "string","description": "PDF 或圖像的 Base64 編碼二進制內容"}},"required": ["file_content"]},"output_schema": {"type": "string","description": "文檔中經 OCR 識別的完整文本內容"}}]
}

這份清單使得任何模型編排器都能理解:

  • 此工具的功能是什么
  • 期望的輸入/輸出格式是怎樣的
  • 請求應該發送到何處

MCP 客戶端:將工具調用為動作

現在,編排器不再需要與具體的工具實現方式綁定,而是通過 MCP 客戶端調用抽象的動作。

import base64
from mcp.client import MCPClient
import asyncio
import osasync def main():file_path = "sample.pdf"# Step 1: Read and encode filetry:with open(file_path, "rb") as f:file_bytes = f.read()file_content = base64.b64encode(file_bytes).decode("utf-8")except FileNotFoundError:print(f"Error: File not found at {file_path}")returnexcept Exception as e:print(f"Error reading file: {e}")return# Step 2: Initialize clientserver_url = "http://localhost:8001"print(f"Attempting to connect to MCP server at {server_url}...")try:client = MCPClient(server_url)# Step 3: Call the OCR toolprint("Calling 'extract_text' tool...")params = {"file_content": file_content}result = await client.call_tool("extract_text", params)# Step 4: Output extracted textprint("\nExtracted Document Text:\n")print(result)except Exception as e:print(f"An error occurred during MCP client call: {e}")print("Please ensure the MCP server is running and accessible at the specified URL.")if __name__ == "__main__":asyncio.run(main())

任何智能體或工具都無需了解其他部分的具體實現方式。這正是 MCP 的強大之處。

MCP 架構的優勢

  • 模塊化:每個工具都是獨立的、可版本化和可測試的
  • 可組合性:智能體可以通過清單混合搭配工具
  • 可維護性:工具 Schema 的變化不會破壞編排邏輯
  • 可擴展性:添加新服務無需更新智能體
  • 跨模型兼容:適用于 GPT、Claude、LLaMA 等多種模型

MCP 與傳統智能體 API 的對比

AI 智能體是智能系統,旨在無需指定每個步驟就能采取行動。比如在文檔助手中,一旦上傳了文件,無需手動調用 OCR、摘要或元數據提取。編排器智能體根據設定的指令自主處理這一切。

MCP 通過為智能體提供訪問外部服務的標準化途徑,提升了這種自主性。無需將函數調用硬編碼到編排器中,而是可以將 OCR 或 Firestore 存儲等能力作為獨立的 MCP 服務器公開。智能體無需知道具體實現——它只需調用一個像 extract_text 這樣的動作,底層服務器會處理其余部分。

這使得接入新工具或切換提供商變得更加容易,比如從 Google Vision 切換到 Azure OCR,而無需重寫智能體邏輯。

總結

MCP 是一個注重開發者體驗的框架,專為希望精確控制智能體如何與工具和數據交互的工程師而設計。它通過允許 AI 連接外部工具,來賦予 AI 具身智能的能力。

MCP 和傳統智能體 API 為不同人群解決了不同問題,并且都在不斷發展的 AI 生態系統中扮演著各自的角色。構建一個完全自動化系統最重要的考量應該是模塊化、可擴展性和可靠性。如何實現這一步取決于個人偏好以及可用的工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87718.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87718.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深度剖析】領信卓越:福耀玻璃的數字化轉型(下篇3:階段成效3-打造從功能部件到數據終端躍遷的智能化產品)

在數字經濟持續發展的背景下,企業數字化轉型方案成為實現轉型的關鍵。不同行業內的企業因轉型動機和路徑的差異,其轉型成效也各異。福耀玻璃自1983年創立以來,從一家瀕臨破產的鄉鎮水表玻璃廠蛻變為全球汽車玻璃行業的領軍企業,其發展歷程堪稱中國制造業的典范。創始人曹德…

告別停機煩惱!AWS EC2實例升級的“零中斷”實戰方案

引言: “服務器要升級了,今晚得停機維護...” —— 這句話曾是多少運維工程師的“噩夢”,也是業務部門最不愿聽到的通知。在追求極致用戶體驗和7x24小時業務連續性的今天,停機窗口已成為難以承受之重。尤其是在云時代&#xff0c…

奇葩的el-checkbox-group數組賦值

背景。自定義表單。多選組件封裝。當選項被多選后&#xff0c;el-checkbox-group中v-model的值以數組形式存儲了選中的內容。奇葩問題。存儲的值時label屬性。而渲染時需要使用插值單獨將選項的名稱渲染出來。而在el-checkbox標簽中:label要賦值option.value很別扭。 <temp…

【Python系列PyCharm實戰】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解決方案大全

【Python系列Colab實戰】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解決方案大全 一、摘要 在使用 Jupyter、PyCharm 或 Google Colab 進行機器學習開發時&#xff0c;導入 sklearn&#xff08;scikit-learn&#xff09;相關模塊時&#xff0c;常會遇到一系列…

小白的進階之路系列之十六----人工智能從初步到精通pytorch綜合運用的講解第九部分

從零開始學習NLP 在這個由三部分組成的系列中,你將構建并訓練一個基本的字符級循環神經網絡 (RNN) 來對單詞進行分類。 你將學習 如何從零開始構建循環神經網絡NLP 的基本數據處理技術如何訓練 RNN 以識別單詞的語言來源。從零開始學自然語言處理:使用字符級 RNN 對名字進行…

MySQL在ubuntu下的安裝

前言&#xff1a; 安裝與卸載中&#xff0c;用戶全部進行切換為root ,一旦安裝&#xff0c;普通用戶也是可以進行使用 初期聯系mysql時不進行用戶的管理&#xff0c;直接使用root 進行即可&#xff0c;盡快適應mysql語句&#xff0c;后面進行學了用戶管理再考慮新建普通用戶。&…

低代碼技術實戰:從 0 到 1 構建高效業務流程應用

引言 在當今競爭激烈的商業環境中&#xff0c;企業迫切需要簡化運營并提高效率。低代碼技術作為一種新興的解決方案&#xff0c;正逐漸成為企業實現這一目標的有力工具。它能夠將繁瑣的手工業務流程轉化為數字資產和應用程序&#xff0c;為企業帶來諸多優勢。本文將詳細介紹低…

RPGMZ游戲引擎 如何手動控制文字顯示速度

直接上代碼 const _Window_Base_prototype_initialize Window_Base.prototype.initialize;Window_Base.prototype.initialize function(rect) {_Window_Base_prototype_initialize.call(this, rect);this.文字速度緩沖 0;}; this.文字速度緩沖 0; 進行緩沖 Window_Base…

Leetcode-1750. 刪除字符串兩端相同字符后的最短長度

Problem: 1750. 刪除字符串兩端相同字符后的最短長度1750. 刪除字符串兩端相同字符后的最短長度 1750. 刪除字符串兩端相同字符后的最短長度 思路 雙指針遍歷 解題過程 模擬題目描述的過程&#xff0c;使用指針 l, r 指向首尾兩端。 如果相同就向中心移動。為了盡可能的刪除多…

【mysql】通過information_schema.tables查詢表的統計信息

1 查詢表的統計信息 information_schema.tables 是 MySQL 中的一個系統視圖&#xff0c;包含數據庫中所有表的信息。 如何查詢當前數據庫的所有表信息&#xff1a; SELECT * FROM information_schema.tables WHERE table_schema DATABASE(); 返回的字段有&#xff1a; 字段名…

“地標界愛馬仕”再啟:世酒中菜聯袂陳匯堂共筑新會陳皮頂奢產業

“地標界愛馬仕”再啟戰略新篇&#xff1a;世酒中菜聯袂陳匯堂&#xff0c;共筑新會陳皮頂奢產業生態 ——中世國際與陳匯堂股權合作簽約儀式在國際地理標志服務基地舉行 江門市新會區&#xff0c;2025年6月20日——被譽為“地標界愛馬仕”的全球頂奢品牌運營商世酒中菜 &…

倒計時 效果

實現HTML <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>信質集團SAP/ERP切換倒計時</title…

高性能群集部署技術-Nginx+Tomcat負載均衡群集

目錄 #1.1案例概述 1.1.1案例前置知識點 1.1.2案例環境 #2.1案例實施 2.1.1實施準備 2.1.2查看JDK是否安裝 2.1.3安裝配置Tomcat 2.1.4Tomcat主配置文件說明 2.1.5建立Java的Web站點 #3.1NginxTomcat負載均衡&#xff0c;動靜分離群集的實驗案例 3.1.1案例概述 3.1.2案例環境…

《Go語言圣經》函數值、匿名函數遞歸與可變參數

《Go語言圣經》函數值、匿名函數遞歸與可變參數 函數值&#xff08;Function Values&#xff09; 在 Go 語言中&#xff0c;函數被視為第一類值&#xff08;first-class values&#xff09;&#xff0c;這意味著它們可以像其他值一樣被操作&#xff1a;擁有類型、賦值給變量、…

vtk和opencv和opengl直接的區別是什么?

簡介 VTK、OpenCV 和 OpenGL 是三個在計算機圖形學、圖像處理和可視化領域廣泛使用的工具庫&#xff0c;但它們在功能、應用場景和底層技術上存在顯著差異。以下是它們的核心區別和特點對比&#xff1a; 1. 核心功能與定位 工具核心功能主要應用領域VTK (Visualization Toolk…

最新豆包大模型發布!火山引擎推出Agent開發新范式

Datawhale大會 2025火山引擎 Force 原動力大會 6月11日-12日&#xff0c;北京國家會議中心人山人海&#xff0c;2025 火山引擎 Force 原動力大會如約而至。 作為開發者社區的一員&#xff0c;這場大會上的一系列新發布讓我們感受到了&#xff1a;這個 Agent 技術落地元年的關鍵…

RFC4291-IPv6地址架構解說

RFC 4291 是由互聯網工程任務組&#xff08;IETF&#xff09;發布的關于 IPv6 地址架構 的標準文檔。 該文檔詳細定義了 IPv6 地址的格式、類型、表示方法以及分配方式。 以下是對 RFC 4291 中 IPv6 地址架構的全面解析&#xff0c;包括地址格式、類型、表示方法、特殊地址以…

簡單對比 **HTTP**、**MQTT** 和 **CoAP** 這三種通信協議

對比 HTTP、MQTT 和 CoAP 這三種通信協議&#xff0c;從 消息結構、資源占用、安全性 等方面進行全面分析。 &#x1f310; HTTP vs MQTT vs CoAP 對比 特性HTTPMQTTCoAP協議層級應用層基于 TCP應用層基于 TCP / WebSocket應用層基于 UDP (也支持 TCP)消息模式請求/響應 (客戶…

【Dify 案例】【自然語言轉SQL案例】【五】【實戰二】【財務管理查詢商品信息數據】

援引實戰一,進行數據業務處理化 1.開始 2.自然語言轉SQL的工具 3.參數提取器 4.SQL查詢

FPGA基礎 -- Verilog語言要素之標識符

一、什么是標識符&#xff08;Identifier&#xff09; 在 Verilog 中&#xff0c;標識符是用戶定義的名字&#xff0c;用于標識模塊、變量、端口、函數、任務、參數、宏定義等各種語言要素。 就像 C 語言的變量名、函數名一樣&#xff0c;Verilog 中的標識符為 HDL 代碼提供了…