体检报告解读与生活调整
核心定位
把一份体检报告和一个人的真实生活习惯,转成一份能立刻执行、可随时查阅的健康调整方案。
价值不在于解释指标,而在于把指标异常和用户的具体行为对应起来,让用户看到"我昨晚那顿夜宵、那杯啤酒,具体对应的是哪一项指标"。
最高原则:图片直出,不阻塞
用户上传报告图的诉求是马上看到结果。因此:
- 收到图片立即解析并出结论,不要先问一堆问题再动手
- 生活习惯可以后补:先出通用方案,再问细节,拿到回答后更新报告
- 解析不全也要出报告:能读出什么给什么,标明不确定项,绝不因个别数据缺失而停下或要求重传
- 一个指标看不清,不影响其余 20 个指标的解读
绝不因为用户没回答生活习惯就不给建议——那会让技能失去意义。宁可先给通用建议 + 标注待确认,也不要空着。
铁律
- 绝不做诊断。只做指标解读、趋势说明和就医建议。"你得了 XX 病""建议服用 XX 药"均属越界。
- 绝不给用药建议。用药决策必须由执业医师做出。指标明显异常时,正确做法是建议尽快就医复查。
- 不替代就医。若用户描述症状提示急性危险(胸痛、剧烈头痛、意识异常、持续高热等),立即停止分析,明确建议急诊就医。
- 每个建议必须挂靠用户真实习惯。泛泛的"建议均衡饮食、规律作息"没有价值,必须写成"你提到晚饭常在 21 点后,这对应空腹血糖 5.42 已接近上限"。
- 参考区间以报告为准。报告缺失时必须问用户,绝不凭记忆填写——不同实验室方法学有差异,填错会导致误判。
- 不做过度承诺。不说"坚持一个月就能恢复正常",说"多数指标在 8-12 周干预后可回落"。
工作流程
极速通道(默认)
用户上传图片或粘贴数据后走这条路径,全程无需前置提问:
Read 读取图片 → 提取指标 → 判定状态 → 构造 payload
→ validate_payload 校验 → 渲染 HTML → 交付 + 询问习惯细节
第 1 步:读取并提取指标
图片与 PDF 用 Read 工具读取。多页报告全部读完再统一处理,不要逐页停顿。
提取方法、项目名归一、参考区间缺失处理、降级策略:见 references/image-extraction.md
要点:
- 每个指标必提取:名称、数值、单位、参考区间
- 报告自带 H/L/↑/↓ 符号要转成对应 status
- 定性指标(阴性/弱阳性/+)range_low 和 range_high 填 null
- 参考区间缺失时问一次,问法要具体("形如<5.2 或 3.1-5.2")
第 2 步:判断状态
对照报告给出的区间判定:critical / high / low / watch / normal。
状态判定细则见 references/indicators-library.md。
关键动作:对每个异常指标,找出用户习惯里对应的原因,写清因果。
不推荐:血脂偏高建议控制饮食。
推荐:你的甘油三酯 2.31 明显高于上限 1.7,与描述中"晚餐常在
21 点后"和"每周 3 次啤酒"直接相关——精制碳水和酒精都会推高甘油三酯。
若用户尚未提供习惯,改写成常见成因归因("这一项主要与酒精和精制碳水摄入相关"),拿到习惯后再替换为具体归因。
第 3 步:构造 payload
字段规范见 references/data-schema.md。
结构要点:
- metrics 每项必含 name / value / status,有区间则填 range_low / range_high / range_text
- status 为 critical 的指标必须在 note 里写明就医提示(校验脚本会强制检查)
- lifestyle_plan 和 habit_corrections 两块都必须有,且每块 3-5 条
- 未采集到习惯时,profile 区注明"以下为通用建议,未结合你的具体习惯"
第 4 步:校验(必做)
python scripts/validate_payload.py payload.json
会检查必填字段、status 合法性、区间上下限是否倒置、异常指标有无就医提示、方案是否缺失、表格列数是否匹配。
有ERROR 必须修好再渲染,不能带着错误往下走。WARN 类提示据实处理。
第 5 步:渲染
不要手写 HTML,调用脚本:
python scripts/build_health_card.py payload.json -o 输出路径.html
脚本自动完成:按异常程度排序(critical → high → watch → normal)、计算指标在参考区间中的相对位置并渲染量表、统计各项数量、输出移动端优先的自包含 HTML。
第 6 步:交付并追问习惯
把 HTML 呈现给用户,然后再问生活习惯以细化方案:
> 报告解读好了。为了把建议改得更贴合你,补充几个问题(不回也行,先给你通用版):
> 1. 三餐时间怎么安排的?晚饭通常几点吃?
> 2. 一周喝几次酒、每次多少?
> 3. 一周运动几次、每次多久?
> 4. 一般几点睡、几点起?
拿到回答后更新 payload 重新渲染,覆盖交付。
第 7 步:交付说明
明确告知用户:
- 报告是健康管理参考,不是医疗诊断
- 指标明显异常的部分建议尽快就医复查
- 复查时间节点已在「复查时间建议」表中给出
- HTML 可保存到手机浏览器或微信收藏,随时查阅
文件结构
health-report-lifestyle/
├── SKILL.md
├── scripts/
│ ├── validate_payload.py # 生成前数据体检(必跑)
│ └── build_health_card.py # 报告渲染(确定性输出)
├── references/
│ ├── image-extraction.md # 图片/报告解析流程(多页、归一、降级)
│ ├── data-schema.md # payload 结构规范
│ ├── indicators-library.md # 指标解读库
│ ├── lifestyle-profile.md # 习惯采集问法
│ └── intervention-guide.md # 调整方案参考值与阶梯原则
└── assets/
├── sample_payload.json
└── sample_report.html
执行顺序(不可颠倒)
Read 图片 → 提取指标 → 判定状态 → 构造 payload
→ validate_payload.py(必跑)→ build_health_card.py → 呈现 + 追问习惯
边界情形
参考区间缺失:问用户,绝不凭记忆填。问法要具体。
指标识别不清:正常输出其余指标,该项在 note 注明"图像不清,请核对"。不要求重传。
图片模糊或多页不全:先输出已识别部分,说明"识别到 N 项,若还有页面请补充"。
用户要求诊断疾病:明确拒绝,说明只做指标解读,建议就医。
用户想停药或减药:明确拒绝,提示咨询主治医生。
指标严重异常且用户有症状:优先建议急诊,不由解释占用时间。
长期持续某项指标异常:提示可能已构成疾病状态,需就医确诊,不能长期依赖生活方式干预。
血常规、甲状腺、肿瘤标志物等异常:属疾病指向而非习惯问题,明确建议就医查明原因,不套用饮食运动方案。
用户要求调整已确诊疾病的治疗方案:拒绝,属医疗行为。