使用 Model Context Protocol 和 Quarkus+LangChain4j
我们很高兴地宣布,从 0.23.0 版本开始,Quarkus LangChain4j 项目集成了使用 Model Context Protocol (MCP) 调用工具的功能。
什么是 Model Context Protocol?
MCP 是一项开放协议,它规范了应用程序如何为 LLM 提供上下文。MCP 服务器是一个可以提供工具、资源(例如静态文档集或动态访问的数据,例如来自数据库的数据)或预定义提示的应用程序,您的 AI 驱动型应用程序在与 LLM 交谈时可以使用它们。当您将此类功能打包到 MCP 服务器中时,任何支持 MCP 的 LLM 客户端工具包都可以插入并使用它,包括 Quarkus 和 LangChain4j。此外,还有一个不断增长的可重用 MCP 服务器生态系统,您可以直接使用它们,Quarkus 还提供了 quarkus-mcp-server 扩展,允许您创建 MCP 服务器,但在本文中,我们将重点关注客户端。关于创建 MCP 服务器的内容稍后介绍。
在 0.23.x 版本中,Quarkus LangChain4j 实现 MCP 协议的客户端,以支持工具执行。对资源和提示的支持计划在未来的版本中推出。
在本文中,我们将向您展示如何使用 Quarkus 和 LangChain4j 轻松创建一个应用程序,该应用程序连接到一个提供文件系统相关工具的 MCP 服务器,并公开一个用户可以用来与本地文件系统交互的聊天机器人,这意味着用户可以根据指示读写文件。
无需单独设置 MCP 服务器,我们将配置 Quarkus 以子进程的形式运行一个。正如您将看到的,使用 Quarkus 设置 MCP 非常简单。
要下载最终项目,请访问 quarkus-langchain4j 示例。该示例包含了本文开发的最终功能,以及一些额外的功能,例如基于 JavaScript 的 UI。在本文中,为了简单起见,我们将跳过该 UI 的创建,只使用 Quarkus 自带的 Dev UI 聊天页面。 |
创建文件系统助手项目
我们将假设您使用 OpenAI 作为 LLM 提供商。如果您使用不同的提供商,您将需要替换 quarkus-langchain4j-openai
扩展并使用其他提供商。
首先生成一个 Quarkus 项目。如果您使用 Quarkus CLI,可以这样做:
quarkus create app org.acme:filesystem-assistant:1.0-SNAPSHOT \
--extensions="langchain4j-openai,langchain4j-mcp,vertx-http" -S 3.17
如果您更喜欢使用基于 Web 的项目生成器,请访问 code.quarkus.io 并选择相同的扩展。
每次运行应用程序时,请确保 QUARKUS_LANGCHAIN4J_OPENAI_API_KEY
环境变量设置为您的 OpenAI API 密钥。
创建代理要使用的目录
在 Maven 项目的根目录下,创建一个名为 playground
的目录。这将是代理唯一允许交互的目录。
在此目录内,创建您要用于测试的任何文件。例如,创建一个名为 playground/hello.txt
的文件,内容如下:
Hello, world!
创建 AI 服务
接下来,我们需要定义一个 AI 服务来定义机器人的行为。该接口将如下所示:
@RegisterAiService
@SessionScoped
public interface Bot {
@SystemMessage("""
You have tools to interact with the local filesystem and the users
will ask you to perform operations like reading and writing files.
The only directory allowed to interact with is the 'playground' directory relative
to the current working directory. If a user specifies a relative path to a file and
it does not start with 'playground', prepend the 'playground'
directory to the path.
If the user asks, tell them you have access to a tool server
via the Model Context Protocol (MCP) and that they can find more
information about it on https://modelcontextprotocol.io/.
"""
)
String chat(@UserMessage String question);
}
您可以随意调整系统消息,但这应该足以使应用程序按预期工作。
配置 MCP 服务器及其连接
我们将使用 server-filesystem MCP 服务器,它是一个 NPM 包,这就是为什么您需要安装 npm
。假设您在 PATH
(Quarkus 进程看到的 PATH
变量)中拥有 npm
可执行文件。
启动服务器和配置连接非常简单。我们只需告诉 Quarkus 将 server-filesystem
MCP 服务器作为子进程启动,然后通过 stdio
传输与之通信。您需要做的就是向您的 application.properties
添加两行:
quarkus.langchain4j.mcp.filesystem.transport-type=stdio
quarkus.langchain4j.mcp.filesystem.command=npm,exec,@modelcontextprotocol/server-filesystem@0.6.2,playground
通过此配置,Quarkus 将知道它应该创建一个 MCP 客户端,该客户端将由通过执行 npm exec @modelcontextprotocol/server-filesystem@0.6.2 playground
作为子进程启动的服务器支持。playground
参数表示代理允许交互的目录路径。stdio
传输意味着客户端将通过标准输入和输出与服务器通信。
当您以这种方式配置一个或多个 MCP 连接时,Quarkus 还会自动生成一个 ToolProvider
。任何未显式指定工具提供商的 AI 服务都将自动连接到此生成的提供商,因此您无需执行其他任何操作即可使 MCP 功能可用于 AI 服务。
可选地,如果您想查看应用程序与 MCP 服务器之间的实际流量,请将以下三行附加到您的 application.properties
:
quarkus.langchain4j.mcp.filesystem.log-requests=true
quarkus.langchain4j.mcp.filesystem.log-responses=true
quarkus.log.category.\"dev.langchain4j\".level=DEBUG
就是这样!现在,让我们来测试一下。
试一试
由于我们没有为应用程序创建用户可以使用的 UI,因此让我们使用 Quarkus 自带的 Dev UI。在开发模式下运行应用程序,然后在浏览器中访问 https://:8080/q/dev-ui,并单击 LangChain4j
卡中的 Chat
链接(或者直接转到 https://:8080/q/dev-ui/io.quarkiverse.langchain4j.quarkus-langchain4j-core/chat)。
尝试一个提示,要求代理读取您之前创建的文件,例如:
Read the contents of the file hello.txt.
如果一切设置正确,代理将响应文件的内容,如下面的截图所示:

机器人也可以写入文件,所以尝试一个提示,例如:
Write a Python script that prints "Hello, world!" and save it as hello.py.
然后查看您的 playground
目录,您应该会在那里看到新的 Python 文件!
结论
Model Context Protocol 允许您以可移植的方式轻松地将可重用的工具集和资源集成到 AI 驱动型应用程序中。通过 Quarkus LangChain4j 扩展,您可以指示 Quarkus 将服务器作为子进程在本地运行,而配置应用程序使用它仅仅是添加几行配置属性而已。
这还不是全部。敬请关注,因为 Quarkus 还有一个允许您创建 MCP 服务器的扩展!稍后将有更多相关信息。更新:关于服务器端的帖子现已发布:在 Quarkus 中实现 MCP 服务器。