Langchain4j-7-MCP

基本概念

MCP 让模型可以调用远程或本地的各种工具与资源,如果模型是大脑,MCP 则赋予了大脑手脚,使它可以与外界世界进行交互。
MCP协议指定了两种传输类型:

  • HTTP:客户端请求一个 SSE 通道来接收来自服务器的事件,然后通过 HTTP POST 请求发送命令。
  • stdio:客户端可以将 MCP 服务器作为本地子进程运行,并通过标准输入/输出直接与其通信。
    用户与 MCP 和大模型的交互方式如下图所示(出处):
    image.png

image-20250817195410298

使用示例

  1. 本地启动 mcp 服务端(stdio 方式)
  2. 构建 mcp 客户端
  3. 构建工具集
  4. 挂载到 AIService
  5. 发送请求返回结果(流式返回)
//Controller.java
@Autowired  
private StreamingChatModel streamingChatModel;  
  
  
@GetMapping("/mcp/chat")  
public Flux<String> chat(@RequestParam("question") String question) throws Exception  
{  
    // 1.本地启动mcp服务端(stdio)  
    String baiduApiKey = System.getenv("BAIDU_MAP_API_KEY");  
    if (baiduApiKey == null) {  
        throw new IllegalArgumentException("请设置环境变量 BAIDU_MAP_API_KEY");  
    }  
    System.out.println("使用的百度地图API Key: " + baiduApiKey);  
  
    McpTransport transport = new StdioMcpTransport.Builder()  
            .command(List.of("npx", "-y", "@baidumap/mcp-server-baidu-map"))  
            .environment(Map.of("BAIDU_MAP_API_KEY", baiduApiKey))  
            .build();  
  
    // 2.构建McpClient客户端  
    McpClient mcpClient = new DefaultMcpClient.Builder()  
            .transport(transport)  
            .build();  
  
    // 3.创建工具集和原生的FunctionCalling类似  
    ToolProvider toolProvider = McpToolProvider.builder()  
            .mcpClients(mcpClient)  
            .build();  
  
    // 4.通过AiServivces给我们自定义接口McpService构建实现类并将工具集和大模型赋值给AiService  
    McpService mcpService = AiServices.builder(McpService.class)  
            .streamingChatModel(streamingChatModel)  
            .toolProvider(toolProvider)  
            .build();  
  
  
    // 5.调用我们定义的HighApi接口,通过大模型对百度mcpserver调用  
    Flux<String> result = mcpService.chat(question);  
  
    // 在流式响应完成后关闭 MCP 客户端  
    return result.doFinally(signalType -> {  
        try {  
            mcpClient.close();  
        } catch (Exception e) {  
            // 记录关闭异常但不影响响应  
            System.err.println("Error closing MCP client: " + e.getMessage());  
        }  
    });  
}

返回结果
image.png

posted @ 2025-08-17 18:05  Miaops  阅读(170)  评论(0)    收藏  举报