# OpenCode

> 在 OpenCode 中配置灵眸 API 作为 OpenAI / Anthropic 兼容后端，接入 Claude、Codex、GLM 等模型使用。

URL: https://docs.lmuai.ai/cn/docs/tools/opencode



OpenCode 按照官方文档安装即可，官网有很详细的教程：

* 官方文档：[https://opencode.ai/docs/](https://opencode.ai/docs/)

***

## 配置模型 [#配置模型]

安装完成后，编辑配置文件 `~/.config/opencode/opencode.json`。OpenCode 支持两种协议接入上游服务，选择与你的供应商一致的那种即可。

### 协议选择 [#协议选择]

| 协议           | `npm`               | `baseURL` 写法                       | 适用场景                                          |
| ------------ | ------------------- | ---------------------------------- | --------------------------------------------- |
| OpenAI 协议    | `@ai-sdk/openai`    | 以 `/v1` 结尾，如 `https://xxx.com/v1`  | GPT、Codex 及大多数 OpenAI 兼容服务                    |
| Anthropic 协议 | `@ai-sdk/anthropic` | 也以 `/v1` 结尾，如 `https://xxx.com/v1` | Claude 原生协议、以及声明使用 Anthropic 协议的国产模型（如 GLM 等） |

<Callout type="warn" title="baseURL 容易踩的坑">
  无论 OpenAI 还是 Anthropic 协议，`baseURL` **都需要写到 `/v1` 这一级**。SDK 只会在其后拼接具体端点（如 `/chat/completions` 或 `/messages`），漏掉 `/v1` 时请求会被静默丢弃 —— 表现为模型不报错但返回空内容。
</Callout>

### 示例一：OpenAI 协议 [#示例一openai-协议]

最小可用配置（一个供应商下可以同时配置多个模型）：

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "openai": {
      "options": {
        "baseURL": "https://api.lmuai.ai/v1"
      },
      "models": {
        "gpt-5.5": { "name": "GPT-5.5" },
        "gpt-5.4": { "name": "GPT-5.4" }
      }
    }
  }
}
```

<Callout type="info" title="为什么 provider id 用 `openai`？">
  OpenCode 把 `openai` 作为**内置 provider id** 识别，会自动加载 `@ai-sdk/openai` 并走 `/v1/responses` 端点（支持推理模型的完整能力）。因此接入 OpenAI 协议的服务时，把 provider id 命名为 `openai` 并通过 `baseURL` 指向自己的网关即可，无需手动写 `npm` 字段。
</Callout>

如果需要细化某个模型的能力声明（上下文长度、推理强度变体等），在对应模型条目里追加字段即可：

```json
"gpt-5.5": {
  "name": "GPT-5.5",
  "limit": { "context": 1050000, "output": 128000 },
  "options": { "store": false },
  "variants": { "low": {}, "medium": {}, "high": {}, "xhigh": {} }
}
```

其中 `variants` 定义了可切换的推理强度，运行时在 OpenCode 中按 `Ctrl + T` 切换。

### 示例二：Anthropic 协议（国产模型常见） [#示例二anthropic-协议国产模型常见]

部分国产模型（如 GLM）虽然由国内厂商提供，但其接口遵循的是 **Anthropic 协议**，需要使用 `@ai-sdk/anthropic`：

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "lmuai": {
      "npm": "@ai-sdk/anthropic",
      "name": "lmuai",
      "options": {
        "baseURL": "https://api.lmuai.ai/v1"
      },
      "models": {
        "glm-5.1": {
          "name": "GLM-5.1"
        }
      }
    }
  }
}
```

<Callout type="info" title="如何判断协议类型？">
  查看供应商文档中的请求示例：

  * 端点是 `/v1/chat/completions` → OpenAI 协议
  * 端点是 `/v1/messages`，请求头带 `anthropic-version` → Anthropic 协议
</Callout>

### 示例三：Claude 原生模型 [#示例三claude-原生模型]

如果要接入 **Claude 原生模型**（如 `claude-sonnet-4-6`），provider id 必须使用内置的 `anthropic`，不能自定义名称：

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "anthropic": {
      "npm": "@ai-sdk/anthropic",
      "options": {
        "baseURL": "https://api.lmuai.ai/v1"
      }
    }
  }
}
```

验证：

```bash
opencode run --model anthropic/claude-sonnet-4-6 "你好"
```

<Callout type="warn" title="Claude 模型为什么不能用自定义 provider id？">
  和 `openai` 一样，`anthropic` 是 OpenCode 的**内置 provider id**，OpenCode 在它下面预置了 Claude 全系列模型（`claude-sonnet-4-6` 等）的定义。

  因此 `opencode run --model anthropic/claude-sonnet-4-6 "你好"` 能跑通；但如果把 provider id 改成自定义名（如 `lmuai/claude-sonnet-4-6`），OpenCode 找不到该模型定义，会无法测通。

  一句话：&#x2A;*接 Claude 原生模型用 `anthropic`，接 GLM 等自定义模型才用自定义 provider id（如 `lmuai`）。**
</Callout>

如果你需要同时使用多种协议、多个供应商，把它们都写在 `provider` 下即可，互不影响。例如灵眸同时提供 GPT 系列（`openai`）、Claude 系列（`anthropic`）和 GLM 系列（`lmuai`，Anthropic 协议），三个 provider 可共用一个网关。

***

## 配置密钥 [#配置密钥]

### 方式一：使用命令行（推荐） [#方式一使用命令行推荐]

```bash
# 登录或更新某个供应商的 Key
opencode auth login

# 查看当前已配置的所有供应商和 Key 状态
opencode auth list

# 删除指定供应商的 Key
opencode auth logout <供应商名称>
```

### 方式二：手动编辑配置文件 [#方式二手动编辑配置文件]

在 `~/.local/share/opencode/auth.json` 中添加对应供应商的 API Key：

```json
{
  "供应商名称": {
    "type": "api",
    "key": "你的API密钥"
  }
}
```

<Callout type="warn" title="注意">
  `auth.json` 中的供应商名称必须与 `opencode.json` 中的供应商名称**完全一致**。

  不要把 `apiKey` 写在 `opencode.json` 的 `options` 里 —— OpenCode 不会读取那里的密钥，必须走 `auth.json` 或 `opencode auth login`。
</Callout>

***

## 验证配置 [#验证配置]

配置完成后用一条命令快速验证：

```bash
opencode run --model 供应商名称/模型名 "你好"
```

例如 `opencode run --model lmuai/glm-5.1 "你好"`。能看到正常回复即配置成功。

如果没有任何输出（既不报错也不回复），通常是以下两种问题之一：

1. **baseURL 缺少 `/v1`** —— 见上文「协议选择」段的提示。
2. **密钥未配置在 `auth.json`** —— 检查 `opencode auth list` 是否能看到对应供应商。

需要更多调试信息时加上 `--print-logs --log-level INFO`。

***

## 小技巧 [#小技巧]

在 OpenCode 中按 `Ctrl + T` 可切换不同的推理强度（variants）。
