# rag-demo **Repository Path**: luozeweifreeboy/rag-demo ## Basic Information - **Project Name**: rag-demo - **Description**: 这个项目可以作为理解RAG系统工作原理的基础,后续我会根据需要扩展功能,如添加用户认证、支持更多文档格式、优化向量检索等。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-30 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RAG智能问答系统 ## 项目简介 这是一个基于RAG(Retrieval-Augmented Generation)技术的智能问答系统,仿写自主项目的核心功能,能够基于上传的文档内容回答用户的问题。 作为一名一年经验的实习生,我通过学习主项目的实现,完成了这个简化版的RAG系统,旨在展示对现代AI应用开发的理解和实践能力。 ### 核心功能 - **文档上传**:支持上传PDF、DOCX等格式的文档 - **智能分块**:自动将文档内容分割成合适的小块,提高检索效率 - **向量存储**:使用Milvus向量数据库存储文档片段的向量表示 - **相似度搜索**:根据用户问题搜索最相关的文档片段 - **流式问答**:使用SSE技术实现实时流式输出,提升用户体验 ## 技术栈 - **后端框架**:Spring Boot 3 - **文档处理**:Apache Tika - **向量数据库**:Milvus - **大语言模型**:OpenAI GPT - **构建工具**:Maven ## 快速开始 ### 前提条件 - Java 17+ - Maven 3.6+ - Milvus 2.0+(向量数据库) - OpenAI API Key ### 配置 1. 编辑 `src/main/resources/application.properties` 文件: - 填写你的OpenAI API Key - 配置Milvus连接信息(默认连接localhost:19530) ### 构建和运行 1. 构建项目: ```bash mvn clean package ``` 2. 运行应用: ```bash java -jar target/rag-demo-0.0.1-SNAPSHOT.jar ``` ## API接口 ### 1. 上传文档到知识库 **POST** `/knowledge-base/{kb-id}/docs/upload` **请求参数**: - `kb-id`:知识库ID(路径参数) - `file`:要上传的文件(multipart/form-data) **响应**: ``` 文档上传成功,文档ID: {documentId} ``` ### 2. 开始文档分块处理 **POST** `/knowledge-base/docs/{doc-id}/chunk` **请求参数**: - `doc-id`:文档ID(路径参数) **响应**: ``` 文档分块处理已开始 ``` ### 3. 流式对话 **GET** `/rag/v3/chat` **请求参数**: - `question`:用户问题 - `conversationId`:会话ID(可选) - `deepThinking`:是否开启深度思考模式(默认false) **响应**: SSE流式响应,实时返回AI生成的回答 ### 4. 停止对话任务 **POST** `/rag/v3/stop` **请求参数**: - `taskId`:任务ID **响应**: ``` 任务已停止 ``` ## 项目结构 ``` rag-demo/ ├── src/ │ ├── main/ │ │ ├── java/com/ragdemo/ │ │ │ ├── RagDemoApplication.java # 主应用类 │ │ │ ├── config/ │ │ │ │ └── AppConfig.java # 配置类 │ │ │ ├── controller/ │ │ │ │ ├── KnowledgeDocumentController.java # 文档管理控制器 │ │ │ │ └── RAGChatController.java # 对话控制器 │ │ │ ├── service/ │ │ │ │ ├── DocumentService.java # 文档处理服务 │ │ │ │ ├── EmbeddingService.java # 向量嵌入服务 │ │ │ │ ├── VectorStoreService.java # 向量存储服务 │ │ │ │ ├── LlmService.java # LLM服务 │ │ │ │ └── RagService.java # RAG核心服务 │ │ └── resources/ │ │ └── application.properties # 应用配置 ├── pom.xml # Maven依赖 └── README.md # 项目说明 ``` ## 工作原理 1. **文档处理**:上传文档后,系统会使用Apache Tika解析文档内容,并自动分割成合适大小的块 2. **向量嵌入**:使用OpenAI的text-embedding-ada-002模型为每个文档小块生成向量表示 3. **向量存储**:将向量存储到Milvus向量数据库,建立索引以提高检索速度 4. **问题处理**:用户提问后,系统为问题生成向量表示 5. **相似度搜索**:在向量数据库中搜索与问题最相似的文档小块 6. **回答生成**:将检索到的文档小块作为上下文,调用OpenAI API生成准确的回答 7. **流式输出**:使用SSE技术实时返回生成的回答,提升用户体验 ## 技术亮点 1. **流式响应**:使用SSE(Server-Sent Events)技术实现实时流式输出,让用户能够看到AI回答的生成过程 2. **向量检索**:集成Milvus向量数据库,实现高效的相似度搜索 3. **模块化设计**:采用清晰的分层架构,代码结构合理,易于维护和扩展 4. **异步处理**:使用多线程异步处理对话请求,提高系统响应速度 5. **错误处理**:完善的异常处理机制,提高系统稳定性 ## 学习与收获 通过仿写主项目,我学习到了: 1. **RAG技术原理**:深入理解了检索增强生成的工作流程 2. **向量数据库应用**:掌握了Milvus的基本使用方法和向量检索的原理 3. **流式响应实现**:学习了SSE技术在实时应用中的应用 4. **Spring Boot开发**:巩固了Spring Boot框架的使用,包括控制器、服务层的设计 5. **API设计**:学习了RESTful API的设计规范和最佳实践 ## 未来优化方向 1. 添加用户认证系统,实现权限管理 2. 支持更多文档格式,如Markdown、TXT等 3. 优化向量检索算法,提高检索准确性 4. 集成更多LLM模型,如Claude、国内模型等 5. 添加前端界面,提升用户体验 6. 实现会话管理,支持上下文对话 ## 许可证 MIT License