用 opencode + skill 搭建自己的 AI 应用:TaoToken 统一 Key 配置实战
1. 从一次真实的密钥混乱说起如果你正在用 opencode 配合 skill 搭建自己的 AI 应用大概率会遇到这样一个场景opencode 里配了一个模型 Key写代码的编辑器插件里配了另一个跑 Agent 脚本时又得再填一遍。三个地方三套密钥改一次要同步三处漏一处就报 401。更麻烦的是skill 目录下的工具脚本往往直接读环境变量而 opencode 的配置文件又是另一套格式两边对不上就开始怀疑人生。opencode 是一个终端里的 AI 编码助手支持通过 skill 机制扩展能力比如读 PDF、查数据库、调外部 API。skill 本质上是一组带描述文件的脚本或提示词包opencode 启动时会扫描.opencode/skills目录自动识别并加载。适合谁用适合想把 AI 能力嵌进自己工作流的本地开发者尤其是需要多工具切换、又不想每个工具单独维护密钥的人。TaoToken 在这里扮演的角色是统一 Key 层。它提供一个兼容 OpenAI 风格的 API 入口你只需要在 TaoToken 控制台生成一个 Key就能在 opencode、skill 脚本、以及后续其他工具里复用同一个凭证。这样做的直接好处是换模型、换工具时不用重新申请 Key也不用在多个配置文件之间来回粘贴。下面我会从零走一遍配置到跑通的最小闭环包括 opencode 安装、skill 放置、TaoToken Key 写入、以及一次真实的调用验证。2. TaoToken 前置拿到统一 Key 并理解接入点在动手改 opencode 配置之前先把 TaoToken 这边的准备工作做完。你需要一个可用的 Key以及确认 API 入口地址。整个过程不复杂但有几个细节容易踩坑。2.1 注册与生成 API Key打开 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content完成账号注册后进入控制台。控制台里找到 API Keys 页面路径是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。点击创建新 Key复制出来保存好。这个 Key 就是后面 opencode 和 skill 脚本共用的凭证。注意Key 只在创建时完整显示一次关掉页面就看不到了。建议直接存进密码管理器或者临时写进本地.env文件并加入.gitignore。2.2 确认 API 入口地址TaoToken 的 API 基础地址是https://taotoken.net/api这个地址不加任何查询参数。opencode 配置里填的baseURL就是它。如果你用的是 OpenAI 兼容的 SDK通常还需要在末尾补/v1但 opencode 的 provider 配置有自己的处理方式下面会具体写。2.3 为什么不在 opencode 里直接填原始厂商 Key有人会问我直接用某家模型的 Key 不行吗行但当你同时用 opencode、skill 脚本、以及另一个本地工具时每个工具都要单独配一次而且不同厂商的 Key 格式、额度、限流策略都不一样。TaoToken 统一 Key 的价值在于一个 Key 对应多个模型opencode 和 skill 脚本读同一个环境变量切换模型时只改配置里的模型名不动 Key。对于本地开发和多工具切换场景这能省掉大量重复劳动。3. 可复制配置opencode skill TaoToken 骨架这一章是核心操作部分。我会按 macOS 和 Windows 分别给出安装命令然后给出 opencode 的配置文件骨架最后说明 skill 目录怎么放。3.1 opencode 安装macOS 与 WindowsmacOS 下安装 opencode官方推荐用安装脚本。打开终端执行curl -fsSL https://opencode.ai/install | bash安装完成后如果当前终端直接敲opencode提示找不到命令先执行一次source ~/.zshrc然后再运行opencode就能打开了。这一步在 excerpt 里也提到过原因是安装脚本把可执行文件路径写进了.zshrc但当前 shell 还没重新加载。Windows 下需要先有 npm。装好 Node.js 后用 npm 全局安装npm i -g opencode-ai安装完成后终端会显示版本信息直接输入opencode即可启动。Windows 下如果提示权限问题用管理员身份打开终端再执行一次。3.2 opencode 配置文件骨架opencode 的配置可以放在项目目录下的.opencode文件夹里也可以放在全局配置目录。为了跟 skill 目录保持一致我建议在项目根目录建.opencode文件夹里面放config.json和skills子目录。下面是一个可复制的config.json骨架重点是 provider 部分指向 TaoToken{ provider: { taotoken: { type: openai, baseURL: https://taotoken.net/api, apiKey: {env:TAOTOKEN_API_KEY}, models: { default: { name: claude-sonnet-4-20250514, maxTokens: 8192 } } } }, defaultModel: taotoken/default, language: zh-CN }这里有几个关键点。type填openai表示走 OpenAI 兼容协议baseURL填 TaoToken 的 API 地址apiKey用{env:TAOTOKEN_API_KEY}表示从环境变量读取这样 Key 不会硬编码进配置文件。defaultModel指向taotoken/default对应上面 models 里定义的 default 模型。然后在你的 shell 配置文件里导出环境变量export TAOTOKEN_API_KEY你的TaoToken KeymacOS 写进~/.zshrcWindows 可以用系统环境变量界面添加或者 PowerShell 里$env:TAOTOKEN_API_KEY你的Key。改完记得source ~/.zshrc或重开终端。3.3 skill 目录放置与自动识别skill 的来源是https://github.com/anthropics/skills/tree/main。把仓库里的 skills 文件夹下载下来放到项目目录的.opencode/skills下。目录结构大概是这样your-project/ ├── .opencode/ │ ├── config.json │ └── skills/ │ ├── pdf-reader/ │ │ └── SKILL.md │ └── another-skill/ │ └── SKILL.md └── your-code/opencode 启动时会自动扫描.opencode/skills下的每个子目录读取其中的SKILL.md描述文件识别出可用 skill。你可以在 opencode 会话里输入检测命令让它列出当前目录下识别到的 skill。如果 skill 没被识别先确认目录层级对不对SKILL.md文件名大小写是否匹配。3.4 全局中文规则opencode 默认可能用英文回复。你可以在.opencode下建一个全局规则文件或者在配置里加language: zh-CN。更稳妥的做法是创建一个规则文件内容写明“始终用中文回复”。新建会话后用/new验证规则是否生效如果还是英文检查规则文件路径是否在 opencode 的扫描范围内。4. 验证请求一次真实调用跑通闭环配置写完不算完得实际发一次请求确认链路通。这一章演示两个验证动作一个是在 opencode 里直接对话另一个是用 curl 直接打 TaoToken API确认 Key 和地址没问题。4.1 在 opencode 里发起对话启动 opencodeopencode进入会话后用/connect选择模型。如果你已经在 config.json 里配好了 TaoToken provider这里应该能看到taotoken/default选项。选中后 opencode 会读取环境变量里的 Key 完成认证。然后输入一句测试用中文回复请列出当前目录下识别到的 skill 名称如果配置正确opencode 会返回中文回复并列出.opencode/skills下的 skill。这一步同时验证了三件事Key 有效、baseURL 可达、skill 扫描正常。4.2 用 curl 直接验证 API 入口有时候 opencode 报错你分不清是配置问题还是 Key 问题。这时候用 curl 直接打 TaoToken API 最干脆curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复ok}], max_tokens: 16 }如果返回 JSON 里choices[0].message.content包含ok说明 Key 和 API 地址都没问题。如果返回 401检查 Key 是否复制完整、环境变量是否导出。如果返回 404检查 baseURL 是否写成了https://taotoken.net/api而不是带/v1的完整路径——opencode 的 provider 会自动补/v1但 curl 手动测试时需要自己补。4.3 验证 skill 实际执行skill 识别出来之后试一个具体功能。比如 pdf-reader skill在 opencode 会话里输入读取 ./docs/sample.pdf 并总结内容opencode 会调用对应的 skill 脚本脚本内部如果也需要调模型同样读TAOTOKEN_API_KEY环境变量。这样 opencode 主会话和 skill 脚本共用同一个 Key不需要额外配置。实测下来这条链路跑通之后后续加新 skill 只需要往.opencode/skills里丢文件夹Key 层面不用再动。5. 本篇常见错排查配置过程中最容易卡住的几个点我按报错现象整理成排查清单。5.1 opencode 命令找不到macOS 下安装完直接敲opencode提示command not found原因是.zshrc还没重新加载。执行source ~/.zshrc即可。如果还不行检查安装脚本是否把路径写进了.zshrc可以用cat ~/.zshrc | grep opencode确认。Windows 下 npm 全局安装后找不到命令通常是 npm 全局 bin 目录不在 PATH 里用npm config get prefix查看路径手动加进系统环境变量。5.2 401 认证失败opencode 里对话报 401先确认环境变量是否在当前 shell 生效。用echo $TAOTOKEN_API_KEY看有没有输出。如果没有说明.zshrc改了但没 source或者 Key 写错了。另一个常见原因是 config.json 里apiKey字段写成了明文但带了多余空格或者{env:TAOTOKEN_API_KEY}拼写错误。建议先用第 4.2 节的 curl 命令单独验证 Key排除 opencode 配置干扰。5.3 skill 未被识别opencode 启动后检测不到 skill按顺序检查.opencode/skills目录是否存在每个 skill 子目录下是否有SKILL.md文件名大小写是否匹配Linux 和 macOS 默认大小写敏感SKILL.md里的描述格式是否符合要求。如果 skill 是从 GitHub 下载的注意解压后可能多了一层目录比如skills-main/pdf-reader需要把pdf-reader直接放到.opencode/skills下而不是保留skills-main这层。5.4 模型名不匹配config.json 里models.default.name填的模型名必须和 TaoToken 支持的模型名一致。如果填了一个不存在的模型名请求会返回模型不存在错误。解决方法是去 TaoToken 的模型列表页面确认可用模型名或者先用 curl 测试模型名是否有效。opencode 里/connect选模型时如果看不到预期选项检查 config.json 的 JSON 格式是否合法可以用python -m json.tool config.json验证。5.5 中文规则不生效建了全局规则文件但 opencode 还是英文回复检查规则文件是否放在 opencode 会扫描的目录。不同版本的 opencode 对规则文件路径要求可能不同稳妥做法是同时在 config.json 里设language: zh-CN并在会话里用/new新建会话测试。如果规则文件内容太长opencode 可能截断建议规则写简短明确。6. 把 Key 统一之后的工作流走到这里你已经完成了从 TaoToken 拿 Key、写 opencode 配置、放 skill、到实际调用验证的完整闭环。后续如果要加新的 skill只需要往.opencode/skills里放文件夹如果要换模型改 config.json 里的模型名如果要换工具新工具读同一个TAOTOKEN_API_KEY环境变量即可。Key 层面的维护成本被压到一次配置。如果你在排障过程中需要重新生成 Key 或查看用量直接去 API Keys 页面操作https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里面有各语言 SDK 的接入示例。想先验证模型对话是否正常可以用模型对话页面https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite。如果你打算长期用 opencode 跑编码任务或 AgentCoding Plan 页面有更详细的配置说明https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。一个实用技巧把.opencode/config.json里的apiKey字段始终写成{env:TAOTOKEN_API_KEY}永远不要硬编码。这样配置文件可以安全地提交到 Git团队里每个人用自己的环境变量互不干扰。skill 脚本里读 Key 也统一用process.env.TAOTOKEN_API_KEY或os.environ.get(TAOTOKEN_API_KEY)保持单一来源。