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%)
120 lines
5.5 KiB
Markdown
120 lines
5.5 KiB
Markdown
# **PRD嚗関ool A \- <20>餌<EFBFBD><E9A48C>唳旿頞<E697BF>漣<EFBFBD><E6BCA3>僎<EFBFBD>?(The Super Merger)**
|
||
|
||
| <20><>﹝<EFBFBD><EFB99D>𧋦 | V2.0 (<28>箏<EFBFBD><E7AE8F>𡁜<EFBFBD><F0A1819C>? |
|
||
| :---- | :---- |
|
||
| **鈭批<E988AD>敶X<E695B6>?* | Web 蝡臬極<E887AC>瘀<EFBFBD><E79880><EFBFBD>郊<EFBFBD>穃紡撘?Wizard嚗?|
|
||
| **<EFBFBD>詨<EFBFBD>隞瑕<EFBFBD>?* | **閫<><E996AB>銝游<E98A9D>蝘𤑳<E89D98>銝凌<E98A9D>靝<EFBFBD>撖孵<E69296><E5ADB5>脲㺭<E884B2>桀笆朣鞾𠗕憸塩<E686B8>?* <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>** | 銝游<E98A9D><E6B8B8>餌<EFBFBD><E9A48C><EFBFBD><EFBFBD><EFBFBD>𥪜𨭌<F0A5AA9C>?|
|
||
|
||
## **銝<><E98A9D>?鈭批<E988AD>瘚<EFBFBD><E7989A><EFBFBD>?(User Flow)**
|
||
|
||
1\. <20>唳旿鋆<E697BF>蝸 (Payload) \-\> 2\. 摰𡁜抅<F0A1819C>?(Anchor & Window) \-\> 3\. <20>匧<EFBFBD>銝𡡞<E98A9D>閫?(Schema) \-\> 4\. <20>箄<EFBFBD><E7AE84><EFBFBD>僎 \-\> 5\. 蝏𤘪<E89D8F>銝擧<E98A9D>頧?
|
||
## **鈭䎚<E988AD>?<3F>詨<EFBFBD><E8A9A8>蠘<EFBFBD><E8A098><EFBFBD>瘙?(Functional Requirements)**
|
||
|
||
### **1\. 甇仿炊銝<E7828A>嚗𡁏㺭<F0A1818F>株<EFBFBD>頧?(Payload)**
|
||
|
||
* **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>?
|
||
* **蝥Y<E89DA5><EFBCB9>行⏛嚗?* <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:** <20>冽<EFBFBD>敹<EFBFBD>◆隞𦒘<E99A9E>隡删<E99AA1><E588A0><EFBFBD>辣銝剜<E98A9D>摰帋<E691B0>銝芯<E98A9D>銝?**<2A>靝蜓銵?(Visit Base)<29>?*<2A>?
|
||
* **摰帋<E691B0>嚗?* 銝餉”<E9A489><E2809D><EFBFBD>銝<EFBFBD>銵䕘<E98AB5>隞<EFBFBD>”<EFBFBD><E2809D>蝏<EFBFBD>之銵函<E98AB5>銝<EFBFBD>銝芸抅<E88AB8><E68A85><EFBFBD>嚗<EFBFBD><E59A97>甈∪停霂?霈輯<E99C88>嚗剹<E59A97><E589B9><EFBFBD>𡁜虜<F0A1819C>胯<EFBFBD>𠹺<EFBFBD><F0A0B9BA>Z扇敶𨰻<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>X𠯫<EFBCB8>麨<EFBFBD>嘅<EFBFBD><E59885><EFBFBD><EFBFBD>撠<EFBFBD><E692A0>銝箸𧒄<E7AEB8>渡<EFBFBD><E6B8A1><EFBFBD><EFBFBD>敹<EFBFBD><E695B9>?
|
||
#### **2.3 颲<>”<EFBFBD>寥<EFBFBD>蝑𣇉裦 (Matching Strategy)**
|
||
|
||
* **P0:** **<EFBFBD>園𡢿蝒烾<EFBFBD>蝵?(Time Window)嚗?*
|
||
* 霈曉<E99C88>閫<EFBFBD><E996AB>嚗朞<E59A97>銵函<E98AB5>璉<EFBFBD><E79289>交𧒄<E4BAA4>游<EFBFBD>憿餃銁 \[銝餉”<E9A489>園𡢿 \- X憭? 銝餉”<E9A489>園𡢿 \+ Y憭坼] <20><>凒<EFBFBD><E58792><EFBFBD>?
|
||
* **暺䁅恕<E48185>潘<EFBFBD>** $\\pm 7$ 憭押<E686AD>?
|
||
* **P0:** **<EFBFBD>脩<EFBFBD>憭<EFBFBD><EFBFBD> (Collision Handling)嚗?*
|
||
* *<2A>箸艶嚗? <20>閙活<E99699>園𡢿蝒堒<E89D92>嚗諹<E59A97>銵冽<E98AB5>憭𡁏辺霈啣<E99C88>嚗<EFBFBD><E59A97><EFBFBD>帋<EFBFBD>銝斗活銵<E6B4BB>撣貉<E692A3>嚗剹<E59A97>?
|
||
* *<2A>厰★ A (暺䁅恕 \- 蝥萄<E89DA5>撅訫<E69285>)嚗? 靽萘<E99DBD><E89098><EFBFBD><EFBFBD>㕑扇敶𨰻<E695B6><F0A8B0BB>蜓銵其縑<E585B6>臬<EFBFBD><E887AC>塚<EFBFBD>銵峕㺭憓𧼮<E68693><F0A7BCAE>?
|
||
* *<2A>厰★ B (<28><>餈穃龪<E7A983>?嚗? 隞<><E99A9E><EFBFBD>嗵氖銝餉”<E9A489>園𡢿<E59C92><F0A1A2BF>餈𤑳<E9A488>銝<EFBFBD><E98A9D>∴<EFBFBD>銝W<E98A9D><EFBCB7>嗡<EFBFBD><E597A1>?
|
||
### **3\. 甇仿炊銝㚁<E98A9D><E39A81>匧<EFBFBD>銝𡡞<E98A9D>閫?(The Schema)**
|
||
|
||
甇斗郊撉文<EFBFBD>摰帋<EFBFBD><EFBFBD><EFBFBD>蝏<EFBFBD>之銵函<EFBFBD><EFBFBD>𡏭<EFBFBD><EFBFBD>争<EFBFBD>嘅<EFBFBD><EFBFBD>堒捐嚗剹<EFBFBD>?
|
||
#### **3.1 <20>𤑳𠶖<F0A491B3>㗇𥋘<E39787>?(Tree Picker)**
|
||
|
||
* **P0:** 撅閧內<E996A7><E585A7><EFBFBD>㗇<EFBFBD>隞嗥<E99A9E><E597A5>㛖<EFBFBD><E39B96><EFBFBD><EFBFBD>?
|
||
* <20><> 銝餉”
|
||
* <20>?雿誯堺<E8AAAF>?
|
||
* <20>?霂𦠜鱏
|
||
* <20><> 颲<>” A (<28>㚚<EFBFBD>)
|
||
* <20>?<3F>賜<EFBFBD><E8B39C>?
|
||
* 漎?摰⊥瓲<E28AA5>餌<EFBFBD> (銝滚㗲<E6BB9A>?
|
||
* **鈭支<E988AD>嚗?* <20>舀<EFBFBD><E88880>㗇<EFBFBD>隞嗅<E99A9E><E59785>?<3F>漤<EFBFBD>剹<EFBFBD>?
|
||
#### **3.2 摰墧𧒄蝏𤘪<E89D8F>憸<EFBFBD><E686B8> (Live Schema Preview)**
|
||
|
||
* **P0:** <20>典<EFBFBD>撟訫𢰧靘批<E99D98><E689B9>嗅<EFBFBD>蝷暝*\*<2A>𨀣<EFBFBD>蝏<EFBFBD>”憭渡<E686AD><E6B8A1><EFBFBD><EFBFBD>𩄼*\*嚗<><E59A97>銵典仍嚗䔶<E59A97>霈∠<E99C88><E288A0>唳旿嚗剹<E59A97>?
|
||
* **隞瑕<E99A9E>潘<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)**
|
||
|
||
* **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)嚗?*
|
||
* 敹<>◆撅閧內<E996A7><E585A7>僎蝏𤘪<E89D8F><F0A498AA>?**<2A>?5-10 銵?* <20>笔<EFBFBD><E7AC94>唳旿<E594B3>?
|
||
* <20>其<EFBFBD><E585B6>冽<EFBFBD><E586BD>厩尐<E58EA9>詨笆 ID <20>臬炏撖寥<E69296><E5AFA5>?
|
||
* **P0:** **韐券<E99F90><E588B8>𧢲踎嚗?*
|
||
* <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>銵峕㺭<E5B395>?
|
||
* 銝W<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)
|
||
|
||
## **銝剹<E98A9D>?<3F>詨<EFBFBD>蝞埈<E89D9E><E59F88>餉<EFBFBD> (Technical Logic)**
|
||
|
||
### **1\. 蝞埈<E89D9E><E59F88>滨妍嚗𡁜抅鈭擧𧒄<E693A7>渡<EFBFBD><E6B8A1><EFBFBD><EFBFBD>撣峕<E692A3>撘讛<E69298><E8AE9B>?(Time-Windowed Stream Hash Join)**
|
||
|
||
### **2\. <20>扯<EFBFBD>隡芯誨<E88AAF>?*
|
||
|
||
// 1\. <20><><EFBFBD><EFBFBD><EFBFBD>遣 (Build Phase)
|
||
// 撠<><E692A0>銵?(Small Tables) 霂餃<E99C82><E9A483><EFBFBD><EFBFBD> Map
|
||
const lookupMap \= {
|
||
"patient\_001": \[
|
||
{ type: "lab", date: "2023-01-02", data: {...} }, // 霈啣<E99C88>1
|
||
{ type: "lab", date: "2023-05-01", data: {...} } // 霈啣<E99C88>2
|
||
\]
|
||
};
|
||
|
||
// 2\. 瘚<><E7989A><EFBFBD>X<EFBFBD> (Probe Phase)
|
||
// <20>鞱<EFBFBD>霂餃<E99C82>銝餉” (Main Table)
|
||
streamMainTable.on('data', (mainRow) \=\> {
|
||
const pId \= mainRow.id;
|
||
const tStart \= mainRow.date \- 7 days;
|
||
const tEnd \= mainRow.date \+ 7 days;
|
||
|
||
// <20>刻<EFBFBD>銵其葉撖餅𪄳蝚血<E89D9A><E8A180>園𡢿蝒㛖<E89D92>霈啣<E99C88>
|
||
const matchLabs \= lookupMap\[pId\].filter(lab \=\>
|
||
lab.date \>= tStart && lab.date \<= tEnd
|
||
);
|
||
|
||
if (matchLabs.length \=== 0\) {
|
||
// 瘝∪龪<E288AA>滚<EFBFBD>嚗<EFBFBD>蘨颲枏枂銝餉”靽⊥<E99DBD>
|
||
output.write({ ...mainRow, lab\_data: null });
|
||
} else {
|
||
// <20>寥<EFBFBD><E5AFA5>唬<EFBFBD> (憭<><E686AD>銝<EFBFBD>撖孵<E69296>)
|
||
matchLabs.forEach(lab \=\> {
|
||
output.write({ ...mainRow, ...lab.data }); // 蝥萄<E89DA5>撅訫<E69285>
|
||
});
|
||
}
|
||
});
|
||
|
||
## **<2A>䜘<EFBFBD>?<3F>屸𢒰<E5B1B8>笔<EFBFBD><E7AC94><EFBFBD><EFBFBD>?(UI Reference)**
|
||
|
||
霂瑕<EFBFBD><EFBFBD>?撌亙<E6928C>A\_頞<5F>漣<EFBFBD><E6BCA3>僎<EFBFBD>沔_<E6B294>笔<EFBFBD>霈曇恣.tsx (V1.0) 銝剔<E98A9D> Step 2 <20>?Step 3 <20>屸𢒰<E5B1B8>?
|
||
* **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>**
|
||
* *撖寧<E69296>嚗? <20>?Step 2 <20>屸𢒰憓𧼮<E68693><F0A7BCAE>曄尐<E69B84>?**Tip**嚗尠<E59A97>靝蜓銵券<E98AB5>𡁜虜<F0A1819C>臬<EFBFBD><E887AC>徉<EFBFBD>睃<EFBFBD><E79D83>X𠯫<EFBCB8>麨<EFBFBD>蹱<EFBFBD><E8B9B1>䁅<EFBFBD><E48185>凋縑<E5878B>胼<EFBFBD>嗵<EFBFBD>銵冽聢<E586BD>腈<EFBFBD>?
|
||
2. **<EFBFBD>園𡢿<EFBFBD>澆<EFBFBD>銋曹<EFBFBD><EFBFBD>怎<EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD>痹<EFBFBD>**
|
||
* *撖寧<E69296>嚗? <20>𡒊垢<F0A1928A>刻圾<E588BB>鞉𧒄<E99E89>游<EFBFBD><E6B8B8>塚<EFBFBD>敹<EFBFBD>◆雿輻鍂撘箏<E69298><E7AE8F>?Parser嚗<72>𣈲<EFBFBD>?2023/1/1, 2023-01-01, 44927 蝑㗇聢撘𧶏<E69298><F0A7B68F><EFBFBD><EFBFBD><EFBFBD>𡏭圾<F0A18FAD>𣂼仃韐伐<E99F90>敶雴蛹<E99BB4>𨀣𧒄<F0A880A3>湔<EFBFBD><E6B994><EFBFBD><EFBFBD>嘅<EFBFBD>銝滩<E98A9D>銵<EFBFBD>龪<EFBFBD>溻<EFBFBD> |