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

4.1 KiB
Raw Blame History

AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃璅<EFBFBD> - <20>滨垢蝏<E59EA2>辣霈曇恣

*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗? v1.0
*<EFBFBD>𥕦遣<EFBFBD><EFBFBD>嚗? 2025-10-29
蝏湔擪<EFBFBD><EFBFBD><EFBFBD> AI<41><EFBFBD><E7AE84><EFBFBD>讃撘<E8AE83><E69298>穃𣪧<E7A983>? <EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> 2025-10-29


<EFBFBD><EFBFBD> <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>?


<EFBFBD>妝 蝏<><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>

LiteratureScreeningModule/
<0A><EFBFBD><E98EBF><EFBFBD> TitleAbstractScreening/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> SetupView/                    # 霈曄蔭銝𤾸鍳<F0A4BEB8><EFBFBD><E588BB>?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> CriteriaReference.tsx     # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𢒰<EFBFBD>?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> CriteriaAdjustment.tsx    # 銝湔𧒄靚<F0A79284><EFBFBD><E39FB2><EFBFBD>
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> LiteratureImport.tsx      # <20><>讃撖澆<E69296><EFBFBD><0A>?  <20>?  <20><EFBFBD><E5A999><EFBFBD> StartScreeningButton.tsx  # <20>臬𢆡蝑偦<E89D91><EFBFBD><E39787>?
<0A>?  <20>?
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> ReviewTableView/              # 銵冽聢<E586BD>硋恣<E7A18B>詨極雿𨅯蝱 潃鞉瓲敹?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> ScreeningTable.tsx        # 銝餉”<E9A489><EFBFBD>隞?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> TableHeader.tsx           # 銵典仍嚗<E4BB8D><E59A97>銵𣬚<E98AB5><F0A3AC9A><EFBFBD><EFBFBD>
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> TableRow.tsx              # 銵冽聢銵?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> ExpandableRow.tsx         # <20><EFBFBD><EFBFBD>銵䕘<E98AB5><EFBFBD>旿撅閧內嚗?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> JudgmentCell.tsx          # <20>斗鱏<E69697><EFBFBD><E8A8AB><EFBFBD><E6BD98>?<3F>??嚗?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> ConflictIndicator.tsx     # <20><EFBFBD><E884A9><EFBFBD><E59786><EFBFBD>蝷箏膥
<0A>?  <20>?  <20><EFBFBD><E5A999><EFBFBD> DecisionSelector.tsx      # <20><><EFBFBD><E89D8F>蝑㚚<E89D91>㗇𥋘<E39787>?
<0A>?  <20>?
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> EvidenceModal/                # <20><EFBFBD><E8ABB9><EFBFBD><E69B89><EFBFBD><EFBFBD>交芋<E4BAA4><E88A8B><EFBFBD>
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> ModalContainer.tsx        # 璅⊥<E79285><E28AA5><EFBFBD>摰孵膥
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> AbstractView.tsx          # 撌虫儒嚗𡁏<E59A97><EFBFBD><E996AC><EFBFBD>?
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> EvidenceView.tsx          # <20>喃儒嚗朞<E59A97><E69C9E><EFBFBD><E6A0AA>?
<0A>?  <20>?  <20><EFBFBD><E5A999><EFBFBD> HighlightedText.tsx       # 擃䀝漁<E4809D><E6BC81>𧋦蝏<F0A78BA6><0A>?  <20>?
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> ResultView/                   # 蝏𤘪<E89D8F>撅閧內閫<E585A7><0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> StatisticsCards.tsx       # 蝏蠘恣<E8A098><EFBFBD>
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> PrismaSummary.tsx         # PRISMA撘𤩺<E69298><F0A4A9BA><EFBFBD><EFBFBD>
<0A>?  <20>?  <20><EFBFBD><E98EBF><EFBFBD> ResultTabs.tsx            # 蝏𤘪<E89D8F>Tab憿?
<0A>?  <20>?  <20><EFBFBD><E5A999><EFBFBD> ResultTable.tsx           # 蝏𤘪<E89D8F>銵冽聢
<0A>?  <20>?
<0A>?  <20><EFBFBD><E5A999><EFBFBD> shared/                       # <20>曹澈蝏<E6BE88><0A>?      <20><EFBFBD><E98EBF><EFBFBD> ProtocolOverview.tsx      # <20>𠉛弦<F0A0899B><EFBFBD><EFBFBD><E79281><EFBFBD><0A>?      <20><EFBFBD><E98EBF><EFBFBD> BatchOperation.tsx        # <20><EFBFBD><E5AFA5><EFBFBD><EFBFBD><0A>?      <20><EFBFBD><E5A999><EFBFBD> ExportButton.tsx          # 撖澆枂<E6BE86>厰僼

