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%)
1477 lines
65 KiB
Markdown
1477 lines
65 KiB
Markdown
# 鍓嶅悗绔<E68297>ā鍧楀寲鏋舵瀯璁捐<E79281> V2.0
|
||
|
||
> **鐗堟湰锛?* V2.3
|
||
> **鍒涘缓鏃ユ湡锛?* 2025-11-12
|
||
> **瀹炴柦闃舵<E99783>锛?* Week 2~3锛?025-11-13~17锛?
|
||
> **缁存姢鑰咃細** 寮€鍙戝洟闃?
|
||
> **鐘舵€侊細** 鉁?Week 2 Day 6-9 + 骞冲彴鍩虹<E98DA9>璁炬柦 鍏ㄩ儴瀹屾垚 猸愨瓙猸?
|
||
|
||
---
|
||
|
||
## 馃搵 鏂囨。璇存槑
|
||
|
||
鏈<EFBFBD>枃妗f槸**AI涓村簥鐮旂┒骞冲彴鐨勬ā鍧楀寲鏋舵瀯璁捐<E79281>鎬荤翰**锛屽畾涔変簡锛?
|
||
1. **鍓嶇<E98D93>鏋舵瀯**锛氬叏鏂扮殑 frontend-v2 妯″潡鍖栨灦鏋?2. **鍚庣<E98D9A>鏋舵瀯**锛氬熀浜嶴chema闅旂<E99785>鐨勫垎灞傛灦鏋?3. **鍓嶅悗绔<E68297><E7BB94>搴斿叧绯?*锛氭ā鍧楀寲鐨勭粍缁囨柟寮?4. **寮€鍙戣<E98D99>鑼?*锛氱粺涓€鐨勪唬鐮佺粍缁囧拰鍛藉悕瑙勮寖
|
||
5. **瀹炴柦璺<E69FA6>嚎**锛氭笎杩涘紡鐨勬灦鏋勬敼閫犺<E996AB>鍒?
|
||
**閫傜敤瀵硅薄锛?*
|
||
- 鏂板姞鍏ョ殑寮€鍙戜汉鍛橈紙蹇<E7B499>€熶簡瑙g郴缁熸灦鏋勶級
|
||
- AI鍔╂墜锛堢悊瑙d唬鐮佺粍缁囩粨鏋勶級
|
||
- 鎶€鏈<E282AC>喅绛栬€咃紙鏋舵瀯婕旇繘鍙傝€冿級
|
||
|
||
---
|
||
|
||
## 馃幆 鏋舵瀯婕旇繘鍘嗗彶
|
||
|
||
### V1.0 闃舵<E99783>锛?025-10涔嬪墠锛?- 鉂?鍗曚綋鍓嶇<E98D93>搴旂敤锛堟墍鏈夊姛鑳借€﹀悎锛?- 鉂?鍚庣<E98D9A>浠g爜骞抽摵锛堟棤妯″潡鍒掑垎锛?- 鉂?鏁版嵁搴撹〃鍏ㄥ湪public schema
|
||
|
||
### V1.5 闃舵<E99783>锛?025-11-12瀹屾垚锛?- 鉁?**鏁版嵁搴揝chema闅旂<E99785>**锛?0涓猄chema锛?- 鉁?Prisma澶歋chema閰嶇疆
|
||
- 鉁?鏁版嵁100%杩佺Щ鎴愬姛
|
||
- 鈿狅笍 鍓嶅悗绔<E68297>唬鐮佷粛闇€妯″潡鍖?
|
||
### V2.0 闃舵<E99783>锛?025-11-13~14瀹屾垚锛夆瓙
|
||
- 鉁?**鍓嶇<E98D93>妯″潡鍖栨灦鏋?*锛坒rontend-v2锛? Day 6-7瀹屾垚
|
||
- 鉁?**妯″潡娉ㄥ唽鏈哄埗**锛堟潈闄愭帶鍒?閿欒<E996BF>杈圭晫+璺<>敱瀹堝崼锛? Day 7瀹屾垚
|
||
- 鉁?**鍚庣<E98D9A>澧為噺婕旇繘鏋舵瀯**锛坙egacy/common/modules锛? Day 8-9瀹屾垚
|
||
- 鉁?鍓嶅悗绔<E68297>ā鍧楀<E98DA7>搴?- 鉁?鏀<>寔妯″潡鐙<E6BDA1>珛寮€鍙戝拰閮ㄧ讲
|
||
- 鉁?**鎵€鏈夊姛鑳芥祴璇曢€氳繃**锛堝寘鎷<E5AF98>壒澶勭悊淇<E6828A><E6B787>锛夆瓙猸愨瓙
|
||
|
||
### V2.1 闃舵<E99783>锛?025-11-17瀹屾垚锛夆瓙猸愨瓙 鏈€鏂?- 鉁?**骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦瀹屾垚**锛?涓<>牳蹇冩ā鍧楋級
|
||
- 鉁?**瀛樺偍鏈嶅姟**锛歀ocalAdapter + OSSAdapter锛堥<E9949B>鐣欙級
|
||
- 鉁?**鏃ュ織绯荤粺**锛歐inston + 缁撴瀯鍖朖SON鏃ュ織
|
||
- 鉁?**缂撳瓨鏈嶅姟**锛歁emoryCache + Redis锛堥<E9949B>鐣欙級
|
||
- 鉁?**寮傛<E5AFAE>浠诲姟**锛歁emoryQueue + DatabaseQueue锛堥<E9949B>鐣欙級
|
||
- 鉁?**鍋ュ悍妫€鏌?*锛歀iveness + Readiness + 璇︾粏妫€鏌?- 鉁?**鐩戞帶鎸囨爣**锛氭暟鎹<E69A9F>簱杩炴帴/鍐呭瓨/API鐩戞帶
|
||
- 鉁?**鏁版嵁搴撹繛鎺ユ睜**锛歋erverless浼樺寲锛堥槻姝㈣繛鎺ユ暟瓒呴檺锛?- 鉁?**鐜<><E9909C>閰嶇疆绠$悊**锛氱粺涓€鐨勯厤缃<E58EA4>姞杞藉拰楠岃瘉
|
||
- 鉁?**閫傞厤鍣ㄦā寮?*锛氶浂浠g爜鐜<E7889C><E9909C>鍒囨崲锛堟湰鍦?鈫?浜戠<E6B59C>锛?- 鉁?**鍏ㄩ儴娴嬭瘯楠岃瘉閫氳繃**锛?00%娴嬭瘯瑕嗙洊鐜?- 鉁?**浠g爜缁熻<E7BC81>**锛?,532琛屾柊浠g爜锛?2涓<32>柊鏂囦欢
|
||
- 鉁?**鏂囨。瀹屽杽**锛?1涓<31>枃妗f洿鏂帮紝3涓<33>姤鍛婄敓鎴?
|
||
**鏍稿績鎴愭灉锛?*
|
||
- 馃幆 涓轰簯鍘熺敓閮ㄧ讲锛堥樋閲屼簯SAE锛夊仛濂藉噯澶?- 馃幆 ASL妯″潡寮€鍙戝彲鐩存帴浣跨敤骞冲彴鑳藉姏
|
||
- 馃幆 鏀<>寔鏈<E5AF94>湴寮€鍙戝拰浜戠<E6B59C>閮ㄧ讲鏃犵紳鍒囨崲
|
||
|
||
---
|
||
|
||
## 馃摳 褰撳墠鏋舵瀯鐪熷疄鐘舵€侊紙2025-11-17锛?
|
||
> **猸?閲嶈<E996B2>鎻愮ず锛氭湰绔犺妭鎻忚堪褰撳墠瀹為檯杩愯<E69DA9>鐨勬灦鏋勭姸鎬?*
|
||
> **閫傜敤瀵硅薄锛氭柊寮€鍙戜汉鍛樸€佹柊AI鍔╂墜銆佸揩閫熶笂鎵?*
|
||
> **鏇存柊棰戠巼锛氭灦鏋勫彉鏇存椂绔嬪嵆鏇存柊**
|
||
|
||
---
|
||
|
||
### 馃幆 鏋舵瀯姒傝<E5A792>
|
||
|
||
```
|
||
銆愬綋鍓嶇姸鎬併€戝<EFBFBD>閲忔紨杩涙灦鏋勶紙鏂版棫骞跺瓨锛?
|
||
Frontend-v2 (鏂? Backend (娣峰悎) Database (闅旂<E99785>)
|
||
鈫? 鈫? 鈫?椤堕儴瀵艰埅 + 6妯″潡 legacy/ + common/ 10涓<30>嫭绔?Schema
|
||
鍗犱綅 + modules/asl (3璇︾粏 + 7绌?
|
||
```
|
||
|
||
**鏍稿績绛栫暐锛?*
|
||
- 鉁?鍓嶇<E98D93>锛氬叏鏂版灦鏋勶紙frontend-v2锛?- 鉁?鍚庣<E98D9A>锛氭柊鏃у苟瀛橈紙legacy淇濇寔绋冲畾锛屾柊妯″潡鏍囧噯鍖栵級
|
||
- 鉁?鏁版嵁搴擄細Schema闅旂<E99785>瀹屾垚
|
||
|
||
---
|
||
|
||
### 馃搧 鍓嶇<E98D93>鐪熷疄鏋舵瀯锛團rontend-v2锛?
|
||
#### **鐩<>綍缁撴瀯锛堝疄闄呭瓨鍦<E793A8>級**
|
||
|
||
```bash
|
||
frontend-v2/
|
||
鈹溾攢鈹€ src/
|
||
鈹? 鈹溾攢鈹€ framework/ # 馃彈锔?妗嗘灦灞傦紙宸插疄鐜帮級
|
||
鈹? 鈹? 鈹溾攢鈹€ layout/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ MainLayout.tsx # 鉁?涓诲竷灞€
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ TopNavigation.tsx # 鉁?椤堕儴瀵艰埅
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ UserMenu.tsx # 鉁?鐢ㄦ埛鑿滃崟
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ modules/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ moduleRegistry.ts # 鉁?妯″潡娉ㄥ唽涓<E594BD>績
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ ErrorBoundary.tsx # 鉁?閿欒<E996BF>杈圭晫
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ModuleErrorFallback.tsx # 鉁?閿欒<E996BF>鍥為€€UI
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ router/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ RouteGuard.tsx # 鉁?璺<>敱瀹堝崼
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ PermissionDenied.tsx # 鉁?鏉冮檺鎷掔粷椤?鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ permission/
|
||
鈹? 鈹? 鈹溾攢鈹€ PermissionContext.tsx # 鉁?鏉冮檺涓婁笅鏂?鈹? 鈹? 鈹溾攢鈹€ usePermission.ts # 鉁?鏉冮檺Hook
|
||
鈹? 鈹? 鈹斺攢鈹€ types.ts # 鉁?鏉冮檺绫诲瀷
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ modules/ # 馃摝 涓氬姟妯″潡锛堝崰浣嶏級
|
||
鈹? 鈹? 鈹溾攢鈹€ asl/ # 馃毀 Week 3寮€鍙?鈹? 鈹? 鈹? 鈹斺攢鈹€ index.tsx # 鉁?鍗犱綅椤甸潰
|
||
鈹? 鈹? 鈹溾攢鈹€ aia/ # 馃搵 鍗犱綅
|
||
鈹? 鈹? 鈹溾攢鈹€ pkb/ # 馃搵 鍗犱綅
|
||
鈹? 鈹? 鈹溾攢鈹€ dc/ # 馃搵 鍗犱綅
|
||
鈹? 鈹? 鈹溾攢鈹€ ssa/ # 馃搵 鍗犱綅
|
||
鈹? 鈹? 鈹斺攢鈹€ st/ # 馃搵 鍗犱綅
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ pages/
|
||
鈹? 鈹? 鈹斺攢鈹€ Home.tsx # 鉁?棣栭〉
|
||
鈹? 鈹?鈹? 鈹斺攢鈹€ App.tsx # 鉁?搴旂敤鍏ュ彛
|
||
鈹?鈹溾攢鈹€ package.json # 鉁?React 19
|
||
鈹斺攢鈹€ vite.config.ts # 鉁?Vite閰嶇疆
|
||
```
|
||
|
||
**褰撳墠杩愯<E69DA9>鐘舵€侊細**
|
||
- 鉁?璁块棶鍦板潃锛歨ttp://localhost:3000
|
||
- 鉁?椤堕儴瀵艰埅鏄剧ず6涓<36>ā鍧?- 鉁?鏉冮檺鎺у埗宸ヤ綔姝e父锛坢ock premium鐢ㄦ埛锛?- 鉁?璺<>敱瀹堝崼鐢熸晥
|
||
- 鉁?閿欒<E996BF>杈圭晫姝e父鎹曡幏
|
||
|
||
---
|
||
|
||
### 馃梽锔?鍚庣<E98D9A>鐪熷疄鏋舵瀯锛圔ackend锛?
|
||
#### **鐩<>綍缁撴瀯锛堝疄闄呭瓨鍦<E793A8>級猸?鍏抽敭**
|
||
|
||
```bash
|
||
backend/
|
||
鈹溾攢鈹€ src/
|
||
鈹? 鈹溾攢鈹€ legacy/ # 馃敻 鐜版湁涓氬姟浠g爜锛堢ǔ瀹氳繍琛岋級
|
||
鈹? 鈹? 鈹溾攢鈹€ routes/ # 7涓<37>矾鐢辨枃浠?鈹? 鈹? 鈹? 鈹溾攢鈹€ agents.ts # AIA: 鏅鸿兘浣撹矾鐢?鈹? 鈹? 鈹? 鈹溾攢鈹€ conversations.ts # AIA: 瀵硅瘽璺<E798BD>敱
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ chatRoutes.ts # AIA: 閫氱敤瀵硅瘽璺<E798BD>敱
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ projects.ts # AIA: 椤圭洰璺<E6B4B0>敱
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ knowledgeBases.ts # PKB: 鐭ヨ瘑搴撹矾鐢?鈹? 鈹? 鈹? 鈹溾攢鈹€ batchRoutes.ts # PKB: 鎵瑰<E98EB5>鐞嗚矾鐢?鈹? 鈹? 鈹? 鈹斺攢鈹€ reviewRoutes.ts # RVW: 绋夸欢瀹℃煡璺<E785A1>敱
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ controllers/ # 8涓<38>帶鍒跺櫒
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ agentController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ conversationController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ chatController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ projectController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ documentController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ batchController.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ reviewController.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ services/ # 8涓<38>湇鍔?鈹? 鈹? 鈹? 鈹溾攢鈹€ agentService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ conversationService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ projectService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ documentService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ batchService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ reviewService.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ tokenService.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ templates/
|
||
鈹? 鈹? 鈹斺攢鈹€ clinicalResearch.ts # 鎵瑰<E98EB5>鐞嗘ā鏉?鈹? 鈹?鈹? 鈹溾攢鈹€ common/ # 馃敡 閫氱敤鑳藉姏灞傦紙鍏变韩锛? 猸?骞冲彴鍩虹<E98DA9>璁炬柦锛堜簯鍘熺敓锛?鈹? 鈹? 鈹? # 馃搵 璇﹁<E79287>锛歞ocs/09-鏋舵瀯瀹炴柦/04-骞冲彴鍩虹<E98DA9>璁炬柦瑙勫垝.md
|
||
鈹? 鈹? 鈹溾攢鈹€ llm/
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ adapters/ # LLM閫傞厤鍣?鈹? 鈹? 鈹? 鈹溾攢鈹€ DeepSeekAdapter.ts # 鉁?DeepSeek-V3
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ QwenAdapter.ts # 鉁?Qwen3-72B + Qwen-Long
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ LLMFactory.ts # 鉁?宸ュ巶绫?鈹? 鈹? 鈹? 鈹斺攢鈹€ types.ts # 鉁?LLM绫诲瀷瀹氫箟
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ rag/ # RAG鑳藉姏
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ DifyClient.ts # 鉁?Dify瀹㈡埛绔?鈹? 鈹? 鈹? 鈹斺攢鈹€ types.ts # 鉁?RAG绫诲瀷
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ document/ # 鏂囨。澶勭悊
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ExtractionClient.ts # 鉁?鏂囨。鎻愬彇瀹㈡埛绔?鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ storage/ # 猸?瀛樺偍鎶借薄灞傦紙浜戝師鐢燂級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ StorageAdapter.ts # 猸?鎺ュ彛瀹氫箟
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ LocalAdapter.ts # 猸?鏈<>湴瀹炵幇
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ OSSAdapter.ts # 猸?OSS瀹炵幇
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ StorageFactory.ts # 猸?宸ュ巶绫?鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?缁熶竴瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ logging/ # 猸?鏃ュ織绯荤粺锛堜簯鍘熺敓锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ logger.ts # 猸?Winston鏃ュ織閰嶇疆
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ cache/ # 猸?缂撳瓨鏈嶅姟锛堜簯鍘熺敓锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ CacheAdapter.ts # 猸?鎺ュ彛瀹氫箟
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ MemoryCacheAdapter.ts # 猸?鍐呭瓨瀹炵幇
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ RedisCacheAdapter.ts # 猸?Redis瀹炵幇
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ CacheFactory.ts # 猸?宸ュ巶绫?鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ jobs/ # 猸?寮傛<E5AFAE>浠诲姟锛堜簯鍘熺敓锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ types.ts # 猸?浠诲姟绫诲瀷瀹氫箟锛圝ob/JobQueue鎺ュ彛锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ MemoryQueue.ts # 猸?鍐呭瓨闃熷垪瀹炵幇
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ JobFactory.ts # 猸?闃熷垪宸ュ巶绫?鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?缁熶竴瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ health/ # 猸?鍋ュ悍妫€鏌ワ紙浜戝師鐢燂級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ healthCheck.ts # 猸?鍋ュ悍妫€鏌ヨ矾鐢?鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ monitoring/ # 猸?鐩戞帶鎸囨爣锛堜簯鍘熺敓锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ metrics.ts # 猸?鎸囨爣鏀堕泦
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts # 猸?瀵煎嚭
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ middleware/
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ validateProject.ts # 鉁?椤圭洰楠岃瘉涓<E79889>棿浠?鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ utils/
|
||
鈹? 鈹? 鈹斺攢鈹€ jsonParser.ts # 鉁?JSON瑙f瀽宸ュ叿
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ modules/ # 馃専 鏂版灦鏋勬ā鍧楋紙鏍囧噯鍖栵級
|
||
鈹? 鈹? 鈹斺攢鈹€ asl/ # 猸?AI鏅鸿兘鏂囩尞锛堝崰浣嶏紝Week 3寮€鍙戯級
|
||
鈹? 鈹? 鈹斺攢鈹€ (绌虹洰褰曪紝绛夊緟寮€鍙?
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ config/ # 鈿欙笍 閰嶇疆灞?鈹? 鈹? 鈹溾攢鈹€ database.ts # 鉁?鏁版嵁搴撻厤缃<E58EA4>紙猸?浜戝師鐢熻繛鎺ユ睜浼樺寲锛?鈹? 鈹? 鈹斺攢鈹€ env.ts # 鉁?鐜<><E9909C>鍙橀噺绠$悊锛堚瓙 缁熶竴閰嶇疆鍔犺浇锛?鈹? 鈹?鈹? 鈹溾攢鈹€ scripts/ # 馃洜锔?宸ュ叿鑴氭湰
|
||
鈹? 鈹? 鈹溾攢鈹€ create-mock-user.ts
|
||
鈹? 鈹? 鈹溾攢鈹€ test-dify-client.ts
|
||
鈹? 鈹? 鈹斺攢鈹€ test-platform-infrastructure.ts # 猸?骞冲彴鍩虹<E98DA9>璁炬柦娴嬭瘯
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ test-platform-api.ts # 猸?涓存椂娴嬭瘯API锛?test/platform锛?鈹? 鈹?鈹? 鈹斺攢鈹€ index.ts # 鉁?涓诲叆鍙o紙缁熶竴娉ㄥ唽锛?鈹?鈹溾攢鈹€ config/ # 澶栭儴閰嶇疆鏂囦欢
|
||
鈹? 鈹斺攢鈹€ agents.yaml # 鉁?鏅鸿兘浣撻厤缃<E58EA4>紙348琛岋級
|
||
鈹?鈹溾攢鈹€ prompts/ # Prompt妯℃澘
|
||
鈹? 鈹溾攢鈹€ topic_evaluation_system.txt
|
||
鈹? 鈹溾攢鈹€ review_editorial_system.txt
|
||
鈹? 鈹斺攢鈹€ review_methodology_system.txt
|
||
鈹?鈹溾攢鈹€ prisma/
|
||
鈹? 鈹溾攢鈹€ schema.prisma # 鉁?10涓猄chema瀹氫箟
|
||
鈹? 鈹斺攢鈹€ migrations/ # 鉁?4涓<34>縼绉绘枃浠?鈹?鈹溾攢鈹€ package.json # 鉁?Fastify + Prisma
|
||
鈹斺攢鈹€ .env # 鉁?鐜<><E9909C>鍙橀噺
|
||
```
|
||
|
||
**褰撳墠杩愯<E69DA9>鐘舵€侊細**
|
||
- 鉁?璁块棶鍦板潃锛歨ttp://localhost:3001
|
||
- 鉁?鍋ュ悍妫€鏌ワ細http://localhost:3001/health (绠€鍖栫増)
|
||
- 鉁?鍋ュ悍妫€鏌ワ紙璇︾粏锛夛細http://localhost:3001/health/liveness
|
||
- 鉁?鍋ュ悍妫€鏌ワ紙璇︾粏锛夛細http://localhost:3001/health/readiness
|
||
- 鉁?娴嬭瘯API锛歨ttp://localhost:3001/test/platform 锛堥獙璇佸钩鍙板熀纭€璁炬柦锛?- 鉁?Legacy妯″潡锛圓IA/PKB/RVW锛夋<E9949B>甯歌繍琛?- 鉁?Common灞傞€氱敤鑳藉姏鍙<E5A78F>敤
|
||
- 鉁?**猸?骞冲彴鍩虹<E98DA9>璁炬柦**锛?涓<>ā鍧楀叏閮ㄦ祴璇曢€氳繃锛?00%锛?- 鉁?Modules/asl 鍗犱綅灏辩华锛岀瓑寰匴eek 3寮€鍙?
|
||
**涓诲叆鍙o紙index.ts锛夊疄闄呬唬鐮侊細**
|
||
```typescript
|
||
// ============================================
|
||
// 銆愭棫鏋舵瀯銆慙egacy 妯″潡 - 淇濇寔涓嶅彉
|
||
// ============================================
|
||
import { projectRoutes } from './legacy/routes/projects.js';
|
||
import { agentRoutes } from './legacy/routes/agents.js';
|
||
import { conversationRoutes } from './legacy/routes/conversations.js';
|
||
import knowledgeBaseRoutes from './legacy/routes/knowledgeBases.js';
|
||
import { chatRoutes } from './legacy/routes/chatRoutes.js';
|
||
import { batchRoutes } from './legacy/routes/batchRoutes.js';
|
||
import reviewRoutes from './legacy/routes/reviewRoutes.js';
|
||
|
||
// 娉ㄥ唽 Legacy 妯″潡璺<E6BDA1>敱
|
||
await fastify.register(projectRoutes, { prefix: '/api/v1/aia' });
|
||
await fastify.register(agentRoutes, { prefix: '/api/v1/aia' });
|
||
await fastify.register(conversationRoutes, { prefix: '/api/v1/aia' });
|
||
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' });
|
||
```
|
||
|
||
---
|
||
|
||
### 馃梼锔?鏁版嵁搴撶湡瀹炴灦鏋勶紙PostgreSQL 15锛?
|
||
#### **Schema 缁撴瀯锛堝疄闄呭瓨鍦<E793A8>級**
|
||
|
||
```sql
|
||
-- ==================== 骞冲彴灞?Schema ====================
|
||
platform_schema (骞冲彴鍩虹<EFBFBD>琛?
|
||
鈹斺攢鈹€ users # 鉁?鐢ㄦ埛琛<EFBFBD>紙宸插疄鐜帮級
|
||
|
||
-- ==================== 璇︾粏 Schema锛堟暟鎹<E69A9F>凡杩佺Щ锛?===================
|
||
aia_schema (AI鏅鸿兘闂<EFBFBD>瓟)
|
||
鈹溾攢鈹€ projects # 鉁?椤圭洰琛? 鈹溾攢鈹€ agents # 鉁?鏅鸿兘浣撻厤缃<EFBFBD>〃
|
||
鈹溾攢鈹€ conversations # 鉁?瀵硅瘽琛? 鈹斺攢鈹€ messages # 鉁?娑堟伅琛?
|
||
pkb_schema (涓<EFBFBD>汉鐭ヨ瘑搴?
|
||
鈹溾攢鈹€ knowledge_bases # 鉁?鐭ヨ瘑搴撹〃
|
||
鈹溾攢鈹€ documents # 鉁?鏂囨。琛? 鈹溾攢鈹€ batch_tasks # 鉁?鎵瑰<EFBFBD>鐞嗕换鍔¤〃
|
||
鈹溾攢鈹€ batch_results # 鉁?鎵瑰<EFBFBD>鐞嗙粨鏋滆〃
|
||
鈹斺攢鈹€ task_templates # 鉁?浠诲姟妯℃澘琛?
|
||
rvw_schema (绋夸欢瀹℃煡)
|
||
鈹溾攢鈹€ review_tasks # 鉁?瀹℃煡浠诲姟琛? 鈹斺攢鈹€ (鍦╬ublic schema涓? # 鈿狅笍 鍘嗗彶鍘熷洜
|
||
|
||
-- ==================== 鍗犱綅 Schema锛堟暟鎹<E69A9F>粨鏋勬湭瀹氫箟锛?===================
|
||
asl_schema (AI鏅鸿兘鏂囩尞) # 馃毀 Week 3寮€鍙? 鈹斺攢鈹€ (绌猴紝绛夊緟瀹氫箟)
|
||
|
||
common_schema (閫氱敤宸ュ叿) # 馃搵 鍗犱綅
|
||
dc_schema (鏁版嵁閲囬泦) # 馃搵 鍗犱綅
|
||
ssa_schema (缁熻<EFBFBD>鍒嗘瀽) # 馃搵 鍗犱綅
|
||
st_schema (鐮旂┒宸ュ叿) # 馃搵 鍗犱綅
|
||
admin_schema (杩愯惀绠$悊) # 馃搵 鍗犱綅
|
||
```
|
||
|
||
**Prisma Schema 閰嶇疆锛?*
|
||
```prisma
|
||
datasource db {
|
||
provider = "postgresql"
|
||
url = env("DATABASE_URL")
|
||
schemas = [
|
||
"platform_schema", # 鉁?骞冲彴
|
||
"aia_schema", # 鉁?鏅鸿兘闂<E58598>瓟
|
||
"pkb_schema", # 鉁?鐭ヨ瘑搴? "asl_schema", # 馃毀 鏅鸿兘鏂囩尞锛圵eek 3锛? "common_schema", # 馃搵 鍗犱綅
|
||
"dc_schema", # 馃搵 鍗犱綅
|
||
"rvw_schema", # 馃搵 鍗犱綅
|
||
"admin_schema", # 馃搵 鍗犱綅
|
||
"ssa_schema", # 馃搵 鍗犱綅
|
||
"st_schema", # 馃搵 鍗犱綅
|
||
"public" # 鉁?鍘嗗彶閬楃暀
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 馃攲 API 鐪熷疄璺<E79684>敱锛堝綋鍓嶅彲鐢<E5BDB2>級
|
||
|
||
#### **AIA 妯″潡锛圓I鏅鸿兘闂<E58598>瓟锛?*
|
||
```
|
||
鍩虹<EFBFBD>璺<EFBFBD>緞锛?api/v1/aia
|
||
|
||
椤圭洰绠$悊锛? 鉁?GET /projects # 鑾峰彇椤圭洰鍒楄〃
|
||
鉁?POST /projects # 鍒涘缓椤圭洰
|
||
鉁?GET /projects/:id # 鑾峰彇椤圭洰璇︽儏
|
||
鉁?PUT /projects/:id # 鏇存柊椤圭洰
|
||
鉁?DELETE /projects/:id # 鍒犻櫎椤圭洰
|
||
|
||
鏅鸿兘浣撶<EFBFBD>鐞嗭細
|
||
鉁?GET /agents # 鑾峰彇鏅鸿兘浣撳垪琛? 鉁?GET /agents/enabled # 鑾峰彇鍚<E5BD87>敤鐨勬櫤鑳戒綋
|
||
鉁?GET /agents/:id # 鑾峰彇鏅鸿兘浣撹<E6B5A3>鎯?
|
||
瀵硅瘽绠$悊锛? 鉁?POST /conversations # 鍒涘缓瀵硅瘽
|
||
鉁?GET /conversations # 鑾峰彇瀵硅瘽鍒楄〃
|
||
鉁?GET /conversations/:id # 鑾峰彇瀵硅瘽璇︽儏
|
||
鉁?POST /conversations/:id/messages/stream # 娴佸紡鍙戦€佹秷鎭? 鉁?POST /conversations/:id/messages # 闈炴祦寮忓彂閫佹秷鎭? 鉁?DELETE /conversations/:id # 鍒犻櫎瀵硅瘽
|
||
|
||
閫氱敤瀵硅瘽锛? 鉁?POST /chat/stream # 閫氱敤娴佸紡瀵硅瘽
|
||
鉁?POST /chat # 閫氱敤闈炴祦寮忓<E5AFAE>璇?```
|
||
|
||
#### **PKB 妯″潡锛堜釜浜虹煡璇嗗簱锛?*
|
||
```
|
||
鍩虹<EFBFBD>璺<EFBFBD>緞锛?api/v1/pkb
|
||
|
||
鐭ヨ瘑搴撶<EFBFBD>鐞嗭細
|
||
鉁?GET /knowledge-bases # 鑾峰彇鐭ヨ瘑搴撳垪琛? 鉁?POST /knowledge-bases # 鍒涘缓鐭ヨ瘑搴? 鉁?GET /knowledge-bases/:id # 鑾峰彇鐭ヨ瘑搴撹<E690B4>鎯? 鉁?PUT /knowledge-bases/:id # 鏇存柊鐭ヨ瘑搴? 鉁?DELETE /knowledge-bases/:id # 鍒犻櫎鐭ヨ瘑搴?
|
||
鏂囨。绠$悊锛? 鉁?POST /knowledge-bases/:id/documents # 涓婁紶鏂囨。
|
||
鉁?GET /knowledge-bases/:id/documents # 鑾峰彇鏂囨。鍒楄〃
|
||
鉁?DELETE /knowledge-bases/:kbId/documents/:docId # 鍒犻櫎鏂囨。
|
||
|
||
鎵瑰<EFBFBD>鐞嗭細
|
||
鉁?POST /batch/execute # 鎵ц<E98EB5>鎵瑰<E98EB5>鐞嗕换鍔? 鉁?GET /batch/tasks/:taskId # 鑾峰彇浠诲姟鐘舵€? 鉁?GET /batch/tasks/:taskId/results # 鑾峰彇浠诲姟缁撴灉
|
||
鉁?POST /batch/tasks/:taskId/retry-failed # 閲嶈瘯澶辫触椤?```
|
||
|
||
#### **RVW 妯″潡锛堢ǹ浠跺<E6B5A0>鏌ワ級**
|
||
```
|
||
鍩虹<EFBFBD>璺<EFBFBD>緞锛?api/v1/rvw
|
||
|
||
绋夸欢瀹℃煡锛? 鉁?POST /review/upload # 涓婁紶绋夸欢骞跺紑濮嬪<E6BFAE>鏌? 鉁?GET /review/tasks/:taskId # 鏌ヨ<E98F8C>浠诲姟鐘舵€? 鉁?GET /review/tasks/:taskId/report # 鑾峰彇瀹屾暣鎶ュ憡
|
||
鉁?GET /review/tasks # 鑾峰彇浠诲姟鍒楄〃
|
||
鉁?DELETE /review/tasks/:taskId # 鍒犻櫎浠诲姟
|
||
```
|
||
|
||
#### **绯荤粺绔<E7B2BA>偣**
|
||
```
|
||
鉁?GET /health # 鍋ュ悍妫€鏌?鉁?GET /api/v1 # API淇℃伅
|
||
```
|
||
|
||
---
|
||
|
||
### 馃搳 鎶€鏈<E282AC>爤鐪熷疄閰嶇疆
|
||
|
||
#### **鍓嶇<E98D93>锛團rontend-v2锛?*
|
||
```json
|
||
{
|
||
"react": "^19.0.0",
|
||
"react-dom": "^19.0.0",
|
||
"react-router-dom": "^6.x",
|
||
"typescript": "^5.x",
|
||
"vite": "^6.x",
|
||
"antd": "^5.x",
|
||
"tailwindcss": "^3.x"
|
||
}
|
||
```
|
||
|
||
#### **鍚庣<E98D9A>锛圔ackend锛?*
|
||
```json
|
||
{
|
||
"fastify": "^4.x",
|
||
"typescript": "^5.x",
|
||
"prisma": "^6.17.0",
|
||
"@prisma/client": "^6.17.0",
|
||
"tsx": "^4.x",
|
||
"axios": "^1.x",
|
||
"js-yaml": "^4.x",
|
||
"p-queue": "^8.x"
|
||
}
|
||
```
|
||
|
||
#### **鏁版嵁搴?*
|
||
```
|
||
PostgreSQL: 15.x
|
||
Schema鏁伴噺: 10涓<30>紙3璇︾粏 + 7鍗犱綅锛?杩佺Щ鏂囦欢: 4涓?```
|
||
|
||
#### **LLM 闆嗘垚锛圕loseAI锛?*
|
||
```
|
||
鉁?DeepSeek-V3 (涓诲姏锛屾€т环姣?
|
||
鉁?Qwen3-72B (澶囩敤锛屼腑鏂囩悊瑙?
|
||
鉁?Qwen-Long (瓒呴暱涓婁笅鏂?M)
|
||
鉁?GPT-4o (鍙<>€夛紝楂樿川閲?
|
||
```
|
||
|
||
---
|
||
|
||
### 馃攧 鍓嶅悗绔<E68297>ā鍧楀<E98DA7>搴斿叧绯伙紙褰撳墠锛?
|
||
| 鍓嶇<E98D93>妯″潡 | 鍚庣<E98D9A>浣嶇疆 | 鏁版嵁搴揝chema | API璺<49>敱 | 鐘舵€?|
|
||
|---------|---------|-------------|---------|------|
|
||
| frontend-v2/modules/asl/ | backend/modules/asl/ | asl_schema | /api/v1/asl/* | 馃毀 Week 3寮€鍙?|
|
||
| frontend-v2/modules/aia/ | backend/legacy/routes/agents.ts绛?| aia_schema | /api/v1/aia/* | 鉁?杩愯<E69DA9>涓?|
|
||
| frontend-v2/modules/pkb/ | backend/legacy/routes/knowledgeBases.ts绛?| pkb_schema | /api/v1/pkb/* | 鉁?杩愯<E69DA9>涓?|
|
||
| frontend-v2/modules/rvw/ | backend/legacy/routes/reviewRoutes.ts | public + rvw_schema | /api/v1/rvw/* | 鉁?杩愯<E69DA9>涓?|
|
||
| frontend-v2/modules/dc/ | (鏈<>疄鐜? | dc_schema | /api/v1/dc/* | 馃搵 鍗犱綅 |
|
||
| frontend-v2/modules/ssa/ | (鏈<>疄鐜? | ssa_schema | /api/v1/ssa/* | 馃搵 鍗犱綅 |
|
||
| frontend-v2/modules/st/ | (鏈<>疄鐜? | st_schema | /api/v1/st/* | 馃搵 鍗犱綅 |
|
||
|
||
---
|
||
|
||
### 馃搵 鍔熻兘娴嬭瘯娓呭崟锛堝凡楠岃瘉锛?
|
||
| 鍔熻兘 | 娴嬭瘯椤?| 鐘舵€?| 澶囨敞 |
|
||
|------|--------|------|------|
|
||
| 鏅鸿兘闂<E58598>瓟 | 鍒涘缓椤圭洰 | 鉁?| |
|
||
| 鏅鸿兘闂<E58598>瓟 | 瀵硅瘽妯″紡 | 鉁?| 娴佸紡+闈炴祦寮?|
|
||
| 鏅鸿兘闂<E58598>瓟 | 鐭ヨ瘑搴撴ā寮?| 鉁?| RAG妫€绱?|
|
||
| 鏅鸿兘闂<E58598>瓟 | 鎵瑰<E98EB5>鐞嗘ā寮?| 鉁?| 淇<><E6B787>rawOutput闂<74><E99782>鍚庢<E98D9A>甯?|
|
||
| 鐭ヨ瘑搴?| 鍒涘缓鐭ヨ瘑搴?| 鉁?| |
|
||
| 鐭ヨ瘑搴?| 涓婁紶鏂囨。 | 鉁?| PDF/Word/TXT/MD |
|
||
| 鐭ヨ瘑搴?| 鏂囨。绠$悊 | 鉁?| 鍒楄〃/鍒犻櫎 |
|
||
| 绋夸欢瀹℃煡 | 涓婁紶绋夸欢 | 鉁?| |
|
||
| 绋夸欢瀹℃煡 | 瀹℃煡鎶ュ憡 | 鉁?| |
|
||
| 鍓嶇<E98D93> | 椤堕儴瀵艰埅 | 鉁?| 6涓<36>ā鍧?|
|
||
| 鍓嶇<E98D93> | 鏉冮檺鎺у埗 | 鉁?| mock premium |
|
||
| 鍓嶇<E98D93> | 璺<>敱瀹堝崼 | 鉁?| |
|
||
| 鍓嶇<E98D93> | 閿欒<E996BF>杈圭晫 | 鉁?| |
|
||
|
||
---
|
||
|
||
### 馃幆 鏂版ā鍧楀紑鍙戞寚鍗楋紙浠<E7B499>SL涓轰緥锛?
|
||
#### **寮€鍙戞祦绋嬶紙Week 3锛夛細**
|
||
|
||
```
|
||
绗?姝ワ細鏁版嵁搴撹<E690B4>璁? 鈹溾攢 璁捐<E79281> asl_schema 琛ㄧ粨鏋? 鈹溾攢 鍦?Prisma schema 涓<>畾涔夋ā鍨? 鈹斺攢 杩愯<E69DA9>杩佺Щ鍒涘缓琛?
|
||
绗?姝ワ細鍚庣<E98D9A>寮€鍙? 鈹溾攢 鍦?backend/src/modules/asl/ 涓嬪紑鍙? 鈹溾攢 鍒涘缓 routes/锛堣矾鐢憋級
|
||
鈹溾攢 鍒涘缓 controllers/锛堟帶鍒跺櫒锛? 鈹溾攢 鍒涘缓 services/锛堟湇鍔★級
|
||
鈹斺攢 娉ㄥ唽璺<E594BD>敱鍒?index.ts
|
||
|
||
绗?姝ワ細鍓嶇<E98D93>寮€鍙? 鈹溾攢 鍦?frontend-v2/src/modules/asl/ 涓嬪紑鍙? 鈹溾攢 鍒涘缓 pages/锛堥〉闈<E38089>級
|
||
鈹溾攢 鍒涘缓 components/锛堢粍浠讹級
|
||
鈹溾攢 鍒涘缓 api/锛圓PI璋冪敤锛? 鈹斺攢 鏇存柊 index.tsx锛堟ā鍧楁敞鍐岋級
|
||
|
||
绗?姝ワ細鑱旇皟娴嬭瘯
|
||
鈹溾攢 鍓嶅悗绔<E68297>仈璋? 鈹斺攢 鍔熻兘楠屾敹
|
||
```
|
||
|
||
---
|
||
|
||
### 馃摎 鐩稿叧鏂囨。绱㈠紩
|
||
|
||
**蹇<>€熶笂鎵嬶細**
|
||
- 猸?**鏈<>枃妗?* - 鏋舵瀯鎬荤翰 + 褰撳墠鐘舵€?- 猸?`docs/09-鏋舵瀯瀹炴柦/鍚庣<E98D9A>鏋舵瀯澧為噺婕旇繘鏂规<E98F82>.md` - 鍚庣<E98D9A>璇︾粏璇存槑锛?50琛岋級
|
||
|
||
**浠诲姟璁板綍锛?*
|
||
- `docs/08-椤圭洰绠$悊/涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗?md` - 椤圭洰璁″垝
|
||
- `docs/09-鏋舵瀯瀹炴柦/鍓嶇<E98D93>妯″潡娉ㄥ唽鏈哄埗瀹炴柦鎶ュ憡.md` - 鍓嶇<E98D93>浠诲姟17锛圵eek 2 Day 6-7锛?- `docs/08-椤圭洰绠$悊/2025-11-14-浠诲姟19瀹屾垚鎬荤粨.md` - 鍚庣<E98D9A>浠诲姟19锛圵eek 2 Day 8-9锛?- `docs/08-椤圭洰绠$悊/03-姣忓懆璁″垝/2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦瀹屾垚鎶ュ憡.md` - 猸?骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦
|
||
- `docs/08-椤圭洰绠$悊/03-姣忓懆璁″垝/2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦楠岃瘉鎶ュ憡.md` - 猸?楠岃瘉娴嬭瘯鎶ュ憡
|
||
|
||
**鎶€鏈<E282AC><E98F88>鑼冿細**
|
||
- `docs/04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md` - 猸?浜戝師鐢熷紑鍙戣<E98D99>鑼冿紙蹇呰<E8B987>锛?- `docs/04-寮€鍙戣<E98D99>鑼?06-Git鎻愪氦瑙勮寖.md` - Git鎻愪氦瑙勮寖锛堝惈鎻愪氦棰戠巼瑙勫垯锛?- `docs/09-鏋舵瀯瀹炴柦/缂栫爜瑙勮寖-UTF8鏈€浣冲疄璺?md` - 缂栫爜瑙勮寖
|
||
- `.editorconfig` - 缂栬緫鍣ㄩ厤缃?- `.gitattributes` - Git閰嶇疆
|
||
|
||
---
|
||
|
||
**鏈<>珷鑺傛洿鏂版棩鏈燂細** 2025-11-17
|
||
**涓嬫<E6B693>鏇存柊鏃舵満锛?* ASL妯″潡寮€鍙戝畬鎴愬悗
|
||
**鏈€鏂板彉鏇达細** 娣诲姞骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦鍜岄獙璇佺姸鎬侊紙V2.1闃舵<EFBFBD>锛?
|
||
---
|
||
|
||
## 鈿欙笍 骞冲彴鍩虹<E98DA9>璁炬柦锛?025-11-17 鏂板<E98F82>锛夆渽
|
||
|
||
> **猸?閲嶈<E996B2>鎻愮ず锛氬钩鍙板熀纭€璁炬柦鎻愪緵浜戝師鐢熺殑閫氱敤鑳藉姏锛屾墍鏈変笟鍔℃ā鍧楃洿鎺ュ<E98EBA>鐢?*
|
||
> **璇︾粏瑙勫垝锛?* 鍙傝<E98D99> [骞冲彴鍩虹<E98DA9>璁炬柦瑙勫垝](../09-鏋舵瀯瀹炴柦/04-骞冲彴鍩虹<E98DA9>璁炬柦瑙勫垝.md)
|
||
> **浣跨敤鎸囧崡锛?* 鍙傝<E98D99> [backend/src/common/README.md](../../backend/src/common/README.md)
|
||
> **寮€鍙戣<E98D99>鑼冿細** 鍙傝<E98D99> [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||
|
||
---
|
||
|
||
### 馃幆 璁捐<E79281>鐩<EFBFBD>爣
|
||
|
||
**鏍稿績鍘熷垯锛?* 閫氳繃**閫傞厤鍣ㄦā寮忥紙Adapter Pattern锛?*瀹炵幇鏈<E5B987>湴寮€鍙戝拰浜戠<E6B59C>閮ㄧ讲闆朵唬鐮佸垏鎹?
|
||
```
|
||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 涓氬姟妯″潡灞? 鈹?鈹? ASL | AIA | PKB | DC | SSA | ST | UAM 鈹?鈹? 鍙<>叧娉ㄤ笟鍔¢€昏緫锛屽<E9949B>鐢ㄥ钩鍙拌兘鍔? 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈫?import from '@/common/'
|
||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 骞冲彴鍩虹<E98DA9>璁炬柦灞傦紙Adapter Pattern锛? 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?瀛樺偍锛歀ocalAdapter 鈫愨啋 OSSAdapter 鈹?鈹?缂撳瓨锛歁emoryCacheAdapter 鈫愨啋 RedisCacheAdapter 鈹?鈹?浠诲姟锛歁emoryQueueAdapter 鈫愨啋 DatabaseQueueAdapter 鈹?鈹?鏃ュ織锛欳onsoleLogger 鈫愨啋 闃块噷浜慡LS 鈹?鈹?鏁版嵁搴擄細鏈<E7B4B0>湴PostgreSQL 鈫愨啋 闃块噷浜慠DS锛堣繛鎺ユ睜锛? 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈫?鐜<><E9909C>鍙橀噺鍒囨崲
|
||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 閮ㄧ讲鐜<E8AEB2><E9909C>锛堥浂浠g爜鏀瑰姩锛? 鈹?鈹? 鏈<>湴寮€鍙?| 浜戠<E6B59C>SaaS | 绉佹湁鍖栭儴缃?| 鍗曟満鐗? 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
|
||
|
||
---
|
||
|
||
### 馃摝 鏍稿績妯″潡娓呭崟
|
||
|
||
| 妯″潡 | 璺<>緞 | 鐘舵€?| 璇存槑 | 鐜<><E9909C>鍒囨崲 |
|
||
|------|------|------|------|---------|
|
||
| **瀛樺偍鏈嶅姟** | `common/storage/` | 鉁?瀹屾垚 | 鏂囦欢涓婁紶涓嬭浇 | `STORAGE_TYPE=local/oss` |
|
||
| **鏁版嵁搴撹繛鎺ユ睜** | `config/database.ts` | 鉁?瀹屾垚 | Prisma杩炴帴姹?| `DATABASE_URL` |
|
||
| **鏃ュ織绯荤粺** | `common/logging/` | 鉁?瀹屾垚 | 缁撴瀯鍖栨棩蹇?| 鑷<>姩鍒囨崲锛堟牴鎹甆ODE_ENV锛?|
|
||
| **鐜<><E9909C>閰嶇疆** | `config/env.ts` | 鉁?瀹屾垚 | 缁熶竴閰嶇疆绠$悊 | `.env`鏂囦欢鎴栫幆澧冨彉閲?|
|
||
| **寮傛<E5AFAE>浠诲姟** | `common/jobs/` | 鉁?瀹屾垚 | 闀挎椂闂翠换鍔″<E98D94>鐞?| `QUEUE_TYPE=memory/database` |
|
||
| **缂撳瓨鏈嶅姟** | `common/cache/` | 鉁?瀹屾垚 | 鍐呭瓨/Redis缂撳瓨 | `CACHE_TYPE=memory/redis` |
|
||
| **鍋ュ悍妫€鏌?* | `common/health/` | 鉁?瀹屾垚 | SAE鍋ュ悍妫€鏌?| N/A |
|
||
| **鐩戞帶鎸囨爣** | `common/monitoring/` | 鉁?瀹屾垚 | 鍏抽敭鎸囨爣鐩戞帶 | N/A |
|
||
|
||
---
|
||
|
||
### 馃捇 浣跨敤绀轰緥
|
||
|
||
#### **1. 瀛樺偍鏈嶅姟锛堥浂浠g爜鍒囨崲锛?*
|
||
|
||
```typescript
|
||
import { storage } from '@/common/storage'
|
||
|
||
// 涓氬姟浠g爜锛堝畬鍏ㄧ浉鍚岋級
|
||
const buffer = await readFile('example.pdf')
|
||
const url = await storage.upload('literature/123.pdf', buffer)
|
||
|
||
// 鐜<><E9909C>鍒囨崲锛?// 鏈<>湴寮€鍙戯細STORAGE_TYPE=local 鈫?瀛樺偍鍒?backend/uploads/
|
||
// 浜戠<E6B59C>閮ㄧ讲锛歋TORAGE_TYPE=oss 鈫?瀛樺偍鍒伴樋閲屼簯OSS
|
||
```
|
||
|
||
#### **2. 鏃ュ織绯荤粺锛堢粨鏋勫寲鏃ュ織锛?*
|
||
|
||
```typescript
|
||
import { logger } from '@/common/logging'
|
||
|
||
// 鍩虹<E98DA9>鏃ュ織
|
||
logger.info('User logged in', { userId: 123 })
|
||
logger.error('Database error', { error: err.message })
|
||
|
||
// 甯︿笂涓嬫枃鐨勬棩蹇?const aslLogger = logger.child({ module: 'ASL', projectId: 456 })
|
||
aslLogger.info('Screening started', { count: 100 })
|
||
|
||
// 杈撳嚭鏍煎紡锛?// 鏈<>湴寮€鍙戯細褰╄壊鍙<E5A38A><E98D99>鏍煎紡
|
||
// 鐢熶骇鐜<E9AA87><E9909C>锛欽SON鏍煎紡锛堜究浜庨樋閲屼簯SLS瑙f瀽锛?```
|
||
|
||
#### **3. 寮傛<E5AFAE>浠诲姟锛堥伩鍏峉erverless瓒呮椂锛?*
|
||
|
||
```typescript
|
||
import { jobQueue } from '@/common/jobs'
|
||
|
||
// 鍒涘缓浠诲姟锛堢珛鍗宠繑鍥烇級
|
||
const job = await jobQueue.push('asl:screening', {
|
||
projectId: 123,
|
||
literatureIds: [1, 2, 3]
|
||
})
|
||
|
||
// 杩斿洖浠诲姟ID缁欏墠绔?res.send({ jobId: job.id })
|
||
|
||
// 鍓嶇<E98D93>杞<EFBFBD><E69D9E>浠诲姟鐘舵€?const status = await jobQueue.getJob(job.id)
|
||
// { status: 'processing', progress: 45 }
|
||
```
|
||
|
||
#### **4. 缂撳瓨鏈嶅姟锛堝噺灏慙LM璋冪敤鎴愭湰锛?*
|
||
|
||
```typescript
|
||
import { cache } from '@/common/cache'
|
||
|
||
// 缂撳瓨LLM鍝嶅簲锛?灏忔椂锛?const cacheKey = `llm:${model}:${hash(prompt)}`
|
||
const cached = await cache.get(cacheKey)
|
||
|
||
if (!cached) {
|
||
const response = await llm.chat(prompt)
|
||
await cache.set(cacheKey, response, 60 * 60)
|
||
return response
|
||
}
|
||
|
||
return cached
|
||
```
|
||
|
||
---
|
||
|
||
### 馃實 澶氱幆澧冮厤缃?
|
||
#### **鏈<>湴寮€鍙戯紙.env.development锛?*
|
||
|
||
```bash
|
||
# 瀛樺偍锛氭湰鍦版枃浠剁郴缁?STORAGE_TYPE=local
|
||
LOCAL_STORAGE_DIR=uploads
|
||
|
||
# 缂撳瓨锛氬唴瀛樼紦瀛?CACHE_TYPE=memory
|
||
|
||
# 浠诲姟闃熷垪锛氬唴瀛橀槦鍒?QUEUE_TYPE=memory
|
||
|
||
# 鏃ュ織锛氬僵鑹茶緭鍑?LOG_LEVEL=debug
|
||
```
|
||
|
||
#### **浜戠<E6B59C>閮ㄧ讲锛?env.production锛?*
|
||
|
||
```bash
|
||
# 瀛樺偍锛氶樋閲屼簯OSS
|
||
STORAGE_TYPE=oss
|
||
OSS_REGION=oss-cn-hangzhou
|
||
OSS_BUCKET=aiclinical-prod
|
||
OSS_ACCESS_KEY_ID=your-key-id
|
||
OSS_ACCESS_KEY_SECRET=your-key-secret
|
||
|
||
# 缂撳瓨锛氶樋閲屼簯Redis
|
||
CACHE_TYPE=redis
|
||
REDIS_HOST=r-xxx.redis.aliyuncs.com
|
||
REDIS_PORT=6379
|
||
REDIS_PASSWORD=your-password
|
||
|
||
# 浠诲姟闃熷垪锛氭暟鎹<E69A9F>簱闃熷垪
|
||
QUEUE_TYPE=database
|
||
|
||
# 鏃ュ織锛欽SON杈撳嚭
|
||
LOG_LEVEL=info
|
||
```
|
||
|
||
---
|
||
|
||
### 鈿狅笍 閲嶈<E996B2>娉ㄦ剰浜嬮」
|
||
|
||
#### **1. Winston渚濊禆鏈<E7A686>畨瑁?*
|
||
|
||
```bash
|
||
# 闇€瑕佸畨瑁?cd backend
|
||
npm install winston
|
||
npm install -D @types/winston
|
||
```
|
||
|
||
#### **2. Legacy妯″潡鍏煎<E98D8F>鎬?*
|
||
|
||
- 鉁?**Legacy妯″潡**锛圥KB銆丄IA銆丏C锛変繚鎸佺幇鐘讹紝姝e父杩愯<E69DA9>
|
||
- 鉁?**鏂版ā鍧?*锛圓SL锛変娇鐢ㄥ钩鍙板熀纭€璁炬柦
|
||
- 馃攧 **鍙<>€夎縼绉?*锛歀egacy妯″潡鎸夐渶杩佺Щ锛堥<E9949B>璁?灏忔椂锛?
|
||
#### **3. 浜戠<E6B59C>瀹炵幇棰勭暀**
|
||
|
||
- `OSSAdapter`銆乣RedisCacheAdapter` 褰撳墠涓洪<E6B693>鐣欏疄鐜?- 浜戠<E6B59C>閮ㄧ讲鍓嶉渶瀹夎<E780B9>渚濊禆骞跺彇娑堟敞閲?- 璇﹁<E79287>瀹炴柦鏂囨。
|
||
|
||
---
|
||
|
||
### 馃摎 鐩稿叧鏂囨。
|
||
|
||
- **璇︾粏瑙勫垝锛?* [骞冲彴鍩虹<EFBFBD>璁炬柦瑙勫垝](../09-鏋舵瀯瀹炴柦/04-骞冲彴鍩虹<E98DA9>璁炬柦瑙勫垝.md)
|
||
- **浣跨敤鎸囧崡锛?* [backend/src/common/README.md](../../backend/src/common/README.md)
|
||
- **瀹炴柦鎶ュ憡锛?* [2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦瀹屾垚鎶ュ憡](../08-椤圭洰绠$悊/03-姣忓懆璁″垝/2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦瀹屾垚鎶ュ憡.md)
|
||
- **楠岃瘉鎶ュ憡锛?* [2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦楠岃瘉鎶ュ憡](../08-椤圭洰绠$悊/03-姣忓懆璁″垝/2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦楠岃瘉鎶ュ憡.md) 猸?鏂板<E98F82>
|
||
- **寮€鍙戣<E98D99>鑼冿細** [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||
|
||
---
|
||
|
||
### 鉁?娴嬭瘯楠岃瘉鐘舵€侊紙2025-11-17锛?
|
||
**娴嬭瘯瑕嗙洊鐜囷細** 100%锛?/8妯″潡鍏ㄩ儴閫氳繃锛?
|
||
| 妯″潡 | 娴嬭瘯鐘舵€?| 娴嬭瘯绔<E798AF>偣/鏂规硶 | 缁撴灉 |
|
||
|------|---------|-------------|------|
|
||
| 瀛樺偍鏈嶅姟 | 鉁?閫氳繃 | `storage.upload/download/delete/exists` | 鍔熻兘姝e父 |
|
||
| 鏃ュ織绯荤粺 | 鉁?閫氳繃 | `logger.info/warn/error` + context | 杈撳嚭姝g‘ |
|
||
| 缂撳瓨鏈嶅姟 | 鉁?閫氳繃 | `cache.set/get/has/delete/mset/mget` | 鍏ㄩ儴姝e父 |
|
||
| 寮傛<E5AFAE>浠诲姟 | 鉁?閫氳繃 | `jobQueue.push/getJob/process` | 闃熷垪宸ヤ綔姝e父 |
|
||
| 鍋ュ悍妫€鏌?| 鉁?閫氳繃 | `/health/liveness`, `/health/readiness` | 200 OK |
|
||
| 鏁版嵁搴撹繛鎺ユ睜 | 鉁?閫氳繃 | 杩炴帴鏁扮洃鎺с€佷紭闆呭叧闂?| 1/400杩炴帴 |
|
||
| 鐜<><E9909C>閰嶇疆 | 鉁?閫氳繃 | `config` 瀵硅薄鍔犺浇 | 鎵€鏈夊彉閲忔<E996B2>甯?|
|
||
| 鐩戞帶鎸囨爣 | 鉁?閫氳繃 | `Metrics.recordDBConnectionCount()` | 鏁版嵁閲囬泦姝e父 |
|
||
|
||
**娴嬭瘯鏂瑰紡锛?*
|
||
- 鍗曞厓娴嬭瘯锛氶€氳繃娴嬭瘯API `/test/platform` 鑷<>姩鍖栭獙璇?- 闆嗘垚娴嬭瘯锛氭墍鏈夋ā鍧楀疄闄呰皟鐢ㄩ獙璇?- 鍋ュ悍妫€鏌ワ細3涓<33><E6B693>鐐瑰叏閮ㄥ搷搴旀<E690B4>甯?
|
||
**涓嬩竴姝ワ細**
|
||
- 鉁?鏈<>湴寮€鍙戠幆澧冨凡灏辩华锛屽彲浠ュ紑濮婣SL妯″潡寮€鍙?- 馃攧 浜戠<E6B59C>閮ㄧ讲闇€瑕佸畨瑁?`ali-oss` 鍜?`ioredis` 渚濊禆
|
||
|
||
---
|
||
|
||
## 馃尌锔?浜戝師鐢熼儴缃叉灦鏋勶紙2025-11-16 鏂板<E98F82>锛?
|
||
> **猸?閲嶈<E996B2>鎻愮ず锛氭湰绔犺妭瀹氫箟骞冲彴鐨勪簯鍘熺敓閮ㄧ讲绛栫暐锛岄€傜敤浜庢墍鏈変笟鍔℃ā鍧?*
|
||
> **璇︾粏鎸囧崡锛?* 鍙傝<E98D99> [浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md)
|
||
> **寮€鍙戣<E98D99>鑼冿細** 鍙傝<E98D99> [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||
|
||
---
|
||
|
||
### 馃幆 閮ㄧ讲鏋舵瀯閫夊瀷
|
||
|
||
**鐩<>爣骞冲彴**锛氶樋閲屼簯 Serverless 搴旂敤寮曟搸 (SAE) + 浜戞暟鎹<E69A9F>簱 RDS + 瀵硅薄瀛樺偍 OSS
|
||
|
||
**閫夊瀷鐞嗙敱**锛?- 鉁?**鎸夐渶浠樿垂**锛氬垵鏈熸垚鏈<E59E9A>綆锛埪?00/鏈堣捣锛夛紝鏃犻渶棰勪粯澶ч噺鏈嶅姟鍣ㄦ垚鏈?- 鉁?**鑷<>姩鎵╃缉瀹?*锛氶珮宄版湡涓嶅畷鏈猴紝浣庤胺鏈熶笉娴<E7AC89>垂锛岄€傚悎鍒涗笟鍏<E7AC9F>徃娴侀噺涓嶇‘瀹氱殑鍦烘櫙
|
||
- 鉁?**鍥藉唴璁块棶浼樺寲**锛氶樋閲屼簯鍥藉唴鑺傜偣澶氾紝鍖荤枟鐢ㄦ埛璁块棶閫熷害蹇?- 鉁?**閫傚悎AI浠诲姟**锛氬紓姝ユ壒閲忎换鍔★紙LLM绛涢€夈€丳DF鎻愬彇锛夊ぉ鐒跺<E99092>鍚?Serverless
|
||
- 鉁?**闄嶄綆杩愮淮鎴愭湰**锛氭棤闇€涓撹亴杩愮淮浜哄憳锛屽洟闃熶笓娉ㄤ笟鍔″紑鍙?
|
||
**鏋舵瀯鍥?*锛?```
|
||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 浜戝師鐢熼儴缃叉灦鏋? 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鐢ㄦ埛娴忚<E5A8B4>鍣? 鈹?鈹? 鈫? 鈹?鈹? CDN鍔犻€燂紙鍙<E7B499>€夛級 鈹?鈹? 鈫? 鈹?鈹? 闃块噷浜?SAE (Serverless 搴旂敤寮曟搸) 鈹?鈹? 鈹溾攢鈹€ 鑷<>姩鎵╃缉瀹癸紙0-100瀹炰緥锛? 鈹?鈹? 鈹溾攢鈹€ 鍐呯疆璐熻浇鍧囪 鈹?鈹? 鈹斺攢鈹€ Docker 瀹瑰櫒杩愯<E69DA9> 鈹?鈹? 鈫? 鈹?鈹? 浜戞暟鎹<E69A9F>簱 RDS (PostgreSQL 15) 鈹?鈹? 鈹溾攢鈹€ 10涓猄chema闅旂<E99785> 鈹?鈹? 鈹溾攢鈹€ 鑷<>姩澶囦唤 鈹?鈹? 鈹斺攢鈹€ 杩炴帴姹犵<E5A7B9>鐞? 鈹?鈹? 鈫? 鈹?鈹? 瀵硅薄瀛樺偍 OSS 鈹?鈹? 鈹溾攢鈹€ PDF/Excel 鏂囦欢瀛樺偍 鈹?鈹? 鈹溾攢鈹€ 11涓?鍙<>潬鎬? 鈹?鈹? 鈹斺攢鈹€ 鍐呯綉璁块棶鍏嶆祦閲忚垂 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
|
||
|
||
---
|
||
|
||
### 馃彈锔?鏍稿績璁捐<E79281>鍘熷垯锛堟墍鏈夋ā鍧楀繀椤婚伒瀹堬級
|
||
|
||
#### **鍘熷垯1锛氭棤鐘舵€佸簲鐢ㄨ<E990A2>璁?*
|
||
|
||
**瑕佹眰**锛氬簲鐢ㄤ笉鑳戒緷璧栨湰鍦版枃浠剁郴缁熸垨鍐呭瓨鐘舵€?
|
||
| 绂佹<E7BB82>鍋氭硶 鉂?| 姝g‘鍋氭硶 鉁?| 璇存槑 |
|
||
|-----------|-----------|------|
|
||
| 鏂囦欢瀛樺偍鍒?`./uploads/` | 涓婁紶鍒?OSS 鎴?鍐呭瓨澶勭悊 | 瀹瑰櫒閲嶅惎浼氫涪澶辨湰鍦版枃浠?|
|
||
| Session 瀛樺唴瀛?| Session 瀛?Redis/鏁版嵁搴?| 澶氬疄渚嬮棿鏃犳硶鍏变韩鍐呭瓨 |
|
||
| 缂撳瓨瀛樺唴瀛樺彉閲?| 浣跨敤 Redis | 鎵╁<E98EB5>鍚庣紦瀛樺け鏁?|
|
||
| 渚濊禆 `/tmp` 闀挎湡瀛樺偍 | 鐢ㄥ畬绔嬪嵆鍒犻櫎 | /tmp 瀹归噺鏈夐檺涓斾笉鎸佷箙 |
|
||
|
||
**绀轰緥**锛?```typescript
|
||
// 鉂?绂佹<E7BB82>锛氭湰鍦版枃浠跺瓨鍌?fs.writeFileSync('./uploads/file.pdf', buffer)
|
||
|
||
// 鉁?姝g‘锛歄SS瀛樺偍鎴栧唴瀛樺<E7809B>鐞?const storage = StorageFactory.create()
|
||
const url = await storage.upload('files/file.pdf', buffer)
|
||
```
|
||
|
||
---
|
||
|
||
#### **鍘熷垯2锛氬瓨鍌ㄦ娊璞″眰璁捐<E79281>**
|
||
|
||
**瑕佹眰**锛氶€氳繃鎶借薄灞傛敮鎸佹湰鍦板紑鍙?+ 浜戠<E6B59C>閮ㄧ讲鏃犵紳鍒囨崲
|
||
|
||
**鏋舵瀯**锛?```typescript
|
||
StorageFactory
|
||
鈫?StorageAdapter (鎺ュ彛)
|
||
鈫?鈹溾攢鈹€ LocalAdapter (鏈<>湴寮€鍙?
|
||
鈹斺攢鈹€ OSSAdapter (鐢熶骇鐜<E9AA87><E9909C>)
|
||
```
|
||
|
||
**浣跨敤**锛?```typescript
|
||
// 浠g爜涓<E7889C>粺涓€浣跨敤宸ュ巶绫伙紝鐜<E7B49D><E9909C>鑷<EFBFBD>姩鍒囨崲
|
||
const storage = StorageFactory.create()
|
||
const url = await storage.upload(key, buffer)
|
||
```
|
||
|
||
**鐜<><E9909C>閰嶇疆**锛?```bash
|
||
# 鏈<>湴寮€鍙?STORAGE_TYPE=local
|
||
|
||
# 鐢熶骇鐜<E9AA87><E9909C>
|
||
STORAGE_TYPE=oss
|
||
```
|
||
|
||
---
|
||
|
||
#### **鍘熷垯3锛氭暟鎹<E69A9F>簱杩炴帴姹犵<E5A7B9>鐞?*
|
||
|
||
**椋庨櫓**锛歋erverless 鎵╁<E98EB5>鍚庤繛鎺ユ暟鏆村<E98F86>锛岃秴杩?RDS 鏈€澶ц繛鎺ユ暟
|
||
|
||
**瑙e喅鏂规<E98F82>**锛?```typescript
|
||
// 璁$畻鍏<E795BB>紡锛氭瘡瀹炰緥杩炴帴鏁?= RDS鏈€澶ц繛鎺ユ暟 / SAE鏈€澶у疄渚嬫暟
|
||
// 绀轰緥锛歊DS 400杩炴帴 / SAE 20瀹炰緥 = 姣忓疄渚?0杩炴帴
|
||
|
||
const prisma = new PrismaClient({
|
||
connectionPool: {
|
||
connectionLimit: 20, // 姣忓疄渚嬫渶澶?0杩炴帴
|
||
idleTimeout: 60000, // 绌洪棽60绉掗噴鏀? maxWait: 5000, // 绛夊緟鏈€澶?绉? }
|
||
})
|
||
```
|
||
|
||
**鐩戞帶**锛氬畾鏈熸<E98F88>鏌ユ暟鎹<E69A9F>簱杩炴帴鏁帮紝鎺ヨ繎涓婇檺鏃跺憡璀?
|
||
---
|
||
|
||
#### **鍘熷垯4锛氱幆澧冨彉閲忛厤缃?*
|
||
|
||
**瑕佹眰**锛氭墍鏈夐厤缃<E58EA4>紙瀵嗛挜銆両P銆佺<E98A86>鍙o級蹇呴』閫氳繃鐜<E7B983><E9909C>鍙橀噺绠$悊
|
||
|
||
```bash
|
||
# 鉂?绂佹<E7BB82>纭<EFBFBD>紪鐮?const apiKey = 'sk-xxx'
|
||
const dbHost = '192.168.1.100'
|
||
|
||
# 鉁?鐜<><E9909C>鍙橀噺
|
||
const apiKey = process.env.LLM_API_KEY
|
||
const dbHost = process.env.DB_HOST
|
||
```
|
||
|
||
---
|
||
|
||
#### **鍘熷垯5锛氬紓姝ヤ换鍔″<E98D94>鐞?*
|
||
|
||
**椋庨櫓**锛歋AE 榛樿<E6A69B>璇锋眰瓒呮椂 30 绉?
|
||
**瑙e喅鏂规<E98F82>**锛氶暱鏃堕棿浠诲姟锛? 10绉掞級蹇呴』寮傛<E5AFAE>澶勭悊
|
||
|
||
```typescript
|
||
// 鉁?姝g‘锛氬紓姝ヤ换鍔℃ā寮?app.post('/screening/start', async (req, res) => {
|
||
const task = await prisma.aslScreeningTask.create({...})
|
||
res.send({ taskId: task.id }) // 绔嬪嵆杩斿洖
|
||
|
||
// 鍚庡彴鎵ц<E98EB5>
|
||
processScreeningAsync(task.id)
|
||
})
|
||
|
||
// 鍓嶇<E98D93>杞<EFBFBD><E69D9E>杩涘害
|
||
app.get('/screening/tasks/:id', async (req, res) => {
|
||
const task = await prisma.aslScreeningTask.findUnique({...})
|
||
res.send({ progress: task.completedItems / task.totalItems })
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
### 馃搳 寮€鍙戠幆澧?vs 鐢熶骇鐜<E9AA87><E9909C>
|
||
|
||
#### **鏈<>湴寮€鍙戠幆澧冿紙鏃犻渶浜戞湇鍔★級**
|
||
|
||
```bash
|
||
# 浣跨敤 Docker 鏈<>湴鏈嶅姟
|
||
docker run -d --name postgres -p 5432:5432 postgres:15
|
||
docker run -d --name redis -p 6379:6379 redis:7
|
||
|
||
# 鐜<><E9909C>鍙橀噺
|
||
STORAGE_TYPE=local
|
||
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dev_db
|
||
```
|
||
|
||
**浼樺娍**锛?- 鉁?瀹屽叏绂荤嚎寮€鍙?- 鉁?鏃犱簯鏈嶅姟璐圭敤
|
||
- 鉁?璋冭瘯鏂逛究
|
||
|
||
---
|
||
|
||
#### **鐢熶骇鐜<E9AA87><E9909C>锛堥樋閲屼簯锛?*
|
||
|
||
```bash
|
||
# SAE 鎺у埗鍙伴厤缃<E58EA4>幆澧冨彉閲?STORAGE_TYPE=oss
|
||
DATABASE_URL=postgresql://user:pass@rm-xxx.aliyuncs.com:5432/prod_db
|
||
OSS_REGION=oss-cn-hangzhou
|
||
OSS_BUCKET=aiclinical-prod
|
||
```
|
||
|
||
**鍒囨崲鏂瑰紡**锛?- 鉁?浠g爜闆舵敼鍔?- 鉁?浠呬慨鏀圭幆澧冨彉閲?- 鉁?閲嶆柊閮ㄧ讲鍗冲彲
|
||
|
||
---
|
||
|
||
### 馃殌 閮ㄧ讲娴佺▼锛堢畝瑕侊級
|
||
|
||
1. **鏈<>湴寮€鍙?*锛氫娇鐢?Docker + LocalAdapter
|
||
2. **浠g爜鎻愪氦**锛欸it push
|
||
3. **鏋勫缓闀滃儚**锛欴ocker build
|
||
4. **鎺ㄩ€侀暅鍍?*锛氭帹閫佸埌闃块噷浜戝<E6B59C>鍣ㄩ暅鍍忔湇鍔?5. **SAE 閮ㄧ讲**锛氶厤缃<E58EA4>幆澧冨彉閲忥紝鑷<E7B49D>姩鎷夊彇闀滃儚閮ㄧ讲
|
||
6. **楠岃瘉閮ㄧ讲**锛氬仴搴锋<E690B4>鏌ラ€氳繃锛屾祦閲忓垏鎹?
|
||
璇︾粏娴佺▼瑙侊細[浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md)
|
||
|
||
---
|
||
|
||
### 馃搵 寮€鍙戞<E98D99>鏌ユ竻鍗?
|
||
鍦ㄦ彁浜や唬鐮佸墠锛岃<EFBFBD>纭<EFBFBD><EFBFBD>锛?
|
||
- [ ] 鏄<>惁浣跨敤 `StorageFactory` 鑰岄潪鐩存帴 `fs.writeFile`锛?- [ ] 鏄<>惁浣跨敤鍏ㄥ眬 `prisma` 瀹炰緥鑰岄潪鏂板缓杩炴帴锛?- [ ] 鏄<>惁鎵€鏈夐厤缃<E58EA4>兘浠庣幆澧冨彉閲忚<E996B2>鍙栵紵
|
||
- [ ] 鏄<>惁闀挎椂闂翠换鍔¢兘鏀逛负寮傛<E5AFAE>澶勭悊锛?- [ ] 鏄<>惁鏃ュ織閮借緭鍑哄埌 stdout锛?- [ ] 鏄<>惁 `/tmp` 鐩<>綍浣跨敤鍚庣珛鍗虫竻鐞嗭紵
|
||
- [ ] 鏄<>惁閬垮厤渚濊禆鏈<E7A686>湴鏂囦欢璺<E6ACA2>緞锛?
|
||
瀹屾暣妫€鏌ユ竻鍗曡<EFBFBD>锛歔浜戝師鐢熷紑鍙戣<EFBFBD>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
|
||
|
||
---
|
||
|
||
### 馃摎 鐩稿叧鏂囨。
|
||
|
||
- 猸?**[浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md)** - 鍖呭惈瀹屾暣浠g爜绀轰緥鍜岄儴缃叉祦绋?- 猸?**[浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)** - DO/DON'T 妫€鏌ユ竻鍗?- [Schema闅旂<E99785>鏋舵瀯璁捐<E79281>](../09-鏋舵瀯瀹炴柦/01-Schema闅旂<E99785>鏋舵瀯璁捐<E79281>锛?0涓<30>級.md)
|
||
- [鏁版嵁搴撹繛鎺ラ厤缃甝(../09-鏋舵瀯瀹炴柦/02-鏁版嵁搴撹繛鎺ラ厤缃?md)
|
||
|
||
---
|
||
|
||
**鏈<>珷鑺傚垱寤烘棩鏈燂細** 2025-11-16
|
||
**缁存姢鑰咃細** 鏋舵瀯鍥㈤槦
|
||
**閫傜敤鑼冨洿锛?* 鎵€鏈変笟鍔℃ā鍧楋紙ASL銆丄IA銆丳KB銆丏C绛夛級
|
||
|
||
---
|
||
|
||
## 馃彈锔?鏁翠綋鏋舵瀯璁捐<E79281>
|
||
|
||
### 绯荤粺鏋舵瀯鍥?
|
||
```
|
||
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? AI涓村簥鐮旂┒骞冲彴 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹? 鈹? 鍓嶇<E98D93>灞? 鈹? 鈹? 鍚庣<E98D9A>灞? 鈹? 鈹俧rontend-v2鈹傗梽鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€ HTTP API 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻衡攤 backend 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹? 鈹?妯″潡鍖? 鈹?妯″潡鍖?+ Schema闅旂<E99785>
|
||
鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹? 鈹? 鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹?鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鈹? 鈹?ASL 鈹? 鈹?AIA 鈹? 鈹?PKB 鈹?鈹? 鈹? 鈹?PostgreSQL 鈹?鈹? 鈹? 鈹傛ā鍧?鈹? 鈹傛ā鍧?鈹? 鈹傛ā鍧?鈹?鈹? 鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹愨攤 鈹? 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹?鈹? 鈹? 鈹? 鈹?platform_schema 鈹傗攤 鈹? 鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹? 鈹? 鈹? 鈹? 鈹?aia_schema 鈹傗攤 鈹? 鈹? 鈹?RVW 鈹? 鈹?DC 鈹? ... 鈹? 鈹? 鈹? 鈹?pkb_schema 鈹傗攤 鈹? 鈹? 鈹傛ā鍧?鈹? 鈹傛ā鍧?鈹? 鈹? 鈹? 鈹? 鈹?asl_schema 鈹傗攤 鈹? 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹? 鈹? 鈹? 鈹? 鈹?... 鈹傗攤 鈹? 鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹樷攤 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
|
||
|
||
---
|
||
|
||
## 馃搧 鍓嶇<E98D93>鏋舵瀯璁捐<E79281>锛坒rontend-v2锛?
|
||
### 璁捐<E79281>鍘熷垯
|
||
|
||
1. **褰诲簳鐨勬ā鍧楀寲** - 姣忎釜涓氬姟妯″潡瀹屽叏鐙<E58F8F>珛
|
||
2. **妗嗘灦涓庝笟鍔″垎绂?* - 妗嗘灦灞傛彁渚涘熀纭€鑳藉姏锛屼笟鍔℃ā鍧椾笓娉ㄥ姛鑳?3. **娓愯繘寮忓紑鍙?* - 鏂版灦鏋勪笌鏃т唬鐮佸苟瀛橈紝閫愭<E996AB>鏇挎崲
|
||
4. **鐙<>珛閮ㄧ讲鏀<E8AEB2>寔** - 妯″潡鍙<E6BDA1>嫭绔嬫墦鍖呭拰閮ㄧ讲
|
||
|
||
### 鐩<>綍缁撴瀯
|
||
|
||
```
|
||
frontend-v2/
|
||
鈹溾攢鈹€ src/
|
||
鈹? 鈹溾攢鈹€ framework/ # 馃彈锔?妗嗘灦灞傦紙骞冲彴绾у熀纭€璁炬柦锛?鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ layout/ # 甯冨眬绯荤粺
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ MainLayout.tsx # 涓诲竷灞€锛堥《閮ㄥ<E996AE>鑸?鍐呭<E98D90>鍖猴級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ TopNavigation.tsx # 椤堕儴瀵艰埅鏍?鈹? 鈹? 鈹? 鈹溾攢鈹€ UserMenu.tsx # 鐢ㄦ埛鑿滃崟
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ModuleContainer.tsx # 妯″潡瀹瑰櫒
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ modules/ # 妯″潡绠$悊绯荤粺
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ moduleRegistry.ts # 妯″潡娉ㄥ唽涓<E594BD>績
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ ModuleLoader.tsx # 鍔ㄦ€佹ā鍧楀姞杞藉櫒
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ types.ts # 妯″潡鎺ュ彛瀹氫箟
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ config.ts # 妯″潡閰嶇疆
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ router/ # 璺<>敱绯荤粺
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ AppRouter.tsx # 搴旂敤璺<E695A4>敱閰嶇疆
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ RouteGuard.tsx # 璺<>敱瀹堝崼
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ routes.ts # 璺<>敱瀹氫箟
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ permission/ # 鏉冮檺鎺у埗锛堥<E9949B>鐣欙級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ PermissionProvider.tsx # 鏉冮檺涓婁笅鏂?鈹? 鈹? 鈹? 鈹溾攢鈹€ usePermission.ts # 鏉冮檺Hook
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ config.ts # 鏉冮檺閰嶇疆
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ config/ # 鍏ㄥ眬閰嶇疆
|
||
鈹? 鈹? 鈹溾攢鈹€ env.ts # 鐜<><E9909C>鍙橀噺
|
||
鈹? 鈹? 鈹溾攢鈹€ api.ts # API閰嶇疆
|
||
鈹? 鈹? 鈹斺攢鈹€ theme.ts # 涓婚<E6B693>閰嶇疆
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ modules/ # 馃摝 涓氬姟妯″潡锛堝畬鍏ㄧ嫭绔嬶級
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ asl/ # 猸?AI鏅鸿兘鏂囩尞妯″潡锛堜紭鍏堝紑鍙戯級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ index.tsx # 妯″潡鍏ュ彛锛堝<E9949B>鍑篗oduleDefinition锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ routes.tsx # 妯″潡璺<E6BDA1>敱閰嶇疆
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ layouts/ # 妯″潡甯冨眬
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ASLLayout.tsx # ASL宸︿晶瀵艰埅甯冨眬
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ pages/ # 妯″潡椤甸潰
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ ProjectList.tsx # 椤圭洰鍒楄〃
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ ProjectCreate.tsx # 鍒涘缓椤圭洰
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ TitleScreening/ # 鏍囬<E98F8D>鎽樿<E98EBD>鍒濈瓫
|
||
鈹? 鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ index.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ ScreeningWorkbench.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ResultsView.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ FullTextScreening/ # 鍏ㄦ枃澶嶇瓫
|
||
鈹? 鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ DataExtraction/ # 鏁版嵁鎻愬彇
|
||
鈹? 鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ Analysis/ # 缁煎悎鍒嗘瀽
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ components/ # 妯″潡缁勪欢锛堜粎鏈<E7B28E>ā鍧椾娇鐢<E5A887>級
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ LiteratureCard.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ ScreeningPanel.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ LLMSelector.tsx
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ api/ # 妯″潡API锛堝<E9949B>鎺ュ悗绔<E68297>級
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ projectApi.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ screeningApi.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ extractionApi.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ hooks/ # 妯″潡Hooks
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ useProject.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ useScreening.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ useLLMScreening.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ store/ # 妯″潡鐘舵€佺<E282AC>鐞?鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ projectStore.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ screeningStore.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ types/ # 妯″潡绫诲瀷瀹氫箟
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ project.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ literature.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹斺攢鈹€ utils/ # 妯″潡宸ュ叿鍑芥暟
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ fileParser.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ exportHelper.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ aia/ # 馃搵 AI鏅鸿兘闂<E58598>瓟妯″潡锛堝悗缁<E68297>噸鍐欙級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ index.tsx
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ Placeholder.tsx # 涓存椂鍗犱綅椤甸潰
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ pkb/ # 馃搵 涓<>汉鐭ヨ瘑搴撴ā鍧楋紙鍚庣画閲嶅啓锛?鈹? 鈹? 鈹? 鈹溾攢鈹€ index.tsx
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ Placeholder.tsx
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ rvw/ # 馃搵 瀹$ǹ绯荤粺妯″潡锛堝悗缁<E68297>噸鍐欙級
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ index.tsx
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ Placeholder.tsx
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ dc/ # 馃搵 鏁版嵁娓呮礂妯″潡锛堝崰浣嶏級
|
||
鈹? 鈹? 鈹溾攢鈹€ index.tsx
|
||
鈹? 鈹? 鈹斺攢鈹€ Placeholder.tsx
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ shared/ # 馃敡 鍏变韩璧勬簮锛堣法妯″潡浣跨敤锛?鈹? 鈹? 鈹溾攢鈹€ components/ # 閫氱敤UI缁勪欢
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ Button/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ Table/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ Modal/
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ hooks/ # 閫氱敤Hooks
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ useDebounce.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ useAsync.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ utils/ # 宸ュ叿鍑芥暟
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ date.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ format.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ validation.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ api/ # API瀹㈡埛绔?鈹? 鈹? 鈹溾攢鈹€ client.ts # Axios瀹炰緥
|
||
鈹? 鈹? 鈹溾攢鈹€ request.ts # 璇锋眰鎷︽埅鍣?鈹? 鈹? 鈹斺攢鈹€ types.ts # API绫诲瀷
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ App.tsx # 搴旂敤鏍圭粍浠?鈹? 鈹溾攢鈹€ main.tsx # 搴旂敤鍏ュ彛
|
||
鈹? 鈹斺攢鈹€ vite-env.d.ts
|
||
鈹?鈹溾攢鈹€ public/ # 闈欐€佽祫婧?鈹溾攢鈹€ package.json
|
||
鈹溾攢鈹€ vite.config.ts # Vite閰嶇疆
|
||
鈹溾攢鈹€ tsconfig.json # TypeScript閰嶇疆
|
||
鈹溾攢鈹€ tailwind.config.js # Tailwind閰嶇疆
|
||
鈹斺攢鈹€ README.md
|
||
```
|
||
|
||
### 妯″潡瀹氫箟鎺ュ彛
|
||
|
||
```typescript
|
||
// framework/modules/types.ts
|
||
|
||
/**
|
||
* 妯″潡瀹氫箟鎺ュ彛
|
||
* 姣忎釜涓氬姟妯″潡蹇呴』瀹炵幇杩欎釜鎺ュ彛
|
||
*/
|
||
export interface ModuleDefinition {
|
||
/** 妯″潡鍞<E6BDA1>竴鏍囪瘑 */
|
||
id: string
|
||
|
||
/** 妯″潡鍚嶇О锛堟樉绀哄湪瀵艰埅鏍忥級 */
|
||
name: string
|
||
|
||
/** 妯″潡璺<E6BDA1>敱鍓嶇紑 */
|
||
path: string
|
||
|
||
/** 妯″潡鍥炬爣锛堝彲閫夛級 */
|
||
icon?: ReactNode
|
||
|
||
/** 妯″潡鍏ュ彛缁勪欢锛堟噿鍔犺浇锛?*/
|
||
component: LazyExoticComponent<ComponentType<any>>
|
||
|
||
/** 妯″潡璺<E6BDA1>敱閰嶇疆 */
|
||
routes?: RouteObject[]
|
||
|
||
/** 妯″潡鏄<E6BDA1>惁鏈夊乏渚у<E6B89A>鑸?*/
|
||
hasSideNav?: boolean
|
||
|
||
/** 宸︿晶瀵艰埅閰嶇疆锛堝<E9949B>鏋滄湁锛?*/
|
||
sideNavConfig?: SideNavItem[]
|
||
|
||
/** 鏉冮檺瑕佹眰锛堝彲閫夛級 */
|
||
requiredVersion?: UserVersion
|
||
|
||
/** 鏄<>惁涓哄崰浣嶆ā鍧?*/
|
||
placeholder?: boolean
|
||
|
||
/** 鏄<>惁鏀<E68381>寔鐙<E5AF94>珛閮ㄧ讲 */
|
||
standalone?: boolean
|
||
}
|
||
|
||
/**
|
||
* 宸︿晶瀵艰埅椤? */
|
||
export interface SideNavItem {
|
||
id: string
|
||
label: string
|
||
path: string
|
||
icon?: ReactNode
|
||
children?: SideNavItem[]
|
||
}
|
||
```
|
||
|
||
### 妯″潡娉ㄥ唽绀轰緥
|
||
|
||
```typescript
|
||
// modules/asl/index.tsx
|
||
|
||
import { lazy } from 'react'
|
||
import { ModuleDefinition } from '@/framework/modules/types'
|
||
import routes from './routes'
|
||
import { sideNavConfig } from './config'
|
||
|
||
const ASLModule: ModuleDefinition = {
|
||
id: 'asl',
|
||
name: 'AI鏅鸿兘鏂囩尞',
|
||
path: '/literature',
|
||
icon: <FileTextOutlined />,
|
||
component: lazy(() => import('./layouts/ASLLayout')),
|
||
routes,
|
||
hasSideNav: true,
|
||
sideNavConfig,
|
||
requiredVersion: 'advanced',
|
||
}
|
||
|
||
export default ASLModule
|
||
```
|
||
|
||
### 妯″潡璺<E6BDA1>敱绀轰緥
|
||
|
||
```typescript
|
||
// modules/asl/routes.tsx
|
||
|
||
import { lazy } from 'react'
|
||
import { RouteObject } from 'react-router-dom'
|
||
|
||
const routes: RouteObject[] = [
|
||
{
|
||
path: '',
|
||
element: lazy(() => import('./pages/ProjectList')),
|
||
},
|
||
{
|
||
path: 'project/:projectId',
|
||
children: [
|
||
{
|
||
path: 'title-screening',
|
||
element: lazy(() => import('./pages/TitleScreening')),
|
||
},
|
||
{
|
||
path: 'fulltext-screening',
|
||
element: lazy(() => import('./pages/FullTextScreening')),
|
||
},
|
||
{
|
||
path: 'extraction',
|
||
element: lazy(() => import('./pages/DataExtraction')),
|
||
},
|
||
{
|
||
path: 'analysis',
|
||
element: lazy(() => import('./pages/Analysis')),
|
||
},
|
||
],
|
||
},
|
||
]
|
||
|
||
export default routes
|
||
```
|
||
|
||
---
|
||
|
||
## 馃搧 鍚庣<E98D9A>鏋舵瀯璁捐<E79281>锛坆ackend锛?
|
||
### 璁捐<E79281>鍘熷垯
|
||
|
||
1. **Schema闅旂<E99785>** - 鏁版嵁搴撳眰闈㈢殑妯″潡闅旂<E99785>锛堝凡瀹屾垚锛?2. **浠g爜鍒嗗眰** - platform/common/modules涓夊眰鏋舵瀯
|
||
3. **妯″潡鐙<E6BDA1>珛** - 姣忎釜妯″潡鐨凙PI鍜岄€昏緫鐙<E7B7AB>珛
|
||
4. **淇濇寔鍏煎<E98D8F>** - 杞诲害閲嶆瀯锛屼笉鐮村潖鐜版湁鍔熻兘
|
||
|
||
### 鐩<>綍缁撴瀯
|
||
|
||
```
|
||
backend/
|
||
鈹溾攢鈹€ src/
|
||
鈹? 鈹溾攢鈹€ platform/ # 馃彌锔?骞冲彴灞傦紙鍩虹<E98DA9>璁炬柦锛?鈹? 鈹? 鈹溾攢鈹€ auth/ # 璁よ瘉鎺堟潈
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ authController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ authService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ authMiddleware.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ routes.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ users/ # 鐢ㄦ埛绠$悊
|
||
鈹? 鈹? 鈹溾攢鈹€ userController.ts
|
||
鈹? 鈹? 鈹溾攢鈹€ userService.ts
|
||
鈹? 鈹? 鈹斺攢鈹€ routes.ts
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ common/ # 馃敡 閫氱敤灞傦紙鍏变韩鑳藉姏锛?鈹? 鈹? 鈹溾攢鈹€ middleware/ # 涓<>棿浠?鈹? 鈹? 鈹? 鈹溾攢鈹€ errorHandler.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ logger.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ validation.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ cors.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ utils/ # 宸ュ叿鍑芥暟
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ date.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ encryption.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ format.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ errors/ # 閿欒<E996BF>澶勭悊
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ AppError.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ errorTypes.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ errorHandler.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ types/ # 閫氱敤绫诲瀷
|
||
鈹? 鈹? 鈹溾攢鈹€ request.ts
|
||
鈹? 鈹? 鈹溾攢鈹€ response.ts
|
||
鈹? 鈹? 鈹斺攢鈹€ common.ts
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ modules/ # 馃摝 涓氬姟妯″潡
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ aia/ # AI鏅鸿兘闂<E58598>瓟妯″潡
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ controllers/ # 鎺у埗鍣?鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ projectController.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ agentController.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ conversationController.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ chatController.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ services/ # 涓氬姟閫昏緫
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ projectService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ conversationService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ llmService.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ routes/ # 璺<>敱閰嶇疆
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ types/ # 妯″潡绫诲瀷
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ project.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ conversation.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹斺攢鈹€ utils/ # 妯″潡宸ュ叿
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ prompt.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ pkb/ # 涓<>汉鐭ヨ瘑搴撴ā鍧?鈹? 鈹? 鈹? 鈹溾攢鈹€ controllers/
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseController.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ documentController.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ batchController.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ services/
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ kbService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ documentService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ batchService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ difyService.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ routes/
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹斺攢鈹€ types/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ knowledgeBase.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ document.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ rvw/ # 瀹$ǹ绯荤粺妯″潡
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ controllers/
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ reviewController.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ services/
|
||
鈹? 鈹? 鈹? 鈹? 鈹溾攢鈹€ reviewService.ts
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ extractionService.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹溾攢鈹€ routes/
|
||
鈹? 鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹? 鈹?鈹? 鈹? 鈹? 鈹斺攢鈹€ types/
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ review.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ asl/ # 猸?AI鏅鸿兘鏂囩尞妯″潡锛圵eek 3鏂板缓锛?鈹? 鈹? 鈹溾攢鈹€ controllers/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ projectController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ literatureController.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ screeningController.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ extractionController.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ services/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ projectService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ literatureService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ screeningService.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ llmScreeningService.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ extractionService.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ routes/
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ index.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹溾攢鈹€ types/
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ project.ts
|
||
鈹? 鈹? 鈹? 鈹溾攢鈹€ literature.ts
|
||
鈹? 鈹? 鈹? 鈹斺攢鈹€ screening.ts
|
||
鈹? 鈹? 鈹?鈹? 鈹? 鈹斺攢鈹€ utils/
|
||
鈹? 鈹? 鈹溾攢鈹€ fileParser.ts
|
||
鈹? 鈹? 鈹溾攢鈹€ llmPrompts.ts
|
||
鈹? 鈹? 鈹斺攢鈹€ exportHelper.ts
|
||
鈹? 鈹?鈹? 鈹溾攢鈹€ config/ # 閰嶇疆鏂囦欢锛堢幇鏈夛級
|
||
鈹? 鈹? 鈹溾攢鈹€ database.ts
|
||
鈹? 鈹? 鈹溾攢鈹€ env.ts
|
||
鈹? 鈹? 鈹斺攢鈹€ ...
|
||
鈹? 鈹?鈹? 鈹斺攢鈹€ index.ts # 搴旂敤鍏ュ彛
|
||
鈹?鈹溾攢鈹€ prisma/
|
||
鈹? 鈹斺攢鈹€ schema.prisma # Prisma Schema锛堝凡閰嶇疆10涓猄chema锛?鈹?鈹溾攢鈹€ package.json
|
||
鈹斺攢鈹€ tsconfig.json
|
||
```
|
||
|
||
### 妯″潡璺<E6BDA1>敱娉ㄥ唽
|
||
|
||
```typescript
|
||
// src/index.ts
|
||
|
||
import { platformRoutes } from './platform/routes'
|
||
import { aiaRoutes } from './modules/aia/routes'
|
||
import { pkbRoutes } from './modules/pkb/routes'
|
||
import { rvwRoutes } from './modules/rvw/routes'
|
||
import { aslRoutes } from './modules/asl/routes'
|
||
|
||
// 娉ㄥ唽骞冲彴璺<E5BDB4>敱
|
||
fastify.register(platformRoutes, { prefix: '/api/v1/platform' })
|
||
|
||
// 娉ㄥ唽涓氬姟妯″潡璺<E6BDA1>敱
|
||
fastify.register(aiaRoutes, { prefix: '/api/v1/aia' })
|
||
fastify.register(pkbRoutes, { prefix: '/api/v1/pkb' })
|
||
fastify.register(rvwRoutes, { prefix: '/api/v1/rvw' })
|
||
fastify.register(aslRoutes, { prefix: '/api/v1/asl' })
|
||
```
|
||
|
||
---
|
||
|
||
## 馃敆 鍓嶅悗绔<E68297><E7BB94>搴斿叧绯?
|
||
### 妯″潡鏄犲皠琛?
|
||
| 鍓嶇<E98D93>妯″潡 | 鍚庣<E98D9A>妯″潡 | 鏁版嵁搴揝chema | 璺<>敱鍓嶇紑 | 寮€鍙戠姸鎬?|
|
||
|---------|---------|-------------|---------|---------|
|
||
| `frontend-v2/src/modules/asl/` | `backend/src/modules/asl/` | `asl_schema` | `/api/v1/asl/*` | 馃毀 Week 3寮€鍙?|
|
||
| `frontend-v2/src/modules/aia/` | `backend/src/modules/aia/` | `aia_schema` | `/api/v1/aia/*` | 馃搵 鍚庣画閲嶅啓 |
|
||
| `frontend-v2/src/modules/pkb/` | `backend/src/modules/pkb/` | `pkb_schema` | `/api/v1/pkb/*` | 馃搵 鍚庣画閲嶅啓 |
|
||
| `frontend-v2/src/modules/rvw/` | `backend/src/modules/rvw/` | `public.review_tasks` | `/api/v1/rvw/*` | 馃搵 鍚庣画閲嶅啓 |
|
||
| `frontend-v2/src/modules/dc/` | `backend/src/modules/dc/` | `dc_schema` | `/api/v1/dc/*` | 馃搵 鍗犱綅 |
|
||
|
||
### API璋冪敤绀轰緥
|
||
|
||
```typescript
|
||
// 鍓嶇<E98D93>锛歠rontend-v2/src/modules/asl/api/projectApi.ts
|
||
import { apiClient } from '@/shared/api/client'
|
||
|
||
export const aslProjectApi = {
|
||
// 鍒涘缓椤圭洰
|
||
create: (data: CreateProjectDTO) =>
|
||
apiClient.post('/api/v1/asl/projects', data),
|
||
|
||
// 鑾峰彇椤圭洰鍒楄〃
|
||
list: () =>
|
||
apiClient.get('/api/v1/asl/projects'),
|
||
|
||
// 鑾峰彇椤圭洰璇︽儏
|
||
getById: (id: string) =>
|
||
apiClient.get(`/api/v1/asl/projects/${id}`),
|
||
}
|
||
|
||
// 鍚庣<E98D9A>锛歜ackend/src/modules/asl/routes/index.ts
|
||
import { FastifyInstance } from 'fastify'
|
||
import { aslProjectController } from '../controllers/projectController'
|
||
|
||
export async function aslRoutes(fastify: FastifyInstance) {
|
||
fastify.post('/projects', aslProjectController.create)
|
||
fastify.get('/projects', aslProjectController.list)
|
||
fastify.get('/projects/:id', aslProjectController.getById)
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 馃搻 寮€鍙戣<E98D99>鑼?
|
||
### 鍛藉悕瑙勮寖
|
||
|
||
#### 鍓嶇<E98D93>
|
||
|
||
**鏂囦欢鍛藉悕锛?*
|
||
- 缁勪欢锛歅ascalCase锛坄ProjectList.tsx`锛?- Hooks锛歝amelCase + use鍓嶇紑锛坄useProject.ts`锛?- 宸ュ叿鍑芥暟锛歝amelCase锛坄formatDate.ts`锛?- 绫诲瀷瀹氫箟锛歅ascalCase锛坄Project.ts`锛?
|
||
**浠g爜鍛藉悕锛?*
|
||
- 缁勪欢锛歅ascalCase锛坄ProjectList`锛?- 鍑芥暟锛歝amelCase锛坄fetchProjects`锛?- 甯搁噺锛歎PPER_SNAKE_CASE锛坄API_BASE_URL`锛?- 鎺ュ彛锛歅ascalCase + I鍓嶇紑锛坄IProject`锛?- 绫诲瀷锛歅ascalCase锛坄Project`锛?
|
||
#### 鍚庣<E98D9A>
|
||
|
||
**鏂囦欢鍛藉悕锛?*
|
||
- Controller锛歝amelCase + Controller鍚庣紑锛坄projectController.ts`锛?- Service锛歝amelCase + Service鍚庣紑锛坄projectService.ts`锛?- Routes锛歚index.ts` 鎴?`routes.ts`
|
||
- Types锛歝amelCase锛坄project.ts`锛?
|
||
**浠g爜鍛藉悕锛?*
|
||
- 绫伙細PascalCase锛坄ProjectService`锛?- 鍑芥暟锛歝amelCase锛坄createProject`锛?- 甯搁噺锛歎PPER_SNAKE_CASE锛坄MAX_FILE_SIZE`锛?- 鎺ュ彛锛歅ascalCase锛坄ProjectDTO`锛?
|
||
### 妯″潡寮€鍙戣<E98D99>鑼?
|
||
#### 1. 鏂版ā鍧楀紑鍙戞祦绋?
|
||
```
|
||
绗<EFBFBD>竴姝ワ細鏁版嵁搴撹<EFBFBD>璁?鈹溾攢 鍦?docs/03-涓氬姟妯″潡/[妯″潡鍚峕/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md
|
||
鈹溾攢 璁捐<E79281>琛ㄧ粨鏋?鈹溾攢 鍦?Prisma schema 涓<>畾涔夋ā鍨?鈹斺攢 杩愯<E69DA9>杩佺Щ
|
||
|
||
绗<EFBFBD>簩姝ワ細鍚庣<EFBFBD>寮€鍙?鈹溾攢 鍒涘缓 backend/src/modules/[妯″潡鍚峕/
|
||
鈹溾攢 缂栧啓 controllers/
|
||
鈹溾攢 缂栧啓 services/
|
||
鈹溾攢 缂栧啓 routes/
|
||
鈹斺攢 娴嬭瘯 API
|
||
|
||
绗<EFBFBD>笁姝ワ細鍓嶇<EFBFBD>寮€鍙?鈹溾攢 鍒涘缓 frontend-v2/src/modules/[妯″潡鍚峕/
|
||
鈹溾攢 瀹氫箟妯″潡鎺ュ彛锛坕ndex.tsx锛?鈹溾攢 缂栧啓 pages/
|
||
鈹溾攢 缂栧啓 components/
|
||
鈹溾攢 缂栧啓 api/
|
||
鈹溾攢 缂栧啓 hooks/
|
||
鈹斺攢 娴嬭瘯鍔熻兘
|
||
|
||
绗<EFBFBD>洓姝ワ細闆嗘垚娴嬭瘯
|
||
鈹溾攢 绔<>埌绔<E59F8C>祴璇?鈹斺攢 鎬ц兘娴嬭瘯
|
||
```
|
||
|
||
#### 2. 妯″潡鐙<E6BDA1>珛鎬у師鍒?
|
||
**DO 鉁咃細**
|
||
- 妯″潡鍐呯殑缁勪欢鍙<E6ACA2>湪妯″潡鍐呬娇鐢?- 妯″潡鏈夎嚜宸辩殑鐘舵€佺<E282AC>鐞?- 妯″潡鏈夎嚜宸辩殑API璋冪敤
|
||
- 妯″潡鏈夎嚜宸辩殑绫诲瀷瀹氫箟
|
||
- 妯″潡鍙<E6BDA1>互鐙<E4BA92>珛杩愯<E69DA9>鍜岄儴缃?
|
||
**DON'T 鉂岋細**
|
||
- 涓嶈<E6B693>鍦ㄦā鍧楅棿鐩存帴import缁勪欢
|
||
- 涓嶈<E6B693>鍦ㄦā鍧楅棿鍏变韩鐘舵€?- 涓嶈<E6B693>鍦ㄦā鍧楅棿鐩存帴璋冪敤API
|
||
- 鍏变韩鐨勯€昏緫鏀惧湪 `shared/` 鐩<>綍
|
||
|
||
#### 3. API璁捐<E79281>瑙勮寖
|
||
|
||
**RESTful椋庢牸锛?*
|
||
```
|
||
GET /api/v1/[module]/resources # 鍒楄〃
|
||
GET /api/v1/[module]/resources/:id # 璇︽儏
|
||
POST /api/v1/[module]/resources # 鍒涘缓
|
||
PUT /api/v1/[module]/resources/:id # 鏇存柊
|
||
DELETE /api/v1/[module]/resources/:id # 鍒犻櫎
|
||
```
|
||
|
||
**鍝嶅簲鏍煎紡锛?*
|
||
```typescript
|
||
// 鎴愬姛鍝嶅簲
|
||
{
|
||
success: true,
|
||
data: any,
|
||
message?: string
|
||
}
|
||
|
||
// 閿欒<E996BF>鍝嶅簲
|
||
{
|
||
success: false,
|
||
error: {
|
||
code: string,
|
||
message: string,
|
||
details?: any
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 馃殌 瀹炴柦璁″垝
|
||
|
||
### Week 2锛氭灦鏋勬敼閫狅紙2025-11-13 鑷?2025-11-17锛?
|
||
#### Day 6锛?1-13锛夛細鍓嶇<E98D93>鏋舵瀯鍩虹<E98DA9> 鈴?4-6灏忔椂
|
||
|
||
**涓婂崍锛氶」鐩<E3808D>垱寤哄拰妗嗘灦灞?*
|
||
- [x] 鍒涘缓 frontend-v2 椤圭洰锛圴ite + React + TS锛?- [x] 瀹夎<E780B9>渚濊禆锛圓ntd銆丷outer銆乑ustand銆丷eact Query锛?- [x] 閰嶇疆 Tailwind CSS
|
||
- [x] 鍒涘缓鐩<E7BC93>綍缁撴瀯锛坒ramework/modules/shared锛?- [x] 瀹炵幇 TopNavigation.tsx
|
||
- [x] 瀹炵幇 MainLayout.tsx
|
||
- [x] 瀹氫箟妯″潡鎺ュ彛锛圡oduleDefinition锛?
|
||
**涓嬪崍锛氭ā鍧楀崰浣?*
|
||
- [x] 涓?涓<>ā鍧楀垱寤虹洰褰?- [x] 鍒涘缓 Placeholder.tsx 缁勪欢
|
||
- [x] 閰嶇疆鍩烘湰璺<E6B9B0>敱
|
||
- [x] 娴嬭瘯瀵艰埅鍒囨崲
|
||
|
||
**浜や粯鐗╋細**
|
||
- 鉁?鍙<>繍琛岀殑 frontend-v2 椤圭洰
|
||
- 鉁?椤堕儴瀵艰埅姝e父宸ヤ綔
|
||
- 鉁?5涓<35>ā鍧楀崰浣嶉〉闈?
|
||
#### Day 7锛?1-14锛夛細妯″潡娉ㄥ唽鏈哄埗 鈴?6-8灏忔椂
|
||
|
||
**涓婂崍锛氭敞鍐岀郴缁?*
|
||
- [ ] 瀹炵幇 moduleRegistry.ts
|
||
- [ ] 瀹炵幇 ModuleLoader.tsx
|
||
- [ ] 瀹炵幇鍔ㄦ€佽矾鐢卞姞杞?- [ ] 瀹炵幇鎳掑姞杞芥満鍒?
|
||
**涓嬪崍锛氭祴璇曞拰鏂囨。**
|
||
- [ ] 娴嬭瘯妯″潡娉ㄥ唽
|
||
- [ ] 娴嬭瘯璺<E798AF>敱鍒囨崲
|
||
- [ ] 缂栧啓寮€鍙戞枃妗?- [ ] 鏇存柊 README
|
||
|
||
**浜や粯鐗╋細**
|
||
- 鉁?瀹屾暣鐨勬ā鍧楁敞鍐岀郴缁?- 鉁?鍔ㄦ€佽矾鐢卞姞杞?- 鉁?寮€鍙戞枃妗?
|
||
#### Day 8-9锛?1-15 鑷?11-16锛夛細鍚庣<E98D9A>浠g爜鍒嗗眰 鈴?1-2澶?
|
||
**Day 8 涓婂崍锛氬垱寤虹洰褰曠粨鏋?*
|
||
- [ ] 鍒涘缓 platform/ 鐩<>綍
|
||
- [ ] 鍒涘缓 common/ 鐩<>綍
|
||
- [ ] 鍒涘缓 modules/ 鐩<>綍
|
||
|
||
**Day 8 涓嬪崍锛氳縼绉?AIA 妯″潡**
|
||
- [ ] 鍒涘缓 modules/aia/ 缁撴瀯
|
||
- [ ] 杩佺Щ projectController.ts
|
||
- [ ] 杩佺Щ conversationController.ts
|
||
- [ ] 鏇存柊璺<E69F8A>敱娉ㄥ唽
|
||
|
||
**Day 9 涓婂崍锛氳縼绉?PKB 鍜?RVW**
|
||
- [ ] 杩佺Щ PKB 妯″潡浠g爜
|
||
- [ ] 杩佺Щ RVW 妯″潡浠g爜
|
||
- [ ] 鏇存柊鎵€鏈?import 璺<>緞
|
||
|
||
**Day 9 涓嬪崍锛氭祴璇曞拰鏂囨。**
|
||
- [ ] 娴嬭瘯鎵€鏈?API
|
||
- [ ] 鏇存柊 API 鏂囨。
|
||
- [ ] 缂栧啓杩佺Щ璇存槑
|
||
|
||
**浜や粯鐗╋細**
|
||
- 鉁?瀹屾垚鍚庣<E98D9A>浠g爜鍒嗗眰
|
||
- 鉁?鎵€鏈堿PI姝e父宸ヤ綔
|
||
- 鉁?鏇存柊鏂囨。
|
||
|
||
#### Day 10锛?1-17锛夛細Week 2 楠屾敹 鈴?4灏忔椂
|
||
|
||
- [ ] 鍓嶇<E98D93>鏋舵瀯楠屾敹
|
||
- [ ] 鍚庣<E98D9A>鍒嗗眰楠屾敹
|
||
- [ ] 闆嗘垚娴嬭瘯
|
||
- [ ] 缂栧啓 Week 2 鎬荤粨鎶ュ憡
|
||
- [ ] 瑙勫垝 Week 3 ASL 浠诲姟
|
||
|
||
---
|
||
|
||
### Week 3-4锛欰SL妯″潡寮€鍙戯紙鍦ㄦ柊鏋舵瀯涓嬶級
|
||
|
||
**鍦ㄥ叏鏂扮殑 frontend-v2 鍜屽垎灞傚悗鐨?backend 涓<>紑鍙?ASL 妯″潡**
|
||
|
||
璇﹁<EFBFBD>锛歔涓嬩竴闃舵<EFBFBD>琛屽姩璁″垝-V2.2-瀹屾暣鐗?md](../08-椤圭洰绠$悊/涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗?md)
|
||
|
||
---
|
||
|
||
## 馃摑 鏃т唬鐮佸<E990AE>鐞?
|
||
### frontend/ 鐩<>綍
|
||
|
||
**鐘舵€侊細** 鈴革笍 淇濈暀锛屼笉鍐嶅紑鍙?
|
||
**澶勭悊鏂瑰紡锛?*
|
||
1. 娣诲姞 `README-ARCHIVED.md` 璇存槑鏂囦欢
|
||
2. 鍦ㄦ牴鐩<E789B4>綍 `package.json` 涓<>尯鍒嗗惎鍔ㄥ懡浠?3. 淇濈暀3-6涓<36>湀锛屼綔涓哄弬鑰冨拰搴旀€ュ<E282AC>浠?4. 鏂版灦鏋勭ǔ瀹氬悗鍐嶅垹闄?
|
||
**鍙傝€冧环鍊硷細**
|
||
- UI浜や簰璁捐<E79281>
|
||
- 鏌愪簺缁勪欢瀹炵幇
|
||
- API璋冪敤閫昏緫
|
||
- 涓氬姟娴佺▼
|
||
|
||
### 鍚<>姩鍛戒护
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"dev:frontend-old": "cd frontend && npm run dev",
|
||
"dev:frontend-new": "cd frontend-v2 && npm run dev",
|
||
"dev:frontend": "npm run dev:frontend-new",
|
||
"dev:backend": "cd backend && npm run dev",
|
||
"dev": "concurrently \"npm run dev:backend\" \"npm run dev:frontend\""
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 馃幆 鎴愬姛鏍囧噯
|
||
|
||
### Week 2 楠屾敹鏍囧噯
|
||
|
||
**鍓嶇<E98D93>锛?*
|
||
- [x] frontend-v2 椤圭洰鍙<E6B4B0>繍琛?- [x] 椤堕儴瀵艰埅姝e父宸ヤ綔
|
||
- [x] 妯″潡娉ㄥ唽绯荤粺瀹屾暣
|
||
- [x] 5涓<35>ā鍧楀崰浣嶉〉闈?- [x] 璺<>敱鍒囨崲姝e父
|
||
- [x] 瀹屾暣鐨勫紑鍙戞枃妗?
|
||
**鍚庣<E98D9A>锛?*
|
||
- [ ] 浠g爜鍒嗗眰瀹屾垚锛坧latform/common/modules锛?- [ ] 鎵€鏈夌幇鏈堿PI姝e父宸ヤ綔
|
||
- [ ] 璺<>敱鍓嶇紑缁熶竴锛?api/v1/[module]/*锛?- [ ] import璺<74>緞鍏ㄩ儴鏇存柊
|
||
- [ ] API鏂囨。鏇存柊
|
||
|
||
**鏂囨。锛?*
|
||
- [x] 鏈<>灦鏋勮<E98F8B>璁℃枃妗?- [ ] 鍓嶇<E98D93>寮€鍙戣<E98D99>鑼冩枃妗?- [ ] 鍚庣<E98D9A>寮€鍙戣<E98D99>鑼冩枃妗?- [ ] Week 2鎬荤粨鎶ュ憡
|
||
|
||
---
|
||
|
||
## 馃摎 鐩稿叧鏂囨。
|
||
|
||
### 鏋舵瀯璁捐<E79281>
|
||
- [Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>锛?0涓<30>級](../09-鏋舵瀯瀹炴柦/01-Schema闅旂<E99785>鏋舵瀯璁捐<E79281>锛?0涓<30>級.md)
|
||
- [鍓嶇<EFBFBD>鎬讳綋鏋舵瀯璁捐<EFBFBD>](../01-骞冲彴鍩虹<E98DA9>灞?06-鍓嶇<E98D93>鏋舵瀯/01-鍓嶇<E98D93>鎬讳綋鏋舵瀯璁捐<E79281>.md)
|
||
- [瀵艰埅缁撴瀯璁捐<EFBFBD>](../01-骞冲彴鍩虹<E98DA9>灞?06-鍓嶇<E98D93>鏋舵瀯/02-瀵艰埅缁撴瀯璁捐<E79281>.md)
|
||
|
||
### 鏁版嵁搴撹<E690B4>璁?- [AIA鏁版嵁搴撹<E690B4>璁<EFBFBD>(../03-涓氬姟妯″潡/AIA-AI鏅鸿兘闂<E58598>瓟/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
|
||
- [PKB鏁版嵁搴撹<E690B4>璁<EFBFBD>(../03-涓氬姟妯″潡/PKB-涓<>汉鐭ヨ瘑搴?02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
|
||
|
||
### 瀹炴柦鎶ュ憡
|
||
- [Schema杩佺Щ瀹屾垚鎶ュ憡](../09-鏋舵瀯瀹炴柦/Schema杩佺Щ瀹屾垚鎶ュ憡.md)
|
||
- [Prisma閰嶇疆瀹屾垚鎶ュ憡](../09-鏋舵瀯瀹炴柦/Prisma閰嶇疆瀹屾垚鎶ュ憡.md)
|
||
|
||
### 椤圭洰绠$悊
|
||
- [涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗圿(../08-椤圭洰绠$悊/涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗?md)
|
||
|
||
---
|
||
|
||
## 馃攧 鐗堟湰鍘嗗彶
|
||
|
||
| 鐗堟湰 | 鏃ユ湡 | 鍙樻洿鍐呭<E98D90> | 缁存姢鑰?|
|
||
|------|------|---------|--------|
|
||
| V2.0 | 2025-11-12 | 鍒涘缓鏈<E7BC93>枃妗o紝瀹氫箟鍓嶅悗绔<E68297>ā鍧楀寲鏋舵瀯 | AI鍔╂墜 |
|
||
| V2.1 | 2025-11-13 | 瀹屾垚鏉冮檺绯荤粺銆侀敊璇<E6958A>竟鐣屻€佽矾鐢卞畧鍗<E795A7>疄鏂?| AI鍔╂墜 |
|
||
|
||
---
|
||
|
||
**鏂囨。缁存姢鑰咃細** AI鍔╂墜 + 寮€鍙戝洟闃?
|
||
**鏈€鍚庢洿鏂帮細** 2025-11-13
|
||
**鏂囨。鐘舵€侊細** 鉁?宸插畬鎴愶紝Week 2 Day 7瀹炴柦瀹屾垚
|
||
|
||
**馃帀 杩欐槸绯荤粺鏋舵瀯婕旇繘鐨勯噸瑕侀噷绋嬬<E7BB8B>锛?*
|
||
|
||
|