Files
AIclinicalresearch/backend/src/modules/iit-manager/test-chatservice-dify.ts
HaHafeng 57fdc6ef00 feat(aia): Integrate PromptService for 10 AI agents
Features:
- Migrate 10 agent prompts from hardcoded to database
- Add grayscale preview support (DRAFT/ACTIVE distribution)
- Implement 3-tier fallback (DB -> Cache -> Hardcoded)
- Add version management and rollback capability

Files changed:
- backend/scripts/migrate-aia-prompts.ts (new migration script)
- backend/src/common/prompt/prompt.fallbacks.ts (add AIA fallbacks)
- backend/src/modules/aia/services/agentService.ts (integrate PromptService)
- backend/src/modules/aia/services/conversationService.ts (pass userId)
- backend/src/modules/aia/types/index.ts (fix AgentStage type)

Documentation:
- docs/03-业务模块/AIA-AI智能问答/06-开发记录/2026-01-18-Prompt管理系统集成.md
- docs/02-通用能力层/00-通用能力层清单.md (add FileCard, Prompt management)
- docs/00-系统总体设计/00-系统当前状态与开发指南.md (update to v3.6)

Prompt codes:
- AIA_SCIENTIFIC_QUESTION, AIA_PICO_ANALYSIS, AIA_TOPIC_EVALUATION
- AIA_OUTCOME_DESIGN, AIA_CRF_DESIGN, AIA_SAMPLE_SIZE
- AIA_PROTOCOL_WRITING, AIA_METHODOLOGY_REVIEW
- AIA_PAPER_POLISH, AIA_PAPER_TRANSLATE

Tested: Migration script executed, all 10 prompts inserted successfully
2026-01-18 15:48:53 +08:00

151 lines
3.7 KiB
TypeScript
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.
/**
* 测试ChatService的Dify知识库集成
*
* 测试场景:
* 1. 询问研究方案相关问题触发Dify检索
* 2. 询问患者数据触发REDCap查询
* 3. 混合查询(同时涉及文档和数据)
*/
import { ChatService } from './services/ChatService.js';
const chatService = new ChatService();
async function testDifyIntegration() {
console.log('='.repeat(80));
console.log('🧪 测试ChatService的Dify知识库集成');
console.log('='.repeat(80));
console.log('');
const testUserId = 'FengZhiBo';
// 测试1研究方案相关问题应该触发Dify检索
console.log('📝 测试1询问研究的纳入排除标准应触发Dify检索');
console.log('-'.repeat(80));
try {
const answer1 = await chatService.handleMessage(
testUserId,
'这个研究的排除标准是什么?'
);
console.log('✅ AI回答:');
console.log(answer1);
console.log('');
} catch (error: any) {
console.error('❌ 测试1失败:', error.message);
console.log('');
}
// 等待2秒
await new Promise(resolve => setTimeout(resolve, 2000));
// 测试2CRF相关问题应该触发Dify检索
console.log('📝 测试2询问CRF表格内容应触发Dify检索');
console.log('-'.repeat(80));
try {
const answer2 = await chatService.handleMessage(
testUserId,
'CRF表格中有哪些观察指标'
);
console.log('✅ AI回答:');
console.log(answer2);
console.log('');
} catch (error: any) {
console.error('❌ 测试2失败:', error.message);
console.log('');
}
// 等待2秒
await new Promise(resolve => setTimeout(resolve, 2000));
// 测试3患者数据查询应该触发REDCap查询
console.log('📊 测试3询问患者记录应触发REDCap查询');
console.log('-'.repeat(80));
try {
const answer3 = await chatService.handleMessage(
testUserId,
'查询一下ID 7的患者情况'
);
console.log('✅ AI回答:');
console.log(answer3);
console.log('');
} catch (error: any) {
console.error('❌ 测试3失败:', error.message);
console.log('');
}
// 等待2秒
await new Promise(resolve => setTimeout(resolve, 2000));
// 测试4混合查询可能同时触发Dify和REDCap
console.log('🔀 测试4混合查询询问研究目的');
console.log('-'.repeat(80));
try {
const answer4 = await chatService.handleMessage(
testUserId,
'这个研究的主要研究目的是什么?'
);
console.log('✅ AI回答:');
console.log(answer4);
console.log('');
} catch (error: any) {
console.error('❌ 测试4失败:', error.message);
console.log('');
}
// 测试5统计查询REDCap
console.log('📈 测试5统计查询应触发REDCap查询');
console.log('-'.repeat(80));
try {
const answer5 = await chatService.handleMessage(
testUserId,
'目前有多少位患者入组?'
);
console.log('✅ AI回答:');
console.log(answer5);
console.log('');
} catch (error: any) {
console.error('❌ 测试5失败:', error.message);
console.log('');
}
console.log('='.repeat(80));
console.log('✅ 测试完成!');
console.log('='.repeat(80));
console.log('');
console.log('📝 测试总结:');
console.log(' - Dify知识库检索研究方案、CRF');
console.log(' - REDCap数据查询患者记录、统计');
console.log(' - 上下文记忆SessionMemory');
console.log('');
console.log('🚀 下一步:企业微信端到端测试');
}
// 执行测试
testDifyIntegration().catch(error => {
console.error('❌ 测试脚本执行失败:', error);
process.exit(1);
});