<EFBFBD><20><EFBFBD><EFBFBD>辣霈曇恣

1. ScreeningTable (銵冽聢<E586BD>硋恣<E7A18B>詨極雿𨅯蝱)

<EFBFBD><EFBFBD>諹提:

  • 撅閧內<EFBFBD><EFBFBD><EFBFBD>𡑒”<EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
  • <EFBFBD><EFBFBD>撅訫<EFBFBD>/<2F>嗉絲<E59789><EFBFBD><EFBFBD>
  • <EFBFBD><EFBFBD><EFBFBD>孵稬<EFBFBD>斗鱏<EFBFBD><EFBFBD>霂行<EFBFBD>
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Props<EFBFBD>亙藁:

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><EFBFBD>諹提:

  • 撌虫儒<EFBFBD>曄內<EFBFBD><EFBFBD>/<2F><EFBFBD>
  • <EFBFBD>喃儒<EFBFBD>曄內AI<EFBFBD>斗鱏<EFBFBD><EFBFBD><EFBFBD>?
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦擃䀝漁
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘閧鍂<EFBFBD><EFBFBD>

Props<EFBFBD>亙藁:

interface EvidenceModalProps {
  visible: boolean;
  itemId: string;
  dimension: 'P' | 'I' | 'C' | 'S';
  onClose: () => void;
}

3. ReviewTableView (摰⊥瓲撌乩<E6928C><E4B9A9>唬蜓閫<E89C93>㦛)

<EFBFBD><EFBFBD>諹提:

  • <EFBFBD><EFBFBD>銵冽聢<EFBFBD>峕芋<EFBFBD><EFBFBD><EFBFBD>
  • 蝞∠<EFBFBD>蝑偦<EFBFBD>厩𠶖<EFBFBD>?
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>鈭支<EFBFBD>

<EFBFBD><EFBFBD> <20><EFBFBD><E59786><EFBFBD>?

雿輻鍂Zustand蝞∠<EFBFBD>蝑偦<EFBFBD>厩𠶖<EFBFBD>?

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>;
}

<EFBFBD>𢲡 <20><EFBFBD>撘讛挽霈?

銵冽聢撣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

  • **獢屸𢒰蝡?*: 摰峕㟲銵冽聢<E586BD>曄內
  • **撟單踎蝡?*: <20>舀赤<E88880><EFBFBD><E78390><EFBFBD><E58981>喲睸<E596B2>堒𤐄摰?
  • **蝘餃𢆡蝡?*: <20><EFBFBD>撘誩<E69298><EFBFBD><E69285>蹂誨銵冽聢

<EFBFBD>?敺<><E695BA><EFBFBD><EFBFBD><EFBFBD>摰?

<EFBFBD>𡒊賒撠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

  • 霂衣<EFBFBD><EFBFBD><EFBFBD>亙藁摰帋<EFBFBD>
  • <EFBFBD>辣鈭支<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
  • <EFBFBD><EFBFBD>霈曇恣閫<EFBFBD><EFBFBD>
  • <EFBFBD>辣雿輻鍂蝷箔<EFBFBD>

*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗? v1.0
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD> 2025-10-29