当前位置: 首页 > 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.jsqmd.com/news/48414/

相关文章:

  • Java 学习路线可按「基础→进阶→实战→架构」四阶段推进
  • Jetson Orin Nano super -2 烧录概念及必要性
  • blog搬迁
  • 102302122许志安作业3
  • iPhone14系列电池容量多少毫安
  • ipc linux
  • 读 《d2l:Chapter3. 线性神经网络 》随笔
  • 错排的
  • ipad学linux
  • iPadOS16有什么新功能
  • ipad linux
  • 深入解析:蓝色星球如何打造能与企业共同进化的灵活系统
  • 第七讲上自监督学习self-supervised learning-BERT
  • 内网渗透过程的多种代理搭建方法
  • 男女生排列 女生的一定千万别忘了
  • 2025年11月上海专业防水补漏推荐!Top5口碑公司实测,先检测后施工有保障
  • 商品推荐系统-FAISS召回
  • AI 时代,.NET 开发者是向左还是向右?
  • Claude code 使用技巧
  • OpenDroneMap (ODM) 无人机影像三维模型重建安装及应用快速上手
  • OneDrive人脸分组功能预览引发隐私担忧
  • 人和动物的区别在哪里???
  • 机器人模仿学习运动基元数学编码高效的方法还有用吗?
  • CF2152
  • xyd 2025 NOIP 模拟赛
  • 7段第二课:贪心
  • NET 8 封装自己的 rabbtMQ
  • dropMimeData
  • Terrorform-自动化创建EKS集群
  • 最长单词2