# rag-knowledge-base **Repository Path**: hice-top/rag-knowledge-base ## Basic Information - **Project Name**: rag-knowledge-base - **Description**: 构建一个基于 Solon AI 的 RAG 知识库问答系统,面向客户使用,让用户遇到产品问题时可以直接提问,无需找技术人员 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-25 - **Last Updated**: 2026-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、项目概述 ### 目标 构建一个基于 Solon AI 的 RAG 知识库问答系统,面向**客户使用**,让用户遇到产品问题时可以直接提问,无需找技术人员。 --- ## 二、技术选型 | 层 | 技术 | 版本 | |---|------|------| | 后端框架 | Solon + Solon AI | v3.9.x | | Java | JDK | 17+ | | 构建工具 | Maven | 3.8+ | | 向量库 | Chroma(默认)/ Milvus / Qdrant | 策略模式切换 | | 聊天模型 | OpenAI / Ollama / DeepSeek 等 | 多 provider | | 嵌入模型 | Ollama(bge-m3) / OpenAI 等 | 多 provider | | 前端框架 | Vue 3 + TypeScript | ^3.4 | | UI 框架 | Ant Design 5 | ^5.x | | 前后端通信 | SSE(Server-Sent Events) | — | | 会话存储 | Redis | 7.x | --- ## 三、整体架构 ``` ┌──────────────────────────────────────────────┐ │ Vue 3 + Ant Design 5 前端 │ │ ┌──────────┐ ┌───────────┐ ┌───────────┐ │ │ │ Chat.vue │ │Knowledge.vue│ │ Admin.vue │ │ │ └─────┬────┘ └─────┬─────┘ └─────┬─────┘ │ │ └──────────────┼──────────────┘ │ │ HTTP/SSE │ └─────────────────────┬─────────────────────────┘ │ ┌─────────────────────▼─────────────────────────┐ │ Solon AI 后端服务 │ │ │ │ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │ │ │ChatModel │ │Embedding │ │ Reranking │ │ │ │(多模型切换)│ │Model │ │ Model(可选) │ │ │ └────┬─────┘ └─────┬─────┘ └──────┬───────┘ │ │ └──────────────┼──────────────┘ │ │ ┌──────────────────▼───────────────────────┐ │ │ │ RAG Pipeline │ │ │ │ Loader → Splitter → Embed → Repository │ │ │ └──────────────────┬───────────────────────┘ │ │ │ │ │ ┌──────────────────▼───────────────────────┐ │ │ │ Repository(策略模式,可切换) │ │ │ │ Chroma / Milvus / Qdrant │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────┐ │ │ │ Redis:ChatSession + 对话历史 + 反馈 │ │ │ └──────────────────────────────────────────┘ │ └──────────────────────────────────────────────┘ ``` --- ## 四、功能清单 ### 用户侧功能 | # | 功能 | 说明 | |---|------|------| | 1 | 智能问答 | 基于 RAG 的知识库问答,流式返回 | | 2 | 多轮上下文 | 理解追问,自动携带对话上下文 | | 3 | 对话历史 | 查看/切换/删除历史对话 | | 4 | 热门问题 | 首页展示推荐问题,快速入口 | | 5 | 回答反馈 | 👍/👎 对回答质量打分 | | 6 | 来源引用 | 回答下方显示参考文档来源 | | 7 | 新对话 | 一键开新对话,清空上下文 | | 8 | Markdown 渲染 | 正确展示代码、列表、表格 | ### 管理侧功能 | # | 功能 | 说明 | |---|------|------| | 9 | 文档管理 | 上传/查看/删除知识库文档 | | 10 | 知识库重建 | 全量重新导入文档 | | 11 | 问答统计 | 高频问题、无答案问题、反馈汇总 | --- ## 五、项目结构 ``` rag-knowledge-base/ ├── rag-server/ # 后端 │ ├── pom.xml │ └── src/main/ │ ├── java/com/demo/rag/ │ │ ├── RagApplication.java │ │ ├── config/ │ │ │ ├── ChatModelConfig.java # 聊天模型配置 │ │ │ ├── EmbeddingModelConfig.java # 嵌入模型配置 │ │ │ ├── RerankModelConfig.java # 重排模型配置 │ │ │ ├── RepositoryConfig.java # 向量库配置(策略模式) │ │ │ └── RedisConfig.java # Redis 配置 │ │ ├── repository/ │ │ │ ├── VectorRepositoryFactory.java │ │ │ ├── ChromaRepositoryAdapter.java │ │ │ ├── MilvusRepositoryAdapter.java │ │ │ └── QdrantRepositoryAdapter.java │ │ ├── service/ │ │ │ ├── RagService.java # RAG 核心流程 │ │ │ ├── DocumentIngestService.java # 文档导入 │ │ │ ├── ChatHistoryService.java # 对话历史管理 │ │ │ ├── FeedbackService.java # 反馈收集 │ │ │ └── StatsService.java # 统计分析 │ │ ├── controller/ │ │ │ ├── ChatController.java │ │ │ ├── KnowledgeController.java │ │ │ └── AdminController.java │ │ └── model/ │ │ ├── dto/ # 请求/响应 DTO │ │ └── entity/ # 数据实体 │ └── resources/ │ ├── app.yml # 主配置文件 │ └── prompts/ │ └── system-prompt.txt │ └── rag-web/ # 前端 ├── package.json ├── vite.config.ts └── src/ ├── App.vue ├── main.ts ├── router/index.ts ├── api/ # 接口调用 │ ├── chat.ts │ ├── knowledge.ts │ └── admin.ts ├── stores/ # Pinia 状态管理 │ ├── chatStore.ts │ └── knowledgeStore.ts ├── views/ │ ├── Chat.vue # 问答页面 │ ├── Knowledge.vue # 知识库管理 │ └── Admin.vue # 管理后台 └── components/ ├── MessageBubble.vue # 消息气泡 ├── SourceRef.vue # 来源引用 ├── HotQuestions.vue # 热门问题 └── FeedbackButtons.vue # 反馈按钮 ``` --- ## 六、API 接口 ### 聊天接口 | 接口 | 方法 | 说明 | |------|------|------| | `POST /api/chat` | POST | 用户提问(SSE 流式响应) | | `POST /api/chat/stop` | POST | 中止当前生成 | | `GET /api/chat/history` | GET | 获取对话列表 | | `GET /api/chat/{sessionId}/messages` | GET | 获取完整消息记录 | | `DELETE /api/chat/{sessionId}` | DELETE | 删除对话 | | `POST /api/chat/feedback` | POST | 提交回答反馈 | | `GET /api/chat/hot-questions` | GET | 热门问题 | ### 知识库管理接口 | 接口 | 方法 | 说明 | |------|------|------| | `GET /api/knowledge/list` | GET | 已导入文档列表 | | `POST /api/knowledge/upload` | POST | 上传文档 | | `DELETE /api/knowledge/{id}` | DELETE | 删除文档 | | `POST /api/knowledge/rebuild` | POST | 重建知识库 | ### 管理后台接口 | 接口 | 方法 | 说明 | |------|------|------| | `GET /api/admin/stats` | GET | 问答统计数据 | --- ## 七、核心业务流程 ### 知识库构建(离线) ``` 文档文件 → DocumentLoader → DocumentSplitter(500,64) → EmbeddingModel → Repository.insert() ``` - PDF:PdfLoader(solon-ai-load-pdf) - MD:自定义 MarkdownLoader - PNG:OCR 提取文字 → 作为文档内容 ### 用户问答(在线) ``` 用户提问 → Repository.search(query, topK=5) → RerankingModel.rerank()(可选) → ChatMessage.ofUserTmpl()(System Prompt + 上下文 + 问题) → ChatSession.prompt().stream()(携带多轮上下文) → SSE 推送给前端 ``` ### 多轮上下文 - 使用 Solon AI 的 `ChatSession`,按 sessionId 管理 - sessionId 存储在 Redis,设置 TTL 过期 - 每次对话自动携带历史摘要 ### System Prompt ``` 你是一名专业的产品技术支持助手。请严格根据下方【参考资料】回答用户问题。 规则: 1. 只根据参考资料回答,不得编造信息 2. 如果参考资料中没有相关信息,请回复"抱歉,目前知识库中暂未收录该问题的相关信息,请联系技术支持" 3. 回答要简洁准确,必要时分步骤说明 4. 如果涉及操作步骤,请用编号列表 5. 语气专业友好 参考资料: #{context} ``` --- ## 八、前端页面设计 ### 聊天页面(Chat.vue) ``` ┌─────────────────────────────────────────────┐ │ [🦞 RAG 知识库] 模型: qwen2.5 [+新对话]│ ├──────────┬──────────────────────────────────┤ │ 历史对话 │ │ │ ├ 📝 对话1 │ 👋 你好!我是技术支持助手... │ │ ├ 📝 对话2 │ [热门问题1] [热门问题2] │ │ └ 📝 对话3 │ │ │ │ 💬 一体机怎么重启? │ │ 热门问题 │ 🤖 请按以下步骤操作: │ │ ├ Q1 │ 1. 长按电源键... │ │ ├ Q2 │ 2. 等待... │ │ └ Q3 │ 📎 来源:一体机操作说明书 P12 │ │ │ [👍 12] [👎 0] │ │ │ │ │ │ ┌──────────────────────┐ [发送] │ │ │ │ 请输入您的问题... │ │ │ │ └──────────────────────┘ │ └──────────┴──────────────────────────────────┘ ``` ### 管理页面(Knowledge.vue + Admin.vue) ``` 知识库管理: ┌──────────────────────────────────────────────┐ │ 知识库管理 [上传文档] [重建]│ ├──────────┬──────────┬──────────┬────────────┤ │ 文档名称 │ 类型 │ 导入时间 │ 操作 │ ├──────────┼──────────┼──────────┼────────────┤ │ 一体机说明书│ PDF │ 03-23 │ [删除] │ │ 后台说明书 │ PDF │ 03-23 │ [删除] │ │ 平板说明 │ MD │ 03-23 │ [删除] │ └──────────┴──────────┴──────────┴────────────┘ 问答统计: ┌──────────────────────────────────────────────┐ │ 高频问题 TOP 5 │ │ 1. 一体机如何重启? (32次) │ │ 2. 后台怎么添加用户? (28次) │ │ 3. 平板连不上服务器怎么办? (21次) │ │ │ │ 无答案问题(需要补充知识库) │ │ 1. 如何导出报表? (15次) │ │ 2. 支持哪些浏览器? (8次) │ └──────────────────────────────────────────────┘ ``` ## 九、页面截图 ![img.png](img.png) ![img_1.png](img_1.png)