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%)
65 KiB
鍓嶅悗绔<EFBFBD>ā鍧楀寲鏋舵瀯璁捐<EFBFBD> V2.0
*鐗堟湰锛? V2.3
*鍒涘缓鏃ユ湡锛? 2025-11-12
*瀹炴柦闃舵<EFBFBD>锛? Week 23锛?025-11-1317锛? 缁存姢鑰咃細 寮€鍙戝洟闃? 鐘舵€侊細 鉁?Week 2 Day 6-9 + 骞冲彴鍩虹<E98DA9>璁炬柦 鍏ㄩ儴瀹屾垚 猸愨瓙猸?
馃搵 鏂囨。璇存槑
鏈<EFBFBD>枃妗f槸AI涓村簥鐮旂┒骞冲彴鐨勬ā鍧楀寲鏋舵瀯璁捐<EFBFBD>鎬荤翰锛屽畾涔変簡锛?
- 鍓嶇<EFBFBD>鏋舵瀯锛氬叏鏂扮殑 frontend-v2 妯″潡鍖栨灦鏋?2. 鍚庣<EFBFBD>鏋舵瀯锛氬熀浜嶴chema闅旂<EFBFBD>鐨勫垎灞傛灦鏋?3. **鍓嶅悗绔<E68297><E7BB94>搴斿叧绯?*锛氭ā鍧楀寲鐨勭粍缁囨柟寮?4. **寮€鍙戣<E98D99>鑼?*锛氱粺涓€鐨勪唬鐮佺粍缁囧拰鍛藉悕瑙勮寖
- 瀹炴柦璺<EFBFBD>嚎锛氭笎杩涘紡鐨勬灦鏋勬敼閫犺<EFBFBD>鍒? *閫傜敤瀵硅薄锛?
- 鏂板姞鍏ョ殑寮€鍙戜汉鍛橈紙蹇<EFBFBD>€熶簡瑙g郴缁熸灦鏋勶級
- AI鍔╂墜锛堢悊瑙d唬鐮佺粍缁囩粨鏋勶級
- 鎶€鏈<EFBFBD>喅绛栬€咃紙鏋舵瀯婕旇繘鍙傝€冿級
馃幆 鏋舵瀯婕旇繘鍘嗗彶
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瀹屾垚
- 鉁?鍚庣<EFBFBD>澧為噺婕旇繘鏋舵瀯锛坙egacy/common/modules锛? Day 8-9瀹屾垚
- 鉁?鍓嶅悗绔<E68297>ā鍧楀<E98DA7>搴?- 鉁?鏀<>寔妯″潡鐙<E6BDA1>珛寮€鍙戝拰閮ㄧ讲
- 鉁?鎵€鏈夊姛鑳芥祴璇曢€氳繃锛堝寘鎷<EFBFBD>壒澶勭悊淇<EFBFBD><EFBFBD>锛夆瓙猸愨瓙
V2.1 闃舵<E99783>锛?025-11-17瀹屾垚锛夆瓙猸愨瓙 鏈€鏂?- 鉁?骞冲彴鍩虹<EFBFBD>璁炬柦瀹炴柦瀹屾垚锛?涓<>牳蹇冩ā鍧楋級
- 鉁?瀛樺偍鏈嶅姟锛歀ocalAdapter + OSSAdapter锛堥<E9949B>鐣欙級
- 鉁?鏃ュ織绯荤粺锛歐inston + 缁撴瀯鍖朖SON鏃ュ織
- 鉁?缂撳瓨鏈嶅姟锛歁emoryCache + Redis锛堥<E9949B>鐣欙級
- 鉁?寮傛<EFBFBD>浠诲姟锛歁emoryQueue + DatabaseQueue锛堥<E9949B>鐣欙級
- 鉁?**鍋ュ悍妫€鏌?*锛歀iveness + Readiness + 璇︾粏妫€鏌?- 鉁?鐩戞帶鎸囨爣锛氭暟鎹<EFBFBD>簱杩炴帴/鍐呭瓨/API鐩戞帶
- 鉁?鏁版嵁搴撹繛鎺ユ睜锛歋erverless浼樺寲锛堥槻姝㈣繛鎺ユ暟瓒呴檺锛?- 鉁?鐜<EFBFBD><EFBFBD>閰嶇疆绠$悊锛氱粺涓€鐨勯厤缃<EFBFBD>姞杞藉拰楠岃瘉
- 鉁?**閫傞厤鍣ㄦā寮?*锛氶浂浠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锛?
鐩<EFBFBD>綍缁撴瀯锛堝疄闄呭瓨鍦<EFBFBD>級
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閰嶇疆
褰撳墠杩愯<EFBFBD>鐘舵€侊細
- 鉁?璁块棶鍦板潃锛歨ttp://localhost:3000
- 鉁?椤堕儴瀵艰埅鏄剧ず6涓<36>ā鍧?- 鉁?鏉冮檺鎺у埗宸ヤ綔姝e父锛坢ock premium鐢ㄦ埛锛?- 鉁?璺<>敱瀹堝崼鐢熸晥
- 鉁?閿欒<E996BF>杈圭晫姝e父鎹曡幏
馃梽锔?鍚庣<E98D9A>鐪熷疄鏋舵瀯锛圔ackend锛?
鐩<EFBFBD>綍缁撴瀯锛堝疄闄呭瓨鍦<EFBFBD>級猸?鍏抽敭
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>鍙橀噺
褰撳墠杩愯<EFBFBD>鐘舵€侊細
- 鉁?璁块棶鍦板潃锛歨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锛夊疄闄呬唬鐮侊細
// ============================================
// 銆愭棫鏋舵瀯銆慙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>級
-- ==================== 骞冲彴灞?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 閰嶇疆锛?
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 # 鍒犻櫎椤圭洰
鏅鸿兘浣撶<E6B5A3>鐞嗭細
鉁?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 # 鍒犻櫎浠诲姟
绯荤粺绔<EFBFBD>偣
鉁?GET /health # 鍋ュ悍妫€鏌?鉁?GET /api/v1 # API淇℃伅
馃搳 鎶€鏈<E282AC>爤鐪熷疄閰嶇疆
*鍓嶇<EFBFBD>锛團rontend-v2锛?
{
"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"
}
*鍚庣<EFBFBD>锛圔ackend锛?
{
"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 | 绉佹湁鍖栭儴缃?| 鍗曟満鐗? 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
馃摝 鏍稿績妯″潡娓呭崟
| 妯″潡 | 璺<EFBFBD>緞 | 鐘舵€? | 璇存槑 | 鐜<EFBFBD><EFBFBD>鍒囨崲 |
|---|---|---|---|---|
| 瀛樺偍鏈嶅姟 | common/storage/ |
鉁?瀹屾垚 | 鏂囦欢涓婁紶涓嬭浇 | STORAGE_TYPE=local/oss |
| 鏁版嵁搴撹繛鎺ユ睜 | config/database.ts |
鉁?瀹屾垚 | Prisma杩炴帴姹? | DATABASE_URL |
| 鏃ュ織绯荤粺 | common/logging/ |
鉁?瀹屾垚 | 缁撴瀯鍖栨棩蹇? | 鑷<EFBFBD>姩鍒囨崲锛堟牴鎹甆ODE_ENV锛? |
| 鐜<EFBFBD><EFBFBD>閰嶇疆 | config/env.ts |
鉁?瀹屾垚 | 缁熶竴閰嶇疆绠$悊 | .env鏂囦欢鎴栫幆澧冨彉閲? |
| 寮傛<EFBFBD>浠诲姟 | common/jobs/ |
鉁?瀹屾垚 | 闀挎椂闂翠换鍔″<EFBFBD>鐞? | QUEUE_TYPE=memory/database |
| 缂撳瓨鏈嶅姟 | common/cache/ |
鉁?瀹屾垚 | 鍐呭瓨/Redis缂撳瓨 | CACHE_TYPE=memory/redis |
| *鍋ュ悍妫€鏌? | common/health/ |
鉁?瀹屾垚 | SAE鍋ュ悍妫€鏌? | N/A |
| 鐩戞帶鎸囨爣 | common/monitoring/ |
鉁?瀹屾垚 | 鍏抽敭鎸囨爣鐩戞帶 | N/A |
馃捇 浣跨敤绀轰緥
*1. 瀛樺偍鏈嶅姟锛堥浂浠g爜鍒囨崲锛?
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. 鏃ュ織绯荤粺锛堢粨鏋勫寲鏃ュ織锛?
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. 寮傛<EFBFBD>浠诲姟锛堥伩鍏峉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璋冪敤鎴愭湰锛?
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
馃實 澶氱幆澧冮厤缃?
*鏈<EFBFBD>湴寮€鍙戯紙.env.development锛?
# 瀛樺偍锛氭湰鍦版枃浠剁郴缁?STORAGE_TYPE=local
LOCAL_STORAGE_DIR=uploads
# 缂撳瓨锛氬唴瀛樼紦瀛?CACHE_TYPE=memory
# 浠诲姟闃熷垪锛氬唴瀛橀槦鍒?QUEUE_TYPE=memory
# 鏃ュ織锛氬僵鑹茶緭鍑?LOG_LEVEL=debug
*浜戠<EFBFBD>閮ㄧ讲锛?env.production锛?
# 瀛樺偍锛氶樋閲屼簯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>畨瑁?
# 闇€瑕佸畨瑁?cd backend
npm install winston
npm install -D @types/winston
*2. Legacy妯″潡鍏煎<E98D8F>鎬?
- 鉁?Legacy妯″潡锛圥KB銆丄IA銆丏C锛変繚鎸佺幇鐘讹紝姝e父杩愯<EFBFBD>
- 鉁?**鏂版ā鍧?*锛圓SL锛変娇鐢ㄥ钩鍙板熀纭€璁炬柦
- 馃攧 **鍙<>€夎縼绉?*锛歀egacy妯″潡鎸夐渶杩佺Щ锛堥<E9949B>璁?灏忔椂锛?
3. 浜戠<E6B59C>瀹炵幇棰勭暀
OSSAdapter銆乣RedisCacheAdapter` 褰撳墠涓洪<E6B693>鐣欏疄鐜?- 浜戠<E6B59C>閮ㄧ讲鍓嶉渶瀹夎<E780B9>渚濊禆骞跺彇娑堟敞閲?- 璇﹁<E79287>瀹炴柦鏂囨。
馃摎 鐩稿叧鏂囨。
- *璇︾粏瑙勫垝锛? 骞冲彴鍩虹<EFBFBD>璁炬柦瑙勫垝
- *浣跨敤鎸囧崡锛? backend/src/common/README.md
- *瀹炴柦鎶ュ憡锛? 2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦瀹炴柦瀹屾垚鎶ュ憡
- *楠岃瘉鎶ュ憡锛? 2025-11-17-骞冲彴鍩虹<E98DA9>璁炬柦楠岃瘉鎶ュ憡 猸?鏂板<E98F82>
- 寮€鍙戣<EFBFBD>鑼冿細 [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
鉁?娴嬭瘯楠岃瘉鐘舵€侊紙2025-11-17锛?
娴嬭瘯瑕嗙洊鐜囷細 100%锛?/8妯″潡鍏ㄩ儴閫氳繃锛?
| 妯″潡 | 娴嬭瘯鐘舵€? | 娴嬭瘯绔<EFBFBD>偣/鏂规硶 | 缁撴灉 |
|---|---|---|---|
| 瀛樺偍鏈嶅姟 | 鉁?閫氳繃 | storage.upload/download/delete/exists |
鍔熻兘姝e父 |
| 鏃ュ織绯荤粺 | 鉁?閫氳繃 | logger.info/warn/error + context |
杈撳嚭姝g‘ |
| 缂撳瓨鏈嶅姟 | 鉁?閫氳繃 | cache.set/get/has/delete/mset/mget |
鍏ㄩ儴姝e父 |
| 寮傛<EFBFBD>浠诲姟 | 鉁?閫氳繃 | jobQueue.push/getJob/process |
闃熷垪宸ヤ綔姝e父 |
| 鍋ュ悍妫€鏌? | 鉁?閫氳繃 | /health/liveness, /health/readiness |
200 OK |
| 鏁版嵁搴撹繛鎺ユ睜 | 鉁?閫氳繃 | 杩炴帴鏁扮洃鎺с€佷紭闆呭叧闂? | 1/400杩炴帴 |
| 鐜<EFBFBD><EFBFBD>閰嶇疆 | 鉁?閫氳繃 | config 瀵硅薄鍔犺浇 |
鎵€鏈夊彉閲忔<EFBFBD>甯? |
| 鐩戞帶鎸囨爣 | 鉁?閫氳繃 | Metrics.recordDBConnectionCount() |
鏁版嵁閲囬泦姝e父 |
*娴嬭瘯鏂瑰紡锛?
- 鍗曞厓娴嬭瘯锛氶€氳繃娴嬭瘯API
/test/platform鑷<>姩鍖栭獙璇?- 闆嗘垚娴嬭瘯锛氭墍鏈夋ā鍧楀疄闄呰皟鐢ㄩ獙璇?- 鍋ュ悍妫€鏌ワ細3涓<33><E6B693>鐐瑰叏閮ㄥ搷搴旀<E690B4>甯? 涓嬩竴姝ワ細 - 鉁?鏈<>湴寮€鍙戠幆澧冨凡灏辩华锛屽彲浠ュ紑濮婣SL妯″潡寮€鍙?- 馃攧 浜戠<E6B59C>閮ㄧ讲闇€瑕佸畨瑁?
ali-oss鍜?ioredis渚濊禆
馃尌锔?浜戝師鐢熼儴缃叉灦鏋勶紙2025-11-16 鏂板<E98F82>锛?
*猸?閲嶈<E996B2>鎻愮ず锛氭湰绔犺妭瀹氫箟骞冲彴鐨勪簯鍘熺敓閮ㄧ讲绛栫暐锛岄€傜敤浜庢墍鏈変笟鍔℃ā鍧?
*璇︾粏鎸囧崡锛? 鍙傝<E98D99> [浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md)
寮€鍙戣<EFBFBD>鑼冿細 鍙傝<E98D99> [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
馃幆 閮ㄧ讲鏋舵瀯閫夊瀷
鐩<EFBFBD>爣骞冲彴锛氶樋閲屼簯 Serverless 搴旂敤寮曟搸 (SAE) + 浜戞暟鎹<E69A9F>簱 RDS + 瀵硅薄瀛樺偍 OSS
閫夊瀷鐞嗙敱锛?- 鉁?鎸夐渶浠樿垂锛氬垵鏈熸垚鏈<EFBFBD>綆锛埪?00/鏈堣捣锛夛紝鏃犻渶棰勪粯澶ч噺鏈嶅姟鍣ㄦ垚鏈?- 鉁?**鑷<>姩鎵╃缉瀹?*锛氶珮宄版湡涓嶅畷鏈猴紝浣庤胺鏈熶笉娴<E7AC89>垂锛岄€傚悎鍒涗笟鍏<E7AC9F>徃娴侀噺涓嶇‘瀹氱殑鍦烘櫙
- 鉁?鍥藉唴璁块棶浼樺寲锛氶樋閲屼簯鍥藉唴鑺傜偣澶氾紝鍖荤枟鐢ㄦ埛璁块棶閫熷害蹇?- 鉁?閫傚悎AI浠诲姟锛氬紓姝ユ壒閲忎换鍔★紙LLM绛涢€夈€丳DF鎻愬彇锛夊ぉ鐒跺<EFBFBD>鍚?Serverless
- 鉁?闄嶄綆杩愮淮鎴愭湰锛氭棤闇€涓撹亴杩愮淮浜哄憳锛屽洟闃熶笓娉ㄤ笟鍔″紑鍙?
**鏋舵瀯鍥?*锛?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 浜戝師鐢熼儴缃叉灦鏋? 鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鐢ㄦ埛娴忚<E5A8B4>鍣? 鈹?鈹? 鈫? 鈹?鈹? CDN鍔犻€燂紙鍙<E7B499>€夛級 鈹?鈹? 鈫? 鈹?鈹? 闃块噷浜?SAE (Serverless 搴旂敤寮曟搸) 鈹?鈹? 鈹溾攢鈹€ 鑷<>姩鎵╃缉瀹癸紙0-100瀹炰緥锛? 鈹?鈹? 鈹溾攢鈹€ 鍐呯疆璐熻浇鍧囪 鈹?鈹? 鈹斺攢鈹€ Docker 瀹瑰櫒杩愯<E69DA9> 鈹?鈹? 鈫? 鈹?鈹? 浜戞暟鎹<E69A9F>簱 RDS (PostgreSQL 15) 鈹?鈹? 鈹溾攢鈹€ 10涓猄chema闅旂<E99785> 鈹?鈹? 鈹溾攢鈹€ 鑷<>姩澶囦唤 鈹?鈹? 鈹斺攢鈹€ 杩炴帴姹犵<E5A7B9>鐞? 鈹?鈹? 鈫? 鈹?鈹? 瀵硅薄瀛樺偍 OSS 鈹?鈹? 鈹溾攢鈹€ PDF/Excel 鏂囦欢瀛樺偍 鈹?鈹? 鈹溾攢鈹€ 11涓?鍙<>潬鎬? 鈹?鈹? 鈹斺攢鈹€ 鍐呯綉璁块棶鍏嶆祦閲忚垂 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
馃彈锔?鏍稿績璁捐<E79281>鍘熷垯锛堟墍鏈夋ā鍧楀繀椤婚伒瀹堬級
*鍘熷垯1锛氭棤鐘舵€佸簲鐢ㄨ<EFBFBD>璁?
瑕佹眰锛氬簲鐢ㄤ笉鑳戒緷璧栨湰鍦版枃浠剁郴缁熸垨鍐呭瓨鐘舵€?
| 绂佹<EFBFBD>鍋氭硶 鉂? | 姝g‘鍋氭硶 鉁? | 璇存槑 |
|---|---|---|
鏂囦欢瀛樺偍鍒?./uploads/ |
涓婁紶鍒?OSS 鎴?鍐呭瓨澶勭悊 | 瀹瑰櫒閲嶅惎浼氫涪澶辨湰鍦版枃浠? |
| Session 瀛樺唴瀛? | Session 瀛?Redis/鏁版嵁搴? | 澶氬疄渚嬮棿鏃犳硶鍏变韩鍐呭瓨 |
| 缂撳瓨瀛樺唴瀛樺彉閲? | 浣跨敤 Redis | 鎵╁<EFBFBD>鍚庣紦瀛樺け鏁? |
渚濊禆 /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锛氭暟鎹<EFBFBD>簱杩炴帴姹犵<EFBFBD>鐞?
椋庨櫓锛歋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锛氬紓姝ヤ换鍔″<EFBFBD>鐞?
椋庨櫓锛歋AE 榛樿<E6A69B>璇锋眰瓒呮椂 30 绉? **瑙e喅鏂规<E98F82>**锛氶暱鏃堕棿浠诲姟锛? 10绉掞級蹇呴』寮傛<E5AFAE>澶勭悊
// 鉁?姝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>
鏈<EFBFBD>湴寮€鍙戠幆澧冿紙鏃犻渶浜戞湇鍔★級
# 浣跨敤 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
浼樺娍锛?- 鉁?瀹屽叏绂荤嚎寮€鍙?- 鉁?鏃犱簯鏈嶅姟璐圭敤
- 鉁?璋冭瘯鏂逛究
*鐢熶骇鐜<EFBFBD><EFBFBD>锛堥樋閲屼簯锛?
# 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爜闆舵敼鍔?- 鉁?浠呬慨鏀圭幆澧冨彉閲?- 鉁?閲嶆柊閮ㄧ讲鍗冲彲
馃殌 閮ㄧ讲娴佺▼锛堢畝瑕侊級
- **鏈<>湴寮€鍙?*锛氫娇鐢?Docker + LocalAdapter
- 浠g爜鎻愪氦锛欸it push
- 鏋勫缓闀滃儚锛欴ocker build
- **鎺ㄩ€侀暅鍍?*锛氭帹閫佸埌闃块噷浜戝<E6B59C>鍣ㄩ暅鍍忔湇鍔?5. SAE 閮ㄧ讲锛氶厤缃<EFBFBD>幆澧冨彉閲忥紝鑷<EFBFBD>姩鎷夊彇闀滃儚閮ㄧ讲
- 楠岃瘉閮ㄧ讲锛氬仴搴锋<EFBFBD>鏌ラ€氳繃锛屾祦閲忓垏鎹? 璇︾粏娴佺▼瑙侊細[浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md)
馃搵 寮€鍙戞<E98D99>鏌ユ竻鍗?
鍦ㄦ彁浜や唬鐮佸墠锛岃<EFBFBD>纭<EFBFBD><EFBFBD>锛?
- 鏄<EFBFBD>惁浣跨敤
StorageFactory鑰岄潪鐩存帴fs.writeFile锛?- [ ] 鏄<>惁浣跨敤鍏ㄥ眬prisma瀹炰緥鑰岄潪鏂板缓杩炴帴锛?- [ ] 鏄<>惁鎵€鏈夐厤缃<E58EA4>兘浠庣幆澧冨彉閲忚<E996B2>鍙栵紵 - 鏄<EFBFBD>惁闀挎椂闂翠换鍔¢兘鏀逛负寮傛<EFBFBD>澶勭悊锛?- [ ] 鏄<>惁鏃ュ織閮借緭鍑哄埌 stdout锛?- [ ] 鏄<>惁
/tmp鐩<>綍浣跨敤鍚庣珛鍗虫竻鐞嗭紵 - 鏄<EFBFBD>惁閬垮厤渚濊禆鏈<EFBFBD>湴鏂囦欢璺<EFBFBD>緞锛? 瀹屾暣妫€鏌ユ竻鍗曡<E98D97>锛歔浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
馃摎 鐩稿叧鏂囨。
- 猸?[浜戝師鐢熼儴缃叉灦鏋勬寚鍗梋(../09-鏋舵瀯瀹炴柦/03-浜戝師鐢熼儴缃叉灦鏋勬寚鍗?md) - 鍖呭惈瀹屾暣浠g爜绀轰緥鍜岄儴缃叉祦绋?- 猸?[浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md) - DO/DON'T 妫€鏌ユ竻鍗?- Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>
- [鏁版嵁搴撹繛鎺ラ厤缃甝(../09-鏋舵瀯瀹炴柦/02-鏁版嵁搴撹繛鎺ラ厤缃?md)
鏈<EFBFBD>珷鑺傚垱寤烘棩鏈燂細 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[]
}
妯″潡娉ㄥ唽绀轰緥
// 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
妯″潡璺<EFBFBD>敱绀轰緥
// 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锛?
璁捐<EFBFBD>鍘熷垯
- Schema闅旂<EFBFBD> - 鏁版嵁搴撳眰闈㈢殑妯″潡闅旂<E99785>锛堝凡瀹屾垚锛?2. 浠g爜鍒嗗眰 - platform/common/modules涓夊眰鏋舵瀯
- 妯″潡鐙<EFBFBD>珛 - 姣忎釜妯″潡鐨凙PI鍜岄€昏緫鐙<E7B7AB>珛
- 淇濇寔鍏煎<EFBFBD> - 杞诲害閲嶆瀯锛屼笉鐮村潖鐜版湁鍔熻兘
鐩<EFBFBD>綍缁撴瀯
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
妯″潡璺<EFBFBD>敱娉ㄥ唽
// 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>搴斿叧绯?
妯″潡鏄犲皠琛?
| 鍓嶇<EFBFBD>妯″潡 | 鍚庣<EFBFBD>妯″潡 | 鏁版嵁搴揝chema | 璺<EFBFBD>敱鍓嶇紑 | 寮€鍙戠姸鎬? |
|---|---|---|---|---|
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璋冪敤绀轰緥
// 鍓嶇<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>鑼?
鍛藉悕瑙勮寖
鍓嶇<EFBFBD>
*鏂囦欢鍛藉悕锛?
- 缁勪欢锛歅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`锛?
鍚庣<EFBFBD>
*鏂囦欢鍛藉悕锛?
- 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锛?
妯″潡寮€鍙戣<EFBFBD>鑼?
1. 鏂版ā鍧楀紑鍙戞祦绋?
绗<EFBFBD>竴姝ワ細鏁版嵁搴撹<EFBFBD>璁?鈹溾攢 鍦?docs/03-涓氬姟妯″潡/[妯″潡鍚峕/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md
鈹溾攢 璁捐<E79281>琛ㄧ粨鏋?鈹溾攢 鍦?Prisma schema 涓<>畾涔夋ā鍨?鈹斺攢 杩愯<E69DA9>杩佺Щ
绗<>簩姝ワ細鍚庣<E98D9A>寮€鍙?鈹溾攢 鍒涘缓 backend/src/modules/[妯″潡鍚峕/
鈹溾攢 缂栧啓 controllers/
鈹溾攢 缂栧啓 services/
鈹溾攢 缂栧啓 routes/
鈹斺攢 娴嬭瘯 API
绗<>笁姝ワ細鍓嶇<E98D93>寮€鍙?鈹溾攢 鍒涘缓 frontend-v2/src/modules/[妯″潡鍚峕/
鈹溾攢 瀹氫箟妯″潡鎺ュ彛锛坕ndex.tsx锛?鈹溾攢 缂栧啓 pages/
鈹溾攢 缂栧啓 components/
鈹溾攢 缂栧啓 api/
鈹溾攢 缂栧啓 hooks/
鈹斺攢 娴嬭瘯鍔熻兘
绗<>洓姝ワ細闆嗘垚娴嬭瘯
鈹溾攢 绔<>埌绔<E59F8C>祴璇?鈹斺攢 鎬ц兘娴嬭瘯
2. 妯″潡鐙<E6BDA1>珛鎬у師鍒?
DO 鉁咃細
- 妯″潡鍐呯殑缁勪欢鍙<EFBFBD>湪妯″潡鍐呬娇鐢?- 妯″潡鏈夎嚜宸辩殑鐘舵€佺<E282AC>鐞?- 妯″潡鏈夎嚜宸辩殑API璋冪敤
- 妯″潡鏈夎嚜宸辩殑绫诲瀷瀹氫箟
- 妯″潡鍙<EFBFBD>互鐙<EFBFBD>珛杩愯<EFBFBD>鍜岄儴缃? DON'T 鉂岋細
- 涓嶈<EFBFBD>鍦ㄦā鍧楅棿鐩存帴import缁勪欢
- 涓嶈<EFBFBD>鍦ㄦā鍧楅棿鍏变韩鐘舵€?- 涓嶈<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 # 鍒犻櫎
*鍝嶅簲鏍煎紡锛?
// 鎴愬姛鍝嶅簲
{
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灏忔椂
*涓婂崍锛氶」鐩<EFBFBD>垱寤哄拰妗嗘灦灞?
- 鍒涘缓 frontend-v2 椤圭洰锛圴ite + React + TS锛?- [x] 瀹夎<E780B9>渚濊禆锛圓ntd銆丷outer銆乑ustand銆丷eact Query锛?- [x] 閰嶇疆 Tailwind CSS
- 鍒涘缓鐩<EFBFBD>綍缁撴瀯锛坒ramework/modules/shared锛?- [x] 瀹炵幇 TopNavigation.tsx
- 瀹炵幇 MainLayout.tsx
- 瀹氫箟妯″潡鎺ュ彛锛圡oduleDefinition锛? *涓嬪崍锛氭ā鍧楀崰浣?
- 涓?涓<>ā鍧楀垱寤虹洰褰?- [x] 鍒涘缓 Placeholder.tsx 缁勪欢
- 閰嶇疆鍩烘湰璺<EFBFBD>敱
- 娴嬭瘯瀵艰埅鍒囨崲
浜や粯鐗╋細
- 鉁?鍙<>繍琛岀殑 frontend-v2 椤圭洰
- 鉁?椤堕儴瀵艰埅姝e父宸ヤ綔
- 鉁?5涓<35>ā鍧楀崰浣嶉〉闈?
Day 7锛?1-14锛夛細妯″潡娉ㄥ唽鏈哄埗 鈴?6-8灏忔椂
*涓婂崍锛氭敞鍐岀郴缁?
- 瀹炵幇 moduleRegistry.ts
- 瀹炵幇 ModuleLoader.tsx
- 瀹炵幇鍔ㄦ€佽矾鐢卞姞杞?- [ ] 瀹炵幇鎳掑姞杞芥満鍒? 涓嬪崍锛氭祴璇曞拰鏂囨。
- 娴嬭瘯妯″潡娉ㄥ唽
- 娴嬭瘯璺<EFBFBD>敱鍒囨崲
- 缂栧啓寮€鍙戞枃妗?- [ ] 鏇存柊 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
- 鏇存柊璺<EFBFBD>敱娉ㄥ唽
Day 9 涓婂崍锛氳縼绉?PKB 鍜?RVW
- 杩佺Щ PKB 妯″潡浠g爜
- 杩佺Щ RVW 妯″潡浠g爜
- 鏇存柊鎵€鏈?import 璺<>緞
Day 9 涓嬪崍锛氭祴璇曞拰鏂囨。
- 娴嬭瘯鎵€鏈?API
- 鏇存柊 API 鏂囨。
- 缂栧啓杩佺Щ璇存槑
浜や粯鐗╋細
- 鉁?瀹屾垚鍚庣<E98D9A>浠g爜鍒嗗眰
- 鉁?鎵€鏈堿PI姝e父宸ヤ綔
- 鉁?鏇存柊鏂囨。
Day 10锛?1-17锛夛細Week 2 楠屾敹 鈴?4灏忔椂
- 鍓嶇<EFBFBD>鏋舵瀯楠屾敹
- 鍚庣<EFBFBD>鍒嗗眰楠屾敹
- 闆嗘垚娴嬭瘯
- 缂栧啓 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/ 鐩<>綍
鐘舵€侊細 鈴革笍 淇濈暀锛屼笉鍐嶅紑鍙? *澶勭悊鏂瑰紡锛?
- 娣诲姞
README-ARCHIVED.md璇存槑鏂囦欢 - 鍦ㄦ牴鐩<EFBFBD>綍
package.json涓<>尯鍒嗗惎鍔ㄥ懡浠?3. 淇濈暀3-6涓<36>湀锛屼綔涓哄弬鑰冨拰搴旀€ュ<E282AC>浠?4. 鏂版灦鏋勭ǔ瀹氬悗鍐嶅垹闄? 鍙傝€冧环鍊硷細
- UI浜や簰璁捐<EFBFBD>
- 鏌愪簺缁勪欢瀹炵幇
- API璋冪敤閫昏緫
- 涓氬姟娴佺▼
鍚<EFBFBD>姩鍛戒护
{
"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 楠屾敹鏍囧噯
*鍓嶇<EFBFBD>锛?
- frontend-v2 椤圭洰鍙<E6B4B0>繍琛?- [x] 椤堕儴瀵艰埅姝e父宸ヤ綔
- 妯″潡娉ㄥ唽绯荤粺瀹屾暣
- 5涓<EFBFBD>ā鍧楀崰浣嶉〉闈?- [x] 璺<>敱鍒囨崲姝e父
- 瀹屾暣鐨勫紑鍙戞枃妗? *鍚庣<EFBFBD>锛?
- 浠g爜鍒嗗眰瀹屾垚锛坧latform/common/modules锛?- [ ] 鎵€鏈夌幇鏈堿PI姝e父宸ヤ綔
- 璺<EFBFBD>敱鍓嶇紑缁熶竴锛?api/v1/[module]/*锛?- [ ] import璺<74>緞鍏ㄩ儴鏇存柊
- API鏂囨。鏇存柊
*鏂囨。锛?
- 鏈<EFBFBD>灦鏋勮<EFBFBD>璁℃枃妗?- [ ] 鍓嶇<E98D93>寮€鍙戣<E98D99>鑼冩枃妗?- [ ] 鍚庣<E98D9A>寮€鍙戣<E98D99>鑼冩枃妗?- [ ] Week 2鎬荤粨鎶ュ憡
馃摎 鐩稿叧鏂囨。
鏋舵瀯璁捐<EFBFBD>
鏁版嵁搴撹<EFBFBD>璁?- [AIA鏁版嵁搴撹<E690B4>璁<EFBFBD>(../03-涓氬姟妯″潡/AIA-AI鏅鸿兘闂<E58598>瓟/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
- [PKB鏁版嵁搴撹<E690B4>璁<EFBFBD>(../03-涓氬姟妯″潡/PKB-涓<>汉鐭ヨ瘑搴?02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
瀹炴柦鎶ュ憡
椤圭洰绠$悊
- [涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗圿(../08-椤圭洰绠$悊/涓嬩竴闃舵<E99783>琛屽姩璁″垝-V2.2-瀹屾暣鐗?md)
馃攧 鐗堟湰鍘嗗彶
| 鐗堟湰 | 鏃ユ湡 | 鍙樻洿鍐呭<EFBFBD> | 缁存姢鑰? |
|---|---|---|---|
| V2.0 | 2025-11-12 | 鍒涘缓鏈<EFBFBD>枃妗o紝瀹氫箟鍓嶅悗绔<EFBFBD>ā鍧楀寲鏋舵瀯 | AI鍔╂墜 |
| V2.1 | 2025-11-13 | 瀹屾垚鏉冮檺绯荤粺銆侀敊璇<EFBFBD>竟鐣屻€佽矾鐢卞畧鍗<EFBFBD>疄鏂? | AI鍔╂墜 |
鏂囨。缁存姢鑰咃細 AI鍔╂墜 + 寮€鍙戝洟闃?
鏈€鍚庢洿鏂帮細 2025-11-13
鏂囨。鐘舵€侊細 鉁?宸插畬鎴愶紝Week 2 Day 7瀹炴柦瀹屾垚
*馃帀 杩欐槸绯荤粺鏋舵瀯婕旇繘鐨勯噸瑕侀噷绋嬬<E7BB8B>锛?