1. 为什么要在终端里跑一个六爻算卦 Skill
opencode 是一个跑在终端里的 AI 编程助手,它能读文件、改代码、执行命令,本身不带任何"算命"能力。Skill 是它的扩展机制,你可以把它理解成给 opencode 装的小程序:装上一个 Skill,它就多一种本领。六爻算卦 Skill 干的事情很具体——你告诉它想问什么,它调用排盘脚本把卦画出来,标上干支、六亲、世应,再让模型按一套固定方法论写一段白话解读,最后把结果存进 records 目录。
这套组合的价值在于分工明确。排盘是死规则,纳甲、装卦、定世应、找旬空,程序算得绝对准,不该让模型去心算;解读需要经验和语言组织,交给模型按方法论说人话。两边一配合,你只管开口问,中间那些容易出错的步骤全被脚本接管了。
适合谁?三类人。第一类是想在终端里跑通自定义 Skill 的开发者,六爻这个例子足够小,目录结构、SKILL.md 写法、调用链路都能看清。第二类是对传统文化排盘感兴趣、又不想手动画卦的人。第三类是已经在用 opencode 写代码,想顺手把模型接入统一到一个网关上的用户——这篇会把本地配置改到 TaoToken 的完整链路写清楚,包括 Base URL、API Key、Model ID 三件套怎么填。
我试过把这套流程从零走一遍,踩的坑主要集中在两处:Skill 目录放错位置导致模型说"我没有这个能力",以及模型接入点没配对导致请求直接 401。下面按顺序拆开讲,每一步都给可复制的配置和命令。
2. 前置准备:opencode 安装与 TaoToken 接入点配置
opencode 的安装方式有三种,官方一键脚本、npm 全局安装、桌面版。终端用户推荐前两种,Windows 用户如果不想折腾 WSL2,直接用桌面版也不影响后面装 Skill。
一键脚本:
curl -fsSL https://opencode.ai/install | bashnpm 方式:
npm install -g @opencode-ai/cli装完验证:
opencode --version能蹦出版本号就说明二进制在 PATH 里了。接下来是接入点配置,这一步决定了 opencode 背后调的是哪个模型服务。opencode 支持在项目级或用户级配置文件里指定 provider,我们把它指向 TaoToken 的 API 地址。
TaoToken 的 API 入口是https://taotoken.net/api,兼容 OpenAI 风格的请求格式。你需要在控制台创建一个 API Key,然后写进 opencode 的配置。配置文件位置按平台区分:macOS/Linux 在~/.config/opencode/opencode.json,Windows 在%APPDATA%\opencode\opencode.json,项目级则放在项目根目录的.opencode/opencode.json。
一个最小可用的配置片段长这样:
{ "$schema": "https://opencode.ai/config.json", "provider": { "taotoken": { "npm": "@ai-sdk/openai-compatible", "name": "TaoToken", "options": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥" }, "models": { "claude-sonnet-4-5": { "name": "Claude Sonnet 4.5" }, "gpt-4o": { "name": "GPT-4o" } } } }, "model": "taotoken/claude-sonnet-4-5" }这里三件套要对应上:Base URL 是https://taotoken.net/api,API Key 从控制台的 API Keys 页面拿,Model ID 填你实际要用的模型标识。opencode 的 provider 机制要求npm字段指定适配器包,OpenAI 兼容接口统一用@ai-sdk/openai-compatible。
如果你更习惯用环境变量而不是把 Key 写进文件,可以改成:
"options": { "baseURL": "https://taotoken.net/api", "apiKey": "{env:TAOTOKEN_API_KEY}" }然后在 shell 里 export:
export TAOTOKEN_API_KEY="sk-你的密钥"这样配置文件可以进版本库,Key 留在本地环境里。配置写完后启动 opencode,它会读取model字段指定的默认模型。想临时切换模型,在会话里用/models命令选。
有一点要注意:opencode 的配置 schema 会随版本更新,字段名偶尔有调整。如果启动时报 schema 校验错误,去文档页对一下当前版本的字段定义,别死抄旧配置。
3. 可复制配置:Skill 目录结构与 SKILL.md 写法
Skill 的加载靠目录约定,opencode 会在项目里扫描.opencode/skills/下的子目录,每个子目录代表一个 Skill,目录里必须有SKILL.md。这个文件是 Skill 的说明书,模型靠它判断"什么时候该用这个技能、怎么调用"。
先拿六爻 Skill 的源码:
git clone https://github.com/stFloat/liuyao-skill.git克隆下来会得到一个liuyao-skill文件夹,里面有个liuyao-najia子目录,这才是真正的 Skill 本体。把它整个复制到项目的 skills 目录下:
mkdir -p .opencode/skills cp -r liuyao-skill/liuyao-najia .opencode/skills/最终目录结构应该是:
你的项目/ ├── .opencode/ │ ├── opencode.json │ └── skills/ │ └── liuyao-najia/ │ ├── SKILL.md │ ├── scripts/ │ │ └── najia.py │ └── records/SKILL.md里的 frontmatter 决定了 Skill 的元信息,典型写法:
--- name: liuyao-najia description: 六爻纳甲排盘与解读。当用户要求起卦、排盘、问财运事业感情,或提供爻值序列要求解读时使用。 --- # 六爻纳甲 ## 使用方式 用户提出起卦请求时,调用 scripts/najia.py 生成卦盘, 再按方法论输出解读,最后将结果写入 records/ 目录。 ## 参数 - 爻值:六个数字,取值 6/7/8/9,从初爻到上爻 - 日期:可选,默认今天 - 问题:用户所问之事description字段很关键,模型靠它做技能路由。写得太泛会导致该触发时不触发,写得太窄又会误触发。六爻这个场景,把"起卦、排盘、财运、事业、感情、爻值"这些触发词都列进去比较稳。
如果你不想手动 clone,也可以直接在 opencode 会话里让它帮你装:
帮我把这个六爻 skill 从 GitHub 装上: github.com/stFloat/liuyao-skill,装到 .opencode/skills/ 下面。opencode 会自己下载并放到正确位置。装完不需要重启,它会在下一次会话扫描时发现新 Skill。判断有没有加载成功,可以在会话里问一句"你现在有哪些 skill",或者直接发起卦请求看它会不会调用排盘脚本。
4. 验证请求:一次起卦的完整调用与结果确认
配置和 Skill 都就位后,验证分两步:先确认模型接入通了,再确认 Skill 能被正确加载和响应。
第一步,发一个最简请求确认链路:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "回复 ok"}] }'返回里有choices数组且内容正常,说明 Base URL、Key、Model ID 三件套没问题。如果这里就报错,先别往下走,去第 5 节对错误码。
第二步,进 opencode 会话发起卦请求。直接打字,不用记命令:
帮我用六爻起一卦,问今日财运如果 Skill 加载正常,opencode 会识别到这是排盘请求,调用scripts/najia.py,然后返回一段带卦盘和解读的内容。正常输出大致长这样:
本卦: 地风升 变卦: 泽天夬 日辰: 庚午 月建: 申 空亡: 戌,亥 爻位 六神 六亲 干支 五行 世应 卦象 上爻 螣蛇 官鬼 癸酉 金 ━ ━ 五爻 勾陈 父母 癸亥 水 (动·空) ━×━ 四爻 朱雀 妻财 癸丑 土 世(动) ━×━ 三爻 青龙 官鬼 辛酉 金 ━━━ 二爻 玄武 父母 辛亥 水 (空) ━━━ 初爻 白虎 妻财 辛丑 土 应(动) ━×━后面会跟一段白话解读,比如"今日有财机会,但容易得而复失,宜小步快取"。同时结果会写进records/目录,文件名带日期,方便回查。
如果你自己掷过铜钱,把六个爻值按从初爻到上爻的顺序告诉它:
爻值是 6 7 7 6 6 8,问今日财运,日期 2026-08-24只想解读不想重排,就说:
用新排盘给我的地风升变泽天夬做趋势解读验证 Skill 是否真的被调用,有个简单办法:看records/目录有没有新文件生成。如果模型只是用嘴编了一段卦辞、没有落盘,说明它没走 Skill 脚本,大概率是SKILL.md的 description 没匹配上,或者目录层级放错了。
5. 常见报错排查:401、local proxy failed 与 Skill 不触发
这一节按真实报错对照,遇到问题直接查表。
401 Unauthorized。请求头里的 Key 无效或没带上。检查三处:配置文件里apiKey字段有没有写错、环境变量TAOTOKEN_API_KEY有没有 export 到当前 shell、Key 有没有在控制台被禁用。用 curl 单独测一次能快速定位是配置问题还是 Key 问题。
local proxy failed / connection refused。opencode 启动时连不上配置的 Base URL。常见原因是baseURL写成了https://taotoken.net(少了/api),或者本地网络把请求拦了。确认地址是https://taotoken.net/api,末尾不要多加斜杠。
reading 'choices' of undefined。返回体里没有choices字段,通常是模型 ID 写错了,服务端返回了一个错误对象而不是正常响应。把model字段改成控制台里列出的确切模型标识,别自己拼名字。
OAuth / 登录态相关报错。如果你之前配过别的 provider 并留了 OAuth 凭据,opencode 可能优先走了旧凭据。清掉旧的 auth 缓存,或者在配置里显式指定"model": "taotoken/xxx"强制走新 provider。
Skill 不触发,模型说"我没有这个能力"。九成是路径问题。确认最终路径是你的项目/.opencode/skills/liuyao-najia/SKILL.md,注意是liuyao-najia这一层,不是外层的liuyao-skill。另外确认SKILL.md的 frontmatter 格式正确,---包裹的头部不能少。
Skill 触发了但排盘脚本报错。检查 Python 环境,najia.py依赖标准库还是第三方包,缺依赖就按报错装。脚本路径在SKILL.md里是相对路径,确认调用时的工作目录对得上。
改了配置不生效。opencode 有配置缓存,改完opencode.json后重启会话。项目级配置优先级高于用户级,如果两处都写了 provider,以项目级为准。
排查顺序建议从外到内:先用 curl 确认 API 通,再确认 opencode 能正常对话,最后确认 Skill 被加载。哪一层断了就修哪一层,别一次改一堆配置。
6. 把链路固定下来:从临时试跑到日常使用
跑通一次之后,建议把配置固化,避免每次重装环境都要重新折腾。
项目级配置进版本库,Key 用环境变量注入。这样团队里其他人 clone 下来,只要 export 自己的 Key 就能用,不用改文件。.opencode/skills/目录也一起提交,Skill 跟着项目走,换机器不用重新 clone。
模型选择上,排盘脚本是确定性的,不消耗模型能力;解读部分才需要模型。日常问卦用中等能力的模型就够,长会话或复杂解读再切更强的模型。opencode 里用/models随时切,不用改配置文件。
records 目录建议加进.gitignore,卦例是个人数据,没必要进版本库。想长期留存就单独备份这个目录。
如果你后面要接更多 Skill,目录结构照抄这套:.opencode/skills/<skill-name>/SKILL.md加脚本目录。description 写清楚触发场景,脚本保持无状态、输入输出明确,模型调用起来就稳。
最后提醒一句,六爻排盘对齐的是传统纳甲规则,解读走的是可复现的方法论,结果只作趋势参考。涉及钱财、健康、法律这些重大事项,还是以专业机构和持证人士的意见为准。工具的价值在于把排盘这种机械劳动自动化,决策的脚始终在你自己身上。
需要创建 API Key 或查看接入文档,可以从这里进:API Keys 页面 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api-keys ,接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc 。想先验证模型对话效果,用模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat 。长期在终端里跑编码和 Agent 任务,可以看 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan 。