Java实现MCP server,配合DeepSeek和达梦数据库,实现基于企业数据库的智能问答
引言
\quad 在AI与大数据深度融合的今天,企业面临一个核心矛盾:业务人员需要即时数据洞察,却受限于SQL技能门槛。传统解决方案依赖IT部门手工编写查询,响应周期长、沟通成本高。尽管DeepSeek等大模型展现出极强的自然语言理解能力,但也一直难以直接与企业级数据库(如达梦)结合使用,更难以根据企业自身的个性化数据响应用户问题。
\quad 直到MCP协议的出现,AI模型与业务系统的交互才有了一套标准化的框架,使得AI+数据的开发形式愈发简单,本文,犬余就分享一下如何通过MCP server+Deepseek的形式来打造一套简单易用的问答体系。
架构说明
\quad 为了适应大部分企业以及项目的框架,犬余使用了JAVA17来开发MCP server,JAVA开发MCP server+client的整体架构可以参考下图:
\quad 本次开发,犬余决定先以最简方式实现基础功能,先把效果实现出来,所以我选择了DeepChat来替代Application和MCP Client两个角色,并用DeepSeek的API来完成大模型的工作,所以我们只需要完成MCP Server的开发即可:
MCP server开发
\quad 下面,我们来完成MCP server的开发:
\quad 首先新建一个空的Maven项目,并在pom文件中引入“spring-ai-starter-mcp-server-webflux”包,下面是完整的pom文件以供参考:
\quad 新建DatabaseMetadataService类,用来实现我们的两个核心工具:获取数据库全部库表结构以及sql执行工具,这里要注意的是注解“org.springframework.ai.tool.annotation.Tool”,设置了该注解的方法注册为MCP server的工具,其中的description属性为该工具(tool)的描述,大模型将根据这个属性来判断每个工具的作用:
\quad 通过在启动类中添加Bean来将服务暴露出去:
\quad 经过上面两步,就完成了MCP server的开发工作,是不是很简单?下面是我的代码的完整结构:
\quad 最后,启动服务,可以看到,我们的两个服务已经注册好了:
DeepChat配置
\quad DeepChat 是一款基于多模型云服务的智能对话系统,支持DeepSeek、OpenAI等主流AI模型,旨在提供高效、灵活的自然语言交互体验,选择DeepChat的原因在于其良好的技术整合能力与用户体验。DeepChat应用大家可以自行下载安装,这里不再赘述。(官方下载:https://deepchat.thinkinai.xyz/#/download)
\quad 安装并打开DeepChat后,依次点击“设置”->“MCP设置”->“添加服务器”:
\quad 在弹出的页面中直接点击“跳过至手动配置”:
\quad 输入相关配置并点击提交,这里服务器类型要选择SSE,基础URL填写“http://localhost:8080/sse”即可,其中8080 为我们的MCP server启动端口:
\quad 最后点击“运行”图表,即可启动MCP client:
\quad 这时,我们点击上方的“工具”页签,可以看到我们的MCP tools已经可以测试了:
\quad 配置好MCP之后我们还要按照下图来配置DeepSeekAPI信息,API key需要自行获取,不知道如何获取的可以留言讨论,其他字段按照下图依次填写即可:
\quad 最后,在聊天页面,我们可以点击锤子图标启用MCP并开启我们的MCP服务,再选择对话模型为deepseek-reasoner就可以使用啦~
测试结果
\quad 下面是犬余自己的一些测试结果,这里需要注意的是,由于在调用工具时会对参数进行正则校验,所以如果sql中出现星号‘*’时,会有报错:
\quad 但没关系,我们可以通过设计一下提示词来规避这种情况:
\quad 这样提问虽然看起来比较奇怪,但如果我们自己来实现MCP client的话,完全可以通过代码来在用户的问题上进行拼接,这样用户就可以随意提问而不用再关注星号‘*’的问题啦~
结语
\quad 以上,就是本次分享的全部内容啦,不知道对朋友们有没有帮助呢?如果对文章内容有任何疑问或意见,欢迎在评论区留言讨论。
\quad 同时,我将继续探索本地化DeepSeek模型的接入以及MCP client的开发,以求实现完全独立的可以内网部署使用的企业级落地方案。 欢迎大家继续关注犬余后续的分享,再见~