王炸!MCP 架構(gòu)設(shè)計深度剖析 & 使用 Spring AI + MCP 四步教你實(shí)現(xiàn) Agent 智能體開發(fā) 原創(chuàng)
Model Context Protocol(MCP)模型上下文協(xié)議是一種標(biāo)準(zhǔn)化協(xié)議,它讓大模型能夠更便捷地與外部數(shù)據(jù)、工具相連。你可以把 MCP 想象成一個通用的插頭或接口,就像 USB-C 一樣,不管是什么設(shè)備,只要插上這個接口,就能和電腦、充電器等連接起來。只不過,MCP 連接的不是物理設(shè)備,而是 AI 大模型與外部的數(shù)據(jù)源、工具等。
有了 MCP,AI 大模型就能更輕松地獲取外部信息,完成更多任務(wù)。比如,通過 MCP,AI 大模型可以操作電腦讀寫文件,或者模擬瀏覽器操作等。
1、MCP 架構(gòu)設(shè)計剖析
第一、MCP 架構(gòu)設(shè)計
MCP 包含三大核心模塊:MCP Hosts、MCP Clients、MCP Servers。
- MCP Hosts:像 Claude Desktop、Cursor 這樣的應(yīng)用程序,它們通過 MCP Client 訪問數(shù)據(jù)。
- MCP Clients:與 MCP Server 服務(wù)器保持 1:1 連接的協(xié)議客戶端。
- MCP Servers:輕量級程序,每個 AI 程序都通過標(biāo)準(zhǔn)化的模型上下文協(xié)議公開特定功能。
第二、Java MCP 架構(gòu)設(shè)計案例
結(jié)合 AI 大模型,以一個 Java AI 應(yīng)用(比如:AI Agent 智能體)為例,Java MCP 架構(gòu)設(shè)計如下所示:
可以看到 Java MCP 架構(gòu)設(shè)計的傳輸層有兩類:Stdio Transport、HTTP SSE,如下圖所示:
第三、MCP 架構(gòu)設(shè)計的工作模式
MCP Server 可以以工具(Tools)的形式配置到 MCP Client 中。當(dāng)我們向 MCP Host 發(fā)送執(zhí)行指令時,MCP Host 會攜帶這些工具信息,一起發(fā)送給 AI 大模型。隨后,AI 大模型會進(jìn)行意圖識別和語義分析,并調(diào)用 MCP 來執(zhí)行具體的業(yè)務(wù)需求,處理邏輯時序圖如下圖所示:
上圖大致的處理邏輯,總結(jié)如下6步:
1.讀取配置文件,運(yùn)行所有 MCP Servers,獲取可用的 Tools;
2.用戶與 LLM 對話(附帶所有 Tools 名稱描述,參數(shù)定義);
3.LLM 識別到要執(zhí)行某個Tool,返回名稱和參數(shù);
4.找到對應(yīng) MCP Server 的 Tool,調(diào)用執(zhí)行,返回結(jié)果;
5.把工具執(zhí)行結(jié)果提交給 LLM;
6.LLM 返回分析結(jié)果給用戶。
你可以把 MCP 想象成你雇來的得力助手,你只需要告訴他你的想法,他就會負(fù)責(zé)跑腿和執(zhí)行具體任務(wù),而你只需負(fù)責(zé)下達(dá)指令和驗(yàn)收最終結(jié)果。
以下使用 Spring AI + MCP 四步教你實(shí)現(xiàn) Agent 智能體開發(fā)。
2、MCP Server 開發(fā)步驟
本節(jié)手把手教您搭建一個基于 Spring AI MCP 的 Java MCP Server,讓您能夠在各類客戶端輕松調(diào)用企業(yè)級 AI 服務(wù)。借助這一方案,您可以將業(yè)務(wù)邏輯與工具無縫融入 AI 交互流程,為用戶提供更智能、更貼合業(yè)務(wù)場景的體驗(yàn)。
第一、準(zhǔn)備環(huán)境
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency>
第二、業(yè)務(wù)邏輯實(shí)現(xiàn)
@Service
publicclassMeilisearchService {
@Tool(description = "PIG ISSUE 知識庫檢索,解決用戶技術(shù)問題 ")
public String queryQuestion(@ToolParam(description = "用戶的技術(shù)問題描述 ") String question) {
Clientclient=newClient(newConfig()
));
SearchResultresults= client.index("pigx-doc")
.search(newSearchRequest(question)
.setShowMatchesPosition(true)
.setSort(newString[]{"lvl2:desc"})
.setLimit(1));
return results.getHits().stream()
.map(hit -> "【"+hit.get("lvl0")+"】"+hit.get("text"))
.collect(Collectors.joining("\n\n"));
}
}
第三、服務(wù)注冊
@Configuration
public class McpConfig {
@Bean
public ToolCallbackProvider documentTools(MeilisearchService searchService) {
return MethodToolCallbackProvider.builder()
.toolObjects(searchService)
.build();
}
}
3、MCP Client 配置
第一、MCP Clent 通用配置
{
"mcpServers":{
"pig-issue":{
"isActive":true,
"command":"java",
"args":[
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"/Users/lengleng/env/repository/io/github/pig-mesh/pig-issue-query-mcp/0.0.1-SNAPSHOT/pig-issue-query-mcp-0.0.1-SNAPSHOT.jar"
]
}
}
}
第二、圖形化配置
1.Cherry 客戶端配置界面
2.客戶端配置界面
第三、效果展示
4、MCP 架構(gòu)設(shè)計總結(jié)
總體而言,MCP 解決了 Client 和 Server 之間的數(shù)據(jù)交互問題,但在 LLM 到 Tool 的對接上仍有不足:不同模型對 Function Call 的支持程度參差不齊,例如 DeepSeek R1 就不支持,這就導(dǎo)致了工具路由的問題。
第一、不足之處
1.開源時間較短:目前還不夠完善,語言支持有限,示例代碼也不夠豐富。
2.MCP Server 質(zhì)量參差不齊:缺乏統(tǒng)一的質(zhì)量保障體系和包管理工具,許多 MCP Server 無法正常運(yùn)行,或者頻繁崩潰。
3.本地 MCP Server 依賴特定環(huán)境:本地 MCP Server 仍依賴 Node.js 或 Python 環(huán)境,而遠(yuǎn)程 MCP Server 的支持較少。
第二、未來展望
如果未來更多 AI 應(yīng)用開始接入 MCP 協(xié)議,生態(tài)逐漸完善,其能力將非常強(qiáng)大。隨著使用人數(shù)的增加,會有更多 AI 應(yīng)用愿意對接,真正實(shí)現(xiàn)一套代碼在所有地方運(yùn)行。
個人認(rèn)為,MCP 仍有很大的發(fā)展?jié)摿Γ磥砜善冢?/p>
本文轉(zhuǎn)載自公眾號玄姐聊AGI 作者:玄姐
