---
name: ocr_client_initialization
description: 当 OCRClient/OpenAI 初始化报错、WebTerminal 创建失败、或升级 openai 包时，应该索引本记忆
---

# OCRClient 初始化与 OpenAI 包兼容性

## 问题

`modules/ocr_client.py` 在 `__init__` 中直接创建 `OpenAI(api_key=OCR_API_KEY)`。

- `openai` 包较新版本（>= 2.40）在 `api_key` 为空时会抛出 `openai.OpenAIError: Missing credentials`
- 服务器 settings.json 通常未配置 `OCR_API_KEY`
- 这会导致 `WebTerminal`/`MainTerminal` 初始化失败，所有依赖 terminal 的 API 都返回 500

## 修复

在 `OCRClient.__init__` 中，仅在 `OCR_API_KEY` 存在时才创建 `OpenAI` 客户端：

```python
self.client = None
if OCR_API_KEY:
    self.client = OpenAI(
        api_key=OCR_API_KEY,
        base_url=base_url or None,
        http_client=self.http_client,
    )
```

在 `vlm_analyze` 中同时检查 `self.client`：

```python
if not self.client or not OCR_API_KEY or not OCR_API_BASE_URL or not self.model:
    return {"success": False, "error": "VLM 配置缺失，请设置 OCR_API_BASE_URL / OCR_API_KEY / OCR_MODEL_ID", "warnings": warnings}
```

## 教训

- 升级依赖包后要检查破坏性变更
- 可选功能（OCR/VLM）的客户端初始化不应阻塞主终端启动
- 服务器环境缺少某个 API key 时，应优雅降级而不是直接崩溃
