近期,MCP協議在AI領域熱度飆升,成為眾多開發者和行業人士熱議的焦點。下文先介紹MCP究竟是什么?再詳細講下?Dify?+?DeepSeek?+?Java開發?MCP?server?實戰。
一、MCP的基本概念
MCP,全稱為模型上下文協議(Model?Context?Protocol),是由Anthropic推出的開放標準協議。其核心目標,是打破大型語言模型(LLMs)與外部數據源、工具之間的交互壁壘,實現高效、無縫的連接。
想象一下,在AI的世界里,MCP就像是一個萬能適配器。它賦予智能模型如同使用USB接口般的便捷性,讓模型能夠輕松適配各類設備與服務,極大地拓展了AI的應用邊界。
官網鏈接:
https://modelcontextprotocol.io/introduction,想要深入了解MCP的朋友,可以前往官網查閱更多詳細信息。
二、MCP的核心定義
從協議本質來看,MCP致力于統一應用程序為大語言模型提供上下文的模式。如果將其類比到日常生活中的設備,MCP恰似AI應用領域的USB-C接口。
我們知道,USB-C接口憑借標準化設計,實現了設備與眾多外設(如鼠標、鍵盤、音響、硬盤等)的快速、穩定連接。而MCP同樣以標準化的連接方式,助力AI模型自如對接多元數據源與工具,讓AI模型不再“孤立無援”。
三、MCP的實際應用價值
簡而言之,MCP就是AI調用服務的“智能連接器”。通過這一協議,AI模型與各類數據源、工具間的連接變得簡單高效。
無論是調用天氣API獲取實時氣象數據,還是實現數據庫的高效查詢,亦或是對接其他外部服務,MCP都能以標準化路徑,幫助AI模型輕松完成任務。這使得AI應用的開發與落地更加靈活、便捷,為AI技術的廣泛應用提供了強大助力。
Spring?MCP?Server
Spring?AI?剛好就有?MCP?Server?Boot?Starter?模塊,直接拿來用就行了:
https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html
Spring?MCP?Server?提供了三種不同的模式:
- Standard?Input/Output?(STDIO)?
???spring-ai-starter-mcp-server(適合簡單的本地開發和單進程通信)
- Spring?MVC?(Server-Sent?Events)?
???spring-ai-starter-mcp-server-webmvc(適合傳統的基于?Servlet?的?Web?應用,支持同步模式)
- Spring?WebFlux?(Reactive?SSE)?
???spring-ai-starter-mcp-server-webflux(適合高性能、高并發的響應式應用,支持異步模式)
用Java創建MCP服務
創建MCP服務不用從頭開始,Spring官方有現成的例子,我們拿來改一下就行了。
下載代碼:
https://github.com/spring-projects/spring-ai-examples
找到starter-webmvc-server項目:
1、打開項目后,我們先運行?McpServerApplication.java
2、MCP服務運行成功。
3、添加自己的MCP服務
好了,現在我們可以添加我們自己的MCP服務了。
我們新增一個BIService類,在類上標注@Service注解,然后新增getProjectInfoByCustomerName和getProjectInfoByContractNum方法,模擬從數據庫中查詢項目信息。
注意,要讓大模型能識別方法,必須在方法名上面添加@Tool注解。
@Tool注解的關鍵信息如下:
??name:工具的名稱。如果未提供,則使用方法名稱。AI?模型使用此名稱來識別調用該工具的工具。因此,同一個類中不允許有兩個同名的工具。對于特定的聊天請求,該名稱在模型可用的所有工具中必須是唯一的。
??description:工具的描述,模型可以通過該描述了解何時以及如何調用該工具。如果未提供,則方法名稱將用作工具描述。但是,強烈建議提供詳細的描述,因為這對于模型理解工具的用途及其使用方法至關重要。如果描述不充分,可能會導致模型在應該使用工具時不使用它,或者錯誤地使用它。
??returnDirect:工具結果應直接返回給客戶端還是傳遞回模型。有關更多詳細信息,請參閱直接返回。
??resultConverter:ToolCallResultConverter用于將工具調用的結果轉換為可String?object發送回?AI?模型的實現。更多詳情,請參閱結果轉換。
強烈建議仔細填寫description內容。
最后我們還要在McpServerApplication類中,提供一個ToolCallbackProvider。
4、配置Dify?MCP客戶端
要測試我們的MCP服務還需要一個MCP客戶端,Dify剛好有MCP客戶端的插件,我們來安裝一下。
打開Dify的插件頁面,搜索MCP,安裝Agent?策略(支持?MCP?工具)和?MCP?SSE?/?StreamableHTTP插件。
5、新建一個空白ChatFlow流程
在模型下拉框中選個你喜歡的大模型,由于我們是直接調用MCP服務,大模型的作用其實就是幫我們選擇具體的工具和提取參數,沒必要用推理能力,用了推理大模型反而會影響選擇工具的準確性。
所以,我這里沒有選DeepSeek推理大模型,我選的是豆包大模型。
工具列表選擇插件里的“獲取MCP工具列表”:
點擊“獲取MCP工具列表”工具,點擊“授權”按鈕,添加MCP服務的連接信息:
6、MCP?服務配置
先測試自己本地代碼的MCPserver是否正常
正常后再Dify?做配置
6、MCP?服務配置后進行指令配置
接下來是配置的重點了。首先把“Agent”節點連接到“開始節點”和“直接回復節點”中間:
指令欄填寫:
指令的重點就是先讓大模型分析用戶輸入的內容(sys.query),然后告訴大模型什么情況下要調用什么工具,把工具的名稱告訴大模型,最好能給出幾個例子,讓大模型更好的理解。
最后讓大模型優化輸出格式,比如用表格輸出。
測試看效果
全部設置好之后,整個工作流就三個節點,現在可以點預覽按鈕測試了:
最后
通過這個例子,我們創建了一個MCP服務,并通過Dify客戶端成功調用。
用Java寫MCP服務,我們只需要在Spring?AI項目的基礎上添加自己的Service,然后在Service里添加業務數據查詢的工具就行了。
這樣我們就能實現AI業務數據查詢(問數)的功能啦!
如果對文章感興趣請關注我,如果覺得有收獲打個賞哈,定期發布最詳細的MCP集成Dify的實戰教程!