个人糖尿病管理助手
Overview
为糖尿病患者 / 高风险人群提供一套零依赖(仅 Python 标准库)的自我管理工具:把分散的血糖、饮食、用药、运动、体重、HbA1c 记录集中到一份 JSON 数据中,自动产出统计指标与可视化报告。既可在对话里随时记录与查询,也可定期生成可发给医生 / 家属 / 自己的管理报告。
核心理念:记录 → 统计 → 报告 → 行动,让控糖效果可量化、可追踪。
When to use
- 记录一次血糖(空腹 / 餐后 / 睡前 / 随机),或连续记录血糖
- 记录一餐的碳水 / 热量,评估饮食对血糖的影响
- 记录用药、胰岛素、运动、体重、HbA1c
- 查看一段时间内的控糖趋势(均值、TIR、高低血糖事件)
- 生成糖尿病管理周报 / 月报(Markdown 或 HTML)
- 理解 TIR(达标时间占比)、HbA1c、血糖控制目标等专业概念
- 估算当前平均血糖对应的 HbA1c 水平
内置示例数据(开箱即用)
本 skill 自带一套可运行的示例数据,无需自备即可体验完整流程:
- 路径:
sample_data/demo_log.json(约 130 条记录,覆盖 2026-07-01~07-14 两周) - 配套报告:
sample_data/demo_report.html、sample_data/demo_report.md
直接运行即可看到效果:
# 统计示例数据
python scripts/diabetes_log.py --store sample_data/demo_log.json stats --start 2026-07-01 --end 2026-07-14
# 生成 HTML 报告
python scripts/diabetes_report.py --store sample_data/demo_log.json --from 2026-07-01 --to 2026-07-14 --name 示例用户 --out sample_data/demo_report.html
Core workflow
- 建立个人数据库(首次使用):默认数据文件为
~/.workbuddy/diabetes_log.json。
也可指定任意路径:--store /path/to/my_log.json,便于按人 / 按家人分别管理。 - 日常记录(随时):用
add-*子命令追加血糖、餐食、用药、运动、体重、HbA1c、备注。 - 查询 / 复盘:用
list查看最近记录,stats看周期指标(TIR、均值、高低血糖事件)。 - 生成报告:用
diabetes_report.py产出 Markdown(贴文档 / 微信)或 HTML(带图表、可打印成 PDF 发给医生)。 - 解读与行动:结合
references/glucose_standards.md(控糖目标 / TIR / HbA1c 公式)与报告里的"个性化提示",调整饮食 / 运动 / 用药,必要时就医。
Quick start(脚本)
记录
# 血糖(场景:空腹/餐前/餐后2h/睡前/夜间/随机)
python scripts/diabetes_log.py --store MY.json add-glucose --value 6.2 --context 空腹 --note "早起"
# 餐食(碳水克数、热量 kcal)
python scripts/diabetes_log.py --store MY.json add-meal --desc "米饭+青菜+鸡胸" --carbs 60 --calories 520
# 用药 / 运动 / 体重 / HbA1c / 备注
python scripts/diabetes_log.py --store MY.json add-med --name 二甲双胍 --dose "0.5g 早餐后"
python scripts/diabetes_log.py --store MY.json add-exercise --kind 快走 --minutes 30
python scripts/diabetes_log.py --store MY.json add-weight --kg 68.5
python scripts/diabetes_log.py --store MY.json add-hba1c --value 6.8
python scripts/diabetes_log.py --store MY.json add-note --text "今天运动后有点心慌"
查询与统计
# 最近 20 条(可加 --type glucose/meal/med/...)
python scripts/diabetes_log.py --store MY.json list --limit 20
# 指定时间段统计
python scripts/diabetes_log.py --store MY.json stats --start 2026-07-01 --end 2026-07-14
生成报告
# HTML 报告(含 TIR 分布、每日趋势、可打印 PDF)
python scripts/diabetes_report.py --store MY.json --from 2026-07-01 --to 2026-07-14 --name 张三 --out report.html
# Markdown 报告(适合贴文档 / 聊天)
python scripts/diabetes_report.py --store MY.json --name 张三 --out report.md
数据模型(JSON)
单文件 JSON,结构:
{
"version": 1,
"entries": [
{"id": 1, "type": "glucose", "ts": "2026-07-01 07:10", "value": 6.2, "context": "空腹", "note": ""},
{"id": 2, "type": "meal", "ts": "...", "desc": "...", "carbs": 60, "calories": 520, "note": ""},
{"id": 3, "type": "med", "ts": "...", "name": "二甲双胍", "dose": "0.5g 早餐后", "note": ""},
{"id": 4, "type": "exercise", "ts": "...", "kind": "快走", "minutes": 30, "note": ""},
{"id": 5, "type": "weight", "ts": "...", "kg": 68.5},
{"id": 6, "type": "hba1c", "ts": "...", "value": 7.2},
{"id": 7, "type": "note", "ts": "...", "text": "..."}
]
}
--store决定文件位置;不传则默认~/.workbuddy/diabetes_log.json。- 文件损坏时会自动备份为
.corrupt.<时间戳>再新建空库,避免数据全丢。
健壮性 / 异常处理
工具面向长期日常记录,尽量做到"错了也不丢数据、提示看得懂":
- 日期格式友好报错:
--ts / --start / --end若写错(如用2026/07/01、26-7-1),会明确告诉你正确写法(2026-07-20/2026-07-20 08:30/now),而不是抛一堆看不懂的报错。 - 日期段含当天整天:
--start/--end传日期时,起始按当天 00:00、结束按当天 23:59:59 计入,避免"少统计了最后一天"。 - 数据文件损坏自动备份:读取到坏文件时自动备份为
.corrupt.<时间戳>并新建空库继续,原数据保留可找回。 - 写入自动重试:保存数据 / 报告时若遇磁盘繁忙、文件被占用(如报告正被打开)等瞬时错误,会自动退避重试最多 3 次;仍失败才提示,并给出"检查磁盘空间 / 是否被其他程序占用"的排查方向,而非直接崩溃。
- 未知血糖场景容错:
--context写了不认识的场景会按"随机"记录并友好提示,不中断。
指标说明(详见 references)
- TIR(Time In Range):血糖处于 3.9–10.0 mmol/L 的时间占比,目标 ≥70%。
- 估算 HbA1c:由平均血糖经 Nathan 公式
A1C(%) = (平均血糖_mg/dL + 46.7) / 28.7推算(平均血糖 mg/dL = mmol/L×18),仅供趋势参考,不替代静脉化验。 - 低血糖 / 高血糖事件:区间划分参见
references/glucose_standards.md。
Bundled resources
scripts/
diabetes_log.py— 数据记录与统计(add-* / list / stats),零依赖。diabetes_report.py— 报告生成(Markdown / HTML),复用diabetes_log.py的统计逻辑。
references/
glucose_standards.md— 血糖控制目标、TIR 区间划分、HbA1c 公式、低血糖处理、提示触发逻辑。food_carb_db.md— 中式常见食物碳水 / 热量参考表,用于餐食记录与估算。
sample_data/
demo_log.json— 两周示例记录(开箱即用)。demo_report.html/demo_report.md— 由示例数据生成的报告样例。
设计要点 / 边界
- 纯本地、零依赖:仅用 Python 标准库,不联网、不上传,适合健康隐私数据。
- 口径一致性:统计与报告共用同一套区间与公式(在
diabetes_log.py中定义,diabetes_report.py复用),避免口径漂移。 - 非医疗建议:所有输出仅用于自我管理参考,明确标注"不替代医生诊断与处方"。涉及用药调整、胰岛素剂量、急症(如严重低血糖 / 酮症)必须就医。
在对话中如何使用本 skill
当用户说"帮我记一下今早空腹血糖 6.2""这周血糖控制得怎么样""生成一份糖尿病周报""晚餐吃了米饭炒菜大概多少碳水"时:
- 判断意图属于记录 / 查询 / 报告 / 咨询哪一类。
- 记录类:调用
diabetes_log.py的对应add-*子命令(用--store指定该用户的数据文件,默认~/.workbuddy/diabetes_log.json)。 - 查询 / 统计类:调用
stats/list;需要解释指标含义时加载references/glucose_standards.md。 - 报告类:调用
diabetes_report.py生成 HTML 或 Markdown,必要时用present_files展示给用户。 - 饮食咨询类:加载
references/food_carb_db.md估算碳水 / 热量,并给"先菜后饭、搭配蛋白与蔬菜"等控糖建议。 - 始终在结论中保留"仅供参考、不替代医生诊断"的边界提示;出现严重低 / 高血糖时优先建议就医或按 15-15 法则处理。