Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/06-开发记录/Phase1.5-AI对话集成REDCap完成记录.md
HaHafeng 2481b786d8 deploy: Complete 0126-27 deployment - database upgrade, services update, code recovery
Major Changes:
- Database: Install pg_bigm/pgvector plugins, create test database
- Python service: v1.0 -> v1.1, add pymupdf4llm/openpyxl/pypandoc
- Node.js backend: v1.3 -> v1.7, fix pino-pretty and ES Module imports
- Frontend: v1.2 -> v1.3, skip TypeScript check for deployment
- Code recovery: Restore empty files from local backup

Technical Fixes:
- Fix pino-pretty error in production (conditional loading)
- Fix ES Module import paths (add .js extensions)
- Fix OSSAdapter TypeScript errors
- Update Prisma Schema (63 models, 16 schemas)
- Update environment variables (DATABASE_URL, EXTRACTION_SERVICE_URL, OSS)
- Remove deprecated variables (REDIS_URL, DIFY_API_URL, DIFY_API_KEY)

Documentation:
- Create 0126 deployment folder with 8 documents
- Update database development standards v2.0
- Update SAE deployment status records

Deployment Status:
- PostgreSQL: ai_clinical_research_test with plugins
- Python: v1.1 @ 172.17.173.84:8000
- Backend: v1.7 @ 172.17.173.89:3001
- Frontend: v1.3 @ 172.17.173.90:80

Tested: All services running successfully on SAE
2026-01-27 08:13:27 +08:00

