# 代理健康评估与决策指南

## 📊 健康检查结果

### 本地代理 (`http://127.0.0.1:8045`)

**评级**: D (较差)

| 测试项 | 结果 | 说明 |
|--------|------|------|
| 简单对话 | ✅ | 基础功能正常 |
| 健康查询（无工具） | ❌ | System prompt 过长导致失败 |
| Function Calling (1工具) | ❌ | 完全不工作 |
| Function Calling (6工具) | ❌ | 完全不工作 |
| Function Calling (21工具) | ❌ | 完全不工作 |

**成功率**: 20%
**Function Calling**: ❌ 损坏
**平均响应**: 7.04 秒

### OpenRouter

**评级**: A (优秀)

| 测试项 | 结果 | 说明 |
|--------|------|------|
| 简单对话 | ✅ | 正常 |
| 健康查询（无工具） | ❌ | 同样的 system prompt 问题 |
| Function Calling (1工具) | ✅ | 正常工作 |
| Function Calling (6工具) | ✅ | 正常工作 |
| Function Calling (21工具) | ✅ | 正常工作 |

**成功率**: 80%
**Function Calling**: ✅ 完全可用
**平均响应**: 1.89 秒

## 🔍 SAFETY OVERRIDE 详解

### 原理

**关键词匹配 + 规则引擎**，不依赖 LLM 的理解能力。

```python
if "今天" in message and ("睡" in message or "步数" in message):
    # 强制调用工具
    tool_calls = [{"name": "get_daily_detailed_stats", "args": {...}}]
```

### 覆盖范围

#### ✅ 能处理的查询

1. **单日健康查询**
   - "今天睡得怎么样？"
   - "昨天的步数"
   - "前天的心率"

2. **趋势查询（带明确时间）**
   - "过去一个月的睡眠"
   - "最近两周的HRV"
   - "过去60天的步数趋势"

3. **同步操作**
   - "同步 Garmin 数据"
   - "更新健康数据"

4. **网络搜索（带明确关键词）**
   - "搜索一下NMN研究"
   - "查一下最新的断食方法"

#### ❌ 无法处理的查询

1. **没有明确时间词**
   - "我的睡眠质量如何？" → 无法确定日期
   - "运动数据怎么样？" → 无法确定日期

2. **复杂推理**
   - "为什么最近HRV一直在下降？"
   - "对比一下今天和昨天，哪个更好？"

3. **上下文依赖**
   - 用户: "昨天睡得怎么样？"
   - Bot: "很好，8小时深睡"
   - 用户: "前天呢？" → ❌ 无法理解"前天"指的是相对昨天

4. **模糊意图**
   - "感觉身体不太舒服" → 无法确定要做什么
   - "帮我看看" → 看什么？

### 对代码逻辑的影响

#### 功能层面

| 功能 | 有 SAFETY OVERRIDE | 无 SAFETY OVERRIDE (代理损坏时) |
|------|-------------------|-------------------------------|
| 单日查询 | ✅ 工作 | ❌ 失败 |
| 趋势分析 | ✅ 工作（简单） | ❌ 失败 |
| 数据记录 | ⚠️ 需确认 | ❌ 失败 |
| 复杂推理 | ❌ 退化 | ❌ 失败 |
| 上下文理解 | ❌ 退化 | ❌ 失败 |

#### 代码质量

**优点**:
- ✅ 透明，易于调试
- ✅ 可预测
- ✅ 可以关闭（如果 Gemini 恢复）

**缺点**:
- ❌ 维护成本（需要更新关键词）
- ❌ 覆盖不全
- ❌ 退化为"命令模式"而非"对话模式"

## 💰 成本对比

### 本地代理

**优点**:
- ✅ 免费（或固定成本）
- ✅ 数据不出本地
- ✅ 无速率限制（取决于你的代理）

**缺点**:
- ❌ Function Calling 损坏
- ❌ 响应慢（7秒 vs 2秒）
- ❌ 需要维护 SAFETY OVERRIDE
- ❌ 功能受限

**总成本**: 维护时间成本

### OpenRouter

