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%)
285 lines
6.1 KiB
Markdown
285 lines
6.1 KiB
Markdown
# å—æ®µæ˜ 射问题修å¤<C3A5>报告
|
||
|
||
**日期**: 2025-11-21
|
||
**问题**: 真实LLMç›é€‰å¤±è´¥ï¼ˆæˆ<C3A6>功ï¼?/20ï¼?
|
||
**åŽŸå› **: å—æ®µå<C2B5><C3A5>ä¸<C3A4>匹é…<C3A9>
|
||
**状�*: �已修�
|
||
|
||
---
|
||
|
||
## ðŸ”<C5B8> 问题诊æ–
|
||
|
||
### 症状
|
||
```
|
||
任务状� completed
|
||
进度: 20/20
|
||
æˆ<EFBFBD>功: 0 â<>?
|
||
ç›é€‰ç»“果数: 0
|
||
```
|
||
|
||
**表现**�
|
||
- 任务瞬间完æˆ<C3A6>ï¼?秒)
|
||
- 所有文献处ç<E2809E>†å¤±è´?
|
||
- 没有ä¿<C3A4>å˜ä»»ä½•ç›é€‰ç»“æž?
|
||
|
||
---
|
||
|
||
## 🎯 æ ¹æœ¬åŽŸå›
|
||
|
||
### 问题1: PICOSå—æ®µå<C2B5><C3A5>ä¸<C3A4>匹é…<C3A9>
|
||
|
||
**å‰<C3A5>端/æ•°æ<C2B0>®åº“æ ¼å¼?* (`TitleScreeningSettings.tsx`):
|
||
```typescript
|
||
picoCriteria: {
|
||
P: '2型糖尿病患�..',
|
||
I: 'SGLT2抑制�..',
|
||
C: '安慰剂或常规治疗...',
|
||
O: '心血管结局...',
|
||
S: 'RCT'
|
||
}
|
||
```
|
||
|
||
**LLMæœ<C3A6>åŠ¡æœŸæœ›æ ¼å¼<C3A5>** (`llmScreeningService.ts`):
|
||
```typescript
|
||
// 实际上支æŒ<C3A6>两ç§<C3A7>æ ¼å¼<C3A5>ï¼Œä½†ä¼˜å…ˆä½¿ç”¨çŸæ ¼å¼<C3A5>
|
||
picoCriteria: {
|
||
P: '...', // �
|
||
I: '...', // �
|
||
C: '...', // �
|
||
O: '...', // �
|
||
S: '...' // �
|
||
}
|
||
```
|
||
|
||
**诊æ–**:å‰<C3A5>端使ç”?P/I/C/O/S æ ¼å¼<C3A5>,但 `screeningService.ts` ç›´æŽ¥ä¼ é€’äº†æ•°æ<C2B0>®åº“çš„åŽŸå§‹æ ¼å¼<C3A5>,未å<C2AA>šæ˜ å°„ã€?
|
||
|
||
---
|
||
|
||
### 问题2: 模型å<E280B9><C3A5>æ ¼å¼<C3A5>ä¸<C3A4>匹é…<C3A9>
|
||
|
||
**å‰<C3A5>ç«¯æ ¼å¼<C3A5>** (`TitleScreeningSettings.tsx`):
|
||
```typescript
|
||
models: ['DeepSeek-V3', 'Qwen-Max']
|
||
```
|
||
|
||
**LLMæœ<C3A6>åŠ¡æœŸæœ›æ ¼å¼<C3A5>** (`llmScreeningService.ts`):
|
||
```typescript
|
||
models: ['deepseek-chat', 'qwen-max']
|
||
```
|
||
|
||
**åŽŸå› **:å‰<C3A5>端使用展示å<C2BA><C3A5>称,å<C592>Žç«¯éœ€è¦<C3A8>APIå<49><C3A5>ç§°ã€?
|
||
|
||
---
|
||
|
||
### 问题3: ç¼ºå°‘å—æ®µéªŒè¯<C3A8>
|
||
|
||
文献å<EFBFBD>¯èƒ½ç¼ºå°‘ `title` æˆ?`abstract`,导致LLM调用失败ã€?
|
||
|
||
---
|
||
|
||
## âœ?ä¿®å¤<C3A5>方案
|
||
|
||
### ä¿®å¤<C3A5>1: æ·»åŠ PICOSå—æ®µæ˜ å°„
|
||
|
||
**文件**: `backend/src/modules/asl/services/screeningService.ts`
|
||
|
||
```typescript
|
||
// 🔧 ä¿®å¤<C3A5>ï¼šå—æ®µå<C2B5><C3A5>æ˜ å°„ï¼ˆæ•°æ<C2B0>®åº“æ ¼å¼<C3A5> â†?LLMæœ<C3A6>åŠ¡æ ¼å¼<C3A5>ï¼?
|
||
const rawPicoCriteria = project.picoCriteria as any;
|
||
const picoCriteria = {
|
||
P: rawPicoCriteria?.P || rawPicoCriteria?.population || '',
|
||
I: rawPicoCriteria?.I || rawPicoCriteria?.intervention || '',
|
||
C: rawPicoCriteria?.C || rawPicoCriteria?.comparison || '',
|
||
O: rawPicoCriteria?.O || rawPicoCriteria?.outcome || '',
|
||
S: rawPicoCriteria?.S || rawPicoCriteria?.studyDesign || '',
|
||
};
|
||
```
|
||
|
||
**优势**�
|
||
- âœ?兼容两ç§<C3A7>æ ¼å¼<C3A5>(P/I/C/O/S æˆ?population/intervention/...ï¼?
|
||
- âœ?防御性编程,é<C592>¿å…<C3A5>undefined
|
||
|
||
---
|
||
|
||
### ä¿®å¤<C3A5>2: æ·»åŠ æ¨¡åž‹å<E280B9><C3A5>æ˜ å°?
|
||
|
||
```typescript
|
||
// 🔧 ä¿®å¤<C3A5>:模型å<E280B9><C3A5>æ˜ å°„ï¼ˆå‰<C3A5>ç«¯æ ¼å¼?â†?APIæ ¼å¼<C3A5>ï¼?
|
||
const MODEL_NAME_MAP: Record<string, string> = {
|
||
'DeepSeek-V3': 'deepseek-chat',
|
||
'Qwen-Max': 'qwen-max',
|
||
'GPT-4o': 'gpt-4o',
|
||
'Claude-4.5': 'claude-sonnet-4.5',
|
||
'deepseek-chat': 'deepseek-chat', // 兼容直接使用APIå<49>?
|
||
'qwen-max': 'qwen-max',
|
||
// ... æ›´å¤šæ˜ å°„
|
||
};
|
||
|
||
const rawModels = screeningConfig?.models || ['deepseek-chat', 'qwen-max'];
|
||
const models = rawModels.map((m: string) => MODEL_NAME_MAP[m] || m);
|
||
```
|
||
|
||
**æ˜ å°„è¡?*ï¼?
|
||
| å‰<C3A5>端展示å<C2BA>?| APIå<49><C3A5>ç§° |
|
||
|-----------|---------|
|
||
| DeepSeek-V3 | deepseek-chat |
|
||
| Qwen-Max | qwen-max |
|
||
| GPT-4o | gpt-4o |
|
||
| Claude-4.5 | claude-sonnet-4.5 |
|
||
|
||
---
|
||
|
||
### ä¿®å¤<C3A5>3: æ·»åŠ æ–‡çŒ®éªŒè¯<C3A8>
|
||
|
||
```typescript
|
||
// 🔧 验è¯<C3A8>ï¼šå¿…é¡»æœ‰æ ‡é¢˜å’Œæ‘˜è¦?
|
||
if (!literature.title || !literature.abstract) {
|
||
logger.warn('Skipping literature without title or abstract', {
|
||
literatureId: literature.id,
|
||
hasTitle: !!literature.title,
|
||
hasAbstract: !!literature.abstract,
|
||
});
|
||
console.log(`âš ï¸<EFBFBD> 跳过文献 ${processedCount + 1}: ç¼ºå°‘æ ‡é¢˜æˆ–æ‘˜è¦<C3A8>`);
|
||
processedCount++;
|
||
continue;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### ä¿®å¤<C3A5>4: 增强调试日志
|
||
|
||
```typescript
|
||
console.log('\n🚀 开始真实LLMç›é€?');
|
||
console.log(' 任务ID:', taskId);
|
||
console.log(' 项目ID:', projectId);
|
||
console.log(' 文献�', literatures.length);
|
||
console.log(' æ¨¡åž‹ï¼ˆæ˜ å°„å<E2809E>Žï¼?', models); // â?æ˜¾ç¤ºæ˜ å°„å<E2809E>Žçš„å€?
|
||
console.log(' PICOS-P:', picoCriteria.P?.substring(0, 50) || '(ç©?');
|
||
console.log(' PICOS-I:', picoCriteria.I?.substring(0, 50) || '(ç©?');
|
||
console.log(' PICOS-C:', picoCriteria.C?.substring(0, 50) || '(ç©?');
|
||
console.log(' çº³å…¥æ ‡å‡†:', inclusionCriteria?.substring(0, 50) || '(ç©?');
|
||
console.log(' æŽ’é™¤æ ‡å‡†:', exclusionCriteria?.substring(0, 50) || '(ç©?');
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 测试æ¥éª¤
|
||
|
||
### 1. é‡<C3A9>å<EFBFBD>¯å<C2AF>Žç«¯ï¼ˆå¿…é¡»ï¼<C3AF>ï¼?
|
||
|
||
```bash
|
||
# å<>œæ¢å½“å‰<C3A5>å<EFBFBD>Žç«¯ï¼ˆCtrl+Cï¼?
|
||
cd D:\MyCursor\AIclinicalresearch\backend
|
||
npm run dev
|
||
```
|
||
|
||
### 2. 测试(å°<C3A5>规模ï¼?
|
||
|
||
1. 访问å‰<C3A5>端
|
||
2. 填写PICOS
|
||
3. **ä¸Šä¼ 5篇文çŒ?*(先测试å°<C3A5>规模)
|
||
4. 点击"开始AIåˆ<C3A5>ç›"
|
||
|
||
### 3. 查看å<E280B9>Žç«¯æŽ§åˆ¶å<C2B6>?
|
||
|
||
**应该看到**�
|
||
```
|
||
🚀 开始真实LLMç›é€?
|
||
任务ID: xxx
|
||
文献� 5
|
||
æ¨¡åž‹ï¼ˆæ˜ å°„å<E2809E>Žï¼? [ 'deepseek-chat', 'qwen-max' ]
|
||
PICOS-P: 2型糖尿病患�..
|
||
PICOS-I: SGLT2抑制�..
|
||
PICOS-C: 安慰�..
|
||
çº³å…¥æ ‡å‡†: æˆ<C3A6>人2型糖尿病...
|
||
æŽ’é™¤æ ‡å‡†: 综述ã€<C3A3>系统评ä»?..
|
||
|
||
[ç‰å¾…10-20ç§’]
|
||
|
||
âœ?文献 1/5 处ç<E2809E>†æˆ<C3A6>功
|
||
DS: include / Qwen: include
|
||
冲çª<C3A7>: å<>?
|
||
|
||
[ç‰å¾…10-20ç§’]
|
||
|
||
âœ?文献 2/5 处ç<E2809E>†æˆ<C3A6>功
|
||
DS: exclude / Qwen: exclude
|
||
冲çª<C3A7>: å<>?
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 预期效果
|
||
|
||
### ä¿®å¤<C3A5>å‰?
|
||
- â<>±ï¸<C3AF> 1秒完æˆ?0ç¯?
|
||
- â<>?æˆ<C3A6>功ï¼?
|
||
- â<>?ç›é€‰ç»“果数ï¼?
|
||
|
||
### ä¿®å¤<C3A5>å<EFBFBD>?
|
||
- â<>±ï¸<C3AF> 50-100秒完æˆ?篇(æ¯<C3A6>篇10-20秒)
|
||
- âœ?æˆ<C3A6>功ï¼?
|
||
- âœ?ç›é€‰ç»“果数ï¼?
|
||
- âœ?è¯<C3A8>æ<EFBFBD>®åŒ…å<E280A6>«çœŸå®žçš„AI分æž<C3A6>
|
||
- âœ?è¯<C3A8>æ<EFBFBD>®ä¸<C3A4>包å<E280A6>?模拟è¯<C3A8>æ<EFBFBD>®"
|
||
|
||
---
|
||
|
||
## 🔧 修改文件
|
||
|
||
- �`backend/src/modules/asl/services/screeningService.ts`
|
||
- æ·»åŠ PICOSå—æ®µæ˜ å°„
|
||
- æ·»åŠ æ¨¡åž‹å<E280B9><C3A5>æ˜ å°?
|
||
- æ·»åŠ æ–‡çŒ®éªŒè¯<C3A8>
|
||
- 增强调试日志
|
||
|
||
---
|
||
|
||
## 💡 ç»<C3A7>验教è®
|
||
|
||
### 1. å‰<C3A5>å<EFBFBD>Žç«¯æ•°æ<C2B0>®æ ¼å¼<C3A5>一致æ€?
|
||
- å‰<C3A5>ç«¯ä½¿ç”¨çš„å±•ç¤ºæ ¼å¼?â‰?å<>Žç«¯APIæ ¼å¼<C3A5>
|
||
- 需è¦<C3A8>在集æˆ<C3A6>层å<E2809A>šæ˜ å°„
|
||
|
||
### 2. 防御性编�
|
||
- 使用 `||` æ<><C3A6>供默认å€?
|
||
- 验è¯<C3A8>å¿…éœ€å—æ®µ
|
||
- 兼容多ç§<C3A7>æ ¼å¼<C3A5>
|
||
|
||
### 3. 调试日志的é‡<C3A9>è¦<C3A8>æ€?
|
||
- æ˜¾ç¤ºæ˜ å°„å<E2809E>Žçš„值(ä¸<C3A4>是原始值)
|
||
- 输出所有关键å<C2AE>‚æ•?
|
||
- 帮助快速定ä½<C3A4>é—®é¢?
|
||
|
||
---
|
||
|
||
## 🎯 å<>Žç»ä¼˜åŒ–
|
||
|
||
### çŸæœŸ
|
||
1. âœ?å—æ®µæ˜ 射(已完æˆ<C3A6>ï¼?
|
||
2. âœ?模型å<E280B9><C3A5>æ˜ å°„ï¼ˆå·²å®Œæˆ<C3A6>)
|
||
3. âœ?验è¯<C3A8>å¿…éœ€å—æ®µï¼ˆå·²å®Œæˆ<C3A6>ï¼?
|
||
|
||
### 䏿œŸ
|
||
1. 统一å‰<C3A5>å<EFBFBD>Žç«¯æ•°æ<C2B0>®æ ¼å¼<C3A5>(使用 TypeScript 接å<C2A5>£ï¼?
|
||
2. æ·»åŠ æ•°æ<C2B0>®æ ¼å¼<C3A5>验è¯<C3A8>ä¸é—´ä»?
|
||
3. 改进错误æ<C2AF><C3A6>示
|
||
|
||
### 长期
|
||
1. 使用 tRPC æˆ?GraphQL ç¡®ä¿<C3A4>类型安全
|
||
2. 自动化测试覆�
|
||
3. Schema验è¯<C3A8>
|
||
|
||
---
|
||
|
||
**报告�*: AI Assistant
|
||
**日期**: 2025-11-21
|
||
**版本**: v1.0.0
|
||
|
||
|
||
|
||
|
||
|