news 2026/6/12 9:17:33

LangChain4j 开发Java Agent智能体- MCP(模型上下文协议)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain4j 开发Java Agent智能体- MCP(模型上下文协议)

大家好,我是Java1234_小锋老师,最近更新《2027版本 LangChain4j 开发Java Agent 智能体 视频教程》专辑,感谢大家支持。

本课程主要介绍和讲解 LangChain4j 简介,阿里云百炼大模型 平台接入,Ollama简介以及安装和使用,HelloWorld 实现,日志配置,集成SpringBoot,Ai Service 使用,对话与提示词工程(Prompt),结构化输出,会话记忆,工具调用(Function Calling),嵌入模型 与向量数据库,RAG(检索增强生成),MCP(模型上下文协议),多模态支持

视频教程+课件+源码打包下载:

链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234
提取码:0000

LangChain4j 开发Java Agent智能体- MCP(模型上下文协议)

一、什么是 MCP?

MCP(Model Context Protocol,模型上下文协议)是一项开放标准,用于在大语言模型应用与外部工具、数据源之间建立统一、可互操作的通信方式。

可以把它理解为 AI 世界的USB 接口

传统方式MCP 方式
每个框架单独集成 GitHub、数据库、天气 API只要提供 MCP Server,任何 Client 都能接入
工具代码与应用强耦合工具运行在独立进程,通过协议调用
跨语言复用困难Server 可用 Java/Node/Python 实现,Client 统一消费

官方资源:

  • MCP 规范:https://modelcontextprotocol.io/
  • LangChain4j 教程:MCP Tutorial

二、MCP 整体架构

MCP 涉及四个核心角色:

角色在本项目中的对应
Host(宿主)Spring Boot 应用,接收 HTTP 请求
MCP ClientLangChain4jDefaultMcpClient,负责协议通信
MCP Server独立进程,暴露getWeather等工具
LLM配置中的openAiChatModel/ Ollama,决定是否调用工具

三、MCP 工作原理

MCP 基于JSON-RPC 2.0,典型调用流程如下:

  1. initialize— Client 与 Server 握手,协商协议版本
  2. tools/list— Client 获取 Server 提供的工具列表及参数 Schema
  3. tools/call— LLM 选中工具后,Client 将请求转发给 Server 执行
  4. 回传结果— Server 返回执行结果,LLM 生成自然语言回答

LangChain4j MCP 模块分层

AI Service(@AiService) ← 业务接口,与 Controller 对接 ↓ McpToolProvider ← 将 MCP 工具适配为 LangChain4j Tool ↓ DefaultMcpClient ← JSON-RPC 协议、缓存、健康检查 ↓ McpTransport(stdio / HTTP 等) ← 进程间或网络通信

常见传输方式

传输方式适用场景LangChain4j 类
stdio本地子进程(最常见)StdioMcpTransport
Streamable HTTP远程 HTTP 服务StreamableHttpMcpTransport
Docker stdio容器化 MCP ServerDockerMcpTransport

Windows 开发环境下,stdio最为常用。

四、与本项目现有实现的对比

本项目已有天气助手,使用的是本地@Tool方式:

  • WeatherTool— 带@Tool注解的工具类,运行在 Spring 容器内
  • WeatherAssistantService@AiService(tools = {"weatherTool"})
  • MyWeatherController— 暴露/weather/chat接口

MCP 方式则将工具放到独立进程,通过协议远程调用,架构解耦程度更高:

五、具体天气MCP实例

首先pom.xml里加下mcp server和client依赖:

<!-- MCP Client --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-mcp</artifactId><version>1.15.0-beta25</version></dependency><!-- MCP Server(社区版) --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-mcp-server</artifactId><version>1.15.0-beta25</version></dependency>

接着 创建mcp server WeatherMcpServerMain

