跳转至

智能知识系统 - 架构设计审查报告

⚠️ **归档文档 — 数据已过时** 本报告为历史快照存档。当前版本 **v1.3.0-dev**,232 测试通过。 👉 最新工程状态请参阅 **[ENGINEERING_ALIGNMENT.md](ENGINEERING_ALIGNMENT.md)**

生成时间: 2026-03-25 审查范围: 后端架构设计 审查方法: 静态代码分析、依赖关系分析、设计模式识别


架构评分

评估维度 评分 说明
模块化程度 8.5/10 清晰的模块划分,良好的职责分离
耦合度评估 7.5/10 存在部分紧耦合,但整体可控
内聚性评估 8.5/10 模块内部功能高度相关,内聚性强
可扩展性 8.0/10 良好的扩展机制,但部分模块耦合影响扩展
可维护性 8.0/10 代码结构清晰,但存在一些复杂度
安全性 7.5/10 完善的安全机制,但配置验证不足

总体评分: 8.0/10 - 良好的架构设计,有明确的分层和模块化设计


1. 模块依赖分析

1.1 依赖层次结构

┌─────────────────────────────────────────────────────────────┐
│                      API 层 (main.py)                        │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  FastAPI应用                                           │  │
│  │  - 路由定义                                            │  │
│  │  - 中间件配置                                          │  │
│  │  - 生命周期管理                                        │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│                     服务层 (services/)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │  retrieval   │  │  reasoning   │  │    rag       │       │
│  │  - vector    │  │  - CoT       │  │  - context   │       │
│  │  - bm25      │  │  - ReAct     │  │              │       │
│  │  - hybrid    │  │  - GraphRAG  │  │              │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│                    领域层 (domains/)                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │   BaseDomain │  │ QigongDomain │  │   TcmDomain  │       │
│  │              │  │              │  │              │       │
│  │ DomainRegistry│  │ConfucianDomain│ │GeneralDomain│       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│                   基础设施层 (infrastructure)                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │  cache/      │  │  gateway/    │  │  monitoring/ │       │
│  │  - manager   │  │  - router    │  │  - metrics   │       │
│  │  - redis     │  │  - rate_lmt  │  │  - health    │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │   auth/      │  │  models.py   │  │  config.py   │       │
│  │  - jwt       │  │              │  │              │       │
│  │  - rbac      │  │              │  │              │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘

1.2 模块依赖关系图

                    ┌─────────────┐
                    │   config.py │
                    └──────┬──────┘
        ┌──────────────────┼──────────────────┐
        ↓                  ↓                  ↓
┌───────────────┐  ┌───────────────┐  ┌───────────────┐
│   main.py     │  │  models.py    │  │ domains/base  │
└───────┬───────┘  └───────┬───────┘  └───────┬───────┘
        │                  │                  │
        └──────────────────┼──────────────────┘
                ┌─────────────────────┐
                │  services/           │
                │  ├── retrieval       │
                │  └── reasoning       │
                └─────────┬───────────┘
        ┌─────────────────┼─────────────────┐
        ↓                 ↓                 ↓
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│  cache/       │ │  gateway/     │ │  monitoring/  │
│  (无依赖)     │ │  → domains    │ │  (无依赖)     │
└───────────────┘ └───────────────┘ └───────────────┘

        ┌───────────────┐
        │   auth/       │
        │  (独立模块)   │
        └───────────────┘

1.3 依赖质量分析

良好的依赖设计: - domains/base.py 定义了清晰的抽象接口 (BaseDomain) - cache/ 模块完全独立,无外部依赖 - monitoring/ 模块设计独立,可单独使用 - config.py 作为配置中心,被各模块依赖

需要改进的依赖: - main.py 直接依赖过多服务模块 ( retrieval, reasoning, domains, gateway, monitoring ) - gateway/router.py 直接依赖 domains 模块,耦合度较高 - 部分服务通过全局单例 (get_registry(), get_cache_manager()) 耦合


2. 循环依赖检测

2.1 检测结果

无循环依赖发现 - 项目的依赖关系保持单向流动。

依赖流向:

