一、背景
本次实践的目标是通过 1Panel 搭建 DBHub,并将 SQL Server 数据库 作为 MCP 服务 接入 MaxKB。 通过 MCP 调用,用户无需编写复杂的 SQL 语句,只需在 MaxKB 中提出问题,系统即可自动调用 MCP 工具,生成并执行 SQL 查询,并将结果返回,大大提升了数据查询与分析的效率。
二、操作步骤
1. 搭建 1Panel
请参考以下官方文档部署 1Panel:
https://1panel.cn/docs/v2/installation/online_installation/
2. 安装 DBHub 并配置 MCP
登录 1Panel,进入 应用商店,搜索 DBHub,点击安装。
根据实际情况进行配置:
端口设置:根据服务器已有端口占用情况设置。
数据库密码:如密码中包含 @ 符号,可能导致连接失败。可通过修改密码或在连接字符串中进行转义解决。
配置完成后点击 【确认】,等待容器安装完成。
安装完成后,查看日志。当日志中出现以下地址时,说明服务已正常启动:
http://0.0.0.0:8080/message
3.在 MaxKB 中调用 MCP 节点
添加【 MCP 调用】节点。
配置 MCP 参数,示例如下:
{
"sqlserver": {
"url": "http://192.168.50.98:8099/message",
"transport": "streamable_http"
}
}
url:IP 为 1Panel 的地址,端口为第二步中设置的端口;message 为默认路径。
其它参数保持默认,注意格式需为 JSON。
将配置填入组件后,点击【获取工具】,出现“获取工具成功”并选择 execute_sql 工具,即表示 MCP 服务已连接成功。
以上图工作流为示例,节点提示词如下:
"SQL 语句"提示词如下
####系统角色
你是一位专业的数据分析专家,精通 SQLServer 数据库 SQL 语言,能够熟练使用 mcp-sqlserver 工具的 execute_sql 函数来执行查询。
你只需要生成 SQL 查询语句,不要输出解释,不要返回查询结果。
SQL 生成规则:
1、禁止使用分号 (;)
2、表名、列名必须大写
3、中文字段名必须用方括号 [] 包裹
4、字符串常量必须用 N'' 包裹
5、只输出单行 SQL 语句,不能包含任何其他文字
#####提示词
数据库中有一个名为 test 的表,表结构如下:
- 编号 (int, 主键)
- 产品名称 (nvarchar)
- 数量 (int)
- 单价 (decimal)
- 销售日期 (date)
用户问题如下:
{{开始.question}}
请直接生成对应的 SQL 查询语句。
"输出美化"提示词如下
####系统角色
你是一个美化助手
####提示词
美化一下输出,根据用户问题和查询结果来美化
查询结果
{{MCP 调用.result}}
用户问题:
{{开始.question}}
测试效果示例:
MCP 调用结果:
4.MaxKB 使用 AI 对话调用 MCP
添加【 AI 对话】节点,进入工具设置。
填写 MCP 配置(同上一步配置)。
示例提示词如下:
#####系统角色
你是一位专业的数据分析专家,精通 SQLServer 数据库 SQL 语言。
用户输入问题时,请生成 SQLServer 语句,并调用 mcp-sqlserver 的 execute_sql 工具执行查询,返回结果。
#####提示词
数据库中有一个名为 test 的表,表结构如下:
- 编号 (int, 主键)
- 产品名称 (nvarchar)
- 数量 (int)
- 单价 (decimal)
- 销售日期 (date)
注意:
1. 所有查询都必须基于 test 表。
2. 查询时字段名必须用中文列名,例如:产品名称、数量、单价、销售日期。
3. 如果用户的问题涉及金额,请用 数量*单价 计算总金额。
4. 返回的 SQL 必须是标准 SQLServer 语法。
5. 所有中文字段名必须用中括号 [] 包裹,例如 [数量]、[产品名称]。
6. 所有中文字符串常量必须用 N'' 包裹,例如 N'打印机'。
7. 根据MCP返回内容,美化一下,用简短用文字描述,输出给用户,必须要有文字的描述,必须要美化结果
8. 输出只要美化后的语言,其它的思考过程不要输出
用户问题如下:
{{开始.question}}
测试效果示例:
MCP 调用结果:
三、注意事项
示例流程仅用于演示,实际应用效果会受到 数据库表结构设计、提示词编写质量 以及 模型能力 等多方面因素影响。
在不同业务场景下,可根据实际需求对提示词及工作流进行调整和优化,以获得更符合预期的查询效果与输出表现。