feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

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

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

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

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,91 +1,82 @@
# **PRDTool A \- 医疗数据超级合并器 (The Super Merger)**
# **PRD嚗関ool A \- <EFBFBD><EFBFBD><EFBFBD>唳旿頞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(The Super Merger)**
| 文档版本 | V2.0 (基准锚定版) |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦 | V2.0 (<EFBFBD><EFBFBD><EFBFBD>𡁜<EFBFBD><EFBFBD>? |
| :---- | :---- |
| **产品形态** | Web 端工具(分步向导式 Wizard |
| **核心价值** | **解决临床科研中“一对多”数据对齐难题。** 基于“访视Visit”和“时间窗”逻辑将散乱的化验、检查数据精准挂载到住院/门诊记录上。 |
| **目标用户** | 临床医生、科研助理 |
| **鈭批<EFBFBD><EFBFBD>?* | Web 蝡臬極<E887AC><EFBFBD><E79880><EFBFBD><EFBFBD>穃紡撘?Wizard嚗?|
| **<EFBFBD><EFBFBD>隞瑕<EFBFBD>?* | **<EFBFBD><EFBFBD>銝游<EFBFBD>蝘𤑳<EFBFBD>銝凌<EFBFBD><EFBFBD>撖孵<EFBFBD><EFBFBD>脲㺭<EFBFBD>桀笆朣鞾𠗕憸塩<EFBFBD>?* <20><EFBFBD><E7AE94>𡏭挪閫<E68CAA><E996AB>Visit嚗争<E59A97><EFBFBD><E598A5>𨀣𧒄<F0A880A3><EFBFBD><E6B8A1><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><E5839A><EFBFBD>撉䎚<E69289><E48E9A><EFBFBD><EFBFBD>交㺭<E4BAA4>桃移<E6A183><E7A7BB><EFBFBD>頧賢<E9A0A7>雿誯堺/<2F><EFBFBD>霈啣<E99C88>銝𨳍<E98A9D>?|
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | 銝游<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜𨭌<EFBFBD>?|
## **一、 产品流程图 (User Flow)**
## **<EFBFBD><EFBFBD>?鈭批<E988AD><EFBFBD><E7989A><EFBFBD>?(User Flow)**
1\. 数据装载 (Payload) \-\> 2\. 定基准 (Anchor & Window) \-\> 3\. 选列与预览 (Schema) \-\> 4\. 智能合并 \-\> 5\. 结果与流转
1\. <EFBFBD>唳旿鋆<EFBFBD> (Payload) \-\> 2\. 摰𡁜抅<EFBFBD>?(Anchor & Window) \-\> 3\. <EFBFBD><EFBFBD>銝𡡞<EFBFBD>閫?(Schema) \-\> 4\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> \-\> 5\. 蝏𤘪<EFBFBD>銝擧<EFBFBD>頧?
## **鈭䎚<E988AD>?<3F><EFBFBD><E8A9A8><EFBFBD><E8A098><EFBFBD>瘙?(Functional Requirements)**
## **二、 核心功能需求 (Functional Requirements)**
### **1\. 甇仿炊銝<E7828A>嚗𡁏㺭<F0A1818F><EFBFBD>頧?(Payload)**
### **1\. 步骤一:数据装载 (Payload)**
* **P0:** **多文件上传:** 支持拖拽上传 .xlsx, .csv。建议大小 \< 50MB/文件。
* **P0:** **自动预检 (Pre-flight Check)**
* 上传即解析表头。
* **红灯拦截:** 文件加密、表头为空、文件损坏 \-\> 禁止下一步。
* **P1:** **加载配置/模板:** 若用户之前保存过“肺癌门诊合并规则”,允许一键加载,跳过后续配置。
### **2\. 步骤二:定基准 (The Anchor) —— 核心算法逻辑**
此步骤决定了最终大表的“骨架”(行数)和“归类逻辑”。
* **P0:** **憭𡁏<E686AD>隞嗡<E99A9E>隡𩤃<E99AA1>** <20><EFBFBD><E88880>𡝗嗻銝𠹺<E98A9D> .xlsx, .csv<73><76>遣霈桀之撠?\< 50MB/<2F><><EFBFBD>?
* **P0:** **<EFBFBD>芸𢆡憸<EFBFBD><EFBFBD> (Pre-flight Check)嚗?*
* 銝𠹺<E98A9D><F0A0B9BA>唾圾<E594BE>鞱”憭氬<E686AD>?
* **<EFBFBD><EFBFBD>行⏛嚗?* <20><><EFBFBD><EFBFBD><E683A9><EFBFBD>”憭港蛹蝛箝<E89D9B><E7AE9D><EFBFBD>隞嗆<E99A9E><E59786>?\-\> 蝳<>迫銝衤<E98A9D>甇乓<E79487>?
* **P1:** **<EFBFBD>㰘蝸<EFBFBD>滨蔭/璅⊥踎嚗?* <20>亦鍂<E4BAA6><EFBFBD><E7919A><EFBFBD>摮䁅<E691AE><E48185>𡏭<EFBFBD><F0A18FAD>屸秄霂𠰴<E99C82>撟嗉<E6929F><E59789><EFBFBD><EFBFBD><E59885><EFBFBD>捂銝<E68D82><E98A9D><EFBFBD>頧踝<E9A0A7>頝唾<E9A09D><E594BE>𡒊賒<F0A1928A>滨蔭<E6BBA8>?
### **2\. 甇仿炊鈭䕘<E988AD>摰𡁜抅<F0A1819C>?(The Anchor) <20><EFBFBD>?<3F><EFBFBD>蝞埈<E89D9E><E59F88><EFBFBD>**
甇斗郊撉文<EFBFBD>摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>之銵函<EFBFBD><EFBFBD>𣈯爸<EFBFBD><EFBFBD><EFBFBD>銵峕㺭嚗匧<EFBFBD><EFBFBD>𨅯<EFBFBD>蝐駁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
#### **2.1 銝餉”<E9A489>㗇𥋘 (The Backbone)**
* **P0:** 用户必须从上传的文件中指定一个作为 **“主表 (Visit Base)”**。
* **定义:** 主表的每一行,代表最终大表的一个基准行(一次就诊/访视)。通常是《住院记录》或《门诊挂号》。
#### **2.2 关键列映射 (Key Mapping)**
* **P0:** **ID 列对齐:** 用户需指定主表的 Patient\_ID 列。系统自动在辅表中寻找同名列,允许人工修正。
* **P0:** **时间基准列:** 用户需指定主表的 Date 列(如“入院日期”)。这将作为时间窗的圆心。
* **P0:** <EFBFBD><EFBFBD><EFBFBD>◆隞𦒘<EFBFBD>隡删<EFBFBD><EFBFBD><EFBFBD>辣銝剜<EFBFBD>摰帋<EFBFBD>銝芯<EFBFBD>銝?**<2A>靝蜓銵?(Visit Base)<EFBFBD>?*<2A>?
* **摰帋<EFBFBD>嚗?* 銝餉”<E9A489><E2809D><EFBFBD><EFBFBD>銵䕘<E98AB5><EFBFBD><EFBFBD><E2809D><EFBFBD>之銵函<E98AB5><EFBFBD>銝芸抅<E88AB8><E68A85><EFBFBD><EFBFBD><E59A97>停霂?霈輯<E99C88>嚗剹<E59A97><E589B9><EFBFBD>𡁜虜<F0A1819C><EFBFBD>𠹺<EFBFBD><F0A0B9BA>扇敶𨰻<E695B6>𧢲<EFBFBD><F0A7A2B2>𢠃秄霂𦠜<E99C82><F0A6A09C><EFBFBD><EFBFBD>?
#### **2.2 <20>喲睸<E596B2><EFBFBD>撠?(Key Mapping)**
* **P0:** **ID <20>堒笆朣琜<E69CA3>** <20><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<E9A489>?Patient\_ID <20>𨰜<EFBFBD><F0A8B09C>頂蝏蠘䌊<E8A098>典銁颲<E98A81>”銝剖粉<E58996><EFBFBD><E69B89><EFBFBD><EFBFBD><E59A97>霈訾犖撌乩耨甇<E880A8><E79487>?
* **P0:** **<EFBFBD>園𡢿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<E9A489>?Date <20><EFBFBD><EFBFBD><E68692>𨅯<EFBFBD><F0A885AF>𠯫<EFBCB8><EFBFBD><EFBFBD><E59885><EFBFBD><EFBFBD><EFBFBD><E692A0>銝箸𧒄<E7AEB8><EFBFBD><E6B8A1><EFBFBD><EFBFBD><EFBFBD><E695B9>?
#### **2.3 颲<><EFBFBD><EFBFBD>蝑𣇉裦 (Matching Strategy)**
* **P0:** **时间窗配置 (Time Window)**
* 设定规则:辅表的检查时间必须在 \[主表时间 \- X天, 主表时间 \+ Y天\] 范围内。
* **默认值:** $\\pm 7$ 天。
* **P0:** **冲突处理 (Collision Handling)**
* *场景:* 单次时间窗内,辅表有多条记录(如做了两次血常规)。
* *选项 A (默认 \- 纵向展开)* 保留所有记录。主表信息复制,行数增加。
* *选项 B (最近匹配)* 仅保留离主表时间最近的一条,丢弃其他。
* **P0:** **<EFBFBD>園𡢿蝒烾<EFBFBD>蝵?(Time Window)嚗?*
* 霈曉<EFBFBD><EFBFBD><EFBFBD>嚗朞<EFBFBD>銵函<EFBFBD><EFBFBD><EFBFBD>交𧒄<EFBFBD><EFBFBD>憿餃銁 \[銝餉”<E9A489>園𡢿 \- X憭? 銝餉”<E9A489>園𡢿 \+ Y憭坼] <20><><EFBFBD><E58792><EFBFBD>?
* **暺䁅恕<EFBFBD><EFBFBD>** $\\pm 7$ 憭押<EFBFBD>?
* **P0:** **<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Collision Handling)嚗?*
* *<EFBFBD>箸艶嚗? <20>閙活<E99699>園𡢿蝒堒<E89D92>嚗諹<E59A97>銵冽<E98AB5>憭𡁏辺霈啣<E99C88><EFBFBD><E59A97><EFBFBD><EFBFBD>銝斗活銵<E6B4BB>撣貉<E692A3>嚗剹<E59A97>?
* *<EFBFBD>厰★ A (暺䁅恕 \- 蝥萄<EFBFBD>撅訫<EFBFBD>)嚗? 靽萘<E99DBD><E89098><EFBFBD><EFBFBD>㕑扇敶𨰻<E695B6><F0A8B0BB>蜓銵其縑<E585B6><EFBFBD><E887AC><EFBFBD>銵峕㺭憓𧼮<E68693><F0A7BCAE>?
* *<EFBFBD>厰★ B (<EFBFBD><EFBFBD>餈穃龪<EFBFBD>?嚗? 隞<><E99A9E><EFBFBD>嗵氖銝餉”<E9A489>園𡢿<E59C92><F0A1A2BF>餈𤑳<E9A488><EFBFBD><E98A9D><EFBFBD><E98A9D><EFBCB7><EFBFBD><E597A1>?
### **3\. 甇仿炊銝㚁<E98A9D><E39A81><EFBFBD>銝𡡞<E98A9D>閫?(The Schema)**
### **3\. 步骤三:选列与预览 (The Schema)**
甇斗郊撉文<EFBFBD>摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>之銵函<EFBFBD><EFBFBD>𡏭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>堒捐嚗剹<EFBFBD>?
#### **3.1 <20>𤑳𠶖<F0A491B3>㗇𥋘<E39787>?(Tree Picker)**
此步骤决定了最终大表的“血肉”(列宽)。
#### **3.1 树状选择器 (Tree Picker)**
* **P0:** 展示所有文件的列结构。
* **P0:** 撅閧內<E996A7><E585A7><EFBFBD><EFBFBD>隞嗥<E99A9E><E597A5><EFBFBD><E39B96><EFBFBD><EFBFBD>?
* <20><> 銝餉”
* ✅ 住院号
* ✅ 诊断
* <EFBFBD>?雿誯堺<E8AAAF>?
* <EFBFBD>?霂𦠜鱏
* <20><><>” A (<28><EFBFBD>)
* ✅ 白细胞
* ⬜ 审核医生 (不勾选)
* **交互:** 支持按文件全选/反选。
* <EFBFBD>?<3F><EFBFBD><E8B39C>?
* 漎?摰⊥瓲<E28AA5><EFBFBD> (銝滚㗲<E6BB9A>?
* **鈭支<EFBFBD>嚗?* <20><EFBFBD><E88880><EFBFBD>隞嗅<E99A9E><E59785>?<3F><EFBFBD><EFBFBD>?
#### **3.2 摰墧𧒄蝏𤘪<E89D8F><EFBFBD><E686B8> (Live Schema Preview)**
* **P0:** 在屏幕右侧实时展示\*\*“最终表头结构”\*\*(仅表头,不计算数据)。
* **价值:** 让用户直观看到:“哦,原来我的表会变成这么长,包含这些列”。
* **P0:** <EFBFBD><EFBFBD>撟訫𢰧靘批<EFBFBD><EFBFBD><EFBFBD>蝷暝*\*<2A>𨀣<EFBFBD><EFBFBD>”憭渡<E686AD><E6B8A1><EFBFBD><EFBFBD>𩄼*\*嚗<><E59A97>銵典仍嚗䔶<E59A97>霈∠<E99C88><E288A0>唳旿嚗剹<E59A97>?
* **隞瑕<EFBFBD><EFBFBD>** 霈拍鍂<E68B8D>瑞凒閫<E58792><E996AB><EFBFBD><EFBFBD><E5A086>𨅯𣑐嚗<F0A39190><E59A97><EFBFBD><EFBFBD><E4BAA4><EFBFBD>”隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD>鵭嚗<E9B5AD><E59A97><EFBFBD><EFBFBD>鈭𥕦<E988AD><F0A595A6><EFBFBD>?
### **4\. 甇仿炊<E4BBBF>𨥈<EFBFBD>蝏𤘪<E89D8F>銝擧<E98A9D>頧?(The Result)**
### **4\. 步骤四:结果与流转 (The Result)**
* **P0:** **处理进度条:** 显示动态文案(“正在构建哈希索引...”、“正在进行时间窗碰撞...”)。
* **P0:** **黄金预览 (Golden Preview)**
* 必须展示合并结果的 **前 5-10 行** 真实数据。
* 用于用户肉眼核对 ID 是否对齐。
* **P0:** **质量看板:**
* 成功生成行数。
* 丢弃行数ID不匹配或时间窗外
* **P0:** **行动流转:**
* **P0:** **憭<><E686AD>餈𥕦漲<F0A595A6><EFBFBD>** <20>曄內<E69B84><EFBFBD><E586BD><EFBFBD><EFBFBD><E78DA2><EFBFBD>𨀣迤<F0A880A3><EFBFBD>撱箏<E692B1>撣𣬚揣撘?..<2E><EFBFBD><E88588><EFBFBD>𨀣迤<F0A880A3><EFBFBD>銵峕𧒄<E5B395><EFBFBD>蝣唳<E89DA3>...<2E><EFBFBD><E59885>?
* **P0:** **暺<><E69ABA><EFBFBD><E686B8> (Golden Preview)嚗?*
* <EFBFBD>◆撅閧內<EFBFBD><EFBFBD>僎蝏𤘪<EFBFBD><EFBFBD>?**<2A>?5-10 銵?* <20><EFBFBD><E7AC94>唳旿<E594B3>?
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩尐<EFBFBD>詨笆 ID <20>臬炏撖寥<E69296><E5AFA5>?
* **P0:** **韐券<E99F90><E588B8>𧢲踎嚗?*
* <EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵峕㺭<EFBFBD>?
*<E98A9D>銵峕㺭嚗㇆D銝滚龪<E6BB9A>齿<EFBFBD><E9BDBF>園𡢿蝒堒<E89D92>嚗剹<E59A97>?
* **P0:** **銵<>𢆡瘚<F0A286A1>蓮嚗?*
* \[銝贝蝸 Excel\]
* \[<5B><EFBFBD><E785BE><EFBFBD> AI 蝏𤘪<E89D8F><F0A498AA>硋極<E7A18B>愧] (瘚<>蓮 Token)
* \[<5B><EFBFBD><E785BE><EFBFBD> 蝻𤥁<E89DBB><F0A4A581><EFBFBD>瘣珢] (瘚<>蓮 Token)
## **三、 核心算法逻辑 (Technical Logic)**
## **銝剹<EFBFBD>?<3F><EFBFBD>蝞埈<E89D9E><E59F88><EFBFBD> (Technical Logic)**
### **1\. 算法名称:基于时间窗的哈希流式连接 (Time-Windowed Stream Hash Join)**
### **1\. 蝞埈<EFBFBD><EFBFBD>滨妍嚗𡁜抅鈭擧𧒄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣峕<EFBFBD>撘讛<EFBFBD><EFBFBD>?(Time-Windowed Stream Hash Join)**
### **2\. 执行伪代码**
### **2\. <EFBFBD><EFBFBD>隡芯誨<EFBFBD>?*
// 1\. <20><><EFBFBD><EFBFBD><EFBFBD>遣 (Build Phase)
// 将辅表 (Small Tables) 读入内存 Map
// <EFBFBD><EFBFBD>銵?(Small Tables) 霂餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map
const lookupMap \= {
"patient\_001": \[
{ type: "lab", date: "2023-01-02", data: {...} }, // 霈啣<E99C88>1
@@ -116,16 +107,14 @@ streamMainTable.on('data', (mainRow) \=\> {
}
});
## **四、 界面原型参考 (UI Reference)**
## **<EFBFBD><EFBFBD>?<3F>屸𢒰<E5B1B8><EFBFBD><E7AC94><EFBFBD><EFBFBD>?(UI Reference)**
请参考 工具A\_超级合并器\_原型设计.tsx (V1.0) 中的 Step 2 Step 3 界面。
* **Step 2 重点:** 主表选择单选框、时间列下拉框、策略单选钮。
* **Step 3 重点:** 左右分栏布局(左侧树状勾选,右侧表格骨架预览)。
## **五、 风险规避检查 (Risk Check)**
霂瑕<EFBFBD><EFBFBD>?撌亙<E6928C>A\_頞<5F><EFBFBD><E6BCA3><EFBFBD>沔_<E6B294><EFBFBD>霈曇恣.tsx (V1.0) 銝剔<EFBFBD> Step 2 <EFBFBD>?Step 3 <EFBFBD>屸𢒰<EFBFBD>?
* **Step 2 <20><EFBFBD>嚗?* 銝餉”<E9A489>㗇𥋘<E39787><EFBFBD><EFBFBD><E39787><EFBFBD>𧒄<EFBFBD><EFBFBD>銝𧢲<E98A9D><EFBFBD><E78DA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BA99>厰僼<E58EB0>?
* **Step 3 <20><EFBFBD>嚗?* 撌血𢰧<E8A180><F0A2B0A7><EFBFBD><EFBFBD><E692A3><EFBFBD>椰靘扳<E99D98><E689B3>嗅㗲<E59785><EFBFBD><E39A81>喃儒銵冽聢撉冽沲憸<E6B2B2><E686B8>嚗剹<E59A97>?
## **鈭𢛵<E988AD>?憌𡡞埯閫<E59FAF><E996AB><EFBFBD><E79289>?(Risk Check)**
1. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝餉”<EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>**
* *对策:* 在 Step 2 界面增加显眼的 **Tip**:“主表通常是包含‘入院日期’或‘诊断信息’的表格”。
* *撖寧<EFBFBD>嚗? <20>?Step 2 <20>屸𢒰憓𧼮<E68693><F0A7BCAE>曄尐<E69B84>?**Tip**嚗尠<E59A97>靝蜓銵券<E98AB5>𡁜虜<F0A1819C><EFBFBD><E887AC><EFBFBD><EFBFBD><E79D83>𠯫<EFBCB8><EFBFBD><EFBFBD><E8B9B1><EFBFBD><E48185>凋縑<E5878B><EFBFBD><EFBFBD>銵冽聢<E586BD><EFBFBD>?
2. **<EFBFBD>園𡢿<EFBFBD><EFBFBD>銋曹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>**
* *对策:* 后端在解析时间列时,必须使用强力的 Parser(支持 2023/1/1, 2023-01-01, 44927 等格式)。如果解析失败,归为“时间无效”,不进行匹配。
* *撖寧<E69296>嚗? <20>𡒊垢<F0A1928A>刻圾<E588BB>鞉𧒄<E99E89><EFBFBD><E6B8B8><EFBFBD><EFBFBD>◆雿輻鍂撘箏<E69298><E7AE8F>?Parser<EFBFBD>𣈲<EFBFBD>?2023/1/1, 2023-01-01, 44927 蝑㗇聢撘𧶏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡏭圾<EFBFBD>𣂼仃韐伐<EFBFBD>敶雴蛹<EFBFBD>𨀣𧒄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滩<EFBFBD><EFBFBD><EFBFBD><EFBFBD>