LifeOS 健康指标管理实战:从 METRICS.md 模板到可穿戴数据自动同步
【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS
本文围绕 LifeOS 用户健康数据目录中的核心指标文件METRICS.md展开,完整讲解其数据结构(实验室指标、趋势对比、日常活动与血型信息)的字段语义与填充规范,并结合仓库内 Apple Health 导入、HealthSync 连续同步与 HealthSnapshot 快照等源码工具,给出从"模板占位"到"真实数据自动流入"的完整实战路径。读完本文,你将掌握如何维护一套可供数字助理(DA)与 Pulse 健康页正确消费的指标档案,并了解其底层解析与渲染机制。
一、METRICS.md 在 LifeOS 健康体系中的定位
METRICS.md位于用户健康目录 LifeOS/install/USER/HEALTH/METRICS.md,是 LifeOS 个人健康数据文件中专门负责"数值"的一份:实验室检验值(lab values)、生物标志物(biomarkers)、生命体征(vitals)、日常活动数字与趋势(trends)都在这里沉淀。同目录的兄弟文件各自分工明确,详见 HEALTH/README.md 的文件布局表:
| 文件 | 职责 |
|---|---|
HEALTH.md | 顶层概览(年龄、身高、体重、当前关注点、快速参考) |
METRICS.md | 实验室数值、生物标志物、生命体征、日常活动数字、趋势 |
FITNESS.md | 运动计划、体重历史、健身目标 |
NUTRITION.md | 饮食模式、备餐方式、营养优先级 |
MEDICATIONS.md | 处方药、日常补充剂、按需用药、历史用药 |
PROVIDERS.md | 初级保健、专科医生、检测服务、待办转诊 |
CONDITIONS.md | 活跃病症、过敏史、病史 |
该目录采用扁平布局——每个主题一个 Markdown 文件、不建子文件夹,目的是让 DA 可以快速扫描,也让手工编辑的人永远不用在目录树里翻找(见 HEALTH/README.md 的 "What Lives Here" 一节)。Pulse 在 Health 标签页渲染这些文件,DA 则在你询问"这个季度该重点关注什么"或"帮我总结最近一次化验报告"时读取它们。
二、Key Numbers:核心指标面板的结构与字段语义
METRICS.md的主体是一张"关键数字"面板表,每条记录包含四列:Metric(指标)、Value(当前值)、Status(状态)、Target(目标)。模板以 2026-01-01 的示例面板给出了 16 项指标的完整骨架:
| Metric | Value | Status | Target |
|---|---|---|---|
| Biological Age | sample | sample | Maintain or improve |
| Weight | 75 kg / 165 lbs (sample) | sample | 70 kg (sample) |
| Biomarkers in Range | 100 / 120 (sample) | sample | Improve out-of-range items |
| ApoB | 100 mg/dL (sample) | sample | Below 90 mg/dL (sample) |
| LDL-Cholesterol | 120 mg/dL (sample) | sample | Below 100 mg/dL (sample) |
| LDL Pattern | sample (A or B) | sample | Pattern A |
| HDL-Cholesterol | 50 mg/dL (sample) | sample | Above 40 mg/dL (sample) |
| eGFR | 100 mL/min (sample) | sample | Above 90 mL/min |
| Omega-3 Total | 5 % by wt (sample) | sample | Above 8 % (sample) |
| Triglycerides | 100 mg/dL (sample) | sample | Below 150 mg/dL (sample) |
| HbA1c | 5 % (sample) | sample | Below 5.7 % |
| Glucose | 90 mg/dL (sample) | sample | 70–99 mg/dL |
| Vitamin D, 25-OH | 50 ng/mL (sample) | sample | 40–80 ng/mL (sample) |
| VO2 Max | 35 mL/kg/min (sample) | sample | Above 35 (sample) |
| Blood Pressure | 120 / 80 mmHg (sample) | sample | Below 130 / 80 |
| Resting HR | 60 bpm (sample) | sample | 50–70 bpm |
理解这张表需要注意三点:
Status列由你或 DA 根据 Value 与 Target 的关系填写,模板中用sample占位。真实数据下它可以是In range、Out of range、Improving、Stable等。健康概览文件 HEALTH.md 中的 Positive Indicators / Areas Needing Attention 章节正是基于这类判定汇总出来的。- 数值带单位是硬要求(mg/dL、mL/min、ng/mL、mmHg、bpm 等),否则 DA 无法跨指标比较或换算。
- 目标值来自个人医疗判断:有的目标是临床标准(如 HbA1c 低于 5.7%、血糖 70–99 mg/dL),有的是个人定制目标(如体重 70 kg)。模板本身并不裁决对错,只提供可判定的结构。
HEALTH/README.md 给出了一行真实形态的样例,可作为填充格式的黄金参照:
| HDL-Cholesterol | 50 mg/dL (sample) | In range | Above 40 mg/dL |三、Trends:跨面板趋势对比表
单点数值只能说明"现在",趋势表则回答"方向如何"。模板要求对比上一组检验面板(Prior Panel)与最新面板(Latest Panel),并显式标注Direction列:
| Metric | Prior Panel (sample) | Latest Panel (sample) | Direction |
|---|---|---|---|
| HDL | 40 mg/dL (sample) | 50 mg/dL (sample) | Improving |
| eGFR | 80 mL/min (sample) | 100 mL/min (sample) | Improving |
| Triglycerides | 150 mg/dL (sample) | 100 mg/dL (sample) | Improving |
| LDL | 130 mg/dL (sample) | 120 mg/dL (sample) | Slight improvement |
| HbA1c | 5 % (sample) | 5 % (sample) | Stable |
方向值建议使用模板展示的有限词表:Improving、Slight improvement、Stable、Declining等,保证 DA 与下游渲染能稳定解析。趋势判定的输入正是 Key Numbers 面板在时间轴上的多次快照——这也是为什么模板注释建议定期(通常是每次新化验后)更新面板。
四、Daily Metrics:可穿戴/App 每日快照
除实验室数据外,METRICS.md 还承载来自可穿戴设备或健康 App 的日常指标快照:
| Metric | Value | Notes |
|---|---|---|
| Calories Burned | 2000 cals (sample) | Replace with actual daily average |
| Exercise Time | 30 min (sample) | Replace with actual daily average |
| HRV | 50 ms (sample) | Replace with actual baseline |
| Steps | 8000 (sample) | Replace with actual daily average |
| Sleep Consistency | 70 % (sample) | Replace with actual score |
| VO2 Max | 35 mL/kg/min (sample) | Replace with actual reading |
注意Notes列的语义:这些行大多记录的是日均值或基线(daily average / baseline),而不是某一天的瞬时值——例如 HRV 记录的是基线(baseline)、Sleep Consistency 是综合评分。这份表是"人的视角"(由你或 DA 手工维护),与下文介绍的"机器自动同步"路径互补:自动工具负责把逐日原始数据落盘,METRICS.md 的 Daily Metrics 则沉淀经过提炼的基线数字。
五、Blood Type 与 Lab Sources:静态信息与来源追踪
血型信息是独立小节,模板样例:
- ABO Group: O (sample) - Rhesus Factor: Rh(d) Positive (sample)血型是极少变化的静态数据,与 PROVIDERS 的医疗档案相互印证。紧随其后的 Lab Sources 表用于追踪每次化验的来源与覆盖范围:
| Provider | Last Panel | Biomarkers |
|---|---|---|
| Sample Lab | 2026-01-01 (sample) | 120 biomarkers (sample) |
| Sample Clinic | 2026-01-01 (sample) | Standard metabolic + CBC (sample) |
这张表让 DA 在回答"上次化验查了哪些项目、在哪做的"时有据可查,也便于在 Key Numbers 面板更新时核对数据出处。
六、模板的填充纪律:Notes 中的三条硬约定
METRICS.md 末尾的 Notes 小节是填充规范的核心,务必逐条遵守:
- 所有值均为占位符:在把真实化验结果填入前,不要依赖 DA 基于这些数字做任何健康分析;
- 可投递带日期的化验文件:将形如
lab_results_2026-01.md的带日期文件直接放入 HEALTH 目录,DA 在下次读取时会自动纳入(HEALTH/README.md 也确认了这一机制:"You can also drop dated lab result files directly in this directory"); - 占位值刻意用整齐的整百数字(100、120、50),让人一眼就看出"真实数据尚未录入"——这是模板设计上的刻意为之,避免假数据被误当真实数据消费。
七、三种填充路径:interview / 直接编辑 / 投递化验单
根据 HEALTH/README.md 的 "How to Populate" 一节,填充 METRICS.md 有三种方式,按投入成本递增:
- 运行 Health 访谈:
Skill("Interview")以对话方式逐字段引导你录入,并把答案写回这些文件,是最省力的路径(对应技能见 skills/Interview/SKILL.md); - 直接编辑文件:把 sample 值替换为真实数据,每个文件的结构就是 DA 期望的结构;
- 投递化验 PDF:把化验结果文件(PDF 或 Markdown)放入健康目录,请 DA 将数值抽取写入
METRICS.md与CONDITIONS.md。
无论走哪条路,METRICS.md顶部的 frontmatter(provenance: template)都标记了文件的来源属性——当数据由访谈或工具真实写入后,这一标记会被相应更新,供下游判断内容可信度。
八、源码纵深:AppleHealthImport 批量导入苹果健康数据
METRICS.md 只定义了"指标应长什么样",真实数据从哪来?仓库提供了完整工具链,最重量级的是 LifeOS/install/LIFEOS/TOOLS/AppleHealthImport.ts——它把 iPhone"导出所有健康数据"生成的export.xml(或 zip)转换为 Pulse 健康页可读的 Markdown 摘要APPLE_HEALTH.md。其设计与 METRICS.md 的消费方式深度耦合,几个关键实现事实:
- 标题即数据:Pulse 健康页按每个文件的
##标题渲染,正文只做预览,因此该工具把指标头部数字直接写进标题(如## Steps — 8,000/day avg (30d)),表格供直接阅读与 DA 解析; - 流式解析:
export.xml常见数 GB,工具用createReadStream分块流式读取、逐<Record>正则匹配(RECORD_RE),峰值内存只是"一个分块 + 每日聚合值",而非整个导出文件; - 按来源去重:Health 会同时保存多台设备对同一天的记录(源码注释举例 StepCount 有六个来源),工具按
metric → 日期 → sourceName分桶后再collapse()每天选一个胜出者,避免步数被重复累加; - 单位换算与别名:处理
mi/km、lb/kg、kJ/kcal等换算及count/min → bpm等别名,无法识别的单位宁可丢弃并记录告警,也不在错误标签下计数; - 写入安全:
--out路径经assertWritableOut解析校验,必须落在$HOME树内(防符号链接逃逸),解析前即拒绝非法路径; - 单文件独占:每次运行端到端重写
APPLE_HEALTH.md,但绝不读取或触碰手工维护的METRICS.md、FITNESS.md和化验文件。
命令行用法(源码头部注释所载):
bun AppleHealthImport.ts <export.zip|export.xml> [--days N] [--out PATH] [--dry-run]参数说明:--days N设定汇总窗口(默认 90 天,锚定在最新样本而非今天,避免导出文件陈旧时窗口为空);--out PATH指定输出位置;--dry-run只打印不写盘。
九、源码纵深:HealthSync 连续同步与日级快照
与"批量导入"互补的是 HealthSync.ts 提供的连续同步能力,CLI 支持四个子命令:
bun LIFEOS/TOOLS/HealthSync.ts pull [--source oura|eightsleep|apple|function] bun LIFEOS/TOOLS/HealthSync.ts status bun LIFEOS/TOOLS/HealthSync.ts current bun LIFEOS/TOOLS/HealthSync.ts auth oura关键机制:
pull并行拉取各源(未配置的模块以unconfigured状态记录,不阻塞其他源),单源拉取不会覆盖其他源的历史状态(源码注释记录了"Cato finding 2026-06-11"对单源不覆盖的修正);status依据 25 小时新鲜度窗口(FRESH_MS)判定各源数据是否新鲜;- 拉取结果写入
USER/HEALTH/current.json,包含generated_at、day、last_night(Oura 睡眠分、Eight Sleep 床温等)与各源状态,current命令可直接查看; auth oura走 OAuth 授权码流程:本地回调服务器监听 8474 端口,注意 Oura 拒绝127.0.0.1字面量、必须用localhost(源码注释说明),scope 只申请 v2 有效范围email personal daily heartrate workout tag session spo2。
苹果数据源的模块实现见 healthsync/apple.ts,它读取 iPhone 快捷指令导出到 iCloud Drive 的health-export.json(iCloud~is~workflow~my~workflows/Documents/LifeOS/health-export.json),将steps、active_energy_kcal、exercise_minutes、resting_hr、hrv_ms、weight_kg、sleep_hours等字段归一化为按日 DayFile(USER/HEALTH/DATA),并做了两个工程化设计:同一天重复导出时sleep_hours取单调递增的最大值(夜间睡眠只会变完整、不会变短),以及先本地落盘原始载荷再归一化(_spool),保证归一化 bug 永远不会销毁唯一副本。另一条补充路径是 HealthSnapshot.ts,它监听 iCloud 收件箱中的 JSON,逐文件生成HEALTH/snapshots/YYYY-MM-DD.md快照并归档原文件保证幂等,支持ingest | sample | status三个子命令。
十、下游消费:Pulse 渲染与隐私边界
从 AppleHealthImport.ts 头部注释可以确认下游消费机制:Pulse 的/api/life/health读取USER/HEALTH目录下除README.md外的所有.md文件(对应 Observability 的通用扫描逻辑),页面按每个文件的##标题渲染、正文预览截断在 2000 字符——这就是所有健康文件都把"指标数字放进标题、表格放正文"的原因。
隐私方面,HEALTH/README.md 明确声明:健康目录默认私有,LifeOS 发布工具拒绝发布USER/HEALTH/下的任何内容,请把这里的内容当作你的病历对待。
十一、落地建议:把 METRICS.md 变成你的健康数据中枢
综合模板规范与仓库工具链,一份可长期运转的指标档案应这样维护:
- 首次填充:先跑 Health 访谈(
Skill("Interview"))或用化验单抽取,把 Key Numbers、Blood Type、Lab Sources 三张表的 sample 值全部替换为真实数据; - 持续更新:每次新化验后同步更新 Key Numbers 与 Trends,Trends 只保留最近两个面板的对比即可;
- 自动数据:配置 HealthSync(含 Oura OAuth)做连续同步,必要时用 AppleHealthImport 做历史批量导入,两者写入的文件(
current.json、日级 DayFile、APPLE_HEALTH.md)与 METRICS.md 手工维护的基线数据互不覆盖、互为补充; - 周期性自检:确认 Daily Metrics 的日均值与基线仍与可穿戴数据一致,删除过时的占位行,保持整份文件"一眼可读、机器可解析"。
METRICS.md 的价值不在于表格本身,而在于它定义了一套 DA、Pulse 与人类编辑三方共用的稳定数据契约——理解了这份契约,你就理解了 LifeOS 健康模块的数据流全貌。
【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考