Dify 快速上手 MCP!Java 搭建 MCP Server 接入 Dify詳細實戰攻略

近期,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的實戰教程!

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

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

相關文章

力扣992做題筆記

左神做法的理論依據 我們可以通過 集合的包含關系 和 具體示例枚舉 來直觀理解這一推導過程。以下結合題目示例 1 進行詳細說明: 示例 1 分析 輸入:nums [1,2,1,2,3], k 2 目標:計算恰好包含 2 種不同整數 的子數組個數。 步驟一集合 A…

Kubernetes 運維操作手冊:從 etcd 快照進行精確恢復

1 5 步實現 etcd 精確恢復 將快照恢復到本地 etcd 數據目錄。使用恢復的數據啟動本地 etcd 實例。使用 etcdctl 查詢特定鍵(例如,ConfigMap)。使用 auger 解碼以提取干凈的 YAML。使用 kubectl 申請恢復到您的實時集群。 本指南將指導您從 et…

LeetCode Hot100刷題——合并區間

56. 合并區間 以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。 示例 1: 輸入:i…

《Metasploit框架核心模塊解析與安全防護實踐》?

目錄 ??一、框架模塊化設計與安全驗證價值?? ??1. 漏洞驗證模塊(Exploit Modules)?? ??2. 安全評估模塊(Auxiliary Modules)?? ??3. 安全響應模塊(Post-Exploitation)?? ??4. 載荷安全…

Cribl 中 Parser 扮演著重要的角色 + 例子

先看文檔: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…

程序設計實踐--排序(1)

&#xff11;、插入排序&#xff08;一個數組&#xff09; #include<bits/stdc.h> using namespace std; const int N1e35; int a[N]; int n; int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}for(int i1;i<n;i){int va[i];int ji-1;while(j>1&am…

MAC電腦中右鍵后復制和拷貝的區別

在Mac電腦中&#xff0c;右鍵菜單中的“復制”和“拷貝”操作在功能上有所不同&#xff1a; 復制 功能&#xff1a;在選定的位置創建一個與原始文件相同的副本。快捷鍵&#xff1a;CommandD用于在當前位置快速復制文件&#xff0c;CommandC用于將內容復制到剪貼板。效果&…

新能源汽車焊接智能節氣閥

在新能源汽車產業迅猛發展的浪潮中&#xff0c;制造工藝的優劣直接關系到車輛的性能、安全與市場競爭力。焊接&#xff0c;作為新能源汽車生產流程里的關鍵一環&#xff0c;無論是構建車身框架&#xff0c;還是連接電池模組&#xff0c;其質量的好壞都起著決定性作用。而在焊接…

Linux:面試題

1. 什么是中斷和異常&#xff1f; 中斷&#xff1a;由外部設備&#xff08;如鍵盤、網卡&#xff09;觸發的異步事件&#xff0c;用于通知 CPU 有緊急事件需要處理。 異常&#xff1a;由 CPU 內部執行指令時產生的同步事件&#xff08;如除零錯誤、缺頁異常&#xff09;&#…

linux關閉某端口暫用的進程

查看是哪個端口暫用 sudo netstat -tulpn | grep :80根據圖片 顯示 80端口暫用的 進程id是 3002 結束進程id為3002的進程 sudo kill -9 3002

【學習心得】Jupyter 如何在conda的base環境中其他虛擬環境內核

如果你在conda的base環境運行了jupyter lab打開了一個ipynb文本&#xff0c;此時選擇的內核是base虛擬環境的Python內核&#xff0c;如果我想切換成其他conda虛擬環境來運行這個文件該怎么辦&#xff1f;下面我們試著還原一下問題&#xff0c;并且解決問題。 【注】 這個問題出…

React Flow 邊的基礎知識與示例:從基本屬性到代碼實例詳解

本文為《React Agent&#xff1a;從零開始構建 AI 智能體》專欄系列文章。 專欄地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。項目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代碼示?例與實戰源&#xff09;。完整介紹…

ZooKeeper 原理解析及優劣比較

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 引言 在分布式系統中&#xff0c;服務注冊、配置管理、分布式鎖、選舉等場景都需要一個高可用、一致性強的協調服務。Apache ZooKeeper 憑…

模糊照片變清晰:照片高清修復 ComfyUI 使用教學

模糊照片變清晰 滿心歡喜地翻出舊相冊&#xff0c;想重溫那些美好的回憶&#xff0c;結果照片卻模糊不清&#xff0c;根本看不清當年的模樣&#xff1b;又或者精心拍攝了一張超有氛圍感的照片&#xff0c;結果因為手抖或者光線問題&#xff0c;變得模糊&#xff0c;無法發朋友圈…

IEEEtran中文獻中的作者大于3個時,用et al.省略

latex&#xff1a; 在使用bib文件的時候&#xff0c;當參考文獻超過三個作者時&#xff0c;第三個作者后加逗號并接上et al.。我使用的是IEEEtran.bst。 \begingroup \small \bibliographystyle{IEEEtran} \bibliography{newbmyref1} \endgroup1.需要將IEEEtran.bst添加到這個…

Android Studio Kotlin 中的方法添加灰色參數提示

在使用 Android Studio 時&#xff0c; 我發現使用 Java 編寫方法后在調用方法時&#xff0c; 會自動顯示灰色的參數。 但在 Kotlin 中沒有顯示&#xff0c; 于是找了各種方法最后找到了設置&#xff0c; 并且以本文章記錄下來。 博主博客 https://blog.uso6.comhttps://blog.…

python寵物用品商城系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

《具身智能機器人:自修復材料與智能結構設計的前沿探索》

在具身智能機器人的研發進程中&#xff0c;自修復材料與智能結構設計無疑是極具挑戰性與創新性的關鍵領域&#xff0c;吸引著無數科研人員投身其中&#xff0c;探尋未知。 傳統機器人在復雜多變的環境中執行任務時&#xff0c;一旦材料出現損傷&#xff0c;如外殼刮擦、內部線…

矩陣的秩(Rank)

矩陣的秩&#xff08;Rank&#xff09;是線性代數中的核心概念&#xff0c;表示矩陣中線性無關的行&#xff08;或列&#xff09;的最大數量&#xff0c;反映了矩陣所包含的“獨立信息”的多少。以下是其核心要點&#xff1a; 1. 秩的定義 行秩&#xff1a;矩陣中線性無關的行…

麒麟系統編譯osg —— 擴展篇

一、背景 前文講到麒麟系統編譯osg&#xff0c;通常情況下會提示&#xff1a; 意思是無法生成插件osgdb_jpeg&#xff0c;需要配置“JPEG_LIBRARY”和“JPEG_INCLUDE_DIR”。 經查&#xff0c;本機不存在jpeglib.h和libjpeg.so&#xff0c;需要另外安裝。 二、編譯jpeg庫 …