2026山东大学软件学院创新实训——IntelliHealth(五):药物管理、智能分析与药物禁忌分析模块协同完善
一、本周工作概述
本周团队工作重点从单纯功能开发逐渐转向系统架构完善与核心功能联调优化。
经过前几周的开发,IntelliHealth已经具备:
- 家庭药箱管理
- 药物禁忌分析
- 用户健康画像
- 健康趋势预测
等多个核心模块。
本周团队主要围绕三个方向展开工作:
(1)家庭药物管理模块重构
完成扫码入库业务链路重构,实现:
- 条形码扫描
- 药品识别
- 生产日期录入
- 自动计算有效期
- 药箱管理
完整流程闭环。
(2)用户画像与健康分析模块落地
完成:
- 用户画像建模
- 特征向量更新
- 画像偏移分析
- 个性化健康建议
- 健康趋势预测
后端接口开发。
(3)药物禁忌分析模块优化
围绕:
- Neo4j缓存机制
- 药名标准化
- OpenFDA冷启动策略
进行了性能与准确率优化。
二、本周系统整体架构演进
随着模块数量不断增加,团队逐渐意识到:
能运行的系统不一定容易维护,功能越多越需要清晰的架构边界。
因此本周多个模块都进行了职责梳理与结构优化。
当前系统主要形成如下结构:
IntelliHealth
│
├── medication_scan
│ ├── Controller
│ ├── Service
│ ├── Repository
│ ├── Entity
│ └── DTO
│
├── interact_analysis
│ ├── Neo4j
│ ├── OpenFDA
│ └── DeepSeek
│
├── health_profile
│
├── health_record
│
└── health_analysis
├── Portrait
├── Advice
└── TrendPredict
相比前期开发阶段:
功能优先
↓
代码能跑即可
目前逐渐转变为:
模块解耦
↓
职责清晰
↓
方便扩展
这也是本周团队最大的进步之一。
三、家庭药物管理模块优化
本周药物管理模块完成了较大幅度调整。
1. 扫码入库流程重构
经过重新设计后,目前用户添加药品流程为:
扫码条形码
↓
识别药品信息
↓
填写生产日期
↓
自动计算有效期
↓
存入个人药箱
↓
刷新药箱列表
整体流程已经完成前后端联调。
当前支持
| 功能 | 状态 |
|---|---|
| 条形码扫描 | ✅ |
| 药品识别 | ✅ |
| 生产日期录入 | ✅ |
| 自动计算有效期 | ✅ |
| 药箱入库 | ✅ |
| 列表展示 | ✅ |
2. 引入条形码识别接口层
本周最大的架构优化之一是新增:
public interface BarcodeLookupProvider {
DrugInfoResponse lookup(String barcode);
}
当前使用:
StubBarcodeLookupProvider
返回模拟药品数据。
但后续可无缝切换到:
LocalMedicationsBarcodeLookupProvider
或:
ThirdPartyBarcodeLookupProvider
实现真实药品查询。
这种设计使业务逻辑不依赖具体数据来源。
体现了:
- 面向接口编程
- 依赖倒置原则
- 可扩展架构设计
思想。
3. 药品有效期计算优化
本周统一将有效期逻辑放在后端处理:
核心规则:
expiryDate =
manufactureDate.plusMonths(shelfLifeMonths);
同时计算:
daysLeft
status
状态包括:
normal
expiring
expired
避免:
前端算一次
后端算一次
导致数据不一致的问题。
四、用户画像与健康分析模块开发
本周团队完成了健康分析模块的重要落地。
1. 用户画像建模
用户画像不再只是简单标签。
系统将:
静态数据
- 年龄
- 身高
- 性别
- 目标体重
与
动态数据
- BMI
- 血压
- 血糖
- 心率
- 睡眠
统一表示为:
featureVector
形成用户健康特征向量。
2. 画像偏移分析
当用户新增健康记录时:
系统自动重新计算画像。
核心思想:
当前画像
-
历史画像
=
画像偏移
偏移量采用欧氏距离计算:

用于衡量近期健康状态变化程度。
3. 个性化健康建议
基于画像标签:
系统自动生成建议。
例如:
if (fatigueRiskHigh) {
advices.add(...);
}
当前支持:
- 疲劳提醒
- 血糖建议
- 血压建议
- 体重管理
- 用药提醒
等多种场景。
相比直接依赖大模型生成:
规则驱动方案具有:
- 可解释
- 可调试
- 易维护
等优势。
4. 健康趋势预测
实现:
90天趋势分析
+
未来7天预测
功能。
当前采用:
加权移动平均
+
线性趋势预测
方案。
预测公式:
predicted = smoothedValue + slope × i
同时通过:MAPE
评估预测误差。
目前测试结果已经达到项目预期要求。
五、药物禁忌分析模块优化
药物禁忌分析是项目最具特色的模块之一。
本周主要进行了两方面优化。
1. 查询性能优化
此前流程:
用户输入药名
↓
LLM翻译
↓
Neo4j查询
↓
LLM解释
即使重复查询:仍然需要多次调用大模型。
新方案新增:药名缓存
内存缓存
↓
Neo4j缓存
↓
LLM
仅首次查询调用大模型。
相互作用缓存
首次:
OpenFDA
+
LLM
生成结果。后续:
Neo4j直接返回
实际效果
测试案例:
阿司匹林 + 布洛芬
响应时间:
| 场景 | 时间 |
|---|---|
| 首次查询 | 7.99s |
| 二次查询 | 24ms |
性能提升非常明显。
2. OpenFDA冷启动优化
此前:
limit = 1
仅取一份药品说明书。容易出现内容偏题,匹配不准问题。
新策略改为:
获取10份说明书,然后:
段落切分
↓
窗口合并
↓
关键词打分
↓
全局择优
筛选真正描述:
药物A ↔ 药物B
相互作用的内容。
核心评分机制:
| 条件 | 分数 |
|---|---|
| 同时出现两种药物 | +100 |
| 风险关键词 | +15 |
| 机制关键词 | +10 |
低于阈值:
return null;
宁可返回无结果,也不返回错误结果。
这一优化显著提高了长尾药物组合分析的准确性。
六、本周团队收获
相比前几周的功能堆叠,本周团队最大的收获来自于:
对系统架构的进一步理解
大家逐渐认识到:
一个完整的软件项目不仅需要功能实现,更需要:
模块解耦
接口抽象
缓存设计
异常处理
性能优化
扩展能力
等工程化能力。
总结
本周团队工作重点从单纯功能开发逐渐转向系统架构优化与模块协同完善。家庭药箱管理模块完成重构并实现完整扫码入库流程;用户画像与健康分析模块完成后端落地;药物禁忌分析模块在性能与准确率方面进一步提升。
截至目前,IntelliHealth 已经初步形成了“健康档案—健康分析—药物管理—禁忌分析”的核心业务闭环,为后续智能提醒、知识图谱扩展以及更多AI健康服务功能奠定了基础。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)