SuperAPI AI 工具集

google_health_connect

数据与分析

查看项目

更新于 10-26 18:17

技能介绍

用途

该技能用于读取用户从 Android 设备同步到 Google Health Connect 的健康数据。所有操作通过 health-cli 二进制工具完成,每条命令都必须带上 --provider healthconnect 参数(该参数不可省略且无默认值,省略即用法错误)。

该技能仅服务于 Android 设备。如果用户配对的设备不是 Android 设备,则没有对应数据;不确定时可检查 device.list 返回的 platform 字段。

主要能力

按数据形态分为三类查询命令,均归在 query 下:

  • query metrics --provider healthconnect:全天指标汇总(步数、距离、卡路里、心率、HRV、VO2max 等)。
  • query samples --provider healthconnect:原始、未分桶的数据点(日内心率/步数、GPS、睡眠阶段时间线)。
  • query sessions --provider healthconnect:离散会话,包括睡眠和锻炼。

此外还有:

  • status --provider healthconnect:数据同步状态。
  • auth connect --provider healthconnect 与 auth disconnect --provider healthconnect:连接与断开授权。
  • delete:删除已存储记录(破坏性操作,见下文)。

多设备情况(少见):当查询窗口跨越多个设备时,返回信封会带有 "multi_node": true。query metrics 返回按设备分组的 node_groups;query samples/sessions 为每条记录添加 node_id(samples 的 CSV 会多出首列 node_id)。单设备输出不变;切勿跨设备求和或重复计数。

query metrics — 全天指标汇总

health-cli query metrics --provider healthconnect \
  --start-date <YYYY-MM-DD> [--end-date <YYYY-MM-DD>] \
  [--interval hourly|daily|weekly] [--fields a,b,c] [--timeout-secs N]

daily-metrics 是唯一的域,因此没有 --category。每个 --interval 桶一行(默认 daily)。--start-date 必填;--end-date 默认为今天。输出为信封 { "coverage": {...}, "records": [...] }(见下方 Coverage)。

--list-fields 从已同步数据中读取指标字段名,返回 { ok, provider, category, observed_count, fields: [{ name, observed, count? }] }。observed: true(带行数)表示该名称存在于当前用户数据中——这些正是 --fields 能匹配的名称。observed: false 表示该构建认识该字段但尚未同步任何数据。如果无法读取字段集,响应会带有 degraded: true,且所有 observed 为 null。

query sessions — 离散会话

health-cli query sessions --provider healthconnect --category sleep|workout \
  --start-date <YYYY-MM-DD> [--end-date <YYYY-MM-DD>] [--fields a,b,c]
  • sleep:每个睡眠会话一行。
  • workout:每个锻炼/活动一行。

会话从不分桶(没有 --interval)。发现方式:--list-categories 返回 { ok, provider, categories };--list-fields(需要 --category)返回 { ok, provider, category, fields }(例如 workout 有 is_indoor)。

输出:规范化的 snake_case 记录;同一概念使用相同字段名(例如 workout 的 average_speed_mps、elevation_gain_meters、hr_average_bpm)。会话记录带有 provider 前缀的 id(healthconnect_…)以及 start_datetime/end_datetime/timezone;指标桶带有 date/hour/week_start + record_count。

Coverage:查询返回信封 { "coverage": {...}, "records": [...] }。当窗口内某些天未从设备同步时,coverage.complete 为 false;此时 coverage.warning 会给出应运行的确切 backfill_data_source 命令。应向用户展示该警告或据此操作——在回填完成前结果是部分的。

query samples — 原始、未分桶的数据点

health-cli query samples --provider healthconnect --start-date <YYYY-MM-DD> \
  [--end-date <YYYY-MM-DD>] [--start-time <HH:MM[:SS]>] [--end-time <HH:MM[:SS]>] \
  [--fields <type1,...>] [--limit <n>] [--format stdout|csv] [--output <path>]
health-cli query samples --provider healthconnect --list-fields   # 发现样本类型

单个样本——比 query metrics 汇总更细(日内心率/步数、GPS、睡眠阶段时间线;query sessions 只给阶段总计)。--fields 选择样本类型(不是输出列)——运行 --list-fields 查看当前用户已同步的类型。GPS 是位置(原始经纬度——不要据此推断地名)。对于密集读取使用 --output <path>:它把 CSV 写入 agent 文件系统供后续脚本步骤使用,只打印摘要,避免数千行进入上下文。

