Model Context Protocol
# 模型上下文协议
LangChain4j 支持模型上下文协议(MCP),用于与支持 MCP 的服务器通信,这些服务器可以提供并执行工具。关于该协议的一般信息,请参阅 MCP 官方网站 (opens new window)。
该协议定义了两种传输方式,LangChain4j 均提供支持:
HTTP
:客户端通过 HTTP POST 请求发送命令,并请求一个 SSE 通道来接收来自服务器的事件。stdio
:客户端可以将 MCP 服务器作为本地子进程运行,并直接通过标准输入/输出与其通信。
要使聊天模型或 AI 服务运行由 MCP 服务器提供的工具,需要创建一个 MCP 工具提供者实例。
# 创建 MCP 工具提供者
# 传输方式
首先,需要创建一个传输实例。
# 使用标准输入/输出(stdio)
以下示例展示了如何从 NPM 包中启动一个服务器作为子进程:
McpTransport transport = new StdioMcpTransport.Builder()
.command(List.of("/usr/bin/npm", "exec", "@modelcontextprotocol/server-everything@0.6.2"))
.logEvents(true) // 如果希望在日志中查看通信流量,请启用此项
.build();
1
2
3
4
2
3
4
# 使用 HTTP
如果使用 HTTP,需要提供两个 URL:一个用于启动 SSE 通道,另一个用于通过 POST
提交命令:
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:3001/sse")
.postUrl("http://localhost:3001/message")
.logRequests(true) // 如果希望在日志中查看请求流量,请启用此项
.logResponses(true) // 如果希望在日志中查看响应流量,请启用此项
.build();
1
2
3
4
5
6
2
3
4
5
6
# 客户端
通过传输实例创建 MCP 客户端:
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
1
2
3
2
3
# 工具提供者
最后,通过客户端创建 MCP 工具提供者:
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
1
2
3
2
3
注意,一个 MCP 工具提供者可以同时使用多个客户端。如果使用多个客户端,可以通过 builder.failIfOneServerFails(boolean)
方法指定在从某个服务器检索工具失败时的行为。默认值为 false
,表示工具提供者会忽略一个服务器的错误并继续使用其他服务器。如果设置为 true
,任何服务器的失败都会导致工具提供者抛出异常。
# 绑定工具提供者到 AI 服务
可以通过 AI 服务构建器的 toolProvider
方法,将工具提供者绑定到 AI 服务:
Bot bot = AiServices.builder(Bot.class)
.chatLanguageModel(model)
.toolProvider(toolProvider)
.build();
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12