OpenCode CLI 与桌面 App 接入 AI Gateway
目标
统一使用 Home-Lab 的 AI Gateway:
OpenCode CLI / OpenCode App
↓
https://ai-internal.onwalk.net/v1
↓
Caddy → New API → CPA / LiteLLM
CLI 与桌面 App 使用同一个 Provider ID、同一个端点和同一套 OpenCode 本地凭据。
非敏感配置
OpenCode 配置文件:
~/.config/opencode/opencode.json
配置只保存端点、模型和超时,不保存真实 API Key:
{
"$schema": "https://opencode.ai/config.json",
"model": "ai-internal/gpt-5.6-luna",
"provider": {
"ai-internal": {
"npm": "@ai-sdk/openai-compatible",
"name": "AI Gateway Home-Lab",
"options": {
"baseURL": "https://ai-internal.onwalk.net/v1",
"timeout": 600000,
"headerTimeout": 120000,
"chunkTimeout": 120000
}
}
}
}
不要在该文件中写入:
- New API 用户 API Key;
- APISIX bootstrap key;
- New API 管理员密码;
- CPA OAuth token。
凭据配置
在本机执行:
opencode auth login ai-internal
输入 New API 用户 API Key。OpenCode 官方凭据存储位置为:
~/.local/share/opencode/auth.json
凭据文件只允许当前用户读取:
chmod 700 ~/.local/share/opencode
chmod 600 ~/.local/share/opencode/auth.json
API Key 只在 New API 的 Keys 页面创建和撤销:
https://ai-internal.onwalk.net/keys
如果 Key 曾经进入聊天、日志、截图或 Git,必须先撤销,再创建新 Key。
CLI 验证
检查凭据是否登记,只输出 Provider 名称:
opencode auth list
列出 Gateway 模型:
opencode models | grep '^ai-internal/'
发送最小推理请求:
opencode run \
--model ai-internal/gpt-5.6-luna \
"Reply exactly: hello"
成功标准:返回模型文本,且没有 Invalid token、401 或上游超时。
桌面 App 验证
- 完全退出 OpenCode App。
- 重新打开 App。
- 新建会话。
- 选择 Provider
AI Gateway Home-Lab。 - 选择
gpt-5.6-luna。 - 发送
hello。
桌面 App 从 Finder 启动时不应依赖 .zshrc 中的环境变量;使用 OpenCode 凭据存储最可靠。
故障判断
command not found: opencode
确认 ~/.local/bin 已加入 PATH:
export PATH="$HOME/.local/bin:$PATH"
rehash
opencode --version
Invalid token
说明请求已经到达 New API,但 OpenCode 使用的 Key 无效、过期或不是 New API 用户 API Key。重新执行:
opencode auth login ai-internal
不要使用 APISIX bootstrap key 或管理员密码。
/v1/models 能访问但推理失败
模型目录只能证明路由和配置可见,不能证明用户凭据和上游账号可用。必须执行一次最小推理请求。
当前验证记录
截至 2026-10-04:
opencode.jsonJSON 语法通过;ai-internalProvider 配置存在;- Base URL 为
https://ai-internal.onwalk.net/v1; - 本地模型目录可加载 22 个
ai-internal/*模型; - OpenCode 凭据登记项存在;
- 最小推理请求仍返回
Invalid token; - 需要撤销暴露过的旧 Key,并在本机重新执行
opencode auth login ai-internal。
完成重新登录后,重新执行 CLI 和桌面 App 两套验证,才能判定端到端可用。