个人健康助手的高频入口设计:从 App、通知到 Agent 闭环的工程拆解
个人健康助手是否能被持续使用,不能只看模型能不能回答问题。对于睡眠、运动、体重、复查提醒、家庭照护等场景,用户更常遇到的是零散记录、周期提醒、资料整理和任务跟进。
如果系统只有一个聊天入口,用户问完一次后,后续事件很难沉淀;提醒发出后,系统也不知道用户是否完成;生成内容如果没有依据和状态记录,后续复盘、审计和风险控制都会变得困难。
本文从业务问题拆解和工程落地角度,分析个人健康助手如何围绕 App、通知、Timeline、规则引擎和 Agent 编排形成闭环。
本文只讨论产品架构与工程实现,不提供诊断、治疗、分诊、疗效判断或用药建议。文中出现的提醒规则、阈值、任务流程均为技术示例,真实项目需要结合合规要求、专业审核和具体业务场景确认。
1. 业务问题:健康助手为什么难以形成高频使用
个人健康管理覆盖的内容很多,例如睡眠、运动、饮食、体重、体检摘要、复查提醒、家庭照护记录等。但这些需求通常不是“每天主动打开 App 提问”,而是分散在不同时间点:
- 用户早上可能记录睡眠;
- 午后可能收到饮水、运动或日程提醒;
- 一段时间后可能想看趋势;
- 复查前可能需要整理最近记录;
- 家庭成员照护场景下,还可能需要多人协同查看任务状态。
如果健康助手只提供一个聊天入口,容易遇到三个工程问题。
1.1 缺少持续触发机制
用户完成一次问答后,系统不知道下一次应该在什么时间、基于什么事件再次触达。
例如用户记录了一次睡眠,但系统没有任务表、提醒表和反馈表,就无法判断是否需要晚间复盘,也无法根据用户行为调整提醒频率。
1.2 回答缺少可追溯依据
如果模型直接根据对话生成内容,后续很难确认它引用了哪些记录、哪些规则和哪些用户授权数据。
在健康相关场景中,可追溯性不仅影响体验,也影响风控、客诉处理和内容审核。
1.3 建议无法进入任务状态
生成一段文本后,如果没有确认、提醒、完成、忽略、撤回等状态,系统无法判断这次交互是否产生了实际闭环。
因此,个人健康助手的工程重点不应只放在大模型问答上,而应先建立长期运行的事件系统。
2. 系统边界:能做健康管理辅助,不能替代医疗判断
在设计这类系统时,边界需要先于功能确定。面向消费者的健康助手可以围绕“记录、提醒、整理、复盘”展开,但不应在缺少资质、审核和责任机制的情况下输出医疗结论。
一个较稳妥的能力分层如下。
2.1 记录层
负责接收用户输入、设备同步、日历任务、手动打卡、文件摘要等数据。
典型功能包括:
- 睡眠时长记录;
- 体重变化记录;
- 运动完成情况;
- 饮食备注;
- 复查日期提醒;
- 用户自行上传资料的结构化整理。
2.2 理解层
负责把自然语言、表单和设备数据转换成统一事件。
例如:
- “昨晚睡了 6 个小时,中间醒了两次”可以被转成睡眠记录事件;
- “下周三复查”可以被转成日历提醒事件;
- “最近想整理一下体检项目”可以被转成资料整理任务。
这里的重点是结构化,不是直接下结论。
2.3 行动层
负责把事件转成可执行任务,例如:
- 提醒用户补充记录;
- 生成一段趋势摘要;
- 整理待确认问题清单;
- 生成复查前资料清单;
- 将任务写入日历或待办系统。
2.4 安全层
负责处理内容边界、权限校验、人工确认、日志审计和风险拦截。
工程上可以把能力划分为:
- 允许:记录、提醒、趋势展示、资料整理、用户问题清单生成;
- 谨慎处理:基于规则的异常信息标记、需要人工确认的内容、用户上传资料的摘要;
- 不直接输出:诊断结论、治疗方案、用药调整、疗效承诺、替代就医建议。
这种边界划分可以让系统职责更清晰,也便于后续接入内容审核、合规评估和权限控制。
3. 架构设计:高频入口依赖事件闭环
个人健康助手可以从以下几个核心模块开始设计:
这套架构里有两个关键设计点。
3.1 Timeline 是主存储,不是聊天记录
健康类交互最终应尽量落到时间线上,而不是只保存在对话历史里。
时间线需要记录:
- 事件类型;
- 发生时间;
- 数据来源;
- 用户确认状态;
- 置信度;
- 是否属于敏感信息;
- 是否触发过提醒;
- 后续任务是否完成。
聊天记录可以作为交互材料保存,但不应成为唯一事实来源。
对于设备同步、用户手动输入、文件解析等不同来源的数据,也需要保留来源字段,避免后续把“模型推断结果”误当成“用户确认事实”。
3.2 通知系统需要写回反馈
通知不是简单推送一条消息。对健康助手来说,通知系统至少要记录:
- 为什么触发;
- 触发依据是什么;
- 用户是否打开;
- 用户是否完成;
- 用户是否忽略;
- 用户是否关闭该类提醒;
- 下次是否需要调整频率。
如果通知没有反馈写回,系统就无法判断“提醒是否有效”,也无法做个性化调度。
4. 数据模型:用事件和任务承载长期状态
一个简化的健康事件可以这样表示:
{"user_id":"u_1001","event_id":"evt_20260601_001","event_type":"sleep_record","source":"manual_input","occurred_at":"2026-06-01T07:30:00+08:00","payload":{"sleep_hours":6.5,"note":"昨晚醒了两次"},"confidence":0.9,"status":"user_confirmed","medical_boundary":"wellness_tracking"}这个结构主要解决三个问题。
第一,数据来源可追踪。
系统需要知道数据来自用户手动输入、设备同步,还是文件解析。
第二,用户确认状态可追踪。
自动解析的数据不应默认等同于事实,应保留待确认状态。
第三,内容边界可追踪。
例如medical_boundary字段可以标记事件属于日常健康记录、资料整理,还是需要更严格审核的场景。
任务表可以单独设计:
{"task_id":"task_20260601_001","user_id":"u_1001","task_type":"review_sleep_record","created_from_event":"evt_20260601_001","status":"pending_user_confirm","scheduled_at":"2026-06-01T20:30:00+08:00","last_action":null}事件表负责记录事实,任务表负责记录行动状态。两者分离后,后续做提醒、撤回、统计和审计都会更清晰。
5. 上下文记忆:不要把所有内容直接塞进向量库
如果系统接入向量检索,不建议把全部用户数据无差别写入向量库。更稳妥的做法是分层管理。
可以拆成四类索引:
事件摘要索引
用于召回近期记录,例如最近一周的睡眠、运动、体重变化。用户偏好索引
记录用户的提醒时间、语言偏好、是否接受某类通知。长期目标索引
例如用户自己设置的习惯目标或周期性任务。反馈索引
记录用户对提醒的忽略、完成、关闭、修改等行为。
但事实判断不应只依赖向量召回。比较稳妥的方式是:
- 向量库负责召回可能相关的上下文;
- 结构化数据库负责提供可核对事实;
- 规则引擎负责控制触发条件;
- LLM 负责把结果组织成易读表达;
- 安全层负责拦截越界内容。
在实现上,还需要注意索引内容的最小化。
例如,睡眠复盘只需要召回睡眠时长、用户备注、提醒反馈等字段,就不应默认拉取用户上传的所有资料。健康相关数据越集中,权限边界、脱敏策略和审计记录越重要。
6. 示例代码:可配置提醒规则引擎
下面是一个最小化的 Python 示例,用于演示“事件进入规则引擎,再生成待确认提醒”的流程。
该示例不代表医学建议。阈值、触发条件和消息文案均为工程演示,真实项目需要按照业务规范和专业审核确定。
fromdataclassesimportdataclassfromdatetimeimportdatetimefromtypingimportDict,Optional@dataclassclassHealthEvent:user_id:strevent_type:stroccurred_at:datetime payload:Dict status:str@dataclassclassReminder:user_id:strtitle:strmessage:strreason:strrequire_user_confirm:bool=TrueclassRuleEngine:def__init__(self,config:Dict):self.config=configdefevaluate_sleep_event(self,event:HealthEvent)->Optional[Reminder]:ifevent.event_type!="sleep_record":returnNoneifevent.status!="user_confirmed":returnNonesleep_hours=event.payload.get("sleep_hours")ifsleep_hoursisNone:returnNonemin_sleep_hours=self.config.get("example_min_sleep_hours",6)ifsleep_hours<min_sleep_hours:returnReminder(user_id=event.user_id,title="睡眠记录复盘提醒",message=("你记录的睡眠时长低于当前配置值。""可以补充记录影响因素,便于后续查看趋势。"),reason="example_rule_sleep_hours_below_config",require_user_confirm=True)returnNoneif__name__=="__main__":engine=RuleEngine(config={"example_min_sleep_hours":6})event=HealthEvent(user_id="u_1001",event_type="sleep_record",occurred_at=datetime.now(),payload={"sleep_hours":5.5},status="user_confirmed")reminder=engine.evaluate_sleep_event(event)ifreminder:print(reminder)这个例子里没有设计“风险等级”“疾病判断”或“处理建议”。它只做三件事:
- 判断事件类型;
- 校验用户确认状态;
- 根据配置生成复盘提醒。
对于消费级健康助手,这类提醒可以引导用户补充信息、查看趋势或整理问题清单,但不应直接替代专业判断。
7. 通知系统:高频不等于高打扰
个人健康助手如果想承载高频使用,通知系统必须具备细粒度控制能力。
至少需要支持以下能力:
- 通知类型配置;
- 用户级频控;
- 静默时段;
- 重复提醒合并;
- 忽略次数统计;
- 用户主动关闭某类提醒;
- 触达结果回写;
- 灰度实验;
- 文案版本记录。
一个简单的通知调度结构可以这样设计:
{"notification_id":"noti_20260601_001","user_id":"u_1001","task_id":"task_20260601_001","channel":"app_push","template_id":"sleep_review_v1","scheduled_at":"2026-06-01T20:30:00+08:00","send_status":"pending","frequency_control":{"daily_limit":2,"quiet_hours":["22:30","07:30"]}}通知触达后,还需要写回行为数据:
{"notification_id":"noti_20260601_001","user_action":"opened","acted_at":"2026-06-01T20:42:00+08:00","follow_up_status":"record_updated"}高频入口不是增加推送数量,而是让触达更接近用户当前任务,并且允许用户随时调整。
通知系统还应处理失败和撤回场景:
- 推送失败后是否重试;
- 用户关闭权限后是否改为站内提醒;
- 规则变更后是否撤回待发送任务;
- 用户删除相关记录后是否同步取消提醒;
- 触达文案是否保留版本号,便于后续审计。
8. Agent 的位置:放在任务编排层更可控
在个人健康助手中,Agent 不适合一开始就拥有过多自主操作权限。更可控的做法是把 Agent 放在任务编排层,让它负责整理、生成候选动作,再经过规则、权限和用户确认。
例如“整理复查前资料”可以拆成以下步骤:
- 读取用户授权范围内的近期记录;
- 汇总用户主动标记的问题;
- 按时间线生成摘要;
- 标记缺失信息;
- 生成待用户确认的资料清单;
- 用户确认后导出或保存。
在这个流程中,Agent 的职责是降低资料整理成本,而不是给出诊断或治疗判断。
每一步都应保留:
- 输入来源;
- 生成时间;
- 模型版本;
- 规则版本;
- 用户确认状态;
- 导出记录;
- 撤回记录。
这样后续出现内容争议时,系统可以追溯“这段摘要从哪里来、经过了哪些规则、用户是否确认”。
Agent 编排层建议采用“候选动作 + 用户确认”的方式:
- 候选摘要:允许用户编辑后保存;
- 候选提醒:允许用户确认、延后、关闭;
- 候选资料清单:允许用户勾选导出范围;
- 候选问题清单:只作为用户整理材料使用,不替代专业判断;
- 候选任务:写入待办前需要明确授权。
9. 指标设计:用闭环数据评估产品是否可持续
如果只看单次问答满意度,很难判断健康助手是否能长期使用。更适合的指标包括:
- 7 日内有效触达次数;
- 用户主动记录频次;
- 提醒打开率;
- 提醒完成率;
- 提醒忽略率;
- 某类提醒关闭率;
- 生成内容被用户编辑比例;
- 生成内容被撤回比例;
- 安全拦截次数;
- 需要人工确认的任务比例;
- 任务从创建到完成的平均时长。
这些指标可以帮助团队判断:
- 哪些提醒确实有用;
- 哪些触达造成打扰;
- 哪些内容生成不稳定;
- 哪些场景需要更强规则约束;
- 哪些任务适合继续自动化。
指标设计也要避免诱导系统过度触达。
例如,提醒打开率升高不一定代表体验变好,可能只是推送频率过高。需要结合忽略率、关闭率、投诉反馈、任务完成率一起看。
10. 原型落地建议:先做单场景闭环
如果要做一个可验证的原型,不建议一开始覆盖所有健康场景。可以先选择一个边界清晰、数据结构简单、医疗风险较低的场景。
例如:
- 睡眠记录复盘;
- 体重趋势记录;
- 运动打卡提醒;
- 复查资料整理;
- 家庭照护待办提醒。
以“睡眠记录复盘”为例,最小闭环可以包括:
- 用户手动记录睡眠;
- 系统写入 Timeline;
- 规则引擎判断是否需要复盘提醒;
- 通知系统按频控发送;
- 用户打开后补充影响因素;
- 系统更新事件和任务状态;
- 后续生成趋势摘要;
- 用户查看摘要并确认是否保存;
- 系统记录摘要版本、引用事件和生成时间;
- 用户可以编辑、删除或撤回该摘要;
- 系统根据用户反馈调整后续提醒频率;
- 运营或审核侧可以查看脱敏后的规则命中和触达效果。
这个闭环里,睡眠数据不用于诊断,也不输出治疗建议,只用于记录、复盘、趋势展示和提醒调度。
一个可落地的最小版本可以只保留四张核心表:
health_event:记录用户确认过的睡眠事件;health_task:记录复盘任务状态;notification_log:记录提醒触达和反馈;assistant_output:记录摘要内容、引用来源和用户确认状态。
这样可以在较小范围内验证以下问题:
- 用户是否愿意持续记录;
- 提醒频率是否合适;
- 摘要是否需要频繁编辑;
- 哪些字段对复盘有帮助;
- 哪些触达会造成打扰;
- 安全拦截和用户撤回是否能正常工作。
流程跑通后,再扩展到体重趋势、运动打卡、资料整理等场景,会比一开始做全量健康助手更可控。
11. 数据隐私与审计:健康数据要按敏感信息处理
健康相关数据通常包含较强个人属性,工程设计中需要把隐私保护放在基础能力层,而不是上线前补一个弹窗。
可以从以下几个方面处理。
11.1 用户授权
系统需要明确区分不同数据的授权范围:
- 手动输入数据;
- 设备同步数据;
- 日历或待办数据;
- 用户上传文件;
- 家庭成员共享数据;
- 通知触达和行为反馈数据。
授权粒度建议尽量贴近功能,而不是一次性获取所有权限。
例如,用户只使用睡眠记录复盘,就不应默认授权读取运动、饮食或上传资料。
11.2 数据最小化
功能需要什么字段,就采集什么字段。
睡眠复盘场景可能只需要睡眠时长、入睡时间、醒来次数、用户备注和提醒反馈,不一定需要采集更宽泛的健康资料。
对于 LLM 调用,也应控制上下文范围:
- 不传入无关历史记录;
- 不传入未授权资料;
- 对展示无必要的身份信息做脱敏;
- 对模型输出保留引用来源,避免生成内容和原始事实混淆。
11.3 日志审计
日志不只记录接口成功或失败,还需要记录关键业务动作:
- 谁访问了哪些数据;
- 使用了什么授权范围;
- 哪条规则触发了提醒;
- 哪个模型版本生成了摘要;
- 用户是否确认、编辑、删除或撤回;
- 管理后台是否查看过敏感记录。
审计日志需要防篡改、可查询,并设置合理的保留周期。
对于调试日志,要避免把完整健康记录、身份证明信息、联系方式等敏感内容直接写入普通日志。
11.4 权限与隔离
家庭照护、多人协作、运营审核等场景需要特别注意权限隔离。
常见控制点包括:
- 用户本人、家庭成员、运营人员、审核人员使用不同角色;
- 家庭成员只能查看被授权范围内的数据;
- 后台查看敏感数据需要二次确认或工单记录;
- 导出文件需要记录导出人、导出时间和导出范围;
- 用户撤回授权后,后续任务和提醒需要同步停止或降级。
总结
个人健康助手要成为稳定入口,关键不只是模型问答能力,而是事件、任务、通知、上下文和安全边界能否形成可追溯闭环。
从工程落地看,可以优先建设五个基础能力:
- 以 Timeline 为核心的事件模型;
- 可配置、可审计的规则引擎;
- 支持频控和反馈写回的通知系统;
- 分层管理的上下文记忆;
- 有权限、有日志、有用户确认的 Agent 编排。
在医疗健康相关场景中,系统边界需要持续约束产品形态。把记录、提醒、资料整理和复盘做好,同时明确不替代专业医疗判断,更有利于长期迭代、用户信任和工程风险控制。
本文文献检索、文献挖掘以及文献翻译采用的是【超能文献| AI文献检索|AI文档翻译】。
