Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/06-开发记录/IIT Manager Agent 技术方案审查与补丁.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

3.7 KiB
Raw Blame History

IIT Manager Agent <20><><EFBFBD>舀䲮獢<E4B2AE><EFBFBD><EFBFBD>銵乩<E98AB5> (V1.1)

*1. <20><EFBFBD>靽格迤嚗朞圾<E69C9E>喳龫<E596B3><EFBFBD>蝵𤏸<E89DB5><F0A48FB8>𡁏<EFBFBD>?

<EFBFBD><EFBFBD>憌𡡞埯銝<EFBFBD> (蝵𤑳<E89DB5>餈鮋<E9A488>𡁏<EFBFBD>?<EFBFBD>遣霈桀銁 3.1 REDCap <20><><EFBFBD> 銝剖<E98A9D><E58996>?"瘛瑕<E7989B><E79195>峕郊璅<E79285>"<EFBFBD>?

<EFBFBD><EFBFBD><EFBFBD>嚗锭yncManager (<28>峕郊蝞∠<E89D9E><E288A0>?

// backend/src/modules/iit-manager/services/SyncManager.ts

export class SyncManager {
/**
* 瘛瑕<E7989B><E79195>峕郊蝑𣇉裦
* 1. 隡睃<E99AA1><E79D83>穃𨯬 Webhook (摰墧𧒄)
* 2. 摰𡁏𧒄頧株砭 (<28>𨅯<EFBFBD>嚗諹圾<E8ABB9><EFBFBD>蝵睲<E89DB5><E79DB2>𡁏<EFBFBD>Webhook銝<EFBCB7><EFBFBD>)
*/
async schedulePolling(projectId: string, intervalMinutes: number = 10) {
await jobQueue.schedule('iit:redcap:poll', { projectId }, {
every: `${intervalMinutes} minutes`
});
}

/**
* 頧株砭隞餃𦛚憭<F0A69B9A><E686AD><EFBFBD>? */
async handlePoll(projectId: string) {
// 1. <20><EFBFBD>銝𦠜活<F0A6A09C>峕郊<E5B395>園𡢿
const lastSync = await this.getLastSyncTime(projectId);

// 2\. 靚<>鍂 REDCap API <20><EFBFBD><E79195>冽迨銋见<E98A8B>靽格㺿<E6A0BC><E3BABF>扇敶? 
// API: 'export', content: 'record', dateRangeBegin: lastSync  
const records \= await this.redcapAdapter.fetchModifiedRecords(projectId, lastSync);  
  
// 3\. 閫血<E996AB>韐冽綉 (憭滨鍂 Webhook <20><><EFBFBD><EFBFBD>)  
for (const record of records) {  
  await jobQueue.push('iit:quality-check', {  
    projectId,  
    recordId: record.record\_id,  
    data: record  
  });  
}  

}
}

靽格㺿撱箄悅嚗?

  • <EFBFBD>?MVP <20>嗆挾嚗?*<2A><EFBFBD>摰䂿緵頧株砭 (Polling)**<2A><><EFBFBD><EFBFBD><E996AC><EFBFBD>駁堺<E9A781><E5A0BA><EFBFBD>蝏𦦵㴓憓<E3B493><E68693>?

*2. <20><EFBFBD>銵亙<E98AB5>嚗𡁜<E59A97><F0A1819C>脫㺭<E884AB><EFBFBD><E6A180>𤩺醌<F0A4A9BA>?

<EFBFBD><EFBFBD>笆 **憌𡡞埯鈭?(摮㗛<E691AE><E3979B>唳旿)**嚗<>遣霈桀⏚<E6A180>函緵<E587BD><EFBFBD> CheckpointService 摰䂿緵<E482BF><EFBFBD><E588B8><EFBFBD><E680A5>?

*<EFBFBD><EFBFBD> API嚗𡁜<E59A97><F0A1819C>讛捶<E8AE9B>扯圻<E689AF>?

Endpoint: POST /api/v1/iit/projects/:id/scan-all

**<2A><EFBFBD>摰䂿緵 (憭滨鍂<E6BBA8><EFBFBD> ASL/DC 璅<E79285><E288AA><EFBFBD>鸌憭<E9B88C><E686AD>蝏誯<E89D8F>)**嚗?

  1. <EFBFBD>鍂 REDCap API 隞<><E99A9E>頧賣<E9A0A7><E8B3A3>?record_id (頧駁<E9A0A7>蝥?<3F>?
  2. 撠?ID <20>𡑒”<F0A19192><E2809D><EFBFBD> (Chunk)嚗峕<E59A97><E5B395>?50 銝?ID<49>?
  3. <EFBFBD>拍鍂 pg-boss <20><EFBFBD>?iit:quality-check:batch 隞餃𦛚<E9A483>?
  4. Worker <20>𣂷葵<F0A382B7><EFBFBD>摰峕㟲<E5B395>唳旿撟嗉<E6929F>銵?Agent<6E>?

3. <20>滨垢<E6BBA8><E59EA2><EFBFBD><EFBFBD><E88880>𡒊

<EFBFBD><EFBFBD>銝剜<EFBFBD><EFBFBD><EFBFBD> "敺桐縑撠讐<E692A0>摨?嚗䔶<E59A97><E494B6><EFBFBD>蝖格<E89D96><E6A0BC><EFBFBD><E88880><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞祉緵<E7A589><EFBFBD> React <20><EFBFBD>嚗?

  • **<2A><EFBFBD><E588BB><EFBFBD>**嚗帋蝙<E5B88B>?Taro (React 霂剜<E99C82>) 撘<><E69298><EFBFBD>蝔见<E89D94><E8A781>?
  • <EFBFBD><EFBFBD>嚗?
    1. <EFBFBD>臭誑霈拙<EFBFBD>蝡臬𣪧<EFBFBD><EFBFBD><EFBFBD>?React <20><EFBFBD>嚗𠃍ooks, Components嚗剹<E59A97>?
    2. <EFBFBD>臭誑憭滨鍂 shared/components 銝剔<E98A9D><E58994><EFBFBD><E585B8><EFBFBD><EFBFBD><E59A97><EFBFBD>唳旿<E594B3><EFBFBD><E6BE86><EFBFBD><E59094>?
    3. Taro <20><EFBFBD><EFBFBD><E98A9D><EFBFBD>霂睲蛹 敺桐縑撠讐<E692A0>摨?+ H5 (<28><EFBFBD><EFBFBD>凝靘扯器<E689AF>?嚗?<EFBFBD>敼潔舅<EFBFBD>?<EFBFBD>?

4. <20>唳旿摨?Schema 敺株<E695BA>

<EFBFBD>?IitUserMapping 銵其葉嚗<E89189>遣霈桀<E99C88><E6A180>?Token 摮埈挾嚗𣬚鍂鈭𤾸<E988AD>蝔见<E89D94> Session 蝏湔擪<E6B994>? model IitUserMapping {
// ... <20><EFBFBD>摮埈挾

// <20><EFBFBD>嚗𡁜<E59A97>蝔见<E89D94>隡朞<E99AA1><EFBFBD>𤨎 (<28><EFBFBD><E585B6><EFBFBD> wx.login)
miniProgramOpenId String? @unique
sessionKey String? // 敺桐縑 session_key

@@index([miniProgramOpenId])
}

5. Dify RAG <20><EFBFBD>隡睃<E99AA1> (憸<><E686B8>頧?

PRD <20>𣂼<EFBFBD> "Protocol 敺<><EFBFBD><EFBFBD>鵭"<22>?

  • 憌𡡞埯嚗𡁏<EFBFBD>甈∟捶<EFBFBD><EFBFBD>霈?Dify <20>齿鰵璉<E9B0B5>㟲銝?PDF嚗屸<E59A97>笔漲<E7AC94><EFBFBD> Token 瘨<><E798A8>堒之<E5A092>?
  • 隡睃<EFBFBD>嚗𡁜銁 ProtocolService 銝剖<E98A9D><E58996>?"<22>喲睸閫<E79DB8><E996AB>蝻枏<E89DBB>"<EFBFBD>?
    • <EFBFBD><EFBFBD>隡?Protocol <20>𠬍<EFBFBD>霈?Agent 憸<><E686B8><EFBFBD>𣂼<EFBFBD><F0A382BC>?"<22><EFBFBD><E4BAA4><EFBFBD><EFBFBD>" (Inclusion/Exclusion Criteria) 撟嗅<E6929F><E59785>?PostgreSQL JSONB 摮埈挾<E59F88>?
    • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>韐冽綉<EFBFBD><EFBFBD>隡睃<EFBFBD><EFBFBD><EFBFBD> DB <20>𣬚<EFBFBD><EFBFBD><E996AB><EFBFBD><EFBFBD><EFBFBD><E6BBA2><EFBFBD><E595A3>?Agent <20>?RAG 璉<><E89D9D>?

蝏栞捏

甇斗䲮獢?V1.0 <20>臭誑<E887AD><EFBFBD><EFBFBD>恣嚗䔶<E59A97><EFBFBD>◆銵亙<E98AB5>銝𡃏膩 "Plan B" (頧株砭<E6A0AA><EFBFBD>)<EFBFBD>? <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>漣靚<EFBFBD>㟲撱箄悅嚗?

  1. Day 1: <20>唳旿摨?& <20><EFBFBD><E7AE87><EFBFBD> (銝滚<E98A9D>)
  2. Day 2: **隡睃<E99AA1>摰䂿緵 REDCap API Adapter (<28><EFBFBD><E58CA7><EFBFBD>)**嚗諹<E59A97><EFBFBD><E494B6>?Webhook (<28><EFBFBD><E588B8><EFBFBD><EFBFBD>?<3F><><EFBFBD>銝?API <20><EFBFBD><E58CA7>游虾<E6B8B8><EFBFBD>銝磰<E98A9D><EFBFBD><E996AB><EFBFBD><EFBFBD><EFBFBD>唳旿<E594B3><EFBFBD><E6A185>?
  3. Day 3: Webhook 銵亙<E98AB5>摰䂿緵 (雿靝蛹<E99D9D>單𧒄<E596AE><EFBFBD>撘?<3F>