触发条件
当用户提到以下场景时,使用此技能:
通用询问:
- ✅ "过去一段时间我的健康有什么变化?"
- ✅ "分析我的健康趋势"
- ✅ "我的身体状况有什么变化?"
- ✅ "健康状况总结"
具体维度:
- ✅ "我的体重/BMI有什么趋势?"
- ✅ "分析我的症状模式"
- ✅ "我的用药依从性怎么样?"
- ✅ "我的化验指标有什么变化?"
- ✅ "我的情绪和睡眠趋势"
相关性分析:
- ✅ "我的症状和什么相关?"
- ✅ "我的药物有效吗?"
- ✅ "睡眠和我的情绪有什么关系?"
时间范围:
- 默认分析过去3个月的数据
- 支持:"过去1个月"、"过去6个月"、"过去1年"
- 支持:"2025年1月至今"、"最近90天"
执行步骤
#### 步骤 1:确定分析时间范围
从用户输入中提取时间范围,或使用默认值(3个月)。
#### 步骤 2:读取健康数据
读取以下数据源:
```javascript
// 1. 个人档案(BMI、体重)
const profile = readFile('data/profile.json');
// 2. 症状记录
const symptomFiles = glob('data/symptoms/*/.json');
const symptoms = readAllJson(symptomFiles);
// 3. 情绪记录
const moodFiles = glob('data/mood/*/.json');
const moods = readAllJson(moodFiles);
// 4. 饮食记录
const dietFiles = glob('data/diet/*/.json');
const diets = readAllJson(dietFiles);
// 5. 用药日志
const medicationLogs = glob('data/medication-logs/*/.json');
// 6. 女性健康数据(如适用)
const cycleData = readFile('data/cycle-tracker.json');
const pregnancyData = readFile('data/pregnancy-tracker.json');
const menopauseData = readFile('data/menopause-tracker.json');
// 7. 过敏史
const allergies = readFile('data/allergies.json');
// 8. 辐射记录
const radiation = readFile('data/radiation-records.json');
```
#### 步骤 3:数据过滤
根据时间范围过滤数据:
```javascript
function filterByDate(data, startDate, endDate) {
return data.filter(item => {
const itemDate = new Date(item.date || item.created_at);
return itemDate >= startDate && itemDate <= endDate;
});
}
```
#### 步骤 4:趋势分析
对每个数据维度进行趋势分析:
4.1 体重/BMI 趋势
- 提取历史体重数据
- 计算BMI变化
- 识别趋势方向(上升/下降/稳定)
- 评估变化幅度
4.2 症状模式
- 统计症状频率
- 识别高频症状
- 分析症状时间模式
- 检测症状诱因
4.3 药物依从性
- 计算总体依从率
- 分析各药物依从性
- 识别漏服模式
- 评估改善建议
4.4 化验结果
- 追踪多次报告中的生化指标
- 与参考范围对比
- 识别改善/恶化
- 标记异常指标
4.5 情绪与睡眠
- 关联情绪评分与睡眠时长
- 识别情绪波动模式
- 检测压力水平
- 评估心理健康趋势
#### 步骤 5:相关性分析
使用统计方法识别相关性:
```javascript
// 皮尔逊相关系数
function pearsonCorrelation(x, y) {
// 计算相关系数
// 返回值范围:-1(负相关)到 1(正相关)
}
// 应用场景
- 药物开始日期 vs 症状频率
- 睡眠时长 vs 情绪评分
- 体重变化 vs 饮食记录
- 运动量 vs 情绪状态
```
#### 步骤 6:变化检测
识别显著变化:
```javascript
// 变化点检测
function detectChangePoints(timeSeries) {
// 使用统计方法检测显著变化点
// 例如:体重突然下降、症状突然增加
}
// 阈值警报
function checkThresholds(value, thresholds) {
// 检查是否接近或超过危险阈值
// 例如:BMI > 30、辐射剂量 > 安全限
}
```
#### 步骤 7:生成洞察
基于分析结果生成预测性洞察:
```javascript
// 风险评估
function assessRisks(trends) {
// 识别高风险趋势
// 例如:快速体重下降、频繁症状
}
// 预防建议
function generateRecommendations(trends, correlations) {
// 基于模式建议预防措施
// 例如:改善睡眠、提高用药依从性
}
// 早期预警
function earlyWarnings(trends) {
// 在问题变得严重之前预测
// 例如:症状频率上升、情绪持续低落
}
```
#### 步骤 8:生成可视化报告
生成交互式HTML报告:
- 数据汇总:生成JSON格式的分析结果
- HTML模板渲染:将数据注入HTML模板
- ECharts图表配置:配置6种交互式图表
- 保存文件:保存为独立HTML文件
详细输出格式参见:[数据源说明](data-sources.md)