勇哥一直想学习 AI 方面的知识,但一直不知道从哪个角度来展开,在四月份的时候,从 Github 上看到了一个开源项目 one-api , 该项目在 Github 上有 24K star ,颇受欢迎。
该项目产生的背景是:
最近一两年,很多企业推出了自己的大语言模型:Azure、Anthropic Claude、GooglePaLM2、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元。
但是这些多种多样,混乱不统一的大语言模型会给开发者带来一个问题,当我们想要使用这些大语言模型进行项目开发时,难免会遇到接口不统一问题。
OneAPI 的概念是通过标准的 OpenAI API 接口,支持访问多种主流大模型,包括但不限于 OpenAI、DeepSeek、字节豆包、ChatGLM、文心一言、讯飞星火、通义千问、腾讯混元等。
勇哥发现 one-api 是 Go 语言编写的,而且在 Github 上没有找到 Java 版本的项目,于是萌生写一个类似功能的学习项目。
同时,这个项目需要提供完整的后台管理的功能,便于我后续增加更多的 AI 功能。
于是,我选择了改造和剪裁开源项目 ruoyi-vue-pro ,大概经过 20 天左右的剪裁 ,初步架构设计如下图:
优化点:
剪裁过后,花了 1 个月的时间 ,项目一期基本开发完成 ,我将项目起名为 幻视 AI 助手 。
幻视 AI 助手(Vision AI Assistant)的核心亮点:
项目包含三个工程:
服务端基于 ruoyi-vue-pro 开源项目做了剪裁和重构,经笔者测试支持 JDK 8 和 JDK 17 。使用到的后端技术列表如下:
序号 | 技术 | 名称 | 版本 | 官网 |
|---|---|---|---|---|
1 | Spring Boot | 基础框架 | 2.7.18 | https://spring.io/projects/spring-boot |
2 | SpringMVC | MVC 框架 | 5.3.9 | https://github.com/spring-projects/spring-framework/tree/main/spring-webmvc |
3 | Spring Security | Spring 安全框架 | 5.8.14 | https://github.com/spring-projects/spring-security |
4 | MyBatis-Plus | 持久层框架 | 3.5.9 | https://baomidou.com |
5 | MySQL | 数据库服务器 | >= 5.7 | https://www.mysql.com/cn/ |
6 | Dynamic Datasource | 动态数据源 | 4.3.1 | https://dynamic-datasource.com/ |
7 | Redis | 分布式缓存数据库 | Latest | https://redis.io |
8 | HuTool | 小而全的工具集项目 | 5.8.35 | https://hutool.cn |
9 | Maven | 项目构建管理 | 3.9.1 | http://maven.apache.org |
10 | Redisson | Redis Java 客户端 | 3.41.0 | https://redisson.org |
11 | hibernate-validator | 参数校验组件 | 8.0.1.Final | https://github.com/hibernate/hibernate-validator |
12 | TTL | 增强版 ThreadLocal | 2.14.3 | https://github.com/alibaba/transmittable-thread-local |
13 | Jackson | JSON 工具库 | 2.17.1 | https://github.com/FasterXML/jackson |
14 | mapstruct | Java Bean 转换 | 1.6.3 | https://mapstruct.org/ |
15 | Lombok | 消除冗长的 Java 代码 | 1.18.36 | https://projectlombok.org/ |
16 | Springdoc | Swagger 文档 | 1.8.0 | https://springdoc.org/ |
17 | Quartz | 任务调度系统组件 | 2.3.2 | https://www.quartz-scheduler.org/ |
框架 | 说明 | 版本 |
|---|---|---|
Vue | Vue 框架 | 3.3.8 |
Vite | 开发与构建工具 | 4.5.0 |
Element Plus | UI 组件库 | 2.4.2 |
TypeScript | JavaScript 的超集 | 5.2.2 |
Pinia | 状态管理库(替代 Vuex) | 2.1.7 |
VueUse | 常用工具集 | 10.6.1 |
Vue I18n | 国际化 | 9.6.5 |
Vue Router | Vue 路由 | 4.2.5 |
UnoCSS | 原子化 CSS 引擎 | 0.57.4 |
Iconify | 在线图标库 | 3.1.1 |
WangEditor | 富文本编辑器 | 5.1.23 |
vision-ai-nextchat 是基于开源项目 NextChat 定制的,删除了冗余的功能(面具)以及移除遥测统计 ,同时模型列表只保留主流大模型 。
框架 | 说明 | 版本 | 官网地址 | |
|---|---|---|---|---|
1 | React | 前端框架 | 18+ | https://react.dev |
2 | Next.js | 服务端渲染框架 | 14+ | https://nextjs.org |
3 | TypeScript | JavaScript 超集语言 | 5.0+ | https://www.typescriptlang.org |
4 | Tauri | 跨平台客户端框架 | 1.3+ | https://tauri.app |
5 | UnoCSS | 原子化 CSS 引擎 | 0.57+ | https://unocss.dev |
进入登录界面,默认租户是:「勇哥Java实战」 , 输入用户名和密码 。
登录成功后,进入首页。
左侧导航有三个模块 :
点击模型配置链接,查看标准模型列表。
标准模型是指客户端(NextChat 或者 CherryStudio )接入时,模型的唯一标识。
点击平台配置链接,进入平台配置列表。
平台配置包含两个部分:
注意: 因为同一个模型在各个平台对应的模型名可能并不一致 ,所以需要配置下。
OneApi 令牌是访问开放接口的凭证,我们可以使用 OPENAI 客户端或者其他兼容 OPENAI 接口的客户端 比如 NextChat 、CherryStudio 访问幻视 AI 助手配置的平台接口。
点击 OneApi 令牌,进入令牌列表。
点击 NextChat 对话,因为我们的模型列表里已经配置了 DeepSeek ,所以我们选择模型 deepseek-chat ,就可可以进行对话了。
注意: 笔者在部署 NextChat 时,已经将幻视 AI 助手创建的 OneApi token 和接口请求 URL 放入到了环境变量里。
Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。
如下图,我们使用 Cherry Studio 对接幻视 AI 演示:
vision-ai-adminvision-ai-admin-uivision-ai-adminvision-ai-admin-ui / vision-ai-nextchatSseEmitter 示例(结合 DeepSeek)Flux 响应式流式推送(结合 DeepSeek)勇哥相信所有的应用都会被 AI 重写 ,one-api 的功能理念以及应用场景会越来越多。
编写代码不难,但对接 NextChat 、CherryStudio 、Spring AI ,着实花费了不少的时间,所以我相信我的工程代码会给你带来一些不一样的思考。
接下来,我会继续完善该项目,同时也在学习 RAG 相关知识点 。