# Gemini Openai API

> Gemini 模型通过 OpenAI 兼容 API 接入指南。包含：(1) 辅助 API 配置（summary/correction/emotion/vision），(2) extra_body 格式用于控制 thinking，(3) 响应格式处理（markdown 代码块）。当需要将 Gemini 作为辅助模型接入、配置 thinking 参数、或处理 Gemini API 返回格式时使用。

- Skill: `project-n-e-k-o/gemini-openai-api` (Agent Skill)
- Install (CLI): `npx skillmds@latest add project-n-e-k-o/gemini-openai-api`
- Raw SKILL.md: https://api.skillmd.com/api/skills/project-n-e-k-o/gemini-openai-api/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: project-n-e-k-o (https://skillmd.com/u/project-n-e-k-o)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/project-n-e-k-o/gemini-openai-api

---


# Gemini OpenAI 兼容 API 接入

Gemini 提供 OpenAI 兼容端点，可作为辅助 API 使用。

> [!IMPORTANT]
> **memory/ + utils/ 下不要传 `temperature`**。项目级约定：所有走
> `utils.llm_client.create_chat_llm` / `ChatOpenAI` 的调用一律不下发
> `temperature` 字段（默认 `None` = 不写进请求体）。守门见
> `scripts/check_no_temperature.py`。`extra_body`（控制 thinking）/
> `max_completion_tokens` / `timeout` / `max_retries` 这类参数继续按需配置，但
> 不要为了"调风格"再加 `temperature=...`。

## Base URL

```
https://generativelanguage.googleapis.com/v1beta/openai/
```

## 模型配置

| 用途                          | 推荐模型                   |
|-------------------------------|---------------------------|
| Summary / Correction / Vision | `gemini-3-flash-preview`  |
| Emotion Analysis              | `gemini-2.5-flash`        |

## 控制 Thinking

Gemini 2.5+ 模型需要通过 `extra_body` 控制 thinking 行为。

### 禁用 Thinking（用于 gemini-2.5-flash）

```python
extra_body = {
    "extra_body": {
        "google": {
            "thinking_config": {
                "thinking_budget": 0
            }
        }
    }
}
```

### 低级别 Thinking（用于 gemini-3-flash-preview）

```python
extra_body = {
    "extra_body": {
        "google": {
            "thinking_config": {
                "thinking_level": "low",
                "include_thoughts": False
            }
        }
    }
}
```

> [!IMPORTANT]
> extra_body 需要双层嵌套：外层 `"extra_body"` 是传给 OpenAI client 的参数名，内层 `{"google": {...}}` 是 Gemini 的实际配置。

## 响应格式处理

Gemini 可能返回 markdown 代码块包装的 JSON：

```
```json
{"emotion": "happy", "confidence": 0.8}
```
```

处理方法：

```python
if result_text.startswith("```"):
    lines = result_text.split("\n")
    if lines[0].startswith("```"):
        lines = lines[1:]
    if lines and lines[-1].strip() == "```":
        lines = lines[:-1]
    result_text = "\n".join(lines).strip()
```

## 配置文件位置

- `config/api_providers.json` - 添加 gemini 到 `assist_api_providers`
- `config/__init__.py` - 添加 `EXTRA_BODY_GEMINI` 和 `MODELS_EXTRA_BODY_MAP`

### api_providers.json 示例

```json
"gemini": {
  "key": "gemini",
  "name": "Gemini（Google）",
  "description": "Google AI 辅助模型，国内无法使用",
  "openrouter_url": "https://generativelanguage.googleapis.com/v1beta/openai/",
  "summary_model": "gemini-3-flash-preview",
  "correction_model": "gemini-3-flash-preview",
  "emotion_model": "gemini-2.5-flash",
  "vision_model": "gemini-3-flash-preview"
}
```

## 常见问题

### "Unknown name 'google': Cannot find field"

原因：extra_body 格式错误，缺少外层 `"extra_body"` 包装。

解决：使用双层嵌套格式 `{"extra_body": {"google": {...}}}`。

### JSON 解析失败

原因：
1. 响应被截断（token 限制太小）
2. 响应包含 markdown 代码块

解决：
1. 增加 `max_completion_tokens`
2. 添加 markdown 代码块处理逻辑

