Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/02-技术设计/总体技术设计文档:医疗科研智能数据清洗平台.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

147 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **<2A><EFBFBD><E9A2B1><EFBFBD><EFBFBD>航挽霈⊥<E99C88><EFBFBD><E78DA2><EFBFBD><EFBFBD>蝘𤑳<E89D98><F0A491B3><EFBFBD><E7AE84>唳旿皜<E697BF><E79A9C>撟喳蝱**
| <20><>﹝蝐餃<E89D90> | System Architecture Document (SAD) |
| :---- | :---- |
| **撖孵<E69296> PRD** | **PRD\_<><EFBFBD>\_<><EFBFBD>蝘𤑳<E89D98><F0A491B3><EFBFBD><E7AE84>唳旿皜<E697BF><E79A9C>撟喳蝱.md** |
| **<EFBFBD><EFBFBD>𧋦** | **V1.0** |
| **<EFBFBD><EFBFBD>?* | Final Draft |
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | 蝖桃<E89D96>撟喳蝱<E596B3><E89DB1><EFBFBD><EFBFBD><E98A9D><EFBFBD><EFBFBD><EFBFBD><E88880><EFBFBD><EFBFBD>璇喟<E79287><E5969F>𡁶鍂璅<E79285>銝𦒘<E98A9D><F0A69298>冽芋<E586BD><EFBFBD><E39B96><EFBFBD><EFBFBD>航器<E888AA><EFBFBD><E49598><EFBFBD>紡憭𡁜𣪧<F0A1819C>笔僎銵<E5838E><E98AB5><EFBFBD><EFBFBD>?|
## **1\. <20><EFBFBD>蝟餌<E89D9F><E9A48C><EFBFBD><E59786>?(System Architecture)**
撟喳蝱<EFBFBD><EFBFBD>**<EFBFBD>𨅯凝<EFBFBD>滚𦛚<EFBFBD><EFBFBD>雿?(Modular Monolith)<29>?* <20>?**<2A>輶FF \+ Worker<65>?* <20><EFBFBD><E59786><EFBFBD><EFBFBD>蝡舐<E89DA1><EFBFBD><E98A9D>亙藁嚗<E89781><E59A97>蝡舀<E89DA1><E88880><EFBFBD><E8A098><EFBFBD><EFBFBD><EFBFBD>滚𦛚<E6BB9A>𡝗芋<F0A19D97>𨰜<EFBFBD>?
graph TD
subgraph Client\_Layer \[<5B>滨垢鈭支<E988AD>撅?(Browser)\]
Portal\[撌乩<E6928C><E4B9A9>?(Portal)\]
ToolA\_UI\[撌亙<E6928C>A: 頞<><EFBFBD><E6BCA3><EFBFBD>沔]
ToolB\_UI\[撌亙<E6928C>B: 蝏𤘪<E89D8F><F0A498AA>𡝗㦤<F0A19D97>其犖\]
ToolC\_UI\[撌亙<E6928C>C: 蝘𤑳<E89D98>蝻𤥁<E89DBB><F0A4A581>沔]
end
subgraph Gateway\_Layer \[蝵穃<E89DB5>銝舘<E98A9D><E88898><EFBFBD><EFBFBD>\]
Nginx\[Nginx / Load Balancer\]
BFF\[Node.js BFF (Fastify)\]
end
subgraph Service\_Layer \[銝𡁜𦛚<F0A1819C>滚𦛚撅<F0A69B9A>]
Auth\[霈方<E99C88><E696B9>滚𦛚\]
Asset\[韏<>漣蝞∠<E89D9E><E288A0>滚𦛚\]
subgraph Workers \[撘<>郊霈∠<E99C88><E288A0><EFBFBD>黎\]
WorkerA\[<5B><>僎撘閙<E69298> (Stream)\]
WorkerB\[AI 撘閙<E69298> (LangChain)\]
end
end
subgraph Storage\_Layer \[摮睃<E691AE><EFBFBD>]
PG\[(PostgreSQL \- 銝𡁜𦛚<F0A1819C>唳旿)\]
Redis\[(Redis \- <20><EFBFBD>/蝻枏<E89DBB>)\]
MinIO\[(MinIO/S3 \- <20><>辣摮睃<E691AE>)\]
end
Client\_Layer \--\> Nginx \--\> BFF
BFF \--\> Auth
BFF \--\> Asset
BFF \--隞餃𦛚<E9A483><F0A69B9A><EFBFBD>--\> Redis
Redis \--瘨<>晶--\> WorkerA & WorkerB
ToolC\_UI \--Local First--\> IndexedDB\[(Browser DB)\]
ToolC\_UI \--敹怎<E695B9><E6808E>峕郊--\> BFF
## **2\. <20>𡁶鍂<F0A181B6><E98D82><EFBFBD>臬抅摨?(The Common Foundation)**
餈䠷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>韐舐忽<EFBFBD><EFBFBD><EFBFBD>㗇芋<EFBFBD><EFBFBD><EFBFBD>臬𣪧<EFBFBD><EFBFBD>憿餌<EFBFBD><EFBFBD><EFBFBD>萄儐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### **2.1 <20>滨垢<E6BBA8>𡁶鍂<F0A181B6>?(Frontend Core)**
| 蝏<>辣 | <20><EFBFBD> | 霂湔<E99C82> |
| :---- | :---- | :---- |
| **獢<>** | **React 19** | <20>拍鍂<E68B8D><E98D82><EFBFBD><EFBFBD> Hooks <20><><EFBFBD>𤑳鸌<F0A491B3><EFBFBD>?|
| **<EFBFBD><EFBFBD>遣撌亙<EFBFBD>** | **Vite 5.x** | <20><><EFBFBD><EFBFBD><EFBFBD>撱綽<E692B1><E7B6BD><EFBFBD> HMR<4D>?|
| **霂剛<E99C82>** | **TypeScript 5.x** | 撘箏<E69298>撘箇掩<E7AE87><EFBFBD><E9A1B5><EFBFBD>蝡臬<E89DA1>鈭怎掩<E6808E><EFBFBD>銋?(shared-types)<29>?|
| **<EFBFBD><EFBFBD>摨?* | **Tailwind CSS** | 蝏煺<E89D8F> UI 憌擧聢嚗<E881A2><EFBFBD><EFBFBD><E7AC94><EFBFBD>?|
| **<EFBFBD><EFBFBD>摨?* | **Lucide React** | 憌擧聢蝏煺<E89D8F><E785BA><EFBFBD><EFBFBD>讐漣 SVG <20><EFBFBD><E69AB9>?|
| **頝舐眏** | **React Router v6** | 蝞∠<E89D9E> Portal 銝𤾸<E98A9D>銝?Tool 銋钅𡢿<E99285><F0A1A2BF><EFBFBD><EFBFBD>憟𨰜<E6869F>?|
| **<EFBFBD>唳旿霂瑟<EFBFBD>** | **SWR** <20>?**TanStack Query** | 憭<><E686AD> API 霂瑟<E99C82><E7919F><EFBFBD><EFBFBD>摮塩<E691AE><E5A1A9><EFBFBD>𠹺遙<F0A0B9BA>∠𠶖<E288A0><F0A0B696><EFBFBD>**頧株砭 (Polling)**<2A>?|
### **2.2 <20>𡒊垢<F0A1928A>𡁶鍂<F0A181B6>?(Backend Core)**
| 蝏<>辣 | <20><EFBFBD> | 霂湔<E99C82> |
| :---- | :---- | :---- |
| **餈鞱<E9A488><E99EB1>?* | **Node.js 22 (LTS)** | 靽脲<E99DBD><E884B2><EFBFBD><EFBFBD>?LTS <20><>𧋦<EFBFBD>?|
| **Web 獢<>** | **Fastify 5.x** | 擃䀹<E69383><EFBFBD>嚗䔶<E59A97><EFBFBD><E69298><EFBFBD>嚗玺chema <20><EFBFBD><E28ABF>见末<E8A781>?|
| **ORM** | **Prisma 6** | 蝐餃<E89D90>摰匧<E691B0><E58CA7><EFBFBD><EFBFBD><EFBFBD><E6A180><EFBFBD>嚗峕𣈲<E5B395>?Schema Migration<6F>?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | **Zod** | 餈鞱<E9A488><E99EB1>?Schema <20><EFBFBD><EFBFBD><EFBFBD><E899BE><EFBFBD> TypeScript 蝐餃<E89D90><E9A483>?|
| **<EFBFBD><EFBFBD>** | **Winston / Pino** | 蝏𤘪<E89D8F><F0A498AA>?JSON <20><EFBFBD><E4BA99>?|
### **2.3 <20><EFBFBD>霈暹鴌<E69AB9>?(Infrastructure)**
| 蝏<>辣 | <20><EFBFBD> | 霂湔<E99C82> |
| :---- | :---- | :---- |
| **<EFBFBD>唳旿摨?* | **PostgreSQL 15** | 摮睃<E691AE><E79D83><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBD9E><EFBFBD>鈭批<E988AD><E689B9>唳旿<E594B3><E697BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝏𤘪<E89D8F> (JSONB)<29>?|
| **蝻枏<E89DBB>/<2F><EFBFBD>** | **Redis 7** | 餈䠷<E9A488><E4A0B7>?Redis <20><EFBFBD>蝻枏<E89DBB>嚗䔶<E59A97><E494B6>?**BullMQ** <20><><EFBFBD>蝡胯<E89DA1>?|
| **<EFBFBD><EFBFBD>辣摮睃<EFBFBD>** | **MinIO / AWS S3** | 摮睃<E691AE><E79D83><EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?Excel<65><6C>DF 隞亙<E99A9E><E4BA99><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞嗚<E99A9E>?|
## **3\. 璅<E79285>銝梶鍂<E6A2B6><E98D82><EFBFBD><EFBFBD> (Module-Specific Stack)**
<EFBFBD><EFBFBD>笆銝滚<EFBFBD><EFBFBD>箸艶<EFBFBD><EFBFBD>鸌畾𢠃<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞嗚<EFBFBD>?
### **3.1 撌亙<E6928C> A嚗朞<E59A97>蝥批<E89DA5>撟嗅膥 (IO 撖<><E69296><EFBFBD>?**
*<2A><EFBFBD><E8A9A8><EFBFBD>嚗𡁜之<F0A1819C><E4B98B>辣瘚<E8BEA3><E7989A><EFBFBD><E686AD><EFBFBD><EFBFBD>𠯫<EFBFBD>蠘圾<E8A098><EFBFBD><E58390><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
| 憸<><E686B8> | 銝梶鍂蝏<E98D82>辣 | <20><EFBFBD><E58CA7><EFBFBD>眏 |
| :---- | :---- | :---- |
| **<EFBFBD>𡒊垢 (Excel)** | **ExcelJS** | <20><EFBFBD> SheetJS嚗<53><E59A97>撖?**Stream (瘚?** <20><>𣈲<EFBFBD><F0A388B2>凒憟踝<E6869F><E8B89D><EFBFBD><E8B3A2><EFBFBD><EFBFBD><EFBFBD><E9A488>摮㗛<E691AE><E3979B><EFBFBD>憭扳<E686AD>隞嗚<E99A9E>?|
| **<EFBFBD>𡒊垢 (Date)** | **Day.js \+ CustomParseFormat** | 閫<><E996AB> Excel <20><><EFBFBD><E5839A>𠯫<EFBFBD><F0A0AFAB>聢撘?(44927, 2023/1/1)嚗諹蝠<E8ABB9><EFBFBD>撘箏之<E7AE8F>?|
| **撘<><EFBFBD><EFBFBD>** | **BullMQ** | 憭<><E686AD><EFBFBD>埈𧒄<E59F88><F0A79284>僎隞餃𦛚嚗峕𣈲<E5B395><F0A388B2><EFBFBD>摨行<E691A8><E8A18C><EFBFBD>?|
| **<EFBFBD>滨垢蝏<EFBFBD>辣** | **Ant Design Steps / Upload** | 敹恍<E695B9><EFBFBD><E7AC94><EFBFBD>撖澆<E69296> UI<55>?|
### **3.2 撌亙<E6928C> B嚗𡁶<E59A97><F0A181B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>箏膥鈭?(API/霈∠<E99C88><EFBFBD><E69296><EFBFBD>?**
*<2A><EFBFBD><E8A9A8><EFBFBD>嚗匁LM 蝻𡝗<E89DBB><F0A19D97><EFBFBD><EFBFBD><E79285>撟嗅<E6929F><E59785><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撖嫘<E69296>?
| 憸<><E686B8> | 銝梶鍂蝏<E98D82>辣 | <20><EFBFBD><E58CA7><EFBFBD>眏 |
| :---- | :---- | :---- |
| **<EFBFBD>𡒊垢 (AI)** | **LangChain.js** | 蝏煺<E89D8F> DeepSeek <20>?Qwen <20><><EFBFBD><EFBFBD>冽𦻖<E586BD><F0A6BB96><EFBFBD>蝞∠<E89D9E> Prompt Template<74>?|
| **<EFBFBD>𡒊垢 (Diff)** | **diff-match-patch** (Google) | 霈∠<E99C88>銝支葵璅<E79285>颲枏枂<E69E8F><E69E82><EFBFBD><EFBFBD>砍榆撘<E6A686><E69298><EFBFBD>𤥁<EFBFBD><F0A4A581><EFBFBD><EFBFBD><EFBFBD><EFBFBD>擃䀝漁雿滨蔭<E6BBA8>?|
| **<EFBFBD>𡒊垢 (瘥𥪜笆)** | **Lodash / Dice Coefficient** | <20><EFBFBD> JSON 撖寡情<E5AFA1><E68385>楛撅<E6A59B><E69285>撖孵<E69296>摮㛖泵銝脩㮾隡澆漲霈∠<E99C88><E288A0>?|
| **<EFBFBD>滨垢 (Grid)** | **TanStack Table** (Headless) | <20>牐蛹<E78990><E89BB9><EFBFBD><E996AC>摨血<E691A8><E8A180><EFBFBD>𨅯<EFBFBD><EFBFBD><E89D92><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI (撌血𢰧撟嗆<E6929F><E59786>厰僼)嚗峵eadless 摨𤘪<E691A8> AntD Table <20><EFBFBD>瘣颯<E798A3>?|
### **3.3 撌亙<E6928C> C嚗𡁶<E59A97><F0A181B6>娍㺭<E5A88D><EFBFBD>颲穃膥 (鈭支<E988AD><EFBFBD><E69296><EFBFBD>?**
*<2A><EFBFBD><E8A9A8><EFBFBD>嚗𡁜<E59A97>蝡舫<E89DA1><E888AB><EFBFBD>皜脫<E79A9C><E884AB><EFBFBD>𧋦<EFBFBD>啗恣蝞𨰜<E89D9E><F0A8B09C><EFBFBD><E4BC83><EFBFBD><EFBFBD><E6BB9A>?
| 憸<><E686B8> | 銝梶鍂蝏<E98D82>辣 | <20><EFBFBD><E58CA7><EFBFBD>眏 |
| :---- | :---- | :---- |
| **<EFBFBD>滨垢 (Grid)** | **AG Grid Community** | **<EFBFBD><EFBFBD><EFBFBD>辣**<2A><>𣈲銝<F0A388B2><E98A9D><EFBFBD>韐寞𣈲<E5AF9E><F0A388B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E585B7><EFBFBD><EFBFBD>𡝗嗻<F0A19D97><E597BB>xcel 蝥找漱鈭垍<E988AD>摨瓐<E691A8>?|
| **<EFBFBD>滨垢 (Storage)** | **Dexie.js (IndexedDB)** | **Local-First <20><EFBFBD><E59786><EFBFBD>**<EFBFBD><EFBFBD>銁瘚讛<EFBFBD><EFBFBD>函垢摮睃<EFBFBD> 5-10 銝<><E98A9D><EFBFBD>唳旿嚗屸<E59A97><E5B1B8><EFBFBD><EFBFBD><E89D9C>蝏𡏭窈瘙<E7AA88><E79899>?|
| **<EFBFBD>滨垢 (State)** | **Zustand \+ Immer** | <20>拍鍂 Immer <20>?Patches <20><EFBFBD>摰䂿緵 **Undo/Redo (<28><EFBFBD><E697A5><EFBFBD>)** <20><><EFBFBD>?|
| **<EFBFBD>滨垢 (Calc)** | **Math.js** | 閫<><E996AB> JS 瘚桃<E7989A><E6A183>啁移摨阡䔮憸矋<E686B8><EFBFBD><E996AB><EFBFBD><EFBFBD>颲枏<E9A2B2><E69E8F><EFBFBD>龫摮血<E691AE>撘?(ln, pow)<29>?|
| **<EFBFBD>滨垢 (Chart)** | **Ant Design Charts (G2)** | <20>冽惣<E586BD>賭儒颲寞<E9A2B2>銝剔<E98A9D><E58994>嗥凒<E597A5>孵㦛<E5ADB5><EFBFBD><E288AA>?|
## **4\. <20>唳旿鈭支<E988AD><E694AF><EFBFBD><EFBFBD> (Data Standards)**
銝箔<EFBFBD><EFBFBD><EFBFBD>?A \-\> B \-\> C <20><><EFBFBD>頧穿<E9A0A7><EFBFBD>◆摰帋<E691B0>蝏煺<E89D8F><E785BA><EFBFBD><EFBFBD>桐漱<E6A190>聢撘譌<E69298>?
### **4.1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
* **<2A><><EFBFBD><EFBFBD><E68B8D><EFBFBD>嚗?* 蝏煺<E89D8F>雿輻鍂 **CSV (UTF-8 with BOM)** <20>?**JSON Lines (.jsonl)**<2A>?
* *<2A><>眏嚗? Stream 憭<><E686AD><EFBFBD><EFBFBD>敹恬<E695B9>銝𥪯<E98A9D>靘肽<E99D98> Excel 憭齿<E686AD><E9BDBF>?XML 蝏𤘪<E89D8F><F0A498AA>?
* **<2A><EFBFBD><E4BAA4><EFBFBD><EFBFBD>嚗?* <20><><EFBFBD>匧極<E58CA7>瑚漣<E7919A><EFBFBD><E7AE87><EFBFBD><EFBFBD><E59A97>憿餃<E686BF><EFBFBD><E98A9D>碶蛹 YYYY-MM-DD 摮㛖泵銝脯<E98A9D>?
* **蝛箏<E89D9B><EFBFBD><E6BDAD><EFBFBD><EFBFBD>** 蝏煺<E89D8F>銝?null (JSON) <20>?"" (CSV)嚗䔶艇蝳<E88987><EFBFBD>?"NA", "-"<22>?
### **4.2 API <20><EFBFBD>蝏𤘪<E89D8F> (Standard Response)**
interface ApiResponse\<T\> {
code: number; // 0: <20>𣂼<EFBFBD>, \>0: <20>躰秤<E8BAB0>?
data: T; // 銝𡁜𦛚<F0A1819C>唳旿
message?: string; // <20>躰秤<E8BAB0>鞟內
meta?: { // <20><><EFBFBD><EFBFBD><E7A18B>唳旿
total?: number;
traceId: string;
}
}
## **5\. 撘<><E69298>𤑳㴓憓<E3B493><E68693><EFBFBD>函蔡 (DevOps)**
* **<2A><><EFBFBD><E681A3><EFBFBD>** **pnpm** (<28><EFBFBD>嚗諹<E59A97><E8ABB9><EFBFBD><EFBFBD><EFBFBD>条征<E69DA1><EFBFBD>摰㕑<E691B0>敹?<3F>?
* **Monorepo (<28><EFBFBD>?嚗?* 撱箄悅雿輻鍂 Turborepo <20>?Nx 蝞∠<E89D9E> frontend, backend-api, worker-merger, worker-ai 蝑匧<E89D91><EFBFBD><E59A97>鈭怎掩<E6808E><EFBFBD>銋剹<E98A8B>?
* **摰孵膥<E5ADB5><EFBFBD>**
* **API Service:** <20>删𠶖<E588A0><F0A0B696><EFBFBD><EFBFBD>舀偌撟單<E6929F>撅𨰻<E69285>?
* **Worker Service:** <20>閧𡠺<E996A7>函蔡嚗峕覔<E5B395>?CPU/<2F><><EFBFBD>韐蠘蝸餈𥡝<E9A488><F0A5A19D>拙捆嚗<E68D86><EFBFBD>急糓 Worker A 憭<><E686AD>憭扳<E686AD>隞嗆𧒄<E59786><F0A79284><EFBFBD><EFBFBD><E798A8>堒之嚗剹<E59A97>