OpenCode 里 ANTHROPIC_API_KEY 老是连不上?TaoToken 这样改环境变量并填 Base URL

OpenCode 里 ANTHROPIC_API_KEY 老是连不上?TaoToken 这样改环境变量并填 Base URL 在 OpenCode 里配ANTHROPIC_API_KEY总是连不上时先把取 Key 动作换到 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopencode_intro再回来把 OpenCode 的模型通道 Base URL 填成https://taotoken.net/api。很多读者在阶段 3.1 已经按brew install sst/tap/opencode或npm install -g opencode-ailatest装好了 OpenCode也把export ANTHROPIC_API_KEYsk-ant-...敲进了 shell但启动opencode后模型那头仍然报连接失败、401、超时或 model not found。表现看起来像 OpenCode 不会工作实际上是模型凭证与 Base URL 这条通道没配对。OpenCode 自己负责file_read、file_edit、command、pytest这些工具调用TaoToken 只出现在取 Key 和填 Base URL 的位置不介入 Agent 的工具循环也不替它修改calculator.py。本文按排障视角把这段配置重写一遍目标很明确让 OpenCode 重新跑起“思考、行动、观察”的循环最后在test_calculator.py里看到2 passed和正常的 Finish。1. 原问题与场景OpenCode 的 Agent 循环卡在模型凭据阶段 3.1 的实验目标是观察代码 Agent 的自主工作。你已经有一个项目目录里面放着故意留下除零 bug 的calculator.pydef divide(a, b): return a / b然后在终端里进入项目cd your-project-folder opencode输入类似这样的任务检查 calculator.py 文件找到潜在的 bug 并修复然后运行测试验证修复是否成功如果模型通道正常OpenCode 会先读取calculator.py分析出b0时会出现ZeroDivisionError然后调用file_edit添加判断再通过command执行pytest test_calculator.py -v最后看到测试通过并给出 Finish。整个过程里你重点观察的是 Agent 如何自主分解步骤、如何选择工具、如何根据 Observation 继续下一步。但现实里最常见的卡点发生在第一步之前OpenCode 已经启动模型请求却发不出去。你可能看到的是Error: failed to connect to provider 401 Unauthorized model not found request timeout这时不要先去怀疑 OpenCode 的file_read或file_edit工具也不要急着改calculator.py。因为 OpenCode 的工具层还没被触发Agent 的 Thought 还没真正跑起来。问题通常集中在三个位置ANTHROPIC_API_KEY是否有效、ANTHROPIC_BASE_URL是否指向正确地址、OpenCode 实际读取的是环境变量还是配置文件。阶段 3.1 原文给的是export ANTHROPIC_API_KEYsk-ant-...或export OPENAI_API_KEYsk-...这一步本身只是起点。要让它真正连上模型需要把 Key 来源和 Base URL 一起改对。2. TaoToken 前置先创建 Key再确认 OpenCode 要用的模型通道先把旧思路里的“直接填一个 Anthropic Key”改成“去 TaoToken 创建一个用于 OpenCode 的 Key”。打开 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopencode_intro注册后进入控制台创建 API Key。创建完成后你会得到一把形如YOUR_API_KEY的凭证。本文示例统一写成KeyYOUR_API_KEY真正填进 OpenCode 时把YOUR_API_KEY替换成你刚创建的那把 Key。接下来确认 OpenCode 使用的模型通道地址。Anthropic 协议下Base URL 填https://taotoken.net/api注意结尾不要带/v1。Anthropic SDK 或 OpenCode 内部会自己拼接/v1/messages之类的路径。如果你把 Base URL 写成https://taotoken.net/api/v1后面很容易变成重复路径导致请求地址错误。API 地址本身是https://taotoken.net/api不需要 UTM 参数。如果你使用 OpenAI 兼容通道则对应的是OPENAI_BASE_URLhttps://taotoken.net/api同样不要手动加/v1。OpenCode 支持 Anthropic 风格时优先按标题里的ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL来配。TaoToken 在这一步只负责提供 Key 和模型请求入口OpenCode 后续怎么读文件、怎么改文件、怎么跑pytest仍然由 OpenCode 自己的 Agent 逻辑决定。也就是说file_read: calculator.py、file_edit: calculator.py、command: pytest test_calculator.py -v这些动作不属于 TaoToken 的职责范围不要混在一起排查。创建 Key 和查看接入说明可以走这两个入口API Keyshttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_api_keys接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_doc先把 Key 拿到手再进入下面的可复制配置。这样能避免在 shell 里反复改export却不知道 Key 本身是否可用。3. 可复制配置改 ANTHROPIC_API_KEY 和 Base URL别在 /v1 上踩坑下面给出两种配置方式。第一种是环境变量适合临时验证和终端启动 OpenCode。第二种是 OpenCode 配置文件适合长期使用。两者选择一种即可不要同时用两套不同 Key 互相覆盖。3.1 环境变量方式在 macOS 的 zsh 或 Linux 的 bash 中执行# 当前 shell 临时生效 export ANTHROPIC_API_KEYYOUR_API_KEY export ANTHROPIC_BASE_URLhttps://taotoken.net/api如果 OpenCode 走 OpenAI 兼容通道则改成export OPENAI_API_KEYYOUR_API_KEY export OPENAI_BASE_URLhttps://taotoken.net/api确认变量已经进入当前终端echo $ANTHROPIC_API_KEY echo $ANTHROPIC_BASE_URL期望输出类似YOUR_API_KEY https://taotoken.net/api如果ANTHROPIC_BASE_URL输出是空或者末尾多了/v1先改回来。然后从同一个终端启动 OpenCodecd your-project-folder opencode如果你希望每次新开终端都生效把这两行写入~/.zshrc或~/.bashrcexport ANTHROPIC_API_KEYYOUR_API_KEY export ANTHROPIC_BASE_URLhttps://taotoken.net/api再执行source ~/.zshrc或者source ~/.bashrc注意只把变量写进配置文件但没有source当前终端仍然读不到。只在一个终端里export另一个终端启动opencode也一样读不到。3.2 OpenCode 配置文件方式不同版本的 OpenCode 配置字段可能略有差异常见全局位置是~/.config/opencode/opencode.json。如果你的版本使用config.json把同样字段写进对应文件即可。示例{ $schema: https://opencode.ai/config.json, provider: { anthropic: { options: { apiKey: YOUR_API_KEY, baseURL: https://taotoken.net/api } } } }如果 OpenCode 在项目根目录读取opencode.json也可以把同样内容放到项目里。保存后先检查 JSON 是否合法再重新启动opencode。如果你同时使用 Claude Code要区分清楚Claude Code 那边常见配置是settings.json环境变量也围绕ANTHROPIC_*本篇是 OpenCode不要把 Claude Code 的settings.json直接当成 OpenCode 配置。配置完成后OpenCode 启动时应该能选中 Anthropic 通道。如果仍然报错先用下一节的验证请求确认 Key 和 Base URL 是否能通再回来看 OpenCode 的 provider 选择。4. 验证请求让 OpenCode 修 calculator.py 并跑 test_calculator.py配置改完后不要只问一句“你好”就结束。回到阶段 3.1 的真实实验用calculator.py的除零 bug 来验证模型通道和 Agent 循环是否都恢复正常。先准备两个文件# calculator.py def divide(a, b): return a / b# test_calculator.py import pytest from calculator import divide def test_divide_normal(): assert divide(10, 2) 5 def test_divide_by_zero(): with pytest.raises(ValueError, match除数不能为零): divide(10, 0)进入项目目录cd your-project-folder opencode在 OpenCode 中输入检查 calculator.py 文件找到潜在的 bug 并修复然后运行测试验证修复是否成功正常情况下的观察路径应该是Agent 先分析任务决定读取calculator.py。工具调用出现file_read: calculator.py。观察结果后Agent 判断b0没有处理准备修改。工具调用出现file_edit: calculator.py在divide函数里补上b 0的判断。Agent 创建或更新test_calculator.py。工具调用出现command: pytest test_calculator.py -v。Observation 出现测试结果例如2 passed in 0.03s。Agent 给出 Finish说明除零 bug 已修复并验证成功。你重点看两个信号。第一模型请求不再报 401、timeout 或 model not found。第二OpenCode 真的调用了file_read、file_edit、command而不是只回一段纯文本建议。只要这两个信号出现说明ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL这条模型通道已经通了Agent 的“思考、行动、观察”循环也转起来了。如果你想单独确认 Base URL 能通可以用 curl 做一个最小请求。Base URL 仍然填写https://taotoken.net/apicurl 里使用完整路径curl -sS https://taotoken.net/api/v1/messages \ -H x-api-key: $ANTHROPIC_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: MODEL_ID, max_tokens: 32, messages: [ {role: user, content: ping} ] }如果返回 200 和一段 JSON 内容说明 Key 与模型入口基本可用。如果返回 401优先检查 Key如果返回 404优先检查 Base URL 和模型 ID如果超时检查当前网络和代理环境变量而不是继续改calculator.py。5. 本篇常见错排查ANTHROPIC_API_KEY、Base URL、shell 与 OpenCode 配置这一节的报错都围绕 OpenCode 模型连接不涉及 OpenCode 内部工具逻辑。按顺序排查能较快定位。第一Key 没有替换。很多配置示例里写着sk-ant-...或YOUR_API_KEY读者直接复制后没有换成 TaoToken 控制台创建的那把 Key。命令echo $ANTHROPIC_API_KEY如果输出还是YOUR_API_KEY重新填。第二Base URL 多写了/v1。正确写法是https://taotoken.net/api错误写法是https://taotoken.net/api/v1因为 SDK 会自己拼/v1/messages你多写一层就会变成重复路径。检查命令echo $ANTHROPIC_BASE_URL第三环境变量只在当前终端有效。你在一个终端里export却在另一个终端或 IDE 内置终端里启动opencode它读不到。解决办法是在启动opencode的同一个终端里先echo确认或者把变量写入~/.zshrc/~/.bashrc后source。第四配置文件覆盖了环境变量。如果你在~/.config/opencode/opencode.json里写了空的apiKeyOpenCode 可能优先读配置文件导致 shell 里的ANTHROPIC_API_KEY不生效。检查配置文件里的apiKey和baseURL是否与当前 Key 一致。第五同时设置了ANTHROPIC_API_KEY和OPENAI_API_KEY。OpenCode 可能选错 provider。排障时先只保留一条通道比如只用 Anthropic 协议把 OpenAI 相关变量临时注释掉。检查env | grep -E ANTHROPIC|OPENAI|OPENCODE第六模型 ID 不可用。Base URL 通了不代表你填的模型一定在通道里可用。回到 OpenCode 的模型选择切到当前 Key 支持的模型 ID。如果你在 curl 里写MODEL_ID也要换成实际模型名。第七旧版 OpenCode 字段不兼容。不同版本的 OpenCode 对provider、options、baseURL字段支持程度不同。建议查看接入文档中的 OpenCode 或 Anthropic 兼容说明不要直接套用其他编辑器的配置字段。第八代理变量冲突。检查HTTPS_PROXY、HTTP_PROXY、ALL_PROXY是否指向了不可用地址。如果这些变量存在OpenCode 的模型请求可能被带到错误出口。临时清理后再启动unset HTTPS_PROXY unset HTTP_PROXY unset ALL_PROXY第九修改后没有重启 OpenCode。环境变量和配置文件改动后退出当前opencode进程重新进入项目目录再启动。不要在一个已经报错的会话里反复重试。第十把模型连接错误误判为工具错误。如果日志里还没有file_read、file_edit、command说明 Agent 还没进入工具调用阶段。此时不要改calculator.py的测试逻辑先回到ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL。6. 语义一致 CTA拿 Key、看接入文档、回到阶段 3.1 观察 Agent 循环现在回到最初那一步不要在 shell 里随手塞一个来路不明的 Anthropic Key而是先打开 TaoToken 官网注册并创建 Key再把 OpenCode 的模型通道 Base URL 填为https://taotoken.net/api。创建 Key 的入口在这里https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_api_keys接入写法、环境变量和配置文件字段可以看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_doc如果你想先验证模型通道是否正常可以到模型对话里发一条短消息测试https://taotoken.net/model?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_model如果你准备长期用 OpenCode 跑代码 Agent观察更多file_read、file_edit、command、pytest循环可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_contentopencode_coding_plan拿到 Key 后回到阶段 3.1 的项目目录重新启动opencode让 Agent 再检查一次calculator.py补上b0的判断运行test_calculator.py。当你看到2 passed并且 Agent 正常 Finish就说明这次不是 OpenCode 工具层的问题而是ANTHROPIC_API_KEY和 Base URL 这条模型通道已经按正确方式接好了。