项目 / Projects
智医助手:家庭健康管理助手(非诊疗)
面向家庭的 AI 健康管理助手:NestJS 后端 + Web 原型,覆盖家庭健康档案、用药提醒、健康指标、健康自评与 AI 健康咨询;内置就医红线引擎与 LLM 网关熔断。因医疗类备案要求未上线 C 端。
项目背景
智医助手要解决的核心问题是:家庭场景下健康信息分散(成员档案、用药、指标、自评互相割裂)、健康提醒依赖人工、且健康咨询缺乏安全边界。系统以 NestJS 工程化为骨架,把 LLM 网关、就医红线引擎、SSE 流式咨询、家庭权限策略 串成一条可追踪的健康管理链路,定位始终为「非诊疗」的家庭健康助手。
技术架构
系统采用分层架构,职责清晰、可独立替换:
- 接入层:NestJS 11 提供 RESTful API 与 WebSocket(SSE)实时对话,JWT 双令牌管理会话。
- 应用层:咨询编排服务(consultation),组装健康画像 → 红线检测 → 本地模型流式回复。
- 引擎层:RedLineEngine(就医红线)、LLM Gateway(Ollama 本地 + 云端熔断降级)。
- 业务模块层:家庭管理(family)、健康档案(health-record)、用药计划(medication)、健康指标(metric)、健康自评(assessment)、任务与通知(task / notification)、知识库(knowledge,静态 CRUD)。
- 数据层:Prisma 6 统一访问 TiDB Cloud(分布式 HTAP)与 Redis 7(会话 / 缓存)。
核心模块(已实现)
1. 就医红线引擎(RedLineEngine)
系统的硬约束,优先级高于任何生成结果。基于关键词 / 正则规则对以下高风险表述强制拦截并提示就医:
- 心血管危急值(血压 > 180/110 等)
- 脑卒中预警信号
- 心理危机(自杀倾向、严重抑郁表述)
- 急腹症与其他需立即就医的症状
拦截后提示用户立即就医并附具体症状清单,同时保留继续低风险咨询的能力。该模块已有完整的单元测试覆盖(red-line-engine.test.ts)。
2. LLM 网关与熔断
调用云端大模型时统一经过 llm-gateway 模块:
- 正常路径:请求转发至云端模型。
- 熔断路径:超时、限流或鉴权失败时自动降级到本地 Ollama 运行的纯文本小模型,保证服务不中断且隐私数据不出域。
- 设计目标:在「能力」(复杂推理依赖云端)与「合规」(敏感数据不出域)之间做可配置权衡。
3. SSE 流式健康咨询
consultation.service.ts 实现了端到端的健康咨询流程:
- 组装用户健康画像(从 health-record / medication / metric 聚合)
- 经过 RedLineEngine 红线检测(在流开始前本地同步执行)
- 调用 LLM Gateway 生成流式回复(Server-Sent Events)
- 底部固定显示「本建议仅供参考,不构成医疗诊断」免责声明
模型 system prompt 明确声明「你不是医生,不能进行医疗诊断或开具处方」,所有输出为健康建议 / 分诊提示 / 科普。
4. 家庭权限策略
- 家庭(Family)与成员(FamilyMember)的多租户归属。
- 成员角色与数据查看范围控制。
- FamilyRoleAudit 记录权限变更审计日志。
5. 业务 CRUD 模块
| 模块 | 功能 | 状态 |
|---|---|---|
| auth / user | 邮箱注册登录、JWT 双令牌、bcrypt 密码哈希、安全告警 | ✅ 已实现 |
| family | 家庭创建 / 成员邀请 / 角色分配 | ✅ 已实现 |
| consultation | SSE 流式健康咨询、健康画像聚合、红线检测 | ✅ 已实现 |
| assessment | 健康自评问卷(多题、计时、结果记录) | ✅ 已实现 |
| health-record | 健康档案 CRUD | ✅ 已实现 |
| medication | 用药计划 / 用药提醒 / 依从性统计 | ✅ 已实现 |
| metric | 健康指标录入(血压 / 血糖 / 体重等)+ 阈值判断 | ✅ 已实现 |
| task / notification | 任务管理与通知推送 | ✅ 已实现 |
| knowledge | 医学科普知识库(静态 CRUD) | ✅ 已实现 |
| report / upload | 报告管理与文件上传 | ⚠️ 上传暂禁用(待私有存储实现) |
| ai | AI 用药识别 / 报告解读 | 🔧 接口占位(默认返回「开发中」,待视觉模型接入) |
界面预览
以下是智医助手 Web 原型的六个核心页面截图:
验证与测试
本项目未进行任何医学 / 算法模型评测(无 F1 / Balanced Accuracy 等指标,也无意做诊断)。当前验证集中在工程层面:
- 单元测试:RedLineEngine 规则集全覆盖(
red-line-engine.test.ts),验证各类高风险表述的拦截与放行逻辑。 - 端到端验证脚本:Python
e2e_verify_*.py脚本验证 API 链路连通性。 - 性能基准:
perf_bench.py对关键接口做响应时间基准测试。 - 安全测试:Playwright 测试套件覆盖 SSE 认证流程(
sse-auth.spec.js)与 XSS / CSP 安全策略(xss-csp.spec.js)。
为什么没有上线小程序
微信小程序医疗咨询类目要求 ICP 备案、医疗机构执业许可与对应资质,个人 / 学生项目难以满足。因此 C 端仅完成 Web 原型与服务端能力验证,未部署到生产环境。后续若继续,会转向合规的「健康科普 + 就诊导航」定位,把诊断 / 用药建议收敛为分诊与科普。
关键技术决策
- 隐私优先:敏感健康数据默认不出域;仅在用户授权且走合规通道时才调用云端模型。
- 网关优先云端、熔断回退本地:在能力(复杂推理)与合规(数据不出域)之间做可配置权衡。
- 非诊疗硬约束:RedLineEngine + system prompt 双重把关,所有 AI 输出为健康建议而非诊断。
与算法 / AI 应用开发的关联
这个项目把工程能力(NestJS、Prisma、TiDB、Redis、Docker、SSE 流式对话)与 AI 应用工程(LLM 网关、红线引擎、家庭权限、本地模型降级)串成完整产品链路,是「应用 → 部署 → 安全约束」闭环的直接体现。
后续路线
- 多模态视觉理解:接入视觉模型,补全 AI 模块的报告解读与用药识别能力(当前接口返回「开发中」)。
- 红线引擎升级:从关键词规则升级为分类模型,支持更细的风险分级与上下文语义判断。
- 私有存储:实现报告与影像的私有存储,开启文件上传功能。
- 健康报告生成:基于 DB 数据聚合生成健康报告(PDF / JSON)。
- 合规路径规划:提前调研 ICP 备案与医疗类目资质要求,避免能力做完却无法上线。