**优点**:
- ✅ Function Calling 完全可用
- ✅ 响应快（2秒）
- ✅ 不需要 SAFETY OVERRIDE
- ✅ 完整功能

**缺点**:
- ❌ 按量付费
- ❌ 数据经过第三方

**成本估算**:
```
模型: google/gemini-3-flash-preview
价格: ~$0.15/1M tokens

假设:
- 每天 100 次对话
- 平均每次 2K tokens (输入+输出)
- 每天: 100 × 2K = 200K tokens
- 月总: 200K × 30 = 6M tokens

月成本: 6M × $0.15/1M = $0.90 (~6元人民币)
```

## 🎯 决策建议

### 情况 1: 继续使用本地代理

**适用于**:
- ✅ 查询模式简单（主要是单日查询）
- ✅ 对成本极度敏感
- ✅ 数据隐私要求高
- ✅ 愿意接受功能退化

**需要做的**:
1. 保持 SAFETY OVERRIDE 开启
2. 监控日志中 🔧 出现的频率
3. 如果 >70% 的请求需要 SAFETY OVERRIDE，考虑切换
4. 定期运行健康检查: `python scripts/health_check.py`

### 情况 2: 切换到 OpenRouter（推荐）

**适用于**:
- ✅ 想要完整的 AI 对话体验
- ✅ 需要复杂查询和推理
- ✅ 愿意支付小额费用（~6元/月）
- ✅ 追求稳定性和响应速度

**切换步骤**:
```bash
# 1. 切换配置
ln -sf .gemini.openrouter.env .gemini.current.env

# 2. 重启 Bot
supervisorctl restart slack_bot

# 3. 测试
# 在 Slack 发送: 为什么最近HRV一直在下降？

# 4. 验证日志
tail -50 logs/slack_bot.log | grep "Tool calls successfully"
```

### 情况 3: 混合模式

**方案**:
- 日常使用本地代理 + SAFETY OVERRIDE
- 复杂查询时手动切换到 OpenRouter

**实施**:
```bash
# 创建快速切换脚本
cat > scripts/switch_proxy.sh << 'EOF'
#!/bin/bash
case "$1" in
  local)
    ln -sf .gemini.local.env .gemini.current.env
    echo "Switched to local proxy"
    ;;
  openrouter)
    ln -sf .gemini.openrouter.env .gemini.current.env
    echo "Switched to OpenRouter"
    ;;
  *)
    echo "Usage: $0 {local|openrouter}"
    exit 1
esac
supervisorctl restart slack_bot
EOF
chmod +x scripts/switch_proxy.sh

# 使用
./scripts/switch_proxy.sh openrouter  # 切换到 OpenRouter
./scripts/switch_proxy.sh local       # 切换回本地
```

## 📈 监控指标

创建一个简单的监控脚本：

```bash
# 统计 SAFETY OVERRIDE 使用率
grep "SAFETY OVERRIDE" logs/slack_bot.log | wc -l
grep "Tool calls successfully" logs/slack_bot.log | wc -l

# 如果 SAFETY OVERRIDE 数量 >> Tool calls successfully
# 说明严重依赖 SAFETY OVERRIDE，建议切换
```

## 🔧 定期健康检查

**建议频率**: 每周一次

```bash
# 运行健康检查
python scripts/health_check.py > health_report_$(date +%Y%m%d).txt

# 如果本地代理评级 >= B，继续使用
# 如果本地代理评级 <= C，考虑切换
```

## 📝 总结

| 维度 | 本地代理 | OpenRouter |
|------|---------|-----------|
| Function Calling | ❌ 损坏 | ✅ 可用 |
| 响应速度 | 7秒 | 2秒 |
| 成功率 | 20% | 80% |
| 月成本 | ¥0 | ¥6 |
| 维护成本 | 高 | 无 |
| 推荐度 | ⭐⭐ | ⭐⭐⭐⭐⭐ |

**我的建议**: **切换到 OpenRouter**

理由:
1. 6元/月的成本可以忽略不计
2. 60% 的成功率提升
3. 3.5倍的速度提升
4. 零维护成本
5. 完整的 AI 能力

如果你真的想省这6元，那就保持本地代理 + SAFETY OVERRIDE，但要接受功能限制。
