项目 / Projects

智医助手:家庭健康管理助手(非诊疗)

面向家庭的 AI 健康管理助手:NestJS 后端 + Web 原型,覆盖家庭健康档案、用药提醒、健康指标、健康自评与 AI 健康咨询;内置就医红线引擎与 LLM 网关熔断。因医疗类备案要求未上线 C 端。

受限微信小程序医疗咨询类目需 ICP 备案与医疗机构资质,当前未申请,仅完成服务端能力验证与 Web 原型。角色 全栈 / AI 应用开发周期 2026.06 - 2026.07

项目背景

智医助手要解决的核心问题是:家庭场景下健康信息分散(成员档案、用药、指标、自评互相割裂)、健康提醒依赖人工、且健康咨询缺乏安全边界。系统以 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 实现了端到端的健康咨询流程:

  1. 组装用户健康画像(从 health-record / medication / metric 聚合)
  2. 经过 RedLineEngine 红线检测(在流开始前本地同步执行)
  3. 调用 LLM Gateway 生成流式回复(Server-Sent Events)
  4. 底部固定显示「本建议仅供参考,不构成医疗诊断」免责声明

模型 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 原型的六个核心页面截图:

智医助手首页仪表盘
首页仪表盘 — 家庭健康评分、成员概览、快捷入口(AI 咨询 / 用药提醒 / 指标记录 / 健康自评)、今日任务
AI 健康咨询对话
AI 健康咨询 — SSE 流式对话,含就医红线提醒(血压高危自动就医提示)与免责声明
家庭健康档案
家庭健康档案 — 成员列表(年龄 / 健康标签 / 定期复查状态)、近期健康事件时间线
健康指标记录
健康指标 — 当前指标(血压 / 体重 / 血糖 / 心率)与正常范围判定、血压趋势图
用药提醒
用药提醒 — 今日用药进度条、服药清单(药名 / 剂量 / 时间 / 状态)、本周服药依从性百分比
家庭健康自评
家庭健康自评 — 问卷式评估(多选题、计时、进度指示),关注儿童成长 / 老人照护 / 心理健康 / 慢病管理

验证与测试

本项目未进行任何医学 / 算法模型评测(无 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 备案与医疗类目资质要求,避免能力做完却无法上线。