# know-hub-ai **Repository Path**: itsforkgithub/know-hub-ai ## Basic Information - **Project Name**: know-hub-ai - **Description**: https://github.com/NingNing0111/know-hub-ai - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-26 - **Last Updated**: 2025-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明  使用SpringAI 1.x版本对项目进行重构,**旧版本详见分支**[0.8-vue](https://github.com/NingNing0111/know-hub-ai/tree/0.8-vue): - 前端:React + Umi.js - 后端:SpringAI 1.x 功能集中实现:知识库分离,文档分离,支持指定某个知识库进行RAG对话、多模态对话。 ## 项目介绍  [know-hub-ai](https://github.com/NingNing0111/know-hub-ai)是一款采用[RAG 技术](https://www.promptingguide.ai/zh/techniques/rag)实现的个人知识库 AI 问答系统,本项目适配 OpenAI 接口,因此可搭配[One-API](https://github.com/songquanpeng/one-api)实现大语言模型的统一调用。  🌟🌟**请将本项目视为一个 Spring AI 和 RAG 技术的学习项目,本项目重在介绍 Spring AI 的使用以及结合向量数据库实现 RAG 技术的实现**。 ## 特性 - 使用最新的Spring AI 1.0版本实现; - 自定义ChatMessage用于存储到数据库,保留对话信息; - 基于自定义的ChatMessage实现`DatabaseChatMemory`将对话数据存储到数据库中; - 使用`QuestionAnswerAdvisor`+自定义提示词构建RAG对话上下文; - 通过自定义向量数据查询条件,实现知识库分离,支持RAG对话时指定某些知识库; - 多模态对话时,将附件存储到Minio; ## TODO ### 后端工作 - [x] 对话附件上传接口:多模态需要。文档或图片上传时返回id,携带该id发起对话,Media 在后端根据id构建。 - [x] `DatabaseChatMemory` 实现:Message 存储到数据库中 - [x] 知识库增删改查接口:添加知识库、删除知识库、知识库列表 - [x] 知识库附件上传接口:指定知识库(携带id)上传,将文档存储到向量数据库(meta记录知识库id-baseId),同时生成附件文档对象。 - [x] 知识库下的附件文档删查接口:在指定知识库下,可以删除附件、查询附件。 - [x] 对话信息接口:创建对话、查询对话信息 - [x] 非多模态RAG对话: 指定多个知识库进行对话 - [x] 简单对话 - [x] 多模态简单对话 - [ ] 多模态RAG对话 - [ ] 文档上传时,提取文档内部图片,调用多模态模型对图片进行描述然后入库。后续对话时,将文档里的图片及描述作为上下文。 ### 前端工作 - [x] 对话界面: 快速搭建 - [x] 知识库管理界面 - [x] 知识库下附件管理界面 ## 演示 ### 知识库管理 ![img.png](doc/images/1.png) ![img.png](doc/images/2.png) [//]: # (![img.png](doc/images/3.png)) ### 简单对话 + 简单RAG对话 ![img.png](doc/images/8.png) ![img_1.png](doc/images/9.png) ### 多模态对话 ![img.png](doc/images/10.png) ## 开发 ### 环境 - node: v18 - jdk: 17 - minio + pgvector: [docker-compose.yml](env/docker-compose.yml) ### 启动前端 ```shell pnpm install pnpm start ``` ### 启动后端 - 修改配置文件:`application.yml` 和 `llm.yml`  注意:`application.yml`配置里的`llm-dev.yml`需要改为`llm.yml`,当然也可以新建`llm-dev.yml`,在代码推送时,`llm-dev.yml`文件会被忽略: ```yaml spring: config: import: classpath:llm-dev.yml ``` - 启动`SystemApp`