国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

LangChain4j + MCP:讓你的 AI 輕松調(diào)用外部工具(內(nèi)附GitHub-MCP實戰(zhàn))

0
分享至

點擊下方“JavaEdge”,選擇“設為星標”

第一時間關注技術干貨!


免責聲明~ 任何文章不要過度深思! 萬事萬物都經(jīng)不起審視,因為世上沒有同樣的成長環(huán)境,也沒有同樣的認知水平,更「沒有適用于所有人的解決方案」; 不要急著評判文章列出的觀點,只需代入其中,適度審視一番自己即可,能「跳脫出來從外人的角度看看現(xiàn)在的自己處在什么樣的階段」才不為俗人。 怎么想、怎么做,全在乎自己「不斷實踐中尋找適合自己的大道」

本文已收錄在Github,關注我,緊跟本系列專欄文章,咱們下篇再續(xù)!

  • 魔都架構(gòu)師 | 全網(wǎng)30W技術追隨者

  • 大廠分布式系統(tǒng)/數(shù)據(jù)中臺實戰(zhàn)專家

  • 主導交易系統(tǒng)百萬級流量調(diào)優(yōu) & 車聯(lián)網(wǎng)平臺架構(gòu)

  • AIGC應用開發(fā)先行者 | 區(qū)塊鏈落地實踐者

  • 以技術驅(qū)動創(chuàng)新,我們的征途是改變世界!

  • 實戰(zhàn)干貨:編程嚴選網(wǎng)

0 前言

LangChain4j 支持模型上下文協(xié)議(MCP),用于與符合 MCP 標準的服務器通信,從而調(diào)用并執(zhí)行工具。

該協(xié)議支持兩種通信方式,LangChain4j 均已支持:

  • HTTP 模式:客戶端通過 SSE 通道接收服務端事件,并通過 HTTP POST 請求發(fā)指令

  • stdio 模式:客戶端可將 MCP 服務器作為本地子進程運行,并通過標準輸入/輸出與其通信

想讓聊天模型或 AI 服務使用 MCP 服務器提供的工具,先得創(chuàng)建一個 MCP 工具提供者實例。

1 創(chuàng)建 MCP 工具提供者(MCP tool provider) 1.1 MCP通信方式

先要構(gòu)建一個 MCP 通信方式的實例。

① stdio

以本地啟動 NPM 包為例:

McpTransport transport = new StdioMcpTransport.Builder()     .command(List.of("/usr/bin/npm", "exec", "@modelcontextprotocol/server-everything@0.6.2"))     .logEvents(true) // 開啟日志記錄(可選)     .build();
② HTTP

需要兩個 URL:

  • 一個用于啟動 SSE channel

  • 另一個用于通過 POST 提交命令:

McpTransport transport = new HttpMcpTransport.Builder()     .sseUrl("http://localhost:3001/sse") // SSE 事件channel地址     .logRequests(true) // 開啟請求日志     .logResponses(true) // 開啟響應日志     .build();
1.2 創(chuàng)建 MCP 客戶端

代表可以通過給定的傳輸協(xié)議,使用服務器檢索和執(zhí)行工具的客戶端,該客戶端可以與MCP服務器通信。

使用 transport 實例創(chuàng)建 MCP 客戶端:

McpClient mcpClient = new DefaultMcpClient.Builder()     .transport(transport)     .build();
1.3 創(chuàng)建 MCP 工具提供者

工具提供者。每次調(diào)用AI服務并為該特定調(diào)用提供工具時,都會調(diào)用它。 toolproviderresult中返回的工具將包含在對LLM的請求中。

使用 MCP 客戶端創(chuàng)建工具提供者:

ToolProvider toolProvider = McpToolProvider.builder()     .mcpClients(List.of(mcpClient))     .build();

一個 MCP 工具提供者可同時用多個 MCP 客戶端。如需自定義在連接某個服務器失敗時行為,可builder.failIfOneServerFails(boolean)設置:

  • 默認false:忽略單個服務器失敗,繼續(xù)使用其他服務器

  • 若置true:任一服務器失敗都會導致整個工具提供者拋異常

將工具提供者綁定到 AI 服務中,只需在構(gòu)建 AI 服務時傳入:

Bot bot = AiServices.builder(Bot.class)     .chatModel(model)     .toolProvider(toolProvider)     .build();
2 日志功能

