当前位置: 首页 > ds >正文

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的开发,以求实现完全独立的可以内网部署使用的企业级落地方案。 欢迎大家继续关注犬余后续的分享,再见~

在这里插入图片描述

关注犬余,共同进步

技术从此不孤单
http://www.xdnf.cn/news/5725.html

相关文章:

  • 在Windows 境下,将Redis和Nginx注册为服务。
  • uniapp使用npm下载
  • 《数字人 :生成之旅》
  • 第二十五节:轮廓检测-轮廓特征 (面积、周长、边界框等)
  • 前端面试宝典---webpack面试题
  • 【Linux】在Arm服务器源码编译onnxruntime-gpu的whl
  • Spring Boot异步任务失效的8大原因及解决方案
  • 四、STM32 HAL库API完全指南:从功能分类到实战示例
  • Hadoop区别
  • Dagster Pipes系列-1:调用外部Python脚本
  • 【CF】Day57——Codeforces Round 955 (Div. 2, with prizes from NEAR!) BCD
  • 利用散点图探索宇航员特征与太空任务之间的关系
  • BUUCTF 大流量分析(三) 1
  • 开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究
  • 主从架构:技术原理与实现
  • python实现usb热插拔检测(linux)
  • 【Nova UI】十三、打造组件库之按钮组件(中):样式雕琢全攻略
  • 【学习笔记】机器学习(Machine Learning) | 第六章(2)| 过拟合问题
  • 编程题 02-线性结构3 Reversing Linked List【PAT】
  • WebFlux vs WebMVC vs Servlet 对比
  • spark的处理过程-转换算子和行动算子
  • Spark,RDD中的转换算子
  • NVMe-oF(NVMe over Fabrics)
  • 车联网大数据:从数据到场景的闭环实践
  • Linux 软件包|服务管理
  • 极狐GitLab 通用软件包存储库功能介绍
  • Excel-to-JSON插件专业版功能详解:让Excel数据转换更灵活
  • 什么是内存刷新
  • 中国黄土高原中部XF剖面磁化率和粒度数据
  • 鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法