使用SpringAI 1.x版本对项目进行重构,旧版本详见分支0.8-vue:
- 前端:React + Umi.js
- 后端:SpringAI 1.x
功能集中实现:知识库分离,文档分离,支持指定某个知识库进行RAG对话、多模态对话。
know-hub-ai是一款采用RAG 技术实现的个人知识库 AI 问答系统,本项目适配 OpenAI 接口,因此可搭配One-API实现大语言模型的统一调用。
🌟🌟请将本项目视为一个 Spring AI 和 RAG 技术的学习项目,本项目重在介绍 Spring AI 的使用以及结合向量数据库实现 RAG 技术的实现。
- 使用最新的Spring AI 1.0版本实现;
- 自定义ChatMessage用于存储到数据库,保留对话信息;
- 基于自定义的ChatMessage实现
DatabaseChatMemory
将对话数据存储到数据库中; - 使用
QuestionAnswerAdvisor
+自定义提示词构建RAG对话上下文; - 通过自定义向量数据查询条件,实现知识库分离,支持RAG对话时指定某些知识库;
- 多模态对话时,将附件存储到Minio;
- 对话附件上传接口:多模态需要。文档或图片上传时返回id,携带该id发起对话,Media 在后端根据id构建。
-
DatabaseChatMemory
实现:Message 存储到数据库中 - 知识库增删改查接口:添加知识库、删除知识库、知识库列表
- 知识库附件上传接口:指定知识库(携带id)上传,将文档存储到向量数据库(meta记录知识库id-baseId),同时生成附件文档对象。
- 知识库下的附件文档删查接口:在指定知识库下,可以删除附件、查询附件。
- 对话信息接口:创建对话、查询对话信息
- 非多模态RAG对话: 指定多个知识库进行对话
- 简单对话
- 多模态简单对话
- 多模态RAG对话
- 文档上传时,提取文档内部图片,调用多模态模型对图片进行描述然后入库。后续对话时,将文档里的图片及描述作为上下文。
- 对话界面: 快速搭建
- 知识库管理界面
- 知识库下附件管理界面
- node: v18
- jdk: 17
- minio + pgvector: docker-compose.yml
pnpm install
pnpm start
- 修改配置文件:
application.yml
和llm.yml
注意:application.yml
配置里的llm-dev.yml
需要改为llm.yml
,当然也可以新建llm-dev.yml
,在代码推送时,llm-dev.yml
文件会被忽略:
spring:
config:
import: classpath:llm-dev.yml
- 启动
SystemApp