Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/02-技术设计/03-前端组件设计.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

156 lines
4.1 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.
# AI<41><EFBFBD><E7AE84><EFBFBD>讃璅<E79285> - <20>滨垢蝏<E59EA2>辣霈曇恣
> **<2A><><EFBFBD><EFB99D>𧋦嚗?* v1.0
> **<2A>𥕦遣<F0A595A6><EFBFBD>嚗?* 2025-10-29
> **蝏湔擪<E6B994><E693AA><EFBFBD>** AI<41><EFBFBD><E7AE84><EFBFBD>讃撘<E8AE83><E69298>穃𣪧<E7A983>?
> **<2A><><EFBFBD>擧凒<E693A7><EFBFBD>** 2025-10-29
---
## <20><> <20><>﹝霂湔<E99C82>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈蚊I<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝡舐<EFBFBD>隞嗉挽霈∴<EFBFBD><EFBFBD><EFBFBD>𡠺蝏<EFBFBD>辣蝏𤘪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞嗆𦻖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>漱鈭坿挽霈∠<EFBFBD><EFBFBD>?
---
## <20>妝 蝏<><EFBFBD><EFBFBD>
### <20><><EFBFBD><EFBFBD><EFBFBD><E48185><EFBFBD><E79285><EFBFBD>辣蝏𤘪<E89D8F>
```
LiteratureScreeningModule/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> TitleAbstractScreening/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> SetupView/ # 霈曄蔭銝𤾸鍳<F0A4BEB8><EFBFBD><E588BB>?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> CriteriaReference.tsx # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𢒰<EFBFBD>?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> CriteriaAdjustment.tsx # 銝湔𧒄靚<F0A79284><EFBFBD><E39FB2><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> LiteratureImport.tsx # <20><>讃撖澆<E69296><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E5A999><EFBFBD> StartScreeningButton.tsx # <20>臬𢆡蝑偦<E89D91><EFBFBD><E39787>?
<EFBFBD>? <20>?
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> ReviewTableView/ # 銵冽聢<E586BD>硋恣<E7A18B>詨極雿𨅯蝱 潃鞉瓲敹?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> ScreeningTable.tsx # 銝餉”<E9A489><EFBFBD>隞?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> TableHeader.tsx # 銵典仍嚗<E4BB8D><E59A97>銵𣬚<E98AB5><F0A3AC9A><EFBFBD><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> TableRow.tsx # 銵冽聢銵?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> ExpandableRow.tsx # <20><EFBFBD><EFBFBD>銵䕘<E98AB5><EFBFBD>旿撅閧內嚗?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> JudgmentCell.tsx # <20>斗鱏<E69697><EFBFBD><E8A8AB><EFBFBD><E6BD98>?<3F>??嚗?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> ConflictIndicator.tsx # <20><EFBFBD><E884A9><EFBFBD><E59786><EFBFBD>蝷箏膥
<EFBFBD>? <20>? <20><EFBFBD><E5A999><EFBFBD> DecisionSelector.tsx # <20><><EFBFBD><E89D8F>蝑㚚<E89D91>㗇𥋘<E39787>?
<EFBFBD>? <20>?
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> EvidenceModal/ # <20><EFBFBD><E8ABB9><EFBFBD><E69B89><EFBFBD><EFBFBD>交芋<E4BAA4><E88A8B><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> ModalContainer.tsx # 璅⊥<E79285><E28AA5><EFBFBD>摰孵膥
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> AbstractView.tsx # 撌虫儒嚗𡁏<E59A97><EFBFBD><E996AC><EFBFBD>?
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> EvidenceView.tsx # <20>喃儒嚗朞<E59A97><E69C9E><EFBFBD><E6A0AA>?
<EFBFBD>? <20>? <20><EFBFBD><E5A999><EFBFBD> HighlightedText.tsx # 擃䀝漁<E4809D><E6BC81>𧋦蝏<F0A78BA6>
<EFBFBD>? <20>?
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> ResultView/ # 蝏𤘪<E89D8F>撅閧內閫<E585A7>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> StatisticsCards.tsx # 蝏蠘恣<E8A098><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> PrismaSummary.tsx # PRISMA撘𤩺<E69298><F0A4A9BA><EFBFBD><EFBFBD>
<EFBFBD>? <20>? <20><EFBFBD><E98EBF><EFBFBD> ResultTabs.tsx # 蝏𤘪<E89D8F>Tab憿?
<EFBFBD>? <20>? <20><EFBFBD><E5A999><EFBFBD> ResultTable.tsx # 蝏𤘪<E89D8F>銵冽聢
<EFBFBD>? <20>?
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> shared/ # <20>曹澈蝏<E6BE88>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> ProtocolOverview.tsx # <20>𠉛弦<F0A0899B><EFBFBD><EFBFBD><E79281><EFBFBD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> BatchOperation.tsx # <20><EFBFBD><E5AFA5><EFBFBD><EFBFBD>
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> ExportButton.tsx # 撖澆枂<E6BE86>厰僼
```
---
## <20><20><EFBFBD><EFBFBD>辣霈曇恣
### 1. ScreeningTable (銵冽聢<E586BD>硋恣<E7A18B>詨極雿𨅯蝱)
**蝏<><EFBFBD>諹提**:
- 撅閧內<E996A7><E585A7><EFBFBD>𡑒”<F0A19192>𣬚<EFBFBD><F0A3AC9A><EFBFBD><E58EA9>?
- <20><EFBFBD>撅訫<E69285>/<2F>嗉絲<E59789><EFBFBD><EFBFBD>
- <20><EFBFBD><E88880>孵稬<E5ADB5>斗鱏<E69697><EFBFBD>霂行<E99C82>
- <20><EFBFBD><E88880><EFBFBD><E5AFA5><EFBFBD>
**Props<70>亙藁**:
```typescript
interface ScreeningTableProps {
projectId: string;
items: LiteratureItem[];
results: ScreeningResult[];
onDecisionChange: (itemId: string, decision: string) => void;
onBatchUpdate: (itemIds: string[], decision: string) => void;
}
```
### 2. EvidenceModal (<28><EFBFBD><E8ABB9><EFBFBD><E69B89><EFBFBD><EFBFBD>交芋<E4BAA4><E88A8B><EFBFBD>)
**蝏<><EFBFBD>諹提**:
- 撌虫儒<E899AB>曄內<E69B84><EFBFBD>/<2F><EFBFBD>
- <20>喃儒<E59683>曄內AI<41>斗鱏<E69697><EFBFBD><E8ABB9>?
- <20><EFBFBD><E88880><EFBFBD>𧋦擃䀝漁
- <20><EFBFBD><E88880><EFBFBD>撘閧鍂<E996A7><EFBFBD>
**Props<70>亙藁**:
```typescript
interface EvidenceModalProps {
visible: boolean;
itemId: string;
dimension: 'P' | 'I' | 'C' | 'S';
onClose: () => void;
}
```
### 3. ReviewTableView (摰⊥瓲撌乩<E6928C><E4B9A9>唬蜓閫<E89C93>㦛)
**蝏<><EFBFBD>諹提**:
- <20><EFBFBD>銵冽聢<E586BD>峕芋<E5B395><E88A8B><EFBFBD>
- 蝞∠<E89D9E>蝑偦<E89D91>厩𠶖<E58EA9>?
-<><E686AD><EFBFBD><EFBFBD>鈭支<E988AD>
---
## <20><> <20><EFBFBD><E59786><EFBFBD>?
### 雿輻鍂Zustand蝞∠<E89D9E>蝑偦<E89D91>厩𠶖<E58EA9>?
```typescript
interface ScreeningStore {
currentProject: Project | null;
items: LiteratureItem[];
results: ScreeningResult[];
selectedItems: string[];
loading: boolean;
// Actions
loadProject: (projectId: string) => Promise<void>;
updateDecision: (itemId: string, decision: string) => Promise<void>;
batchUpdate: (itemIds: string[], decision: string) => Promise<void>;
}
```
---
## <20>𢲡 <20><EFBFBD>撘讛挽霈?
### 銵冽聢撣<E881A2><E692A3><EFBFBD><EFBFBD><EFBFBD>
- **獢屸𢒰蝡?*: 摰峕㟲銵冽聢<E586BD>曄內
- **撟單踎蝡?*: <20>舀赤<E88880><EFBFBD><E78390><EFBFBD><E58981>喲睸<E596B2>堒𤐄摰?
- **蝘餃𢆡蝡?*: <20><EFBFBD>撘誩<E69298><EFBFBD><E69285>蹂誨銵冽聢
---
## <20>?敺<><E695BA><EFBFBD><EFBFBD><EFBFBD>摰?
<EFBFBD>𡒊賒撠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- 霂衣<E99C82><EFBFBD><EFBFBD>亙藁摰帋<E691B0>
-<>辣鈭支<E988AD><EFBFBD><E7989A><EFBFBD>?
- <20><EFBFBD>霈曇恣閫<E681A3><E996AB>
-<>辣雿輻鍂蝷箔<E89DB7>
---
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗?* v1.0
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD>** 2025-10-29