大文件拆分重构指南

状态: 进行中 | 创建: 2026-02-07

概况

文件 行数 路由数 优先级 拆分策略
src/api/portal.py 7,089 38 提取工具函数 → 按功能域拆分路由
src/knowledge/expert_router.py 2,545 ExpertProfile vs ExpertRouter 分离
src/api/admin/sub_accounts_api.py 1,972 CRUD vs 批量操作 vs 统计分离
src/core/engine.py 1,458 已按阶段组织,保持现状
src/main.py 1,242 路由注册可提取到 src/api/__init__.py
src/knowledge/dynamic_expert.py 1,122 Config/Service/Manager 已分离

portal.py 拆分计划(7,089 行 → 目标 5 个文件 < 1500 行)

第 1 步 — 已完成 ✅

  • src/api/portal_utils.py — 会话管理、JWT、密码工具(~100 行)

第 2 步 — 待执行

src/api/portal/
├── __init__.py          # 导入并聚合所有子路由
├── auth.py              # 登录 / 注册 / 登出(~800 行)
├── dashboard.py         # 仪表板 / 充值 / 账单(~1200 行)
├── keys.py              # API Key 管理(~600 行)
├── revenue.py           # 收入 / 结算 / 提现(~1000 行)
├── training.py          # 训练页面(~800 行)
├── evaluation.py        # 评估页面(~800 行)
├── experts.py           # 专家管理(~800 行)
├── analytics.py         # 分析页面(~400 行)
└── styles.py            # CSS 样式定义(~600 行)

迁移方式

  1. 新建子模块文件,将对应路由复制过去
  2. __init__.py 中聚合: router.include_router(auth_router)
  3. 修改 main.py 的导入指向新包
  4. 运行全部测试确认无回归
  5. 删除旧 portal.py

expert_router.py 拆分计划(2,545 行)

src/knowledge/
├── expert_router.py     # ExpertRouter 类(~1500 行)
├── expert_profile.py    # ExpertProfile 数据类(~300 行)
└── expert_helpers.py    # get_low_confidence_message 等辅助函数(~200 行)

通用重复代码模式(建议统一)

模式 出现次数 建议
async with AsyncSessionLocal() as session: 250+ 已有 get_db 依赖注入,推荐逐步迁移
admin = await verify_admin(...) 200+ 已是统一调用,可考虑改为 FastAPI Depends
return {"success": False, "error": ...} 300+ 定义 APIResponse 模型统一返回格式