MCP 協(xié)議支持服務端向客戶端發(fā)送日志消息。默認,客戶端會將這些日志轉(zhuǎn)為 SLF4J 格式輸出。如想自定義日志處理邏輯,可實現(xiàn)dev.langchain4j.mcp.client.logging.McpLogMessageHandler接口,并傳入客戶端構(gòu)造器:

McpClient mcpClient = new DefaultMcpClient.Builder()     .transport(transport)     .logMessageHandler(new MyLogMessageHandler()) // 自定義日志處理器     .build();
3 資源操作

獲取服務器上的 MCP 資源,使用:

  • client.listResources():返回McpResource列表,包含資源元數(shù)據(jù)及 URI

  • client.listResourceTemplates():獲取資源模板

獲取資源具體內(nèi)容時,用client.readResource(uri),傳入資源 URI,返回McpReadResourceResult,其中包含一個或多個McpResourceContents

  • McpBlobResourceContents:二進制資源

  • McpTextResourceContents:文本資源

4 提示詞操作(Prompts)

獲取服務器上定義的MCP 提示詞,用:

  • client.listPrompts():返回提示詞McpPrompt列表,包含名稱和參數(shù)信息

  • client.getPrompt(name, arguments):渲染具體提示詞內(nèi)容,返回一組McpPromptMessage,包含角色(如userassistant)和消息內(nèi)容

當前支持的消息內(nèi)容類型包括:

  • McpTextContent:文本

  • McpImageContent:圖像

  • McpEmbeddedResource:嵌入資源

提示詞消息可用McpPromptMessage.toChatMessage()轉(zhuǎn)為通用的 LangChain4j 消息類型ChatMessage,但需滿足:

  • roleassistant時,內(nèi)容須是文本,否則會拋異常

  • 包含二進制內(nèi)容的消息無法轉(zhuǎn)換

5 使用 Docker 運行 GitHub MCP 服務器

看一個通過 MCP 協(xié)議連接 GitHub 的示例。目標是用 LangChain4j 和 MCP 客戶端獲取并總結(jié) GitHub 上公開倉庫的最新提交信息。

通過 MCP 提供的 GitHub 服務器實現(xiàn)(見 MCP GitHub 倉庫),通過 Docker 本地運行。

構(gòu)建 Docker 鏡像

先克隆或下載 MCP GitHub 服務器源碼,進入根目錄,執(zhí)行以下命令構(gòu)建鏡像:

docker build -t mcp/github -f Dockerfile .

構(gòu)建完成后,本地會生成mcp/github鏡像:

docker image ls REPOSITORY   TAG         IMAGE ID        SIZE mcp/github   latest      b141704170b1    173MB
6 開發(fā)工具提供者代碼示例

創(chuàng)建 Java 類McpGithubToolsExample,使用 LangChain4j 連接 GitHub MCP 服務器,執(zhí)行以下操作:

  • 啟動 Docker 容器運行 GitHub MCP 服務器

  • 使用 stdio 通信方式連接 MCP 服務器

  • 使用語言模型總結(jié) LangChain4j 倉庫最近 3 次提交信息

★ ?? 提示:下面代碼中通過環(huán)境變量 GITHUB_PERSONAL_ACCESS_TOKEN 傳入 GitHub Token,訪問公共倉庫時可選。 ”
獲取GITHUB_PERSONAL_ACCESS_TOKEN

https://github.com/settings/personal-access-tokens/new:

自己保存好:

構(gòu)建好的鏡像:

docker run --rm -d \   --name mcp-github-server \   -e GITHUB_PERSONAL_ACCESS_TOKEN=token \   mcp/github

