# opencode (/docs/zh-CN/code-cli/opencode)

[opencode](https://opencode.ai) 通过它标准的 OpenAI 兼容包把 OhMyGPT 接入为 provider。在 `opencode.json` 里加一段配置，opencode 就能用你的 OhMyGPT Key 调用 Claude、GPT、GLM 以及模型列表里的其他模型；整套配置可以先用 `ohmygpt/mock` 免费测试。

## 配置 [#配置]

把 provider 添加到 `~/.config/opencode/opencode.json` 可对所有项目生效；添加到项目根目录的 `opencode.json` 则只对该项目生效：

```json title="~/.config/opencode/opencode.json"
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ohmygpt": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "OhMyGPT",
      "options": {
        "baseURL": "https://api.ohmygpt.com/v1",
        "apiKey": "{env:OHMYGPT_API_KEY}"
      },
      "models": {
        "anthropic/claude-sonnet-5-5": {
          "limit": { "context": 1000000, "output": 128000 }
        },
        "anthropic/claude-haiku-5-5": {
          "limit": { "context": 1000000, "output": 128000 }
        }
      }
    }
  },
  "model": "ohmygpt/anthropic/claude-sonnet-5-5",
  "small_model": "ohmygpt/anthropic/claude-haiku-5-5"
}
```

- `baseURL` 以 `/v1` 结尾，这个包会拼上 `/chat/completions`。
- `{env:OHMYGPT_API_KEY}` 从环境变量读取 Key，配置文件里不存放任何密钥。
- `models` 下的每个键都是一个 OhMyGPT 模型 ID。`limit` 告诉 opencode 何时压缩对话；数值从哪里来，见[选择模型](#选择模型)。
- `model` 和 `small_model` 的格式是 `<provider key>/<model ID>`。opencode 用 `small_model` 处理生成会话标题之类的轻量任务。

导出 Key 并启动 opencode：

```bash
export OHMYGPT_API_KEY="sk-..."
opencode
```

运行 `/models` 可以在你列出的模型之间切换。

## 检查连接 [#检查连接]

opencode 发送的是 Chat Completions 请求。向免费测试模型 `ohmygpt/mock` 发送一个：

```bash
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "ohmygpt/mock", "messages": [{"role": "user", "content": "ping"}]}'
```

```json
{
  "id": "chatcmpl-ohmygpt-mock",
  "object": "chat.completion",
  "model": "mock",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "This is a mock reply from OhMyGPT. Your integration works; switch to a real model when ready."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 15, "completion_tokens": 17, "total_tokens": 32 }
}
```

想免费试用 opencode 本身，在 `models` 下添加 `"ohmygpt/mock": {}`，再用 `/models` 选中它。mock 会调用 opencode 声明的第一个工具，拿到结果后用文本回答。账户完成充值后即可使用 mock 模型。

## 选择模型 [#选择模型]

所有对话模型都能在 opencode 中使用。列出它们，连同要填进 `limit` 的上下文长度和输出长度：

```bash
curl -s https://api.ohmygpt.com/v1/models \
  | jq -r '.data[] | select(.available and any(.protocols[]?; .id == "openai-completions"))
           | "\(.id)\tcontext=\(.context_length)\toutput=\(.limits.max_completion_tokens)"'
```

```text
anthropic/claude-sonnet-5-5	context=1000000	output=128000
openai/gpt-5.5	context=1050000	output=128000
zhipu/glm-5.3	context=1048576	output=131072
...
```

各模型的价格见[模型](https://www.ohmygpt.com/models)页面。

## 问题排查 [#问题排查]

| 现象 | 原因 | 解决办法 |
|---|---|---|
| `401`，提示 `Invalid API key` | 运行 opencode 的 shell 中没有设置 `OHMYGPT_API_KEY`，`{env:...}` 取到的是空值 | 导出该变量并重启 opencode |
| 所有请求都返回 `404` | `baseURL` 缺少 `/v1` | 改为 `https://api.ohmygpt.com/v1` |
| `404`，提示模型不存在 | `models` 下的键不是 OhMyGPT 的模型 ID | 从 `GET /v1/models` 复制 ID |
| `/models` 里没有这个 provider | opencode 没有加载这个文件，或 JSON 格式有误 | 检查文件路径并校验 JSON |
| `402` | 余额或 Key 的消费额度已用完 | 到[账单](https://www.ohmygpt.com/billing)页面充值 |

每个响应都带有 `X-Request-ID` 头，每个请求的费用可以在[用量](https://www.ohmygpt.com/usage)页面查看。
