Files
AIclinicalresearch/docs/00-系统总体设计/前后端模块化架构设计-V2.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
2026-01-14 19:15:01 +08:00

65 KiB
Raw Blame History

鍓嶅悗绔<EFBFBD>ā鍧楀寲鏋舵瀯璁捐<EFBFBD> V2.0

*鐗堟湰锛? V2.3
*鍒涘缓鏃ユ湡锛? 2025-11-12
*瀹炴柦闃舵<EFBFBD>锛? Week 23锛?025-11-1317锛? 缁存姢鑰咃細 寮€鍙戝洟闃? 鐘舵€侊細 鉁?Week 2 Day 6-9 + 骞冲彴鍩虹<E98DA9>璁炬柦 鍏ㄩ儴瀹屾垚 猸愨瓙猸?


馃搵 鏂囨。璇存槑

<EFBFBD>枃妗AI涓村簥鐮旂┒骞冲彴鐨勬ā鍧楀寲鏋舵瀯璁捐<EFBFBD>鎬荤翰锛屽畾涔変簡锛?

  1. 鍓嶇<EFBFBD>鏋舵瀯锛氬叏鏂扮殑 frontend-v2 妯″潡鍖栨灦鏋?2. 鍚庣<EFBFBD>鏋舵瀯锛氬熀浜嶴chema闅旂<EFBFBD>鐨勫垎灞傛灦鏋?3. **鍓嶅悗绔<E68297><E7BB94>搴斿叧绯?*锛氭ā鍧楀寲鐨勭粍缁囨柟寮?4. **寮€鍙戣<E98D99>鑼?*锛氱粺涓€鐨勪唬鐮佺粍缁囧拰鍛藉悕瑙勮寖
  2. 瀹炴柦璺<EFBFBD>锛氭笎杩涘紡鐨勬灦鏋勬敼閫犺<EFBFBD>鍒? *閫傜敤瀵硅薄锛?
  • 鏂板姞鍏ョ殑寮€鍙戜汉鍛橈紙蹇<EFBFBD>€熶簡瑙郴缁熸灦鏋勶級
  • AI鍔╂墜锛堢悊瑙唬鐮佺粍缁囩粨鏋勶級
  • 鎶€鏈<EFBFBD>喅绛栬€咃紙鏋舵瀯婕旇繘鍙傝€冿級

馃幆 鏋舵瀯婕旇繘鍘嗗彶

V1.0 闃舵<E99783>锛?025-10涔嬪墠锛?- 鉂?鍗曚綋鍓嶇<E98D93>搴旂敤锛堟墍鏈夊姛鑳借€﹀悎锛?- 鉂?鍚庣<E98D9A>爜骞抽摵锛堟棤妯″潡鍒掑垎锛?- 鉂?鏁版嵁搴撹〃鍏ㄥ湪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>姞杞藉拰楠岃瘉
  • 鉁?**閫傞厤鍣ㄦā寮?*锛氶浂浠爜鐜<E7889C><E9909C>鍒囨崲锛堟湰鍦?鈫?浜戠<E6B59C>锛?- 鉁?鍏ㄩ儴娴嬭瘯楠岃瘉閫氳繃锛?00%娴嬭瘯瑕嗙洊鐜?- 鉁?**浠爜缁熻<E7BC81>**锛?,532琛屾柊浠爜锛?2涓<32>柊鏂囦欢
  • 鉁?鏂囨。瀹屽杽锛?1涓<31>枃妗洿鏂帮紝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>ā鍧?- 鉁?鏉冮檺鎺у埗宸ヤ綔姝父锛坢ock premium鐢ㄦ埛锛?- 鉁?璺<>敱瀹堝崼鐢熸晥
  • 鉁?閿欒<E996BF>杈圭晫姝父鎹曡幏

