# ai_rag_example **Repository Path**: architecture_operators/ai_rag_example ## Basic Information - **Project Name**: ai_rag_example - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI RAG 示例项目 ## 项目简介 本项目是一个基于 Qdrant 向量数据库和 AI 技术的 RAG(检索增强生成)示例应用,提供了完整的文档管理、智能问答和内容检索功能。项目采用 Spring Boot 框架构建,集成了多种 AI 模型和向量存储解决方案,能够帮助开发者快速构建智能问答系统。 ## 功能特点 本项目实现了以下核心功能: **文档管理功能**:支持文档上传、解析和分类管理。用户可以将文档导入系统,系统会自动对文档进行分块处理并存储到向量数据库中。系统提供了灵活的方式来管理不同类别和名称的文档,支持按名称和类别进行查询筛选。 **智能问答功能**:基于 RAG 架构实现智能对话,能够根据用户问题检索相关文档内容,并结合 AI 模型生成准确的回答。系统支持流式输出,提供更好的用户体验。同时系统还能根据当前问题推荐相关的其他问题。 **向量检索功能**:采用 Qdrant 作为向量数据库,支持高效的相似度搜索。系统实现了父子文档检索器,能够在保持上下文完整性的同时提供精确的检索结果。还支持基于内容的相关性评分和过滤。 **灵活的检索器实现**:项目提供了多种内容检索器实现,包括基于文本存储的检索器和父子文档检索器。开发者可以根据实际需求选择合适的检索策略,灵活配置最大结果数、最小分数阈值和过滤条件。 ## 技术栈 项目采用的主流技术栈包括: - **后端框架**:Spring Boot 提供完整的应用框架支持 - **向量数据库**:Qdrant 用于存储和检索向量嵌入 - **缓存存储**:Redis 提供文档缓存和状态管理 - **AI 模型集成**:LangChain4j 框架支持多种大语言模型 - **文档处理**:支持多种文档格式的解析和处理 - **前端界面**:提供 HTML 页面实现用户交互 ## 项目结构 项目采用标准的 Maven 结构组织,主要包含以下模块: **配置模块**位于 `config` 包下,包含了应用的所有配置类。CorsConfig 处理跨域配置,EmbeddingConfig 配置向量存储和嵌入模型,ModelConfig 则负责 AI 聊天模型和检索器的配置。 **控制器模块**位于 `controller` 包下,提供了 RESTful API 接口。AiChatController 处理智能对话请求,DocumentController 管理文档操作,RagController 提供 RAG 功能的测试接口。 **服务模块**位于 `service` 包下,实现了核心业务逻辑。EmbeddingService 提供向量嵌入相关服务,AiChatService 处理 AI 对话逻辑,DocumentOperationService 管理文档的增删改查操作。 **检索器模块**位于 `retriever` 包下,实现了自定义的内容检索策略。ParentDocumentRetriever 实现了父子文档检索功能,TextStoreContentRetriever 提供了基于文本存储的检索能力。 **存储模块**位于 `store` 包下,定义了文档存储接口及其实现。DocumentStore 接口规定了存储规范,InMemoryDocumentStore 提供内存存储方案,RedisDocumentStore 则基于 Redis 实现分布式存储。 **工具类**位于 `tools` 包下,OtherQuestionTool 提供了相关问题推荐功能。 ## 快速开始 ### 环境要求 运行本项目需要以下环境: - JDK 17 或更高版本 - Maven 3.6 或更高版本 - Qdrant 向量数据库 - Redis 服务器 ### 配置说明 项目的主要配置在 `application.yaml` 文件中,需要根据实际环境修改以下配置项: Qdrant 连接配置包括服务器地址、端口和集合名称。Redis 配置包括主机地址、端口和密码。AI 模型配置需要根据选择的模型提供商进行相应设置。 ### 构建运行 执行 Maven 命令进行项目构建: ```bash mvn clean package ``` 启动 Spring Boot 应用: ```bash java -jar target/ai_rag_example.jar ``` 服务启动后,可以通过 `http://localhost:8080` 访问应用界面。 ## API 文档 ### 智能对话接口 **请求地址**:`GET /aiChat/chat` 用于发起智能对话,支持流式响应返回。 参数说明: - `question`:用户问题,必填 响应类型为 SSE(Server-Sent Events),支持流式输出回答内容。 ### 文档检索接口 **请求地址**:`GET /aiChat/documents` 根据问题检索相关文档内容。 参数说明: - `question`:检索问题,必填 返回与问题相关的文档列表。 ### 文档导入接口 **请求地址**:`POST /document/import` 将文档导入系统并进行向量化处理。 参数说明: - `collectionName`:集合名称 - `documentName`:文档名称 - `documentCategory`:文档分类 - `documentPath`:文档路径 ### 文档解析接口 **请求地址**:`GET /document/parse` 解析指定路径的文档内容。 参数说明: - `filePath`:文件路径,必填 返回文档解析后的文本段落列表。 ### 文件上传接口 **请求地址**:`POST /document/upload` 上传文件到系统。 参数说明: - `file`:上传的文件,必填 ### RAG 测试接口 **请求地址**:`GET /rag/test` 简单的对话测试接口。 **请求地址**:`GET /rag/searchQuotation` 根据问题检索引用内容。 参数说明: - `question`:查询问题,必填 ## 核心类说明 ### 嵌入配置 EmbeddingConfig 类负责配置向量存储和嵌入模型。embeddingStore 方法创建 Qdrant 向量存储实例,embeddingModel 方法配置嵌入模型,qdrantClient 方法创建 Qdrant 客户端连接。这些配置是整个 RAG 系统的基础。 ### 模型配置 ModelConfig 类集中配置了 AI 相关的组件。chatModel 配置基础聊天模型,streamingChatModel 配置流式聊天模型,parentDocumentRetriever 配置父子文档检索器,aiChatService 配置聊天服务。开发者可以在此调整模型参数和行为。 ### 父子文档检索器 ParentDocumentRetriever 类实现了父子文档检索策略。它将大文档拆分为小块进行嵌入检索,同时保留原始文档作为父文档。这种策略能够在保持检索精度的同时提供更完整的上下文信息。 类提供了多个构造方法和建造器模式,支持灵活的配置选项,包括最大结果数、最小分数阈值和动态过滤函数。 ### 文本存储内容检索器 TextStoreContentRetriever 类提供了基于嵌入向量的内容检索功能。它结合嵌入模型和评分模型,对查询进行向量化并在存储中搜索最匹配的内容。 类支持静态工厂方法和建造器模式,便于快速创建和配置检索器实例。 ### 嵌入服务 EmbeddingService 接口定义了向量嵌入相关的操作。实现类 EmbeddingServiceImpl 提供了初始化数据、创建集合、搜索嵌入和创建向量存储等方法。这些方法是文档向量化处理的核心。 ### 文档操作服务 DocumentOperationService 接口及其实现类 DocumentOperationServiceImpl 负责文档的 CRUD 操作。包括添加文档、查询文档、按名称和类别筛选、解析文档等功能。 ### 文档存储 DocumentStore 接口定义了文档存储规范。InMemoryDocumentStore 提供简单的内存存储实现,RedisDocumentStore 则基于 Redis 实现分布式存储。这两种实现可以根据部署需求进行切换。 ## 扩展指南 ### 添加新的检索器 要实现自定义检索器,需要实现 ContentRetriever 接口。在 retrieve 方法中实现检索逻辑,并返回匹配的 Content 对象。可以参考 ParentDocumentRetriever 和 TextStoreContentRetriever 的实现方式。 ### 集成其他 AI 模型 通过修改 ModelConfig 配置类,可以集成其他支持的 AI 模型。LangChain4j 框架提供了多种模型提供商的适配器,只需更换相应的依赖并修改配置即可。 ### 自定义文档处理 可以在 DocumentOperationService 的实现中添加自定义的文档处理逻辑,如特殊格式解析、内容清洗或元数据提取等。 ## 许可证 本项目采用开源许可证,具体信息请参阅 LICENSE 文件。