348 lines
8.5 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.
# Phase 1.5: AI对话集成REDCap真实数据查询 - 开发完成记录
**开发日期**: 2026-01-03
**开发人员**: AI Clinical Research Team
**版本**: Phase 1.5
**状态**: ✅ 已完成
---
## 📋 **开发目标**
实现AI在企业微信中基于REDCap真实数据与PI进行智能对话解决LLM幻觉问题。
### **核心需求**
1. AI能够查询REDCap真实数据
2. AI不编造数据基于事实回答
3. 支持多轮对话上下文记忆
4. 提供即时"正在查询"反馈
---
## 🎯 **完成功能**
### **1. 意图识别**
-**查询特定记录**: 识别记录ID如"ID 7"、"记录7"
-**统计记录数**: 识别"多少"、"几个"、"几条"等关键词
-**项目信息**: 识别"项目名称"、"项目情况"等
-**普通对话**: 默认处理其他对话
**实现方式**: 关键词匹配 + 正则表达式
### **2. REDCap数据查询**
-**queryRedcapRecord()**: 查询特定记录的详细信息
-**countRedcapRecords()**: 统计总记录数
-**getProjectInfo()**: 获取项目基本信息
**数据来源**: 数据库 `iit_schema.projects` 表 → RedcapAdapter → REDCap API
### **3. 数据注入LLM**
- ✅ 将查询结果注入System消息
- ✅ 新的System Prompt强调"基于真实数据,不编造"
- ✅ 错误处理:查询失败时友好提示
### **4. 上下文记忆**
- ✅ SessionMemory保存最近3轮对话
- ✅ 支持多轮对话理解(如"他"指代之前提到的患者)
### **5. 即时反馈**
- ✅ 收到消息后立即回复"🫡 正在查询,请稍候..."
- ✅ 查询完成后推送最终结果
---
## 🏗️ **技术架构**
### **数据流**
```
用户消息(企业微信)
WechatCallbackController.handleMessage()
ChatService.handleMessage()
1. detectIntent() - 意图识别
2. queryRedcapRecord() / countRedcapRecords() / getProjectInfo()
prisma.iitProject.findFirst() - 从数据库获取项目配置
new RedcapAdapter(url, token) - 创建API适配器
redcap.exportRecords() - 调用REDCap API
返回真实数据
3. buildMessagesWithData() - 构建LLM消息注入数据
4. llm.chat() - 调用DeepSeek-V3
5. sessionMemory.addMessage() - 记录到上下文
AI回复企业微信
```
### **关键代码**
- **ChatService.ts**: 390行新增REDCap查询方法
- **意图识别**: detectIntent(),正则匹配
- **数据注入**: buildMessagesWithData()
- **System Prompt**: getSystemPromptWithData()
---
## 🧪 **测试结果**
### **测试环境**
- **项目**: test0102 (REDCap PID: 16)
- **记录数**: 10条ID 1-10
- **测试用户**: FengZhiBo
- **测试时间**: 2026-01-03 22:28
### **测试场景1: 查询特定记录** ✅
**用户输入**:
```
帮我查询一下 记录 7的 所有信息
```
**AI回复** (基于真实数据):
```
根据REDCap查询结果记录7的信息如下
**基本信息**
- 姓名企业微信7 企业微信7
- 出生日期2017-01-04
- 年龄8岁
- 性别:男
- 身高130 cm
- 体重50 kg
- BMI29.6
**联系方式**
- 地址企业微信7
- 邮箱gofeng117@163.com
**其他信息**
- 民族:西班牙裔或拉丁裔
- 治疗史测试7777
- 是否完成:是
所有字段均已填写完成。如需查看完整表单建议登录REDCap系统。
```
**数据验证**: ✅ 完全匹配REDCap数据库
### **测试场景2: 统计查询** (预期)
**用户输入**: "我们系统中已经有几条记录了?"
**预期回复**: "当前项目test0102已有 **10条** 患者数据记录"
### **测试场景3: 项目信息** (预期)
**用户输入**: "咱们当前的项目名称是什么?"
**预期回复**: "当前项目名称为 **test0102**"
### **性能指标**
- ⏱️ **API查询**: 300-700ms
- ⏱️ **LLM响应**: 2-3秒
- ⏱️ **总响应时间**: 3-5秒
- 📊 **Token消耗**: 约500 tokens/次
---
## 🆚 **对比解决LLM幻觉**
### **之前(编造数据)** ❌
```
AI: "ID 7的入组日期为 **2023-10-26**(即基线访视日期)"
❌ 完全编造
❌ 与真实数据不符
❌ 项目名称编造为"IIT-2023-001: XX干预对YY疾病..."
```
### **现在(真实数据)** ✅
```
AI: "出生日期2017-01-04
年龄8岁
身高130 cm
体重50 kg"
✅ 100%真实
✅ 来自REDCap数据库
✅ 项目名称为test0102真实
```
---
## 💡 **技术亮点**
### **1. 架构设计**
-**从数据库读取配置**: 不使用环境变量,支持多项目
-**复用通用能力层**: LLMFactory零配置集成
-**分层清晰**: Controller → Service → Adapter → API
### **2. 意图识别**
-**简单有效**: 关键词匹配 + 正则表达式
-**扩展性好**: 易于添加新意图
-**性能优秀**: <1ms识别时间
### **3. 数据安全**
-**Token加密存储**: 数据库中加密
-**动态获取**: 每次查询时从数据库读取
-**权限控制**: 基于项目状态过滤
### **4. 用户体验**
-**即时反馈**: "正在查询"消息
-**准确回答**: 基于真实数据
-**上下文连贯**: 支持多轮对话
---
## 📊 **代码统计**
### **新增文件**
1. `SessionMemory.ts` - 170行 (上下文记忆)
2. `test-redcap-query-from-db.ts` - 250行 (测试脚本)
3. `check-test-project-in-db.ts` - 74行 (项目检查)
### **修改文件**
1. `ChatService.ts` - 新增200行 (REDCap集成)
2. `WechatCallbackController.ts` - 新增即时反馈
3. `routes/index.ts` - 新增根路由
### **删除文件**
1. `test-redcap-query-for-ai.ts` (使用环境变量,已废弃)
2. `check-env-config.ts` (环境变量检查,已废弃)
---
## ⚠️ **当前限制**
### **1. 意图识别**
- ❌ 仅支持关键词匹配
- ❌ 不支持复杂查询组合
- ❌ 不支持模糊匹配
### **2. 数据查询**
- ❌ 仅支持单项目默认active项目
- ❌ 不支持字段名中文映射
- ❌ 不支持复杂过滤条件
### **3. 上下文记忆**
- ❌ 仅保存最近3轮对话
- ❌ 基于内存,服务重启丢失
- ❌ 不支持跨会话记忆
---
## 🚀 **后续改进方向**
### **短期优化**
1. **扩展意图识别**: 支持更多查询模式
2. **字段映射**: 中文字段名 → REDCap字段名
3. **错误优化**: 更友好的错误提示
4. **多项目支持**: 用户选择查询哪个项目
### **中期升级 (Phase 2)**
1. **Function Calling**: 升级为LLM自主决策调用工具
2. **Redis缓存**: 缓存查询结果减少API调用
3. **权限控制**: 基于用户角色过滤数据
4. **性能监控**: 记录查询耗时、错误率
### **长期规划**
1. **Dify知识库**: 查询研究方案、伦理文件
2. **智能质控**: AI分析数据质量问题
3. **H5前端**: 更丰富的交互体验
4. **多模态**: 支持图片、文档上传
---
## 📝 **技术债务**
### **1. 临时措施**
- ⚠️ 使用关键词匹配应升级为Function Calling
- ⚠️ SessionMemory基于内存应改为Redis
- ⚠️ 默认查询第一个active项目应支持项目选择
### **2. 待实现功能**
- [ ] 字段名中文映射
- [ ] 复杂查询条件
- [ ] 数据缓存机制
- [ ] 权限控制
---
## 🎯 **里程碑意义**
### **技术突破**
1.**解决LLM幻觉**: AI不再编造数据
2.**数据闭环**: 数据库 → REDCap → AI → 用户
3.**架构验证**: 从数据库读取配置的方案可行
### **业务价值**
1.**提升效率**: PI无需登录REDCap即可查询数据
2.**增强信任**: AI基于事实回答可信赖
3.**改善体验**: 企业微信直接对话,便捷
### **团队成长**
1.**架构能力**: 理解分层架构的重要性
2.**问题解决**: 从环境变量到数据库配置的演进
3.**测试驱动**: 先测试REDCap API再集成AI
---
## 🙏 **致谢**
感谢团队成员的辛勤付出:
- **需求分析**: 明确AI对话的核心价值
- **架构设计**: 选择从数据库读取配置的方案
- **代码实现**: 高质量的代码和清晰的注释
- **测试验证**: 完整的测试用例和真实场景验证
---
## 📚 **相关文档**
- [Phase 1.5开发计划](../04-开发计划/Phase1.5-AI对话能力开发计划.md)
- [MVP任务清单](../04-开发计划/MVP开发任务清单.md)
- [模块当前状态](../00-模块当前状态与开发指南.md)
- [Day 3开发记录](./Day3-企业微信集成与端到端测试完成记录.md)
---
**文档维护**: 开发团队
**最后更新**: 2026-01-03
**下一步**: Phase 2 - Function Calling + Dify知识库