馃梽锔?鍚庣<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瑙瀽宸ュ叿
鈹?  鈹?鈹?  鈹溾攢鈹€ 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寮€鍙? 涓诲叆鍙紙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>锛堥浂浠爜鏀瑰姩锛? 鈹?鈹? 鏈<>湴寮€鍙?| 浜戠<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瑙瀽锛?```

#### **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锛変繚鎸佺幇鐘讹紝姝父杩愯<EFBFBD>
  • 鉁?**鏂版ā鍧?*锛圓SL锛変娇鐢ㄥ钩鍙板熀纭€璁炬柦
  • 馃攧 **鍙<>€夎縼绉?*锛歀egacy妯″潡鎸夐渶杩佺Щ锛堥<E9949B>璁?灏忔椂锛?

3. 浜戠<E6B59C>瀹炵幇棰勭暀

  • OSSAdapter銆乣RedisCacheAdapter` 褰撳墠涓洪<E6B693>鐣欏疄鐜?- 浜戠<E6B59C>閮ㄧ讲鍓嶉渶瀹夎<E780B9>渚濊禆骞跺彇娑堟敞閲?- 璇﹁<E79287>瀹炴柦鏂囨。

馃摎 鐩稿叧鏂囨。


鉁?娴嬭瘯楠岃瘉鐘舵€侊紙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)

// 鉁?姝锛歄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 // 浠爜涓<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 鏈€澶ц繛鎺ユ暟

**瑙喅鏂规<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>級蹇呴』閫氳繃鐜<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 绉? **瑙喅鏂规<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爜闆舵敼鍔?- 鉁?浠呬慨鏀圭幆澧冨彉閲?- 鉁?閲嶆柊閮ㄧ讲鍗冲彲


馃殌 閮ㄧ讲娴佺▼锛堢畝瑕侊級

  1. **鏈<>湴寮€鍙?*锛氫娇鐢?Docker + LocalAdapter
  2. 浠g爜鎻愪氦锛欸it push
  3. 鏋勫缓闀滃儚锛欴ocker build
  4. **鎺ㄩ€侀暅鍍?*锛氭帹閫佸埌闃块噷浜戝<E6B59C>鍣ㄩ暅鍍忔湇鍔?5. SAE 閮ㄧ讲锛氶厤缃<EFBFBD>幆澧冨彉閲忥紝鑷<EFBFBD>姩鎷夊彇闀滃儚閮ㄧ讲
  5. 楠岃瘉閮ㄧ讲锛氬仴搴锋<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>鍘熷垯

  1. Schema闅旂<EFBFBD> - 鏁版嵁搴撳眰闈㈢殑妯″潡闅旂<E99785>锛堝凡瀹屾垚锛?2. 浠g爜鍒嗗眰 - platform/common/modules涓夊眰鏋舵瀯
  2. 妯″潡鐙<EFBFBD> - 姣忎釜妯″潡鐨凙PI鍜岄€昏緫鐙<E7B7AB>
  3. 淇濇寔鍏煎<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>爜鍒嗗眰 鈴?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>爜鍒嗗眰
  • 鉁?鎵€鏈堿PI姝父宸ヤ綔
  • 鉁?鏇存柊鏂囨。

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/ 鐩<>

鐘舵€侊細 鈴革笍 淇濈暀锛屼笉鍐嶅紑鍙? *澶勭悊鏂瑰紡锛?

  1. 娣诲姞 README-ARCHIVED.md 璇存槑鏂囦欢
  2. 鍦ㄦ牴鐩<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] 璺<>敱鍒囨崲姝
  • 瀹屾暣鐨勫紑鍙戞枃妗? *鍚庣<EFBFBD>锛?
  • 爜鍒嗗眰瀹屾垚锛坧latform/common/modules锛?- [ ] 鎵€鏈夌幇鏈堿PI姝父宸ヤ綔
  • <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>枃妗紝瀹氫箟鍓嶅悗绔<EFBFBD>ā鍧楀寲鏋舵瀯 AI鍔╂墜
V2.1 2025-11-13 瀹屾垚鏉冮檺绯荤粺銆侀敊璇<EFBFBD>竟鐣屻€佽矾鐢卞畧鍗<EFBFBD>疄鏂? AI鍔╂墜

鏂囨。缁存姢鑰咃細 AI鍔╂墜 + 寮€鍙戝洟闃? 鏈€鍚庢洿鏂帮細 2025-11-13
鏂囨。鐘舵€侊細 鉁?宸插畬鎴愶紝Week 2 Day 7瀹炴柦瀹屾垚

*馃帀 杩欐槸绯荤粺鏋舵瀯婕旇繘鐨勯噸瑕侀噷绋嬬<E7BB8B>锛?