# Rag-microservice **Repository Path**: imageOptimize/rag-microservice ## Basic Information - **Project Name**: Rag-microservice - **Description**: 基于 LangChain 和 FastAPI 框架构建的 RAG (Retrieval-Augmented Generation) 微服务,提供 RESTful API 接口,支持文档检索和智能问答 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-20 - **Last Updated**: 2026-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RAG (检索增强生成) 微服务 基于 LangChain 和 FastAPI 框架构建的 RAG (Retrieval-Augmented Generation) 微服务,提供 RESTful API 接口,支持文档检索和智能问答。 ## 📋 项目简介 本项目实现了一个完整的 RAG 微服务系统,能够: - 🌐 提供 RESTful API 接口 - 📄 加载多种格式的文档(PDF、TXT、DOCX) - ✂️ 智能分割文档为文本块 - 🔍 将文档向量化并存储到向量数据库 - 💡 根据用户问题检索相关文档 - 🤖 使用大语言模型生成准确答案 - 🐳 支持 Docker 容器化部署 - 📊 自动生成 API 文档 ## 🏗️ 项目结构 ``` . ├── app.py # FastAPI应用主入口 ├── main.py # 命令行版本(保留) ├── rag_pipeline.py # RAG核心管道 ├── config.py # 配置文件 ├── api/ # API路由模块 │ └── routes.py # API路由定义 ├── models/ # 数据模型 │ └── schemas.py # Pydantic数据模型 ├── services/ # 服务层 │ └── rag_service.py # RAG业务逻辑服务 ├── requirements.txt # 项目依赖 ├── .env.example # 环境变量示例 ├── Dockerfile # Docker镜像构建文件 ├── docker-compose.yml # Docker Compose配置 ├── start.sh # Linux/Mac启动脚本 ├── start.bat # Windows启动脚本 ├── README.md # 项目说明 ├── documents/ # 文档存储目录 └── vectorstore/ # 向量数据库存储目录(自动创建) ``` ## 🏗️ 架构层级 ``` ┌─────────────────────────────────────────────────────────────┐ │ 用户层 (Client Layer) │ │ Web浏览器 / API客户端 / 移动应用 │ └───────────────────────┬─────────────────────────────────────┘ │ HTTP Request ▼ ┌─────────────────────────────────────────────────────────────┐ │ API 层 (API Layer) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ FastAPI Application (app.py) │ │ │ │ - 路由注册 /api/v1/* │ │ │ │ - CORS 中间件 │ │ │ │ - 异常处理 │ │ │ └───────────────────┬──────────────────────────────────┘ │ │ │ │ │ ┌───────────────────▼──────────────────────────────────┐ │ │ │ API Routes (api/routes.py) │ │ │ │ - POST /query 查询接口 │ │ │ │ - POST /query/stream 流式查询 │ │ │ │ - POST /knowledge-base/build 构建知识库 │ │ │ │ - GET /observability/dashboard 监控面板 │ │ │ └───────────────────┬──────────────────────────────────┘ │ └───────────────────────┼─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 服务层 (Service Layer) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ RAGService (services/rag_service.py) │ │ │ │ - 单例模式管理 RAG 管道实例 │ │ │ │ - 延迟初始化(首次使用时加载模型) │ │ │ │ - 对话历史上下文管理 │ │ │ │ - 异常处理和状态检查 │ │ │ └───────────────────┬──────────────────────────────────┘ │ │ │ │ │ ┌───────────────────▼──────────────────────────────────┐ │ │ │ DynamicContextManager │ │ │ │ (services/dynamic_context_manager.py) │ │ │ │ - 向量检索历史对话 │ │ │ │ - 关键词检索补充 │ │ │ │ - 时间序列分析 │ │ │ │ - 动态截断和优化排列 │ │ │ └───────────────────┬──────────────────────────────────┘ │ └───────────────────────┼─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ RAG 管道层 (RAG Pipeline Layer) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ RAGPipeline (rag_pipeline.py) │ │ │ │ ┌────────────────────────────────────────────────┐ │ │ │ │ │ 阶段1: 意图识别 │ │ │ │ │ │ - 使用 LLM 识别意图 (chat/retrieval/statistics)│ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段2: 路由决策 │ │ │ │ │ │ - 根据意图选择处理流程 │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段3: 多路召回(分层检索) │ │ │ │ │ │ - 向量检索 (Vector Retrieval) │ │ │ │ │ │ - 关键词检索 (BM25) │ │ │ │ │ │ - 混合检索 (Hybrid) │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段4: 粗排序 (Coarse Ranking) │ │ │ │ │ │ - 多维度混合评分 │ │ │ │ │ │ - BM25F 评分 │ │ │ │ │ │ - 分数融合 │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段5: 精排序 (Reranking) │ │ │ │ │ │ - 使用 LLM 重排序 │ │ │ │ │ │ - 相关性评分 │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段6: 上下文构建 │ │ │ │ │ │ - 文档去重和合并 │ │ │ │ │ │ - 上下文格式化 │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段7: 答案生成 │ │ │ │ │ │ - 统计查询:数据提取和计算 │ │ │ │ │ │ - 普通查询:LLM 生成答案 │ │ │ │ │ └───────────────────┬────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼────────────────────────────┐ │ │ │ │ │ 阶段8: 结果增强 │ │ │ │ │ │ - 答案后处理 │ │ │ │ │ │ - 结构化数据提取 │ │ │ │ │ └────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────┘ │ └───────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 可观测性层 (Observability Layer) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ LayeredObservability │ │ │ │ (observability/layered_observability.py) │ │ │ │ - 全链路追踪 (Trace) │ │ │ │ - 分层指标收集 (Metrics) │ │ │ │ - 诊断面板 (Diagnostics) │ │ │ │ - 关联分析 (Correlation) │ │ │ └──────────────────────────────────────────────────────┘ │ └───────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 数据层 (Data Layer) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 向量数据库 (Chroma) │ │ │ │ - 文档向量存储 │ │ │ │ - 相似度检索 │ │ │ └──────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 嵌入模型 (HuggingFace Embeddings) │ │ │ │ - 文本向量化 │ │ │ │ - GPU 加速支持 │ │ │ └──────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ LLM (DeepSeek / OpenAI) │ │ │ │ - 意图识别 │ │ │ │ - 答案生成 │ │ │ │ - 重排序 │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ### 流程图(Mermaid) ```mermaid graph TB Start([用户提问]) --> API[API层: 接收请求] API --> Validate[参数验证] Validate --> Service[服务层: RAGService] Service --> CheckInit{检查初始化} CheckInit -->|未初始化| Init[初始化RAG管道
加载模型] CheckInit -->|已初始化| ContextCheck{是否有对话历史?} Init --> ContextCheck ContextCheck -->|有| ContextMgr[动态上下文管理器
提取相关历史对话] ContextCheck -->|无| Pipeline[RAG管道: query方法] ContextMgr --> Pipeline Pipeline --> Intent[阶段1: 意图识别
_detect_intent] Intent --> IntentType{意图类型?} IntentType -->|chat| ChatLLM[直接调用LLM回答] IntentType -->|retrieval/statistics| Routing[阶段2: 路由决策] Routing --> MultiRetrieval[阶段3: 多路召回
_multi_retrieval] MultiRetrieval --> VectorRet[向量检索
Vector Retrieval] MultiRetrieval --> KeywordRet[关键词检索
BM25 Retrieval] MultiRetrieval --> HybridRet[混合检索
Hybrid Retrieval] VectorRet --> CoarseRank[阶段4: 粗排序
多维度评分] KeywordRet --> CoarseRank HybridRet --> CoarseRank CoarseRank --> SemanticScore[语义相似度评分] CoarseRank --> KeywordScore[关键词匹配评分] CoarseRank --> BM25Score[BM25F评分] CoarseRank --> HybridScore[混合评分融合] HybridScore --> Rerank[阶段5: 精排序
LLM重排序] Rerank --> ContextBuild[阶段6: 上下文构建
文档去重和格式化] ContextBuild --> AnswerType{查询类型?} AnswerType -->|statistics| StatsProcess[统计查询处理
数据提取和计算] AnswerType -->|retrieval| GenLLM[阶段7: 答案生成
LLM生成答案] StatsProcess --> Enhance[阶段8: 结果增强
_enhance_answer] GenLLM --> Enhance Enhance --> Format[格式化响应] Format --> Response[返回JSON响应] ChatLLM --> Response Response --> End([返回给用户]) style Start fill:#e1f5ff style End fill:#e1f5ff style Intent fill:#fff4e1 style MultiRetrieval fill:#fff4e1 style CoarseRank fill:#fff4e1 style Rerank fill:#fff4e1 style GenLLM fill:#fff4e1 style Enhance fill:#fff4e1 ``` ## 📄 许可证 MIT License ## 🤝 贡献 欢迎提交 Issue 和 Pull Request!