配置自定义 API BaseURL
很多开发者使用 OneAPI、NewAPI 等中转分发平台来管理多个 AI 模型的 API Key,或者使用企业内部部署的 LLM 服务。这些服务通常提供与 OpenAI 兼容的接口,但需要自定义 API 的 baseURL。
本文将介绍如何在 OpenCode 中配置自定义 baseURL,以解决 Issue #8122↗ 中提到的问题。
# 为什么要自定义 BaseURL?#
- 统一管理:通过中转平台(如 OneAPI)管理所有模型的 Key,OpenCode 中只需配置一个端点。
- 成本控制:使用按量付费的中转服务,通常比直接绑定信用卡更灵活。
- 访问加速:使用国内中转节点加速 API 访问,解决网络连接问题。
- 私有部署:连接到本地或内网部署的 vLLM、Ollama 等兼容 OpenAI 接口的服务。
# 配置步骤#
OpenCode 的配置文件通常位于 ~/.config/opencode/opencode.json(全局)或项目根目录下的 opencode.json(项目级)。
你需要使用 provider 字段来定义一个新的提供商,或者覆盖现有的提供商配置。
## 方法一:覆盖现有提供商(推荐)#
如果你只是想把 OpenCode 默认的 openai 提供商指向你的中转地址:
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "provider": { 4 "openai": { 5 "options": { 6 "baseURL": "https://api.your-custom-domain.com/v1", 7 "apiKey": "sk-your-oneapi-key" 8 } 9 } 10 } 11}
## 方法二:添加自定义提供商#
如果你想保留官方 OpenAI 配置,同时添加自定义渠道,可以根据接口兼容性选择以下配置。
1. OpenAI 兼容接口(OneAPI/NewAPI 等)
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "provider": { 4 "myapi": { 5 "npm": "@ai-sdk/openai-compatible", 6 "name": "My Custom API", 7 "options": { 8 "baseURL": "https://api.your-custom-domain.com/v1", 9 "apiKey": "sk-your-oneapi-key" 10 }, 11 "models": { 12 "gpt-4o": { 13 "name": "GPT-4o (OneAPI)" 14 }, 15 "claude-3-5-sonnet-20240620": { 16 "name": "Claude 3.5 Sonnet" 17 } 18 } 19 } 20 } 21}
2. Claude 兼容接口
如果你使用的是原生支持 Anthropic 协议的接口:
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "provider": { 4 "myclaude": { 5 "npm": "@ai-sdk/anthropic", 6 "name": "My Claude API", 7 "options": { 8 "baseURL": "https://api.your-custom-domain.com/v1", 9 "apiKey": "sk-ant-your-key" 10 }, 11 "models": { 12 "claude-3-5-sonnet-20240620": { 13 "name": "Claude 3.5 Sonnet" 14 } 15 } 16 } 17 } 18}
配置完成后,运行 opencode,你就可以在模型列表中选择 My Custom API 下的模型了。
# 参数说明#
npm: 对于 OpenAI 兼容接口设置为@ai-sdk/openai-compatible;对于 Claude 兼容接口设置为@ai-sdk/anthropic。baseURL: 你的中转 API 地址。注意: 通常需要包含/v1后缀(取决于你的中转服务实现,OneAPI 通常需要)。apiKey: 你的中转平台令牌。也可以通过环境变量(如{env:MY_API_KEY})设置以保密。models: 你想在该提供商下使用的模型列表。Key 是模型 ID(传给 API 的),Value 是配置对象。
# 相关阅读#
- OpenCode 中文支持指南:了解如何设置 AI 回复语言及界面汉化情况。