status — 数据同步状态

health-cli status --provider healthconnect [--timeout-secs N] \
  [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--check-missing-entries]

返回 { categories: [{ name, record_count, earliest_datetime, latest_datetime }] }。使用 --check-missing-entries(需要 --start-date)时:生成按 30 分钟间隔的深度缺口报告(unsynced_dates、missing_intervals 等)。

auth connect

health-cli auth connect --provider healthconnect [--timeout-secs N]

运行此命令并按照指示连接 Health Connect 数据。

auth disconnect

health-cli auth disconnect --provider healthconnect [--timeout-secs N]

Health Connect 无法通过此 CLI 或聊天内小部件断开。应告知用户打开 Settings → Connectors → Health Connect → Manage,然后在 Android 设置中撤销该应用的 Health Connect 权限。

delete — 删除已存储的 Health Connect 记录

health-cli delete --provider healthconnect --all             # 所有 Health Connect 记录
health-cli delete --provider healthconnect --device NODE_ID  # 一个配对设备
health-cli delete --provider healthconnect --start-date 2026-03-01 --end-date 2026-03-31

用于任何删除、移除、擦除、清空 Health Connect 数据的请求。切勿通过移动文件、断开连接器或写入数据库来临时替代——那些既不会删除记录也不会留下审计轨迹。删除从不跨 provider;要清除两者,需对每个 provider 各运行一次。

--all 不接受其他过滤条件;改用 --device/--start-date/--end-date。所有记录类型一次性删除——没有按类别或按记录 ID 的删除。日期为 JARVIS_USER_TIMEZONE 下的 YYYY-MM-DD 或 epoch 秒;当记录在结束前开始且在开始后结束时即属于范围内,因此跨越边界的会话会被包含。仅 --start-date 表示从该日起删除,仅 --end-date 表示删除到该日(含)。

破坏性且不可逆,需经过一次显示规范化过滤条件的新鲜一次性批准。每个请求只运行一次——先在对话中确定 provider、设备和日期。拒绝会以退出码 3 结束且不删除任何内容;这是最终结果,应报告而不是用其他过滤条件或另一个 provider 重试。

零是成功而非未命中——没有匹配项,应如实说明并停止,而不是扩大日期范围或用 --all 重跑。报告 deleted.records,而不是 total_rows(后者还计入子值行)。如果设备上的 Health Connect 仍保留这些记录,后续同步可能将它们带回。

使用方式

  • 按数据形态选择命令:query metrics(全天汇总)、query samples(原始点——仅当单个样本重要时;趋势优先用 metrics)、query sessions --category sleep|workout(离散事件)。
  • 始终传入 --provider healthconnect 和 --start-date;--end-date 默认为今天。对相对请求(“今天”“上周”)使用当前日期上下文;对狭窄的日内窗口使用样本时间边界。
  • Coverage:如果 query metrics/sessions 返回 coverage.complete: false,告知用户数据是部分的,并转达/执行 coverage.warning(运行 backfill_data_source 操作,然后重新查询)。
  • query metrics 默认 --interval daily;睡眠跨越午夜(包含晚间开始和早晨结束两个日期)。
  • 结果为空时,该范围可能没有数据;扩大范围,或检查 status / coverage 并回填。

适用场景

当用户询问其同步的 Health Connect 数据、同步状态或来源时使用,包括:

  • 全天指标/生命体征:步数、距离、卡路里、心率、HRV、VO2max。
  • 睡眠会话:阶段、质量、效率、觉醒次数。
  • 锻炼:类型、时长、卡路里、距离、心率。

限制

  • 仅适用于 Android 设备;非 Android 配对设备没有数据。
  • 数据可用性取决于用户 Android 设备上 Health Connect 权限是否批准以及同步情况。
  • Health Connect 无法通过此 CLI 或聊天内小部件断开,需在 Android 设置中撤销权限。
  • delete 为破坏性且不可逆操作,需一次性批准,且不跨 provider。
  • 其他具体限制(如收费、价格、平台细节)暂未提供。