# AI 复盘与模型配置说明

三个 `crypto_monitor_*` 实例共用仓库根目录 **`ai_client.py`**（通过 `PYTHONPATH=..` 导入）。用于 **交易记录与复盘** 页的 AI 点评、短评建议，以及从复盘截图提取结构化 JSON。

---

## 一、二选一：`AI_PROVIDER`

| 值 | 说明 |
|----|------|
| **`openai`**（默认） | OpenAI 兼容 **Chat Completions** 接口 |
| **`ollama`** | 本机 Ollama **`/api/generate`**（流式 NDJSON） |

在对应子目录 **`.env`** 中设置（各所 `.env.example` 已含模板）：

```bash
AI_PROVIDER=openai
AI_TIMEOUT_SECONDS=120

# OpenAI 兼容网关（默认）
OPENAI_API_BASE=https://op.bz121.com/v1
OPENAI_API_KEY=你的密钥
OPENAI_MODEL=gemma4:e4b

# 本机 Ollama（仅当 AI_PROVIDER=ollama）
OLLAMA_API=http://127.0.0.1:11434/api/generate
AI_MODEL=huihui_ai/deepseek-r1-abliterated:latest
```

### OpenAI 兼容网关

- **Base URL**：`https://op.bz121.com/v1`（请求路径为 `{base}/chat/completions`）。
- **API Key**：在 [op.bz121.com](https://op.bz121.com/) 登录后，于 **`gateway.json`** 页面复制（与网关账号一致）。
- **默认模型**：`gemma4:e4b`（可通过 `OPENAI_MODEL` 覆盖）。

### Ollama

- 需本机已安装并拉取对应模型；`AI_PROVIDER=ollama` 时使用 `OLLAMA_API` 与 `AI_MODEL`。
- 三所 `app.py` **不再** 直连 Ollama；统一走 `ai_client.ai_generate` / `ai_review` / `ai_short_advice`。

---

## 二、部署注意

1. **PM2 / 手工启动**：`ecosystem.config.cjs` 中 **`PYTHONPATH=..`** 必须包含仓库根，否则无法 `from ai_client import ...`。
2. 修改 `.env` 后重启对应实例，例如：`pm2 restart crypto_binance`（名称以你机器为准）。
3. **`git pull`** 不会改 `.env`；若 `.env.example` 新增 AI 变量，请手动补进本机 `.env`。
4. **勿** 将含真实 `OPENAI_API_KEY` 的 `.env` 提交 Git。

---

## 三、功能入口（网页）

登录后进入 **「交易记录与复盘」**：

- 单条记录 **AI 复盘** / **短评**（依赖上述配置）。
- 上传复盘图后 **从图片提取** 字段（内部调用 `ai_generate`，与所选 provider 一致）。

若请求超时或返回错误，请检查：密钥是否有效、网关是否可达、`AI_TIMEOUT_SECONDS` 是否过短、Ollama 是否已启动（仅 ollama 模式）。

---

## 四、相关文件

| 路径 | 说明 |
|------|------|
| `ai_client.py` | 统一封装 OpenAI / Ollama |
| `crypto_monitor_*/.env.example` | 各所环境变量模板 |
| 各所《部署文档.md》§ AI 复盘 | 与本文一致的简表 |
| 各所《使用说明.md》 | 运行前配置中的 AI 项 |
