使用 Spring AI MCP 访问 SQLite 数据库
案例 2:使用 Spring AI MCP 访问 SQLite 数据库
这个智能体通过命令行界面使您能够与 SQLite 数据库进行自然语言交互。
可在此查看 示例完整源码。
运行示例
前提条件
-
安装 uvx(Universal Package Manager 通用包管理器): 首先确保本地机器安装了 npm,然后运行如下命令:
Terminal window npm install -g npx -
下载示例源码
Terminal window git clone https://github.com/springaialibaba/spring-ai-alibaba-examples.gitcd spring-ai-alibaba-examples/spring-ai-alibaba-mcp-example/spring-ai-alibaba-mcp-manual-example/sqlite/ai-mcp-sqlite-chatbot -
设置环境变量
Terminal window # 通义大模型 Dashscope API-KEYexport AI_DASHSCOPE_API_KEY=${your-api-key-here} -
构建示例
Terminal window ./mvnw clean install
运行示例应用
运行示例,用户可以对数据库中的数据进行查询。
./mvnw spring-boot:run
输入想要查询的内容,进行数据库的查询:
USER: 所有商品的价格总和是多少ASSISTANT: 所有商品的价格总和是1642.8元。
还可以支持更复杂的查询:
USER: 告诉我价格高于平均值的商品ASSISTANT:以下是价格高于平均值的商品:
1. Smart Watch,价格为 199.99 元2. Wireless Earbuds,价格为 89.99 元3. Mini Drone,价格为 299.99 元4. Keyboard,价格为 129.99 元5. Gaming Headset,价格为 159.99 元6. Fitness Tracker,价格为 119.99 元7. Portable SSD,价格为 179.99 元
示例架构(源码说明)
初始化 McpClient
@Bean(destroyMethod = "close")public McpSyncClient mcpClient() {
var stdioParams = ServerParameters.builder("uvx") .args("mcp-server-sqlite", "--db-path", getDbPath()) .build();
var mcpClient = McpClient.sync(new StdioServerTransport(stdioParams), Duration.ofSeconds(10), new ObjectMapper());
var init = mcpClient.initialize();
System.out.println("MCP Initialized: " + init);
return mcpClient;}
在这段代码中:
1、通过 uvx 包管理工具,创建一个独立的进程,运行 mcp-server-sqlite 服务。
2、创建一个基于 stdio 的传输层,与 uvx 运行的 MCP 服务器进行通信
3、指定 SQLite 作为后端数据库及其位置,设置操作的超时时间为 10 秒,使用 Jackson 进行 JSON 序列化。 最后初始化与 MCP 服务器的连接
Function Callbacks
通过 Spring AI 注册 MCP 工具:
@Beanpublic List<McpFunctionCallback> functionCallbacks(McpSyncClient mcpClient) { return mcpClient.listTools(null) .tools() .stream() .map(tool -> new McpFunctionCallback(mcpClient, tool)) .toList();}
在这段代码中:
1、通过 mcpClient 获取 MCP 可用客户端。
2、将MCP客户端转换为为 Spring AI 的Function Callbacks。
3、将这些Function Callbacks注册到 ChatClient 中。