当前位置: 首页 > news >正文

longchain4j 学习系列(4)-mcp调用

继续学习langchain4j,以下是langchain4j 调用MCP的示例:

1、添加pom依赖

1 <dependency>
2     <groupId>dev.langchain4j</groupId>
3     <artifactId>langchain4j-mcp</artifactId>
4     <version>1.1.0-beta7</version>
5 </dependency>
View Code

这里要注意版本号,不同的版本api细节略有不同。

2、Mcp Client初始化

/*** 初始化SSE客户端** @param sseUrl SSE服务器连接地址* @return McpClient实例*/
private static McpClient initSseClient(String sseUrl) {// 构建默认MCP客户端return new DefaultMcpClient.Builder().clientName("yjmyzz.cnblogs.com").protocolVersion("2024-11-05").toolExecutionTimeout(Duration.ofSeconds(10))// 配置HTTP传输层参数.transport(new HttpMcpTransport.Builder()// 设置SSE服务器连接URL.sseUrl(sseUrl)// 设置连接超时时间.timeout(Duration.ofSeconds(10))// 启用请求日志记录.logRequests(true)// 启用响应日志记录.logResponses(true).build()).build();
}

3、定义1个Assistant接口

    private interface Assistant {String chat(String userMessage);}

4、调用MCP

    /*** 直接获取订单状态信息** @param orderId 订单ID,用于查询指定订单的状态* @return ResponseEntity<String> 包含订单状态信息的响应实体,成功时返回订单状态JSON字符串,* 失败时返回包含错误信息的JSON字符串*/@GetMapping(value = "/order", produces = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<String> getOrderStatusDirect(@RequestParam String orderId) {McpClient mcpClient = null;try {// 初始化SSE客户端连接mcpClient = initSseClient("http://localhost:8070/sse");// 构建AI助手服务,配置聊天模型和工具提供者Assistant assistant = AiServices.builder(Assistant.class).chatModel(deepSeekChatModel).toolProvider(McpToolProvider.builder().mcpClients(mcpClient).build()).build();// 调用AI助手查询订单状态String response = assistant.chat("查询订单状态,订单号:" + orderId);return ResponseEntity.ok(response);} catch (Exception e) {log.error("查询订单状态时发生错误", e);return ResponseEntity.ok("{\"error\":\"查询订单状态失败: " + e.getMessage() + "\"}");} finally {// 确保MCP客户端连接被正确关闭if (mcpClient != null) {try {mcpClient.close();} catch (Exception e) {log.error("关闭MCP客户端时发生错误", e);}}}}

注:这里的mcp server 可参考 spring-ai 学习系列(5)-MCP(webflux sse)

image

日志:

2025-10-03T20:30:43.277+08:00  INFO 18312 --- [longchain4j-study] [nio-8080-exec-2] d.l.http.client.log.LoggingHttpClient    : HTTP request:
- method: POST
- url: https://api.deepseek.com/chat/completions
- headers: [Authorization: Beare...00], [User-Agent: langchain4j-openai], [Content-Type: application/json]
- body: {"model" : "deepseek-chat","messages" : [ {"role" : "user","content" : "查询订单状态,订单号:25070602"} ],"temperature" : 0.7,"stream" : false,"max_tokens" : 2048,"tools" : [ {"type" : "function","function" : {"name" : "queryOrderStatus","description" : "根据订单号查询订单状态","parameters" : {"type" : "object","properties" : {"orderNo" : {"type" : "string","description" : "订单号,格式为8位数字,比如:25070601"}},"required" : [ "orderNo" ]}}} ]
}...2025-10-03T20:30:45.770+08:00  INFO 18312 --- [longchain4j-study] [nio-8080-exec-2] d.l.http.client.log.LoggingHttpClient    : HTTP request:
- method: POST
- url: https://api.deepseek.com/chat/completions
- headers: [Authorization: Beare...00], [User-Agent: langchain4j-openai], [Content-Type: application/json]
- body: {"model" : "deepseek-chat","messages" : [ {"role" : "user","content" : "查询订单状态,订单号:25070602"}, {"role" : "assistant","content" : "我来帮您查询订单号为25070602的订单状态。","tool_calls" : [ {"id" : "call_00_QnwEmctjY5kaQf5MEQ5C2i9Y","type" : "function","function" : {"name" : "queryOrderStatus","arguments" : "{\"orderNo\": \"25070602\"}"}} ]}, {"role" : "tool","tool_call_id" : "call_00_QnwEmctjY5kaQf5MEQ5C2i9Y","content" : "\"订单号:25070602,订单状态:已完成\""} ],"temperature" : 0.7,"stream" : false,"max_tokens" : 2048,"tools" : [ {"type" : "function","function" : {"name" : "queryOrderStatus","description" : "根据订单号查询订单状态","parameters" : {"type" : "object","properties" : {"orderNo" : {"type" : "string","description" : "订单号,格式为8位数字,比如:25070601"}},"required" : [ "orderNo" ]}}} ]
}

 

文中代码:GitHub - yjmyzz/langchain4j-study at day04

http://www.rkmt.cn/news/58199.html

相关文章:

  • Java 学习路线可按「基础→进阶→实战→架构」四阶段推进
  • 读 《d2l:Chapter3. 线性神经网络 》随笔
  • iPadOS16有什么新功能
  • ipad linux
  • 从上下文工程到组织知识管理重构——HRBP在人机协同时代的新使命 - 教程
  • 深入解析:蓝色星球如何打造能与企业共同进化的灵活系统
  • 内网渗透过程的多种代理搭建方法
  • 男女生排列 女生的一定千万别忘了
  • Claude code 使用技巧
  • xyd 2025 NOIP 模拟赛
  • 7段第二课:贪心
  • dropMimeData
  • Terrorform-自动化创建EKS集群
  • Django 学习路线图 - 教程
  • 积极想到二维数组的递推
  • [人工智能-大模型-55]:模型层技能 - AI的算法、数据结构中算法、逻辑处理的算法异同
  • Terrorform-自动化配置AWS EC2
  • Monit-基于非容器服务自恢复程序实践
  • 人工智能之编程进阶 Python高级:第十章 知识点总结
  • 这篇题为《手指沾满白河水:AI元人文的批判与建构》的论文
  • 《沉默的审查:高度原创性理论在预印本平台中的识别困境与范式危机——以“AI元人文”投稿为例》
  • 人工智能之编程进阶 Python高级:第九章 爬虫类模块
  • iOS虚拟现实开发如何降低成本
  • ios是linux
  • ios基于linux还是unix
  • ubuntu22.04 源更新报错 —— all.deb 403 Forbidden [IP: 101.6.15.130 80
  • 完整教程:【Linux入门】常用工具:yum、vim
  • 2025宠物饮水机水泵品牌TOP5推荐,水暖毯水泵、加湿器水泵、冷风扇水泵等微型水泵厂商品质性价比选择指南
  • 2025防脱洗护品牌最新TOP5实测推荐:老姜王+草本双核心,洗发水+按摩
  • 2025草本防脱洗护品牌怎么选?名花贵族(大宏生物),以植萃力量,重新定义头皮健康养护,老姜王防脱洗发水、头皮按摩膏,效果明显,口碑推荐