packagecom.java1234.mcp;importcom.java1234.tool.WeatherTool;importdev.langchain4j.community.mcp.server.McpServer;importdev.langchain4j.community.mcp.server.transport.StdioMcpServerTransport;importdev.langchain4j.mcp.protocol.McpImplementation;importjava.util.List;/** * 天气 MCP Server。独立进程运行,通过 stdio 与 Client 通信。 * 注意:JSON-RPC 走 System.out,日志请输出到 System.err。 */publicclassWeatherMcpServerMain{publicstaticvoidmain(String[]args)throwsException{McpImplementationinfo=newMcpImplementation();// MCP Server 信息info.setName("java1234-weather-mcp-server");// MCP Server 名称info.setVersion("1.0.0");// MCP Server 版本McpServerserver=newMcpServer(List.of(newWeatherTool()),info);// 创建 MCP ServernewStdioMcpServerTransport(System.in,System.out,server);// 创建 stdio 适配器Thread.currentThread().join();// 阻塞当前线程,等待退出}}

再新建McpConfig

packagecom.java1234.config;importdev.langchain4j.mcp.McpToolProvider;importdev.langchain4j.mcp.client.DefaultMcpClient;importdev.langchain4j.mcp.client.McpClient;importdev.langchain4j.mcp.client.transport.McpTransport;importdev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjava.nio.file.Path;importjava.util.List;@ConfigurationpublicclassMcpConfig{/** * 创建 MCP Client */@Bean(destroyMethod="close")publicMcpClientweatherMcpClient(){StringjavaBin=Path.of(System.getProperty("java.home"),"bin","java").toString();Stringclasspath=System.getProperty("java.class.path");McpTransporttransport=StdioMcpTransport.builder()// 创建 stdio 适配器.command(List.of(javaBin,"-cp",classpath,"com.java1234.mcp.WeatherMcpServerMain")).logEvents(true).build();returnDefaultMcpClient.builder()// 创建 MCP Client.key("weather-mcp").transport(transport).build();}/** * 创建 MCP 工具提供者 */@BeanpublicMcpToolProviderweatherMcpToolProvider(McpClientweatherMcpClient){returnMcpToolProvider.builder().mcpClients(weatherMcpClient).filterToolNames("getWeather")// 只添加 getWeather 工具.build();}}

接着再新建McpWeatherAssistantService,配置上toolProvider

packagecom.java1234.service;importdev.langchain4j.service.SystemMessage;importdev.langchain4j.service.spring.AiService;importdev.langchain4j.service.spring.AiServiceWiringMode;@AiService(wiringMode=AiServiceWiringMode.EXPLICIT,chatModel="openAiChatModel",toolProvider="weatherMcpToolProvider"// 关键:使用 MCP 工具)publicinterfaceMcpWeatherAssistantService{@SystemMessage(""" 你是天气助手。用户询问某地天气时,必须调用 getWeather 工具获取数据, 再基于工具返回结果用中文简洁回答;不要编造未在工具结果中出现的数值。 """)Stringchat(StringuserMessage);}

最后新建MyMcpWeatherController

packagecom.java1234.controller;importcom.java1234.service.McpWeatherAssistantService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/mcp/weather")publicclassMyMcpWeatherController{@AutowiredprivateMcpWeatherAssistantServicemcpWeatherAssistantService;@RequestMapping("/chat")publicStringchat(Stringquestion){returnmcpWeatherAssistantService.chat(question);}}

最后编译测试下:

1. 编译

mvn compile

2. 启动应用

mvn spring-boot:run

启动时McpConfig会自动拉起WeatherMcpServerMain子进程并完成 MCP 握手。

3. 调用 MCP 接口

GET http://localhost:8080/mcp/weather/chat?question=北京今天天气怎么样?

六、为什么有了@Tool还要 MCP?

不是因为@Tool不够用,而是因为场景不同。

@Tool就够了(大多数业务代码)
  • 工具是你自己写的 Java 代码
  • 和业务服务在同一个 Spring Boot 里
  • 逻辑简单、团队只用 LangChain4j/Java
  • 追求简单、稳定、少运维

例如:查订单、算价格、调内部 Service——直接@Tool最合适。

什么时候该用 MCP?
  1. 接入第三方/社区工具
    GitHub、文件系统、数据库等已有 MCP Server,不用为每个框架单独写集成。
  2. 工具与 AI 应用解耦
    工具独立部署、独立升级、独立扩缩容;AI 应用只连 MCP Client。
  3. 跨语言复用
    Server 用 Python/Node 写,Java 应用通过 MCP 调用,不必重写一遍。
  4. 多 Client 共享同一套工具
    Cursor、Claude Desktop、你的 Spring Boot 应用都能连同一个 MCP Server。
  5. 安全与隔离
    工具在子进程/容器里跑,权限、资源、崩溃与主应用隔离。
  6. 动态扩展工具
    运行时连上 MCP Server 就能tools/list发现新工具,不必改主应用代码。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 9:17:01

从SIM卡到智能门锁:TLV编码如何悄悄支撑你身边的物联网设备?

从SIM卡到智能门锁&#xff1a;TLV编码如何悄悄支撑你身边的物联网设备&#xff1f;当你用手机拨打电话时&#xff0c;SIM卡里的数据正以TLV格式传输&#xff1b;当你用指纹解锁智能门锁时&#xff0c;门锁与服务器间的指令也遵循TLV编码规则。这种看似晦涩的二进制编码方案&am…

作者头像 李华
网站建设 2026/6/12 9:15:03

用STC89C52+DS1302做个桌面电子钟,还能手机调时间(附完整代码)

从零打造智能桌面电子钟&#xff1a;STC89C52DS1302实战指南 1. 项目构思与硬件选型 在开始动手之前&#xff0c;我们需要明确这个桌面电子钟的核心需求。不同于传统的实验板搭建&#xff0c;我们要打造的是一个 兼具实用性和美观性 的完整作品。这意味着在硬件选择上需要平…

作者头像 李华
网站建设 2026/6/12 9:06:54

AI技术简报如何成为工程师的决策仪表盘

1. 项目概述&#xff1a;一份真正“够用”的AI资讯简报&#xff0c;到底长什么样&#xff1f; 你有没有过这种体验&#xff1a;每天早上打开邮箱&#xff0c;收进十几封AI领域的Newsletter——有的标题写着“深度解析LLM推理优化”&#xff0c;点开发现通篇是论文摘要堆砌&…

作者头像 李华
网站建设 2026/6/12 9:05:56

半导体设备通信入门:5分钟搞懂SECS/GEM、HSMS和SECS-II的关系

半导体设备通信三剑客&#xff1a;SECS/GEM、HSMS与SECS-II的协同之道想象一下走进一座现代化晶圆厂&#xff0c;数百台精密设备如同交响乐团般协同工作。而让这些设备"对话"的秘密&#xff0c;正是我们今天要解构的通信协议三要素——它们就像乐团指挥手中的乐谱、乐…

作者头像 李华
网站建设 2026/6/12 8:55:54

GPT-5.3-Codex:工程上下文驱动的开发者协作者

1. 项目概述&#xff1a;这不是又一个“AI写代码”噱头&#xff0c;而是开发范式迁移的临界点你有没有过这种体验&#xff1a;凌晨三点&#xff0c;盯着IDE里一段反复报错的TypeScript类型推导逻辑&#xff0c;手边是三份不同版本的官方文档、两篇Medium上互相矛盾的教程&#…

作者头像 李华