feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
This commit is contained in:
@@ -1,126 +1,126 @@
|
||||
# <20>𡒊垢<F0A1928A>嗆<EFBFBD>憓鮋<E68693>瞍磰<E79E8D><E7A3B0>寞<EFBFBD>
|
||||
|
||||
> **版本:** V1.0
|
||||
> **创建日期:** 2025-11-14
|
||||
> **策略:** 新旧并存,增量演进
|
||||
> **原则:** 零风险改造,新模块新架构
|
||||
> **<EFBFBD><EFBFBD>𧋦嚗?* V1.0
|
||||
> **<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗?* 2025-11-14
|
||||
> **蝑𣇉裦嚗?* <20>唳唂撟嗅<E6929F>嚗<EFBFBD><E59A97><EFBFBD>𤩺<EFBFBD>餈?
|
||||
> **<EFBFBD>笔<EFBFBD>嚗?* <20>園<EFBFBD><E59C92>拇㺿<E68B87>𩤃<EFBFBD><F0A9A483>唳芋<E594B3>埈鰵<E59F88>嗆<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
## <20>㴓 <20>詨<EFBFBD>蝑𣇉裦
|
||||
|
||||
### "绞杀者模式"(Strangler Fig Pattern)
|
||||
### "蝏墧<EFBFBD><EFBFBD><EFBFBD>芋撘?嚗𠄎trangler Fig Pattern嚗?
|
||||
|
||||
**不改造旧代码,新功能新架构**
|
||||
**銝齿㺿<EFBFBD>䭾唂隞<EFBFBD><EFBFBD>嚗峕鰵<EFBFBD>蠘<EFBFBD><EFBFBD>唳沲<EFBFBD>?*
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ AI临床研究平台 - Backend │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────────┐ │
|
||||
│ │ 现有模块 │ │ 新模块 │ │
|
||||
│ │ (旧架构) │ │ (新架构) │ │
|
||||
│ ├──────────────┤ ├──────────────────┤ │
|
||||
│ │ • AIA │ │ • ASL (新) │ │
|
||||
│ │ • PKB │ │ • 未来模块... │ │
|
||||
│ │ • RVW │ │ │ │
|
||||
│ └──────────────┘ └──────────────────┘ │
|
||||
│ ↓ ↓ │
|
||||
│ 平铺结构 platform/common/modules │
|
||||
│ 保持不变 标准化三层架构 │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
<EFBFBD>? AI銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱 - Backend <EFBFBD>?
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
<EFBFBD>? <EFBFBD>?
|
||||
<EFBFBD>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>? <20>唳<EFBFBD>璅∪<E79285> <20>? <20>? <20>唳芋<E594B3>? <20>? <20>?
|
||||
<EFBFBD>? <20>? (<28>扳沲<E689B3>? <EFBFBD>? <EFBFBD>? (<28>唳沲<E594B3>? <20>? <20>?
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>?<3F>?AIA <EFBFBD>? <EFBFBD>?<3F>?ASL (<EFBFBD>? <EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>?<3F>?PKB <EFBFBD>? <EFBFBD>?<3F>?<3F>芣䔉璅∪<E79285>... <EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>?<3F>?RVW <EFBFBD>? <EFBFBD>? <EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?
|
||||
<EFBFBD>? <EFBFBD>? <EFBFBD>? <EFBFBD>?
|
||||
<EFBFBD>? 撟喲唍蝏𤘪<EFBFBD> platform/common/modules <EFBFBD>?
|
||||
<EFBFBD>? 靽脲<EFBFBD>銝滚<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>碶<EFBFBD>撅<EFBFBD>沲<EFBFBD>? <EFBFBD>?
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 新的目录结构(并存版)
|
||||
## <EFBFBD><EFBFBD> <20>啁<EFBFBD><E59581>桀<EFBFBD>蝏𤘪<E89D8F>嚗<EFBFBD>僎摮条<E691AE>嚗?
|
||||
|
||||
```
|
||||
backend/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> src/
|
||||
│ ├── index.ts # 主入口(注册所有模块)
|
||||
│ │
|
||||
│ ├── config/ # 【共用】配置层
|
||||
│ │ ├── env.ts
|
||||
│ │ └── database.ts
|
||||
│ │
|
||||
│ ├── legacy/ # 🔸 现有代码(旧架构)
|
||||
│ │ ├── routes/
|
||||
│ │ │ ├── agents.ts # AIA 路由
|
||||
│ │ │ ├── conversations.ts
|
||||
│ │ │ ├── chatRoutes.ts
|
||||
│ │ │ ├── projects.ts
|
||||
│ │ │ ├── knowledgeBases.ts # PKB 路由
|
||||
│ │ │ ├── batchRoutes.ts
|
||||
│ │ │ └── reviewRoutes.ts # RVW 路由
|
||||
│ │ │
|
||||
│ │ ├── controllers/
|
||||
│ │ │ ├── agentController.ts
|
||||
│ │ │ ├── conversationController.ts
|
||||
│ │ │ ├── chatController.ts
|
||||
│ │ │ ├── knowledgeBaseController.ts
|
||||
│ │ │ └── reviewController.ts
|
||||
│ │ │
|
||||
│ │ ├── services/
|
||||
│ │ │ ├── agentService.ts
|
||||
│ │ │ ├── conversationService.ts
|
||||
│ │ │ ├── knowledgeBaseService.ts
|
||||
│ │ │ └── reviewService.ts
|
||||
│ │ │
|
||||
│ │ └── templates/
|
||||
│ │ └── clinicalResearch.ts
|
||||
│ │
|
||||
│ ├── common/ # 【共用】通用能力层
|
||||
│ │ ├── llm/ # LLM 适配器
|
||||
│ │ │ └── adapters/
|
||||
│ │ │ ├── DeepSeekAdapter.ts
|
||||
│ │ │ ├── QwenAdapter.ts
|
||||
│ │ │ ├── LLMFactory.ts
|
||||
│ │ │ └── types.ts
|
||||
│ │ │
|
||||
│ │ ├── rag/ # RAG 能力
|
||||
│ │ │ ├── DifyClient.ts
|
||||
│ │ │ └── types.ts
|
||||
│ │ │
|
||||
│ │ ├── document/ # 文档处理
|
||||
│ │ │ ├── ExtractionClient.ts
|
||||
│ │ │ └── TokenService.ts
|
||||
│ │ │
|
||||
│ │ ├── middleware/ # 中间件
|
||||
│ │ │ └── validateProject.ts
|
||||
│ │ │
|
||||
│ │ └── utils/ # 工具函数
|
||||
│ │ └── jsonParser.ts
|
||||
│ │
|
||||
│ └── modules/ # 🌟 新架构模块(标准化)
|
||||
│ │
|
||||
│ ├── asl/ # ⭐ AI智能文献(新模块)
|
||||
│ │ ├── index.ts # 模块导出
|
||||
│ │ ├── routes/
|
||||
│ │ │ ├── index.ts # 路由统一导出
|
||||
│ │ │ ├── projects.ts # 项目管理
|
||||
│ │ │ ├── screening.ts # 文献筛选
|
||||
│ │ │ ├── extraction.ts # 数据提取
|
||||
│ │ │ └── analysis.ts # 综合分析
|
||||
│ │ │
|
||||
│ │ ├── controllers/
|
||||
│ │ │ ├── projectController.ts
|
||||
│ │ │ ├── screeningController.ts
|
||||
│ │ │ ├── extractionController.ts
|
||||
│ │ │ └── analysisController.ts
|
||||
│ │ │
|
||||
│ │ ├── services/
|
||||
│ │ │ ├── projectService.ts
|
||||
│ │ │ ├── screeningService.ts
|
||||
│ │ │ ├── extractionService.ts
|
||||
│ │ │ └── analysisService.ts
|
||||
│ │ │
|
||||
│ │ └── types/ # 模块类型定义
|
||||
│ │ └── index.ts
|
||||
│ │
|
||||
│ └── [未来模块]/ # 未来的新模块都按此结构
|
||||
│
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> index.ts # 銝餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘜典<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇芋<EFBFBD>梹<EFBFBD>
|
||||
<EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> config/ # <EFBFBD>𣂼<EFBFBD><EFBFBD>具<EFBFBD>煾<EFBFBD>蝵桀<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> env.ts
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> database.ts
|
||||
<EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> legacy/ # <EFBFBD>璛 <20>唳<EFBFBD>隞<EFBFBD><E99A9E>嚗<EFBFBD>唂<EFBFBD>嗆<EFBFBD>嚗?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> routes/
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> agents.ts # AIA 頝舐眏
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> conversations.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> chatRoutes.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> projects.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> knowledgeBases.ts # PKB 頝舐眏
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> batchRoutes.ts
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> reviewRoutes.ts # RVW 頝舐眏
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> agentController.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> conversationController.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> chatController.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> knowledgeBaseController.ts
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> reviewController.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> agentService.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> conversationService.ts
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> knowledgeBaseService.ts
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> reviewService.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> templates/
|
||||
<EFBFBD>? <20>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> clinicalResearch.ts
|
||||
<EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> common/ # <EFBFBD>𣂼<EFBFBD><EFBFBD>具<EFBFBD>煾<EFBFBD>𡁶鍂<EFBFBD>賢<EFBFBD>撅?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> llm/ # LLM <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> adapters/
|
||||
<EFBFBD>? <20>? <20>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> DeepSeekAdapter.ts
|
||||
<EFBFBD>? <20>? <20>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> QwenAdapter.ts
|
||||
<EFBFBD>? <20>? <20>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> LLMFactory.ts
|
||||
<EFBFBD>? <20>? <20>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> types.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> rag/ # RAG <EFBFBD>賢<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> DifyClient.ts
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> types.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> document/ # <EFBFBD><EFBFBD>﹝憭<EFBFBD><EFBFBD>
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> ExtractionClient.ts
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> TokenService.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> middleware/ # 銝剝𡢿隞?
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> validateProject.ts
|
||||
<EFBFBD>? <20>? <20>?
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> utils/ # 撌亙<EFBFBD><EFBFBD>賣㺭
|
||||
<EFBFBD>? <20>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> jsonParser.ts
|
||||
<EFBFBD>? <20>?
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> modules/ # <EFBFBD><EFBFBD> <20>唳沲<E594B3><E6B2B2>芋<EFBFBD>梹<EFBFBD><E6A2B9><EFBFBD><EFBFBD><EFBFBD>吔<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>?
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> asl/ # 潃?AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃嚗<E8AE83>鰵璅∪<E79285>嚗?
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> index.ts # 璅∪<EFBFBD>撖澆枂
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> routes/
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> index.ts # 頝舐眏蝏煺<EFBFBD>撖澆枂
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> projects.ts # 憿寧𤌍蝞∠<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> screening.ts # <EFBFBD><EFBFBD>讃蝑偦<EFBFBD>?
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> extraction.ts # <EFBFBD>唳旿<EFBFBD>𣂼<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> analysis.ts # 蝏澆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>? <20>?
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> projectController.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> screeningController.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> extractionController.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> analysisController.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>?
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> projectService.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> screeningService.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> extractionService.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> analysisService.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>?
|
||||
<EFBFBD>? <EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> types/ # 璅∪<EFBFBD>蝐餃<EFBFBD>摰帋<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> index.ts
|
||||
<EFBFBD>? <EFBFBD>?
|
||||
<EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> [<5B>芣䔉璅∪<E79285>]/ # <EFBFBD>芣䔉<EFBFBD><EFBFBD>鰵璅∪<EFBFBD><EFBFBD>賣<EFBFBD>甇斤<EFBFBD><EFBFBD>?
|
||||
<EFBFBD>?
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> package.json
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> tsconfig.json # TypeScript <20>滨蔭
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> .env
|
||||
@@ -128,14 +128,14 @@ backend/
|
||||
|
||||
---
|
||||
|
||||
## 🔄 主入口文件(index.ts)
|
||||
## <EFBFBD><EFBFBD> 銝餃<E98A9D><E9A483><EFBFBD><EFBFBD>隞塚<E99A9E>index.ts嚗?
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - 蝏煺<E89D8F><E785BA>亙藁
|
||||
*
|
||||
* 架构演进策略:新旧并存
|
||||
* - Legacy 模块:保持现有结构
|
||||
* <EFBFBD>嗆<EFBFBD>瞍磰<EFBFBD>蝑𣇉裦嚗𡁏鰵<EFBFBD>批僎摮?
|
||||
* - Legacy 璅∪<EFBFBD>嚗帋<EFBFBD><EFBFBD><EFBFBD>緵<EFBFBD>厩<EFBFBD><EFBFBD>?
|
||||
* - New 璅∪<E79285>嚗𡁻<E59A97><F0A181BB>冽<EFBFBD><E586BD><EFBFBD><EFBFBD>銝匧<E98A9D><E58CA7>嗆<EFBFBD>
|
||||
*/
|
||||
|
||||
@@ -159,7 +159,7 @@ import reviewRoutes from './legacy/routes/reviewRoutes.js';
|
||||
// ============================================
|
||||
// <20>鞉鰵<E99E89>嗆<EFBFBD><E59786>烐<EFBFBD><E78390><EFBFBD><EFBFBD>璅∪<E79285>
|
||||
// ============================================
|
||||
import { aslRoutes } from './modules/asl/routes/index.js'; // ASL 模块(新)
|
||||
import { aslRoutes } from './modules/asl/routes/index.js'; // ASL 璅∪<EFBFBD>嚗<EFBFBD>鰵嚗?
|
||||
|
||||
const fastify = Fastify({ logger: true });
|
||||
|
||||
@@ -167,7 +167,7 @@ const fastify = Fastify({ logger: true });
|
||||
await fastify.register(cors, { origin: true });
|
||||
await fastify.register(multipart, { limits: { fileSize: 10 * 1024 * 1024 } });
|
||||
|
||||
// 健康检查
|
||||
// <EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
|
||||
fastify.get('/health', async () => ({
|
||||
status: 'ok',
|
||||
architecture: 'hybrid', // 瘛瑕<E7989B><E79195>嗆<EFBFBD>
|
||||
@@ -178,7 +178,7 @@ fastify.get('/health', async () => ({
|
||||
}));
|
||||
|
||||
// ============================================
|
||||
// 注册 Legacy 模块路由(旧架构)
|
||||
// 瘜典<EFBFBD> Legacy 璅∪<EFBFBD>頝舐眏嚗<EFBFBD>唂<EFBFBD>嗆<EFBFBD>嚗?
|
||||
// ============================================
|
||||
console.log('\n<>𣑐 <20>㰘蝸 Legacy 璅∪<E79285>...');
|
||||
await fastify.register(projectRoutes, { prefix: '/api/v1/aia' });
|
||||
@@ -188,16 +188,16 @@ await fastify.register(chatRoutes, { prefix: '/api/v1/aia' });
|
||||
await fastify.register(knowledgeBaseRoutes, { prefix: '/api/v1/pkb' });
|
||||
await fastify.register(batchRoutes, { prefix: '/api/v1/pkb' });
|
||||
await fastify.register(reviewRoutes, { prefix: '/api/v1/rvw' });
|
||||
console.log('✅ Legacy 模块加载完成(AIA, PKB, RVW)');
|
||||
console.log('<EFBFBD>?Legacy 璅∪<EFBFBD><EFBFBD>㰘蝸摰峕<EFBFBD>嚗㇁IA, PKB, RVW嚗?);
|
||||
|
||||
// ============================================
|
||||
// 注册新架构模块路由
|
||||
// 瘜典<E7989C><E585B8>唳沲<E594B3><E6B2B2>芋<EFBFBD>𡑒楝<F0A19192>?
|
||||
// ============================================
|
||||
console.log('\n🌟 加载新架构模块...');
|
||||
console.log('\n<EFBFBD><EFBFBD> <EFBFBD>㰘蝸<EFBFBD>唳沲<EFBFBD><EFBFBD>芋<EFBFBD>?..');
|
||||
await fastify.register(aslRoutes, { prefix: '/api/v1/asl' });
|
||||
console.log('✅ 新架构模块加载完成(ASL)');
|
||||
console.log('<EFBFBD>?<EFBFBD>唳沲<EFBFBD><EFBFBD>芋<EFBFBD>堒<EFBFBD>頧賢<EFBFBD><EFBFBD>琜<EFBFBD>ASL嚗?);
|
||||
|
||||
// 启动服务器
|
||||
// <EFBFBD>臬𢆡<EFBFBD>滚𦛚<EFBFBD>?
|
||||
async function start() {
|
||||
try {
|
||||
validateEnv();
|
||||
@@ -205,16 +205,16 @@ async function start() {
|
||||
await fastify.listen({ port: config.port, host: config.host });
|
||||
|
||||
console.log('\n' + '='.repeat(60));
|
||||
console.log('🚀 AI临床研究平台启动成功!');
|
||||
console.log('<EFBFBD><EFBFBD> AI銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱<EFBFBD>臬𢆡<EFBFBD>𣂼<EFBFBD>嚗?);
|
||||
console.log('='.repeat(60));
|
||||
console.log(`<60><> <20>滚𦛚<E6BB9A>啣<EFBFBD>: http://${config.host}:${config.port}`);
|
||||
console.log('\n<EFBFBD>𣑐 璅∪<EFBFBD><EFBFBD>嗆<EFBFBD>:');
|
||||
console.log(' <EFBFBD>璛 Legacy <EFBFBD>嗆<EFBFBD>: AIA, PKB, RVW (蝔喳<EFBFBD>餈鞱<EFBFBD>)');
|
||||
console.log(' 🌟 新架构: ASL (标准化模块)');
|
||||
console.log(' <EFBFBD><EFBFBD> <EFBFBD>唳沲<EFBFBD>? ASL (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡝗芋<EFBFBD>?');
|
||||
console.log('='.repeat(60) + '\n');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 启动失败:', error);
|
||||
console.error('<EFBFBD>?<EFBFBD>臬𢆡憭梯揖:', error);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -225,16 +225,16 @@ start();
|
||||
|
||||
---
|
||||
|
||||
## 🌟 新模块开发指南(ASL 为例)
|
||||
## <EFBFBD><EFBFBD> <20>唳芋<E594B3>堒<EFBFBD><E5A092>烐<EFBFBD><E78390>梹<EFBFBD>ASL 銝箔<E98A9D>嚗?
|
||||
|
||||
### 1. <20>𥕦遣璅∪<E79285>撉冽沲
|
||||
|
||||
```bash
|
||||
# 一次性创建所有目录
|
||||
# 銝<EFBFBD>甈⊥<EFBFBD>批<EFBFBD>撱箸<EFBFBD><EFBFBD>厩𤌍敶?
|
||||
mkdir -p backend/src/modules/asl/{routes,controllers,services,types}
|
||||
```
|
||||
|
||||
### 2. 创建模块导出(index.ts)
|
||||
### 2. <EFBFBD>𥕦遣璅∪<EFBFBD>撖澆枂嚗ǎndex.ts嚗?
|
||||
|
||||
```typescript
|
||||
// backend/src/modules/asl/index.ts
|
||||
@@ -265,7 +265,7 @@ export async function aslRoutes(fastify: FastifyInstance) {
|
||||
await fastify.register(extractionRoutes); // /extraction
|
||||
await fastify.register(analysisRoutes); // /analysis
|
||||
|
||||
console.log('✅ ASL 模块路由注册完成');
|
||||
console.log('<EFBFBD>?ASL 璅∪<EFBFBD>頝舐眏瘜典<EFBFBD>摰峕<EFBFBD>');
|
||||
}
|
||||
```
|
||||
|
||||
@@ -288,7 +288,7 @@ export class ProjectController {
|
||||
console.error('<27>瑕<EFBFBD>憿寧𤌍<E5AFA7>𡑒”憭梯揖:', error);
|
||||
return reply.status(500).send({
|
||||
success: false,
|
||||
message: error instanceof Error ? error.message : '服务器错误'
|
||||
message: error instanceof Error ? error.message : '<EFBFBD>滚𦛚<EFBFBD>券<EFBFBD>霂?
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -317,7 +317,7 @@ export const projectController = new ProjectController();
|
||||
}
|
||||
```
|
||||
|
||||
**使用示例:**
|
||||
**雿輻鍂蝷箔<EFBFBD>嚗?*
|
||||
|
||||
```typescript
|
||||
// <20>唳芋<E594B3>𦯀葉撖澆<E69296><E6BE86>𡁶鍂<F0A181B6>賢<EFBFBD>
|
||||
@@ -331,120 +331,120 @@ import { agentService } from '../services/agentService.js';
|
||||
|
||||
---
|
||||
|
||||
## 📋 实施步骤(零风险)
|
||||
## <EFBFBD><EFBFBD> 摰墧鴌甇仿炊嚗<E7828A>妟憌𡡞埯嚗?
|
||||
|
||||
### 第 1 步:文件重组(5分钟)⭐
|
||||
### 蝚?1 甇伐<E79487><E4BC90><EFBFBD>辣<EFBFBD>滨<EFBFBD>嚗?<3F><><EFBFBD>嚗争<E59A97>
|
||||
|
||||
```bash
|
||||
# 1. <20>𥕦遣 legacy <20>桀<EFBFBD>
|
||||
mkdir backend/src/legacy
|
||||
|
||||
# 2. 移动现有代码到 legacy(保持相对路径不变)
|
||||
# 2. 蝘餃𢆡<EFBFBD>唳<EFBFBD>隞<EFBFBD><EFBFBD><EFBFBD>?legacy嚗<79><E59A97><EFBFBD><EFBFBD>㮾撖寡楝敺<E6A59D><E695BA><EFBFBD>矋<EFBFBD>
|
||||
mv backend/src/routes backend/src/legacy/
|
||||
mv backend/src/controllers backend/src/legacy/
|
||||
mv backend/src/services backend/src/legacy/
|
||||
mv backend/src/templates backend/src/legacy/
|
||||
|
||||
# 3. 创建新架构目录
|
||||
# 3. <EFBFBD>𥕦遣<EFBFBD>唳沲<EFBFBD><EFBFBD>𤌍敶?
|
||||
mkdir -p backend/src/modules/asl/{routes,controllers,services,types}
|
||||
```
|
||||
|
||||
**验证:** 无需修改任何代码,只是移动目录位置
|
||||
**撉諹<EFBFBD>嚗?* <20>𣳇<EFBFBD>靽格㺿隞颱<E99A9E>隞<EFBFBD><E99A9E>嚗<EFBFBD>蘨<EFBFBD>舐宏<E88890>函𤌍敶蓥<E695B6>蝵?
|
||||
|
||||
---
|
||||
|
||||
### 第 2 步:更新主入口(5分钟)
|
||||
### 蝚?2 甇伐<E79487><E4BC90>湔鰵銝餃<E98A9D><E9A483><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>嚗?
|
||||
|
||||
只修改 `src/index.ts` 的导入路径:
|
||||
<EFBFBD>芯耨<EFBFBD>?`src/index.ts` <EFBFBD><EFBFBD>紡<EFBFBD>亥楝敺<EFBFBD><EFBFBD>
|
||||
|
||||
```typescript
|
||||
// <20>改<EFBFBD>from './routes/agents.js'
|
||||
// <20>堆<EFBFBD>from './legacy/routes/agents.js'
|
||||
```
|
||||
|
||||
**验证:** `npm run dev` 服务器正常启动
|
||||
**撉諹<EFBFBD>嚗?* `npm run dev` <EFBFBD>滚𦛚<EFBFBD>冽迤撣詨鍳<EFBFBD>?
|
||||
|
||||
---
|
||||
|
||||
### 第 3 步:配置 TSConfig(2分钟)
|
||||
### 蝚?3 甇伐<E79487><E4BC90>滨蔭 TSConfig嚗?<3F><><EFBFBD>嚗?
|
||||
|
||||
添加路径别名配置。
|
||||
瘛餃<EFBFBD>頝臬<EFBFBD><EFBFBD>怠<EFBFBD><EFBFBD>滨蔭<EFBFBD>?
|
||||
|
||||
**验证:** IDE 能识别 `@legacy/*`, `@modules/*` 等路径
|
||||
**撉諹<EFBFBD>嚗?* IDE <20>質<EFBFBD><E8B3AA>?`@legacy/*`, `@modules/*` 蝑㕑楝敺?
|
||||
|
||||
---
|
||||
|
||||
### 第 4 步:开发 ASL 模块(新功能)
|
||||
### 蝚?4 甇伐<E79487>撘<EFBFBD><E69298>?ASL 璅∪<E79285>嚗<EFBFBD>鰵<EFBFBD>蠘<EFBFBD>嚗?
|
||||
|
||||
按新架构标准开发,完全不影响现有模块。
|
||||
<EFBFBD>㗇鰵<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘<EFBFBD><EFBFBD>𡢅<EFBFBD>摰<EFBFBD><EFBFBD>銝滚蔣<EFBFBD>滨緵<EFBFBD>㗇芋<EFBFBD>𨰜<EFBFBD>?
|
||||
|
||||
---
|
||||
|
||||
## ✅ 方案优势
|
||||
## <EFBFBD>?<3F>寞<EFBFBD>隡睃飵
|
||||
|
||||
### 1. **零风险改造**
|
||||
- ✅ 现有代码只移动目录,不修改内容
|
||||
- ✅ 只改一个文件的导入路径
|
||||
- ✅ 可随时回滚
|
||||
### 1. **<EFBFBD>園<EFBFBD><EFBFBD>拇㺿<EFBFBD>?*
|
||||
- <EFBFBD>?<3F>唳<EFBFBD>隞<EFBFBD><E99A9E><EFBFBD>芰宏<E88AB0>函𤌍敶𤏪<E695B6>銝滢耨<E6BBA2>孵<EFBFBD>摰?
|
||||
- <EFBFBD>?<3F>芣㺿銝<E3BABF>銝芣<E98A9D>隞嗥<E99A9E>撖澆<E69296>頝臬<E9A09D>
|
||||
- <EFBFBD>?<3F>舫<EFBFBD><E888AB>嗅<EFBFBD>皛?
|
||||
|
||||
### 2. **清晰的架构边界**
|
||||
### 2. **皜<EFBFBD>苊<EFBFBD><EFBFBD>沲<EFBFBD><EFBFBD>器<EFBFBD>?*
|
||||
```
|
||||
legacy/ ← 旧代码,明确标识
|
||||
modules/ ← 新代码,标准化
|
||||
legacy/ <EFBFBD>?<3F>找誨<E689BE><E8AAA8><EFBFBD><EFBFBD>𡒊&<F0A1928A><EFBC86><EFBFBD>
|
||||
modules/ <EFBFBD>?<3F>唬誨<E594AC><E8AAA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
```
|
||||
|
||||
### 3. **<2A>唳芋<E594B3>埈鰵<E59F88>嗆<EFBFBD>**
|
||||
- ✅ ASL 直接按标准实施
|
||||
- ✅ 成为未来模块的范本
|
||||
- ✅ 不受旧代码约束
|
||||
- <EFBFBD>?ASL <EFBFBD>湔𦻖<EFBFBD>㗇<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>?<3F>𣂷蛹<F0A382B7>芣䔉璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>?銝滚<E98A9D><E6BB9A>找誨<E689BE><E8AAA8>漲<EFBFBD>?
|
||||
|
||||
### 4. **撟單<E6929F>瞍磰<E79E8D>頝臬<E9A09D>**
|
||||
```
|
||||
现在:7个旧模块 + 0个新模块
|
||||
未来:7个旧模块 + 1个新模块(ASL)
|
||||
更远:7个旧模块 + N个新模块
|
||||
<EFBFBD>啣銁嚗?銝芣唂璅∪<E79285> + 0銝芣鰵璅∪<E79285>
|
||||
<EFBFBD>芣䔉嚗?銝芣唂璅∪<E79285> + 1銝芣鰵璅∪<E79285>嚗㇁SL嚗?
|
||||
<EFBFBD>渲<EFBFBD>嚗?銝芣唂璅∪<E79285> + N銝芣鰵璅∪<E79285>
|
||||
<EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD><EFBFBD>厰<EFBFBD><EFBFBD>鞉郊餈<EFBFBD>宏<EFBFBD>扳芋<EFBFBD>梹<EFBFBD><EFBFBD>舫<EFBFBD>㚁<EFBFBD>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 演进时间轴
|
||||
## <EFBFBD>㴓 瞍磰<E79E8D><E7A3B0>園𡢿頧?
|
||||
|
||||
| <20>嗆挾 | <20>園𡢿 | 撌乩<E6928C><E4B9A9><EFBFBD>捆 | 憌𡡞埯 |
|
||||
|------|------|---------|------|
|
||||
| **隞𠰴予** | 15<31><35><EFBFBD> | <20>滨<EFBFBD><E6BBA8>桀<EFBFBD>+<2B>湔鰵<E6B994>亙藁 | <20><><EFBFBD> |
|
||||
| **Week 3** | - | 开发 ASL 模块(新架构) | 无(新功能) |
|
||||
| **Week 4+** | - | 继续开发新模块 | 无 |
|
||||
| **Week 3** | - | 撘<EFBFBD><EFBFBD>?ASL 璅∪<E79285>嚗<EFBFBD>鰵<EFBFBD>嗆<EFBFBD>嚗?| <20>𩤃<EFBFBD><F0A9A483>啣<EFBFBD><E595A3>踝<EFBFBD> |
|
||||
| **Week 4+** | - | 蝏抒賒撘<EFBFBD><EFBFBD>烐鰵璅∪<EFBFBD> | <EFBFBD>?|
|
||||
| **<EFBFBD>芣䔉** | <20>厰<EFBFBD> | <20>鞉郊餈<E9838A>宏<EFBFBD>扳芋<E689B3>梹<EFBFBD><E6A2B9>舫<EFBFBD>㚁<EFBFBD> | <20>舀綉 |
|
||||
|
||||
---
|
||||
|
||||
## 📝 开发规范
|
||||
## <EFBFBD><EFBFBD> 撘<><E69298>𤏸<EFBFBD><F0A48FB8>?
|
||||
|
||||
### Legacy 璅∪<E79285>閫<EFBFBD><E996AB>
|
||||
- ⚠️ **不主动修改**,除非修复bug
|
||||
- <EFBFBD>𩤃<EFBFBD> **銝滢蜓<E6BBA2>其耨<E585B6>?*嚗屸膄<E5B1B8>硺耨憭嵖ug
|
||||
- <20>𩤃<EFBFBD> 靽脲<E99DBD><E884B2>唳<EFBFBD>蝏𤘪<E89D8F>銝滚<E98A9D>
|
||||
- <20>𩤃<EFBFBD> <20>臭誑撘閧鍂 `common/` 撅<><E69285><EFBFBD>賢<EFBFBD>
|
||||
|
||||
### 新模块规范
|
||||
- ✅ 必须按标准三层架构
|
||||
- ✅ 必须使用路径别名
|
||||
- ✅ 必须独立可部署
|
||||
- ✅ 必须有完整的类型定义
|
||||
### <EFBFBD>唳芋<EFBFBD>𡑒<EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>?敹<>◆<EFBFBD>㗇<EFBFBD><E39787><EFBFBD><EFBFBD>撅<EFBFBD>沲<EFBFBD>?
|
||||
- <EFBFBD>?敹<>◆雿輻鍂頝臬<E9A09D><E887AC>怠<EFBFBD>
|
||||
- <EFBFBD>?敹<>◆<EFBFBD>祉<EFBFBD><E7A589>舫<EFBFBD>蝵?
|
||||
- <EFBFBD>?敹<>◆<EFBFBD>匧<EFBFBD><E58CA7>渡<EFBFBD>蝐餃<E89D90>摰帋<E691B0>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 下一步行动
|
||||
## <EFBFBD><EFBFBD> 銝衤<E98A9D>甇亥<E79487><E4BAA5>?
|
||||
|
||||
1. **今天(15分钟)**:执行第1-3步,完成目录重组
|
||||
2. **明天**:开始 ASL 模块开发(新架构)
|
||||
1. **隞𠰴予嚗?5<><35><EFBFBD>嚗?*嚗𡁏<E59A97>銵𣬚洵1-3甇伐<E79487>摰峕<E691B0><E5B395>桀<EFBFBD><E6A180>滨<EFBFBD>
|
||||
2. **<EFBFBD>𤾸予**嚗𡁜<E59A97>憪?ASL 璅∪<E79285>撘<EFBFBD><E69298>𡢅<EFBFBD><F0A1A285>唳沲<E594B3><E6B2B2><EFBFBD>
|
||||
3. **Week 3**嚗鋫SL 璅∪<E79285>銝羓瑪
|
||||
4. **未来**:新模块持续按标准开发
|
||||
4. **<EFBFBD>芣䔉**嚗𡁏鰵璅∪<E79285><E288AA><EFBFBD>賒<EFBFBD>㗇<EFBFBD><E39787><EFBFBD><EFBFBD><EFBFBD>?
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD>** 2025-11-14
|
||||
**维护者:** 开发团队
|
||||
**蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** 撘<><E69298>穃𣪧<E7A983>?
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user