*大家好,我是AI拉呱,一个专注于人工智领域与网络安全方面的博主,现任资深算法研究员一职,热爱机器学习和深度学习算法应用,拥有丰富的AI项目经验,希望和你一起成长交流。关注"AI拉呱",评论+转发此文即可私信获取一份教程+一份学习书单!
模型上下文协议(MCP)——运用Java构建SQL数据库代理(MCP代理教程)
在本实操教程中,我们将利用纯Java基于模型上下文协议(Model Context Protocol,MCP)构建一个SQL数据库代理(SQL Database Agent)。该代理能让大型语言模型(LLMs)通过结构化操作(如创建表、插入信息、查询数据等)以编程方式与SQL数据库交互,全程无需手动编写SQL语句。
直接启用a2ajava库进行实现。就是我此前已撰写过多篇关于MCP、智能体间通信(Agent-to-Agent,A2A)及其对比的深度文章。为聚焦实操,本文不再重复这些概念,而
✅ 本教程非常适合希望通过Java,借助智能体(Intelligent Agents)将数据库与LLM集成的开发者。
编写Java类或Spring Bean——其余工作交给MCP即可
模型上下文协议(MCP)的一大核心优势是能与应用无缝集成,但本文要完成的功能是将Java方法转换为器具:你只需编写常规的Java类(更推荐编写Spring Boot服务),a2a库会自动将其转换为可用于MCP或A2A(智能体间)任务的程序。
以下是启用a2ajava和Spring的真实案例,该代理可处理内存中的Apache Derby数据库的SQL执行:
package io.github.vishalmysore.service;
import com.t4a.annotations.Action;
import com.t4a.annotations.Agent;
import com.t4a.detect.ActionCallback;
import io.github.vishalmysore.a2a.domain.Task;
import io.github.vishalmysore.a2a.domain.TaskState;
import io.github.vishalmysore.data.*;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.util.*;
@Log
@Service
@Agent(groupName = "Database related actions") // 标注为数据库相关操作的智能体
public class DerbyService {
// Derby内存数据库的JDBC连接地址,若数据库不存在则自动创建
private static final String JDBC_URL = "jdbc:derby:memory:myDB;create=true";
private ActionCallback callback;
// 启动数据库服务器的操作
@Action(description = "start database server")
public String startServer(String serverName) {
log.info("Derby server started.");
return "为" + serverName + "启动Derby服务器";
}
// 创建数据库的操作
@Action(description = "Create database")
public String createDatabase(String databaseName) {
// 将任务状态设置为“已完成”,并添加数据库创建信息
((Task)callback.getContext()).setDetailedAndMessage(TaskState.COMPLETED, "Creating database: " + databaseName);
try (Connection conn = DriverManager.getConnection(JDBC_URL)) {
// 若连接成功则返回创建成功信息,否则返回失败信息
return conn != null ? "数据库创建成功。" : "数据库创建失败。";
} catch (SQLException e) {
e.printStackTrace();
return "数据库创建失败。";
}
}
// 创建数据表的操作
@Action(description = "Create tables")
public String createTables(TableData tableData) {
// 【仅作演示用:实际使用前请务必对输入进行安全校验!】
StringBuilder createTableSQL = new StringBuilder("CREATE TABLE ");
createTableSQL.append(tableData.getTableName()).append(" (");
// 遍历表的列信息,拼接SQL语句
for (ColumnData column : tableData.getHeaderList()) {
createTableSQL.append(column.getColumnName())
.append
浙公网安备 33010602011771号