config.py → 所有模块
models.py → main.py, services
domains/base → domains/*, gateway
services/* → main.py
cache → (独立,仅被依赖)
monitoring → (独立,仅被依赖)
auth → (独立,仅被依赖)
gateway → domains

2.2 潜在的循环风险

虽然当前无循环依赖,但存在以下风险点:

  1. gateway ↔ domains 双向依赖风险
  2. gateway/router.py 依赖 domains 模块
  3. domains/registry.py 可能未来需要调用 gateway 功能
  4. 建议: 通过接口/事件机制解耦

  5. 全局单例的隐式循环

  6. get_registry() 返回的全局实例被多处修改
  7. 可能导致难以追踪的状态变化
  8. 建议: 考虑依赖注入替代全局单例

3. 设计模式分析

3.1 已使用的设计模式

设计模式 使用位置 评价
策略模式 RoutingStrategy, CacheStrategy 良好 - 支持多种策略切换
工厂模式 get_registry(), get_cache_manager() 中等 - 过度使用全局单例
单例模式 全局管理器实例 中等 - 应考虑依赖注入
模板方法 BaseDomain 抽象类 优秀 - 清晰的接口定义
装饰器模式 cached, require_permission 优秀 - 良好的AOP实现
注册表模式 DomainRegistry 优秀 - 服务发现机制
中间件模式 FastAPI中间件链 优秀 - 请求处理管道
外观模式 APIGateway 良好 - 简化复杂子系统
观察者模式 HealthChecker 优秀 - 健康检查事件机制
仓储模式 UserRepository 优秀 - 数据访问抽象

3.2 设计模式使用示例

策略模式 - 路由策略:

class RoutingStrategy(Enum):
    PRIORITY = "priority"
    ROUND_ROBIN = "round_robin"
    LEAST_CONNECTIONS = "least_connections"
    DOMAIN_MATCH = "domain_match"

模板方法 - 领域基类:

class BaseDomain(ABC):
    @abstractmethod
    async def query(self, question: str, ...) -> QueryResult:
        pass

    @abstractmethod
    async def search(self, query: str, ...) -> List[Dict]:
        pass

装饰器模式 - 缓存装饰器:

@cached(namespace="query", ttl=3600)
async def complex_query(...):
    pass

3.3 建议添加的设计模式

模式 应用场景 优先级
依赖注入 替代全局单例,提高可测试性
建造者模式 复杂配置对象构建 (如 DomainConfig)
命令模式 API操作封装,支持撤销/重做
适配器模式 多种LLM服务适配

4. 架构分层

4.1 分层结构评估

┌─────────────────────────────────────────────────────┐
│            表现层 (Presentation)                    │
│  FastAPI路由、中间件、请求/响应处理                │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│            应用层 (Application)                     │
│  业务编排、用例实现、DTO转换                        │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│            领域层 (Domain)                         │
│  业务实体、领域服务、业务规则                      │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│          基础设施层 (Infrastructure)               │
│  数据库、缓存、外部API、配置                        │
└─────────────────────────────────────────────────────┘

4.2 分层问题分析

问题1: 层间边界模糊 - main.py 包含过多业务逻辑 - 建议: 将业务逻辑抽取到 Service 层

问题2: 领域层贫血 - 领域对象 (如 Domain) 缺少业务行为 - 建议: 引入充血领域模型

问题3: 基础设施层泄漏 - 部分领域类直接依赖 asyncpg.Pool - 建议: 通过仓储模式抽象数据访问

4.3 职责分离评估

模块 职责清晰度 单一职责 内聚性
config.py
models.py
domains/
services/ 基本是
cache/
auth/
monitoring/
gateway/
main.py

5. 接口设计

5.1 API接口设计

RESTful设计:

GET    /api/v1/documents           # 列表
GET    /api/v1/documents/{id}      # 详情
POST   /api/v1/documents           # 创建
POST   /api/v1/search/hybrid       # 混合搜索
POST   /api/v1/reason              # 推理
POST   /api/v1/gateway/query       # 网关查询
GET    /api/v1/domains             # 领域列表
GET    /api/v1/health              # 健康检查

接口优点: - 清晰的资源命名 - 一致的版本控制 (/api/v1/) - 合理的HTTP方法使用 - JSON格式的请求/响应

接口改进建议: 1. 添加分页参数到所有列表接口 2. 实现HATEOAS链接 3. 统一错误响应格式 4. 添加请求验证细节

5.2 模块接口设计

BaseDomain 接口:

class BaseDomain(ABC):
    @abstractmethod
    async def query(self, question: str, ...) -> QueryResult: ...

    @abstractmethod
    async def search(self, query: str, ...) -> List[Dict]: ...
- 评价: 清晰的抽象,易于扩展

CacheManager 接口:

class CacheManager:
    async def get(self, key: str, ...) -> Any: ...
    async def set(self, key: str, value: Any, ...) -> None: ...
    async def delete(self, key: str, ...) -> None: ...
- 评价: 简洁易用,支持多级缓存

5.3 接口稳定性

接口类型 稳定性 破坏性变更风险
HTTP API 版本控制良好
领域接口 抽象设计稳定
缓存接口 简洁稳定
监控接口 独立稳定
认证接口 功能演进中

6. 可扩展性

6.1 扩展机制

1. 领域扩展:

class CustomDomain(BaseDomain):
    async def query(self, question: str, ...) -> QueryResult:
        # 自定义实现
        pass

# 注册新领域
registry.register(CustomDomain(db_pool))
- 评价: 优秀 - 开闭原则

2. 缓存扩展:

class CustomCacheBackend:
    async def get(self, key): ...
    async def set(self, key, value): ...

# 插入到CacheManager
- 评价: 良好 - 支持自定义后端

3. 监控扩展:

health_checker.register("custom_check", check_func)
- 评价: 优秀 - 注册表模式

6.2 配置化程度

配置项 硬编码 环境变量 配置文件 评分
数据库 - -
API密钥 - -
缓存TTL 部分 - -
路由策略 - - -
健康检查 - - -

改进建议: - 将硬编码配置迁移到配置文件 - 实现配置热重载 - 添加配置验证机制

6.3 插件化机制

当前状态: 无正式插件系统

建议实现:

class PluginBase(ABC):
    @abstractmethod
    async def initialize(self, app): ...

    @abstractmethod
    async def shutdown(self): ...

class PluginManager:
    def register(self, plugin: PluginBase): ...
    async def load_all(self): ...


7. 代码组织

7.1 目录结构评估

backend/
├── main.py                    # 应用入口 (需要拆分)
├── config.py                  # 配置中心 ✓
├── models.py                  # 数据模型 ✓
├── api/                       # API路由 (缺失)
│   └── __init__.py
├── services/                  # 业务服务 ✓
│   ├── retrieval/
│   ├── reasoning/
│   └── rag/
├── domains/                   # 领域模型 ✓
│   ├── base.py
│   ├── registry.py
│   ├── qigong.py
│   ├── tcm.py
│   ├── confucian.py
│   └── general.py
├── cache/                     # 缓存 ✓
├── auth/                      # 认证授权 ✓
├── gateway/                   # 网关 ✓
├── monitoring/                # 监控 ✓
└── database/                  # 数据库 (缺失)
    └── __init__.py

7.2 文件职责评估

文件 行数 职责 建议
main.py 1166 入口+路由+业务 拆分为多个模块
config.py 86 配置管理 保持
models.py 111 数据模型 考虑拆分
domains/base.py 217 领域抽象 保持
cache/manager.py 783 缓存管理 考虑拆分

7.3 模块内聚性

高内聚模块: - domains/ - 领域相关功能聚集 - auth/ - 认证授权功能聚集 - cache/ - 缓存功能聚集

低内聚模块: - main.py - 功能混杂,需要拆分 - services/ - 各服务间缺少协调


8. 架构问题与改进建议

8.1 高优先级问题

问题 影响 建议
main.py 过大 可维护性 拆分为 API 路由模块
全局单例过度使用 可测试性 引入依赖注入
领域层贫血 业务逻辑分离 实现充血领域模型
缺少服务层协调 扩展性 添加 Application Service 层

8.2 中优先级问题

问题 影响 建议
配置硬编码 灵活性 迁移到配置文件
错误处理不一致 可靠性 统一错误处理机制
缺少API文档 可用性 完善OpenAPI文档
测试覆盖不足 质量保证 添加单元测试和集成测试

8.3 低优先级改进

问题 影响 建议
缺少插件系统 扩展性 实现插件机制
日志格式不统一 运维 标准化日志格式
缺少性能监控 性能 添加APM工具集成

8.4 重构建议

建议1: 引入 Application Service 层

当前: main.py → services
建议: main.py → application/ → services

建议2: 实现依赖注入

class Container:
    def __init__(self):
        self._services = {}

    def register(self, interface, implementation): ...

    def get(self, interface): ...

建议3: 拆分 main.py

api/
├── __init__.py
├── documents.py
├── search.py
├── reasoning.py
├── gateway.py
└── health.py


9. 架构优势

  1. 清晰的领域驱动设计: 使用 DomainRegistry 实现服务发现
  2. 完善的缓存机制: 多级缓存设计,性能优化良好
  3. 独立的认证授权: JWT + RBAC 完整实现
  4. 可观测性: 监控和健康检查机制完善
  5. 良好的API设计: RESTful 风格,版本控制清晰

10. 总结

10.1 架构成熟度

维度 成熟度
分层架构
模块化
设计模式
可扩展性 中高
可测试性
文档完善度

10.2 改进路线图

短期 (1-2周): 1. 拆分 main.py 为多个路由模块 2. 添加统一错误处理 3. 完善API文档

中期 (1-2月): 1. 引入依赖注入容器 2. 实现 Application Service 层 3. 添加集成测试

长期 (3-6月): 1. 实现插件系统 2. 完善配置管理 3. 添加性能监控


审查人: Claude Architecture Analysis 审查日期: 2026-03-25