本文档描述了 RAG(Retrieval-Augmented Generation)系统的架构设计,该系统采用 Clean Architecture 和 Domain-Driven Design (DDD) 原则进行重构,实现了高内聚、低耦合的分层架构。
系统遵循 Clean Architecture 的核心原则:
系统采用 DDD 的战术模式:
系统分为四个主要层次,从内到外依次为:
┌─────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ (FastAPI, API Routes, Schemas) │
├─────────────────────────────────────────────────────────┤
│ Application Layer │
│ (Use Cases, Commands, Queries, DTOs) │
├─────────────────────────────────────────────────────────┤
│ Domain Layer │
│ (Entities, Value Objects, Domain Services) │
├─────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ (Database, Vector DB, Parsers, External Services) │
└─────────────────────────────────────────────────────────┘
职责:包含核心业务逻辑和业务规则,是系统的核心。
组件:
实体(Entities):
Document:文档实体,包含内容、嵌入向量和元数据SearchResult:搜索结果实体ParsedDocument:解析后的文档实体DocumentChunk:文档块实体KnowledgeBase:知识库实体PromptDimension:提示词维度实体值对象(Value Objects):
EntityId:实体唯一标识符Timestamp:时间戳Vector:向量表示SearchQuery:搜索查询DocumentType:文档类型枚举领域服务(Domain Services):
HybridSearchService:混合搜索服务,实现向量搜索和全文搜索的结果合并DocumentParser:文档解析器接口ChunkingStrategy:分块策略接口仓储接口(Repository Interfaces):
DocumentRepository:文档仓储接口KnowledgeBaseRepository:知识库仓储接口特点:
职责:协调领域对象完成用例,处理应用逻辑。
组件:
命令(Commands):
CreateDocumentCommand:创建文档命令UpdateDocumentCommand:更新文档命令DeleteDocumentCommand:删除文档命令ParseDocumentCommand:解析文档命令CreateKnowledgeBaseCommand:创建知识库命令查询(Queries):
SearchDocumentsQuery:搜索文档查询GetDocumentQuery:获取文档查询处理器(Handlers):
CreateDocumentHandler:处理创建文档命令SearchDocumentsHandler:处理搜索文档查询ParseDocumentHandler:处理文档解析命令数据传输对象(DTOs):
DocumentDTO:文档数据传输对象SearchResultDTO:搜索结果数据传输对象ParsedDocumentDTO:解析文档数据传输对象模式:
职责:提供技术实现,与外部系统交互。
组件:
数据库:
SQLAlchemy ORM 模型:DocumentModel, KnowledgeBaseModel会话管理:数据库连接和事务管理仓储实现:SQLDocumentRepository, SQLKnowledgeBaseRepository向量数据库:
VectorDatabase:向量数据库抽象基类InfinityVectorDB:Infinity 向量数据库适配器ElasticsearchVectorDB:Elasticsearch 向量数据库适配器文档解析器:
PDFParser:PDF 文档解析器ImageParser:图片文档解析器FixedSizeChunkingStrategy:固定大小分块策略SentenceChunkingStrategy:句子分块策略文件存储:
LocalFileStorage:本地文件存储S3FileStorage:S3 对象存储外部服务:
RagflowService:Ragflow 服务集成DifyService:Dify 服务集成特点:
职责:处理 HTTP 请求和响应,提供 RESTful API。
组件:
API 路由:
vector_search.py:文档管理 APIdocuments.py:文档解析 APIknowledge_base.py:知识库管理 APIhealth.py:健康检查和指标 API请求/响应模型:
CreateDocumentRequest:创建文档请求DocumentResponse:文档响应SearchDocumentsRequest:搜索文档请求ErrorResponse:错误响应中间件:
RequestLoggingMiddleware:请求日志中间件SecurityHeadersMiddleware:安全响应头中间件异常处理器:
domain_exception_handler:领域异常处理器application_exception_handler:应用异常处理器generic_exception_handler:通用异常处理器依赖注入:
dependencies.py:FastAPI 依赖注入函数特点:
1. API 接收请求 (Presentation Layer)
↓
2. 验证请求数据 (Pydantic)
↓
3. 创建命令对象 (Application Layer)
↓
4. 命令处理器处理命令
↓
5. 创建领域实体 (Domain Layer)
↓
6. 仓储保存实体 (Infrastructure Layer)
↓
7. 生成嵌入向量并存储到向量数据库
↓
8. 返回响应 (Presentation Layer)
1. API 接收搜索请求 (Presentation Layer)
↓
2. 创建查询对象 (Application Layer)
↓
3. 查询处理器处理查询
↓
4. 调用混合搜索服务 (Domain Layer)
↓
5. 向量数据库搜索 (Infrastructure Layer)
↓
6. 合并和排序结果 (Domain Layer)
↓
7. 转换为 DTO (Application Layer)
↓
8. 返回响应 (Presentation Layer)
┌─────────────────────────────────────────────────────────┐
│ Load Balancer │
└────────────────────┬────────────────────────────────────┘
│
┌────────────┴────────────┐
│ │
┌───────▼────────┐ ┌───────▼────────┐
│ FastAPI App │ │ FastAPI App │
│ (Worker 1) │ │ (Worker 2) │
└───────┬────────┘ └───────┬────────┘
│ │
└────────────┬────────────┘
│
┌────────────┴────────────┐
│ │
┌───────▼────────┐ ┌───────▼────────┐
│ MySQL/PG DB │ │ Vector DB │
│ │ │ (Infinity/ES) │
└────────────────┘ └────────────────┘