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

告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)

在这里插入图片描述

~犬📰余~

“我欲贱而贵,愚而智,贫而富,可乎?
曰:其唯学乎”

1. 开发初衷

\quad 大家好,我是犬余,之前,为了体验一下MCP架构的JAVA实现,犬余使用了Spring AI框架(详见跑通了!JAVA实现、内网部署、基于MCP的智能问答!)。

\quad 但是体验了几天之后,发现SpringAI无法获取聊天过程中的思考过程,另外还有很多各个实现的包难以选择,又没找到详细的文档来了解这么多包要怎么用。

\quad 所以,出于学习的目的,犬余抛弃了Spring AI,转而自己尝试开发了一个框架来实现AI对话以及MCP的实现。项目地址为:

\quad https://github.com/quanyu-1995/qy-framework-ai.git

\quad 而由于犬余之前并不了解Netty框架以及WebFlux、Reactor等技术,本框架完全是一边学习一边开发的,初版的目的只是实现基础功能,所以框架本身的代码结构以及这些技术的应用还很表面。希望大家能给犬余的项目点个star⭐️支持一下,同时,也欢迎感兴趣的朋友们留言交流或者添加犬余的个人wx,共同学习或者提出您的宝贵意见:
在这里插入图片描述

2. 快速上手

\quad 下面简单说明一下本项目的使用,由于框架还不够完善,所以目前还没有提交到Maven仓库,项目共分为四个模块:

  • qy-framework-ai-mcp-client: 基础对话包,集成多种大模型,支持流式输出,内置MCP Client
  • qy-framework-ai-mcp-server: MCP Server扩展包
  • qy-framework-ai-example: 对话示例(含MCP Client示例)
  • qy-framework-ai-mcp-server-example: MCP Server示例

\quad 其中qy-framework-ai-mcp-serve以及qy-framework-ai-mcp-client是框架本体的两个包,分别对应MCP server和MCP client,另外的两个模块分别用于测试服务端和客户端。

\quad 其中服务端在注册MCP工具时,仅需添加注解@Tool即可
在这里插入图片描述

\quad 客户端首先需要在配置文件中添加相应的配置,包括大模型的API信息,以及服务端的地址,目前已测试通过的有deepseek API、Qwen3 API、以及Ollama本地部署的qwen3。
在这里插入图片描述

\quad 如果需要多轮对话,还可以使用默认的对话记录缓存策略(DefaultCacheStrategy),并添加相应的redis配置
在这里插入图片描述

\quad 当然,你也可以通过实现CacheStrategy接口来自定义对话记录持久化策略。
在这里插入图片描述

\quad 最后,在使用时则只需要注入ChatClient,直接调用对话接口即可~
在这里插入图片描述

\quad 可以看到,犬余的框架中提供了两种对话接口,分别对应普通的一次性输出结果以及打字机效果的流式输出。

3. 效果展示

\quad 同时,在qy-framework-ai-example中,犬余也放了一个简单的对话页面,来展现流式输出的效果:
在这里插入图片描述

4. 诚挚邀请

\quad 以上就是犬余的项目的基本内容啦,本项目是犬余的第一个开源项目,希望大 家能给犬余的项目点个star⭐️支持一下:
\quad https://github.com/quanyu-1995/qy-framework-ai.git
\quad 同时,也欢迎感兴趣的朋友们留言交流或者添加犬余的个人wx,共同学习或者提出您的宝贵意见~
在这里插入图片描述

关注犬余,共同进步

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

相关文章:

  • “星睿O6”AI PC 开发套件评测: NPU 算力测评(1)
  • DAY30
  • Docker 运维管理
  • 使用shell快速删除Docker容器、镜像和存储内容
  • Python海龟绘图-斗地主
  • redis在spring boot中异常退出
  • 【C语言】贪吃蛇小游戏
  • Python 实例传递的艺术:四大方法解析与最佳实践
  • 每日算法 -【Swift 算法】不含重复字符的最长子串:暴力解法 vs 滑动窗口
  • Python 实现图片浏览和选择工具
  • 出海跨境电商内容管理难?Baklib 助力打造多语言知识库与智能素材中心
  • Stable Diffusion 学习笔记02
  • 【Nextcloud】使用 LNMP 架构搭建私有云存储:Nextcloud 实战指南
  • TYUT-企业级开发教程-第5章
  • 【C++]string模拟实现
  • laravel 通过Validator::make验证后,如何拿到验证后的值
  • nmcli connection reload
  • C++ qt基类的成员变量,在派生类中需要具有不同的数据类型的解决方法
  • 【NLP】34. 数据专题:如何打造高质量训练数据集
  • 【深度学习基础/面试高频问题】常见的归一化
  • TS01S:单通道差分灵敏度校准电容触摸传感器芯片
  • linux系统双击EXE运行,在统信UOS上无缝运行EXE!统信Windows应用兼容引擎V3来了
  • 模块与包的导入
  • 国产SF2507交换机调试记录
  • 【git进阶】git rebase(变基)
  • 基于RT-Thread的STM32F4开发第五讲——软件模拟I2C
  • 研读论文《Attention Is All You Need》(7)
  • linux安装conda环境-ubuntu
  • linux——mysql故障排查与生产环境优化
  • CSS实现过多的文本进行省略号显示