# Gemini 空响应问题诊断报告

## 问题现象
Health Bot 在使用本地 Gemini 代理 (`http://127.0.0.1:8045`) 时返回空响应，但 Obsidian Bot 工作正常。

## 根本原因

**你的本地 Gemini 代理不支持 Function Calling（工具调用）功能。**

### 测试结果

| 配置 | 工具数量 | System Prompt | 结果 |
|------|---------|--------------|------|
| 纯文本 | 0 | 有 (6KB) | ✅ 正常 |
| 简单工具 | 1 | 有 | ❌ 空响应 |
| Light 模式 | 5 (~851 tokens) | 有 | ❌ 空响应 |
| Standard 模式 | 10 (~1,605 tokens) | 有 | ❌ 空响应 |
| Full 模式 | 15 (~2,481 tokens) | 有 | ❌ 空响应 |
| All 模式 | 21 (~3,265 tokens) | 有 | ❌ 空响应 |

**结论**：即使只有 1 个工具，也会导致空响应。问题不在工具数量或 token 大小，而在于代理对 `tools` 参数的处理。

### 为什么 Obsidian Bot 正常？

Obsidian Bot 虽然用同样的 GeminiLLM 类，但它的工具调用方式可能不同，或者在某些情况下不传递 `tools` 参数。

## 解决方案

### 方案 1: 禁用工具模式（临时方案）

```bash
# 设置环境变量
export TOOL_MODE=none

# 或修改 .gemini.current.env
echo "TOOL_MODE=none" >> .gemini.current.env

# 重启 Bot
supervisorctl restart slack_bot
```

**优点**：立即可用
**缺点**：失去所有工具能力（无法查询数据、记录日志等）

### 方案 2: 切换到 OpenRouter（推荐）

```bash
# 创建 OpenRouter 配置
cat > .gemini.openrouter.env << 'EOF'
GEMINI_BASE_URL=https://openrouter.ai/api
GEMINI_API_KEY=your-openrouter-api-key
GEMINI_MODEL=google/gemini-flash-1.5-exp
TOOL_MODE=light
EOF

# 切换配置
export GEMINI_CONFIG_PATH=.gemini.openrouter.env

# 重启
supervisorctl restart slack_bot
```

**优点**：
- 完整支持 function calling
- 稳定可靠
- 支持所有 Gemini 模型

**缺点**：需要 OpenRouter API key

### 方案 3: 使用 Google 官方 API

```bash
# 创建官方 API 配置
cat > .gemini.official.env << 'EOF'
# 不设置 GEMINI_BASE_URL，直接用官方 API
GEMINI_API_KEY=your-google-api-key
GEMINI_MODEL=gemini-2.0-flash-exp
TOOL_MODE=standard
EOF

# 切换配置
export GEMINI_CONFIG_PATH=.gemini.official.env

# 重启
supervisorctl restart slack_bot
```

**优点**：
- 原生支持，最稳定
- 性能最优

**缺点**：需要 Google API key，可能有区域限制

### 方案 4: 修复本地代理（长期方案）

检查你的本地代理 (`http://127.0.0.1:8045`) 的实现：

1. 确认它是什么代理软件（gemini-openai-proxy? 自建?）
2. 查看是否有 function calling 支持的配置选项
3. 更新到最新版本
4. 或替换为支持 function calling 的代理

## 当前代码改进

已添加 `tool_mode` 配置支持：

- `TOOL_MODE=none`: 完全禁用工具（纯文本对话）
- `TOOL_MODE=light`: 5 个核心工具（推荐，如果代理支持）
- `TOOL_MODE=standard`: 10 个常用工具
- `TOOL_MODE=full`: 15 个完整工具
- `TOOL_MODE=all`: 21 个所有工具（仅用于测试）

## 推荐行动计划

1. **立即**：设置 `TOOL_MODE=none` 让 Bot 先能响应
2. **短期**：切换到 OpenRouter 或 Google 官方 API
3. **长期**：调查并修复本地代理的 function calling 支持

## 相关文件

- 诊断脚本: `scripts/diagnose_gemini.py`
- 工具分组: `slack_bot/tools/groups.py`
- Dispatcher: `slack_bot/dispatcher.py`
- 配置示例: `.gemini.notools.env`, `.gemini.openrouter.env`