public static void main(String[] args) throws Exception {     ChatLanguageModel model = OllamaChatModel.builder()         .baseUrl("http://localhost:11434") // Ollama 默認本地服務地址         .modelName("llama3-groq-tool-use:8b") // 你本地 Ollama 拉取的模型名稱         .logRequests(true)         .logResponses(true)         .build();     McpTransport transport = new StdioMcpTransport.Builder()         .command(List.of("/usr/local/bin/docker", "run", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "-i", "mcp/github"))         .logEvents(true)         .build();     McpClient mcpClient = new DefaultMcpClient.Builder()         .transport(transport)         .build();     ToolProvider toolProvider = McpToolProvider.builder()         .mcpClients(List.of(mcpClient))         .build();     Bot bot = AiServices.builder(Bot.class)         .chatModel(model)         .toolProvider(toolProvider)         .build();     try {         String response = bot.chat("Summarize the last 3 commits of the LangChain4j GitHub repository");         System.out.println("RESPONSE: " + response);     } finally {         mcpClient.close();     } }
7 執(zhí)行示例代碼

運行 Java 應用后,收到類似輸出,總結(jié) LangChain4j 倉庫最近 3 次提交內(nèi)容:

以下是 LangChain4j GitHub 倉庫最近三次提交的摘要: 1. **提交 [36951f9](https://github.com/langchain4j/langchain4j/commit/36951f9649c1beacd8b9fc2d910a2e23223e0d93)**(時間:2025-02-05)    - **作者:** Dmytro Liubarskyi    - **信息:** 更新至 `upload-pages-artifact@v3`    - **詳情:** 此提交將上傳頁面資源的 GitHub Action 升級至版本 3。 2. **提交 [6fcd19f](https://github.com/langchain4j/langchain4j/commit/6fcd19f50c8393729a0878d6125b0bb1967ac055)**(時間:2025-02-05)    - **作者:** Dmytro Liubarskyi    - **信息:** 更新至 `checkout@v4`、`deploy-pages@v4` 和 `upload-pages-artifact@v4`    - **詳情:** 此提交升級了多個 GitHub Action 到版本 4。 3. **提交 [2e74049](https://github.com/langchain4j/langchain4j/commit/2e740495d2aa0f16ef1c05cfcc76f91aef6f6599)**(時間:2025-02-05)    - **作者:** Dmytro Liubarskyi    - **信息:** 更新至 `setup-node@v4` 和 `configure-pages@v4`    - **詳情:** 此提交將相關 GitHub Action 升級至版本 4。 這三次提交都由 Dmytro Liubarskyi 完成,時間相同,主要內(nèi)容為將 GitHub Actions 升級至新版。

本文已收錄在Github Java-Interview-Tutorial,關注我,緊跟本系列專欄文章,咱們下篇再續(xù)!

  • 魔都架構(gòu)師 | 全網(wǎng)30W技術追隨者

  • 大廠分布式系統(tǒng)/數(shù)據(jù)中臺實戰(zhàn)專家

  • 主導交易系統(tǒng)億級流量調(diào)優(yōu) & 車聯(lián)網(wǎng)平臺架構(gòu)

  • AIGC應用開發(fā)先行者 | 區(qū)塊鏈落地實踐者

  • 以技術驅(qū)動創(chuàng)新,我們的征途是改變世界!

  • 實戰(zhàn)干貨:編程嚴選網(wǎng)

關注我,緊跟本系列專欄文章,咱們下篇再續(xù)!

加我好友,一起AI探索交流:

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
知名童星剛滿18就立即加入OnlyFans,一天賺290萬美元

知名童星剛滿18就立即加入OnlyFans,一天賺290萬美元

隨波蕩漾的漂流瓶
2026-01-11 18:03:40
2026年新成語:惡意尋子!該警惕了,細節(jié)越挖越心寒!

2026年新成語:惡意尋子!該警惕了,細節(jié)越挖越心寒!

你食不食油餅
2026-01-11 06:41:42
庫皮揚斯克俄兵投降,哈馬斯歷史翻篇

庫皮揚斯克俄兵投降,哈馬斯歷史翻篇

名人茍或
2026-01-11 17:14:51
港媒近日爆料,成龍為私生女吳卓林設立的4000萬信托基金已經(jīng)到賬

港媒近日爆料,成龍為私生女吳卓林設立的4000萬信托基金已經(jīng)到賬

荊楚寰宇文樞
2026-01-11 20:47:43
WTT多哈冠軍賽-陳幸同丟金,國乒雙線10人一冠難求,朱雨玲奪冠

WTT多哈冠軍賽-陳幸同丟金,國乒雙線10人一冠難求,朱雨玲奪冠

越嶺尋蹤
2026-01-12 00:52:49
澳大利亞U23主帥:下半場只有一支球隊在進攻;中國隊防守嚴密

澳大利亞U23主帥:下半場只有一支球隊在進攻;中國隊防守嚴密

懂球帝
2026-01-11 22:32:26
怒了!許利民:球員在擺譜、擺大牌,我們輸?shù)氖潜本┑男蜗蠛妥饑?>
    </a>
        <h3>
      <a href=懂球帝
2026-01-11 22:54:27
格陵蘭島普通百姓:囤糧、存錢,努力保持冷靜,本以為美國是盟友,不料竟成其獵物

格陵蘭島普通百姓:囤糧、存錢,努力保持冷靜,本以為美國是盟友,不料竟成其獵物

紅星新聞
2026-01-11 17:33:21
關于李莉教授的一張圖火了

關于李莉教授的一張圖火了

關爾東
2026-01-11 16:32:35
最帥升旗手張自軒大婚,不到48小時,上演惡心一幕,新娘無妄之災

最帥升旗手張自軒大婚,不到48小時,上演惡心一幕,新娘無妄之災

李健政觀察
2026-01-10 15:30:42
商務部印發(fā)《大連等9城市服務業(yè)擴大開放綜合試點任務》,青島在列

商務部印發(fā)《大連等9城市服務業(yè)擴大開放綜合試點任務》,青島在列

易瞰青島
2026-01-11 10:44:05
賴清德再無后路,鄭麗文向島內(nèi)2300萬民眾做保證,特朗普已選邊站

賴清德再無后路,鄭麗文向島內(nèi)2300萬民眾做保證,特朗普已選邊站

博覽歷史
2026-01-11 18:52:29
成都61歲男子將長約17cm紅薯塞入肛門,卡住無法取出,紅薯尺寸過大,最終手術取出

成都61歲男子將長約17cm紅薯塞入肛門,卡住無法取出,紅薯尺寸過大,最終手術取出

觀威海
2026-01-10 16:54:03
鰲太線2死1墜崖事件完整經(jīng)過梳理:19歲高顏女大學生被活活凍死!

鰲太線2死1墜崖事件完整經(jīng)過梳理:19歲高顏女大學生被活活凍死!

不二表姐
2026-01-10 22:29:28
32歲貨車司機中毒去世留下兩娃,眾卡友已為其募捐18萬,還有人愿承擔其小女兒15年上學費用

32歲貨車司機中毒去世留下兩娃,眾卡友已為其募捐18萬,還有人愿承擔其小女兒15年上學費用

極目新聞
2026-01-11 19:42:23
徹底清零!緬甸KK園區(qū)635棟涉賭詐建筑全數(shù)炸毀

徹底清零!緬甸KK園區(qū)635棟涉賭詐建筑全數(shù)炸毀

看看新聞Knews
2026-01-11 12:45:02
特朗普宣布進入國家緊急狀態(tài)

特朗普宣布進入國家緊急狀態(tài)

每日經(jīng)濟新聞
2026-01-11 07:29:23
2000萬粉絲演員哭窮炫富,多個賬號被禁言,代言產(chǎn)品全線停產(chǎn)

2000萬粉絲演員哭窮炫富,多個賬號被禁言,代言產(chǎn)品全線停產(chǎn)

21世紀經(jīng)濟報道
2026-01-10 15:33:36
突發(fā)!東契奇被毆打,NBA正式官宣,禁賽3場,8000萬合同成導火索

突發(fā)!東契奇被毆打,NBA正式官宣,禁賽3場,8000萬合同成導火索

球童無忌
2026-01-11 14:52:34
又贏麻了?KK園區(qū)清零?衛(wèi)星圖打臉擴建,媒體宣傳網(wǎng)友不買賬為啥

又贏麻了?KK園區(qū)清零?衛(wèi)星圖打臉擴建,媒體宣傳網(wǎng)友不買賬為啥

眼光很亮
2026-01-11 15:03:16
2026-01-12 01:28:49
JavaEdge incentive-icons
JavaEdge
Java 技術
466文章數(shù) 457關注度
往期回顧 全部

科技要聞

“我們與美國的差距也許還在拉大”

頭條要聞

特朗普就格陵蘭島下最后通牒 加拿大開始行動了

頭條要聞

特朗普就格陵蘭島下最后通牒 加拿大開始行動了

體育要聞

U23國足形勢:末輪不負泰國即確保晉級

娛樂要聞

留幾手為閆學晶叫屈?稱網(wǎng)友自卑敏感

財經(jīng)要聞

外賣平臺"燒錢搶存量市場"迎來終局?

汽車要聞

2026款宋Pro DM-i長續(xù)航補貼后9.98萬起

態(tài)度原創(chuàng)

家居
游戲
教育
房產(chǎn)
軍事航空

家居要聞

木色留白 演繹現(xiàn)代自由

Epic喜加二/LPL、KPL春季賽開戰(zhàn)| 下周玩什么

教育要聞

官方發(fā)布:3370個志愿者服務名額!南京中小學生均可報名!

房產(chǎn)要聞

66萬方!4755套!三亞巨量房源正瘋狂砸出!

軍事要聞

俄大使:馬杜羅夫婦被控制時身邊沒人

無障礙瀏覽 進入關懷版