1. 为什么要在终端里折腾 OpenCode 和统一 Key
OpenCode 是一个跑在终端里的开源 AI 编程 Agent,TUI(Terminal User Interface)是它的主战场。你可以在项目根目录敲一行opencode,然后像跟同事对话一样让它读代码、改文件、跑测试。它支持 75+ 家 LLM 提供商,从 OpenAI、Anthropic 到本地 Ollama 都能接,这也是很多人第一次接触它的原因。
但问题也出在这里:提供商太多,配置格式各家不同,Key 散落在环境变量、auth.json、opencode.json里,换一个模型就要重新翻文档。对刚在终端里用 OpenCode 的开发者来说,第一道坎不是写 prompt,而是"我到底该把 Key 填哪儿、填成什么格式"。
这篇是 OpenCode 终端使用手册的上篇,只解决一件事:用 TaoToken 的统一 Key 把 OpenCode 的 TUI 跑通,并交付一份可以直接复制的配置骨架。读完你应该能做到:装好 OpenCode、写好opencode.json、启动 TUI、发一条消息、看到 Agent 正常回话。下篇再讲 Plan/Build 模式、@文件引用、!执行命令这些进阶玩法。
适合谁:第一次在终端用 OpenCode 的人;手里有 TaoToken Key 但不知道怎么接进 OpenCode 的人;被多家 provider 配置格式搞晕、想统一收口的人。
2. TaoToken 前置:拿到统一 Key 和 Base URL
TaoToken 在这里扮演的角色是"统一入口"——你不需要为每个模型单独申请 Key、单独记 Base URL,而是用一套凭证去访问它支持的模型。对 OpenCode 这种要频繁切模型的工具来说,这能省掉大量重复配置。
你需要准备两样东西:
第一是 API Key。登录 TaoToken 控制台,在 API Keys 页面创建一个新 Key,复制出来先存到安全的地方。这个 Key 就是后面配置里apiKey字段的值。
第二是 Base URL。OpenCode 走的是 OpenAI 兼容协议,所以 Base URL 填https://taotoken.net/api即可,注意结尾不要带/v1,OpenCode 的 provider 配置会自己拼路径。这一点很多人第一次会填错,填成https://taotoken.net/api/v1反而会 404。
注意:Key 只显示一次,创建后立刻复制。如果丢了就重新建一个,不要试图找回。
拿到这两样之后,先别急着写配置。建议先用 curl 验证一下 Key 本身是通的,把"Key 问题"和"OpenCode 配置问题"分开排查,后面会省很多时间:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY"如果返回一个模型列表的 JSON,说明 Key 和 Base URL 都没问题。如果返回 401,检查 Key 有没有复制全;返回 404,检查 URL 是不是多写了/v1。
3. 可复制配置:opencode.json 骨架与 Key 注入
OpenCode 的配置分两层:全局配置放在~/.config/opencode/opencode.json,项目级配置放在项目根目录的opencode.json。项目级会覆盖全局,所以推荐把 provider 定义放全局,把模型选择放项目级。
先看全局配置骨架。这里用@ai-sdk/openai-compatible这个 npm 包来对接 TaoToken,因为它是 OpenAI 兼容协议,OpenCode 内置支持:
{ "$schema": "https://opencode.ai/config.json", "provider": { "taotoken": { "npm": "@ai-sdk/openai-compatible", "name": "TaoToken", "options": { "baseURL": "https://taotoken.net/api" }, "models": { "claude-sonnet-4-5": { "name": "Claude Sonnet 4.5" }, "gpt-5": { "name": "GPT-5" }, "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" } } } } }几个关键点解释一下。provider下的 key(这里是taotoken)是你自己起的名字,后面选模型时会用到。npm字段告诉 OpenCode 用哪个 SDK 适配器,OpenAI 兼容协议统一用@ai-sdk/openai-compatible。options.baseURL就是上一步的 Base URL。models里列出你想用的模型 ID,这些 ID 要和 TaoToken 侧支持的模型名一致,写错了会在选模型时报"model not found"。
Key 不要写进这个文件。OpenCode 支持从环境变量读取,推荐在 shell 配置里注入:
export TAOTOKEN_API_KEY="sk-你的key"然后在opencode.json里引用环境变量。OpenCode 的 provider options 支持apiKey字段直接读环境变量名:
{ "$schema": "https://opencode.ai/config.json", "provider": { "taotoken": { "npm": "@ai-sdk/openai-compatible", "name": "TaoToken", "options": { "baseURL": "https://taotoken.net/api", "apiKey": "{env:TAOTOKEN_API_KEY}" }, "models": { "claude-sonnet-4-5": { "name": "Claude Sonnet 4.5" }, "gpt-5": { "name": "GPT-5" } } } } }{env:TAOTOKEN_API_KEY}是 OpenCode 的变量插值语法,运行时会把环境变量的值填进去。这样配置文件可以进 git,Key 留在本地环境里,团队协作时不会泄露。
项目级配置更简单,只指定默认模型:
{ "$schema": "https://opencode.ai/config.json", "model": "taotoken/claude-sonnet-4-5" }model字段的格式是provider名/模型ID,对应上面全局配置里的taotoken和claude-sonnet-4-5。这样进项目直接就是你要的模型,不用每次手动切。
如果你更习惯用config.toml风格(部分 OpenCode 版本支持),等价写法是:
[provider.taotoken] npm = "@ai-sdk/openai-compatible" name = "TaoToken" [provider.taotoken.options] baseURL = "https://taotoken.net/api" apiKey = "{env:TAOTOKEN_API_KEY}" [provider.taotoken.models.claude-sonnet-4-5] name = "Claude Sonnet 4.5"两种格式选一种就行,不要混用。JSON 是官方主推,TOML 在部分发行版里更顺手。
4. 验证请求:启动 TUI 并确认 Agent 连通
配置写完,进项目目录启动:
cd /path/to/your/project opencode第一次启动会看到 TUI 界面,底部状态栏会显示当前模型。如果显示的是taotoken/claude-sonnet-4-5,说明配置读到了。如果显示的是别的模型或者空白,按Ctrl+X松开再按M打开模型列表,手动选一次。
选完模型后,发一条最简单的消息验证连通:
> 你好,请用一句话说明你是什么模型正常情况几秒内会开始流式输出。如果看到回复,说明 Key、Base URL、模型 ID 三者都对上了。这一步是整个接入流程的"最小可用验证",先跑通它再折腾别的。
再验证一下 Agent 的工具调用能力,这是 OpenCode 区别于普通聊天的地方。在项目里发:
> 读一下 @package.json,告诉我这个项目用了哪些依赖@是文件引用语法,OpenCode 会把文件内容塞进上下文。如果 Agent 能正确读出依赖列表,说明工具调用链路也是通的。
实测下来,从零到这一步大概 5 分钟。踩过的坑主要集中在两个地方:Base URL 多写/v1,以及模型 ID 和 TaoToken 侧不一致。这两个问题都会在启动或发消息时报错,错误信息通常比较直白,照着改就行。
5. 本篇常见错排查
报错一:401 Unauthorized
最常见的原因是环境变量没生效。检查方法:在启动 opencode 的同一个终端里执行echo $TAOTOKEN_API_KEY,如果为空,说明export写在了别的 shell 配置里,或者没source。另一个可能是 Key 复制时带了空格或换行,重新复制一次。
报错二:404 Not Found
九成是 Base URL 写错了。正确值是https://taotoken.net/api,不要带/v1,不要带结尾斜杠。OpenCode 的 OpenAI 兼容适配器会自己拼/v1/chat/completions,你多写一层就变成/api/v1/v1/...。
报错三:model not found
模型 ID 和 TaoToken 侧不一致。先去控制台或文档确认可用的模型名,再填进opencode.json的models字段。注意大小写和连字符,claude-sonnet-4-5和claude-sonnet-4.5是两个不同的字符串。
报错四:TUI 启动后模型列表为空
说明 provider 配置没被读到。检查配置文件路径:全局是~/.config/opencode/opencode.json,项目级是项目根目录的opencode.json。JSON 格式错误也会导致整个文件被忽略,用jq . opencode.json验证一下语法。
报错五:能对话但工具调用失败
部分模型对 function calling 支持不完整。换一个明确支持工具调用的模型试试,比如 Claude Sonnet 系列或 GPT 系列。如果换模型后正常,说明是模型能力问题,不是配置问题。
排查顺序建议:先 curl 验证 Key,再验证配置文件语法,再启动 TUI 看模型列表,最后发消息。每一步都确认通过再进下一步,比一次性配完再 debug 快得多。
6. 下一步:把 Key 用起来
到这里,OpenCode 的 TUI 已经能用 TaoToken 的统一 Key 跑起来了。你现在有一个可复制的opencode.json骨架、一套环境变量注入方式、以及五个常见报错的排查路径。
接下来按你的使用场景分流:
如果你主要是在终端里做长期编码、跑 Agent 任务,建议把 TaoToken 的 Coding Plan 用起来,它针对高频编码场景做了额度优化,配合 OpenCode 的 Plan/Build 模式切换会很顺。入口在 https://taotoken.net/api 对应的控制台里,登录后找 Coding Plan 即可。
如果你只是想先验证模型对话是否正常,或者想对比不同模型在同一个 prompt 下的表现,直接用模型对话页面发几条消息最快,不用装任何东西。
如果你要管理多个项目的 Key、或者给团队分配不同权限的 Key,去 API Keys 页面创建和管理,每个 Key 可以单独设额度上限。
接入文档在 https://taotoken.net/api 的文档区,里面有完整的 provider 配置示例和模型列表,遇到本篇没覆盖的报错可以去那里对照。
下篇会讲 OpenCode 的 Plan/Build 模式怎么配合 TaoToken 的模型切换、@文件引用和!命令执行的实际用法,以及怎么用/compact控制长会话的上下文成本。