1. 为什么要把六爻排盘做成 opencode 的 Skill
六爻排盘这件事,规则性极强。三枚铜钱抛六次,得到老阴、老阳、少阳、少阴,自下而上排出六爻;再按京房八宫纳甲规则装上干支、六亲、六神、世应、空亡、月破,动爻还要推变卦。整套流程全是死规则,人脑临时算很容易在纳甲或六亲上出错,尤其是动爻多、变卦复杂的时候。
但解卦不一样。同样的排盘,取什么为用神、旺衰怎么看、动爻往哪变、世应谁生谁克,这里既有硬规则,也有经验与义理。所以合理的拆法是:算盘交给程序,解读交给 AI。程序负责确定性排盘,AI 负责按方法论把信号串成人话。
这就是 liuyao.skill 的思路。它不是一个独立 App,而是一个可以挂进 opencode 的 Skill:目录里有 SKILL.md 描述能力与调用流程,有 scripts/liuyao.py 做确定性排盘,有 references/liuyao_method.md 提供断卦方法论。opencode 启动时自动发现 .opencode/skills/ 下的 SKILL.md,之后你直接用自然语言说「起一卦,问今日财运」,AI 就会按流程调脚本、拿排盘、出解读。
适合谁?三类人:一是想在终端里随时起卦、不想记命令行的开发者;二是想把六爻排盘当可复现工具、方便日后复盘的人;三是已经在用 opencode 或类似 AI 编码工具,想顺手加一个自定义 Skill 练手的同学。本文会给出 SKILL.md 目录结构、liuyao.py 关键函数配置、一次端到端起卦验证,以及如何通过 TaoToken 统一 Key 调用模型完成解卦。
2. TaoToken 前置准备:统一 Key 与模型接入
Skill 本身只负责排盘,真正把排盘变成解读,需要模型调用。这里用 TaoToken 做统一入口,好处是 Key 和 Base URL 一套配置,换模型只改 Model ID,不用到处改环境变量。
先拿 Key。打开 https://taotoken.net/api-keys ,登录后创建一个 API Key,复制保存。注意这个 Key 只在创建时完整显示一次,丢了就重新建。
Base URL 用 https://taotoken.net/api ,不要带多余路径。模型 ID 按你实际想用的填,比如 claude-sonnet-4-5、gpt-4.1、deepseek-chat 这类,具体以控制台模型列表为准。控制台在 https://taotoken.net/console ,模型对话体验在 https://taotoken.net/chat 。
如果你用的是 Claude Code 这类工具,配置方式略有不同。Claude Code 走的是 Anthropic 兼容入口,Base URL 填 https://taotoken.net/api ,Key 填刚才创建的,Model ID 填对应模型。opencode 这边则是在项目根目录的配置文件里写 provider。
我试过把 Key 直接写进项目配置,方便是方便,但提交代码容易泄露。更稳的做法是写进环境变量,配置文件里引用变量名。下面给一份 opencode 的 provider 配置片段,路径是项目根目录的 opencode.json:
{ "$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" }, "deepseek-chat": { "name": "DeepSeek Chat" } } } }, "model": "taotoken/claude-sonnet-4-5" }然后在 shell 里导出环境变量:
export TAOTOKEN_API_KEY="sk-你的Key"Windows PowerShell 用:
$env:TAOTOKEN_API_KEY="sk-你的Key"这里三件套要记牢:Base URL 是 https://taotoken.net/api ,Key 是你在 API Keys 页面创建的那串,Model ID 是 taotoken/claude-sonnet-4-5 这种「provider/model」格式。三者缺一,opencode 启动时就会报 provider 找不到或鉴权失败。
如果你更习惯用 Coding Plan 做长期编码和 Agent 任务,可以在 https://taotoken.net/coding-plan 看套餐说明,把日常调用集中到一个 Key 上,省得每个项目单独配。接入文档在 https://taotoken.net/doc ,遇到字段不确定时对照一下。
3. 可复制配置:SKILL.md 目录结构与 liuyao.py 关键函数
Skill 能不能被 opencode 正确加载,关键在目录结构和 SKILL.md 的 frontmatter。目录放在项目根目录的 .opencode/skills/ 下,一个 Skill 一个子目录:
.opencode/ └── skills/ └── liuyao-najia/ ├── SKILL.md ├── scripts/ │ └── liuyao.py ├── references/ │ └── liuyao_method.md └── records/ └── .gitkeepSKILL.md 的 frontmatter 至少要有 name 和 description,description 写清楚「什么时候该用这个 Skill」,模型靠它判断是否触发。下面是一份可直接复制的 SKILL.md:
--- name: liuyao-najia description: 六爻纳甲排盘与趋势解读。当用户要求起卦、排盘、解卦,或提供六爻爻值(6/7/8/9)询问财运、事业、姻缘等占事时使用。排盘由 scripts/liuyao.py 确定性完成,解读按 references/liuyao_method.md 的方法论框架给出。 --- # 六爻纳甲排盘 Skill ## 何时使用 - 用户说「起一卦」「帮我排盘」「解卦」 - 用户给出六个爻值,顺序从初爻到上爻 - 用户要求对已有卦例做趋势解读 ## 执行流程 1. 确认占事与日期。日期缺省用当天。 2. 若用户未给爻值,调用随机起卦;若给了爻值,用 -c 传入。 3. 运行 `python scripts/liuyao.py` 获取排盘结果。 4. 读取 `references/liuyao_method.md`,按取用神、察旺衰、看动静、审世应、参六神、查空亡、看变卦、推应期的顺序组织解读。 5. 排盘结果默认写入 `records/`,便于复盘。 ## 输出要求 - 先给本卦、变卦两张排盘表 - 再给八步推导明细(完整模式) - 最后给趋势解读,明确说明是方法论框架下的概率性判断,不是铁口直断liuyao.py 的关键函数分四层:历法层、起卦层、装卦层、输出层。历法层用 sxtwl 推算干支、月建、空亡,节气分界按历法走。起卦层把三枚铜钱结果映射成爻值,6 老阴、7 少阳、8 少阴、9 老阳。装卦层按京房八宫纳甲表装干支、六亲、六神、世应,并处理动爻变卦。输出层负责打印两张全表和八步明细。
关键函数签名大致如下:
def cast_random() -> list[int]: """模拟三枚铜钱抛六次,返回初爻到上爻的爻值列表。""" def cast_from_values(values: list[int]) -> list[int]: """校验用户传入的六个爻值,返回规范化列表。""" def build_hexagram(values: list[int]) -> dict: """根据爻值定本卦、变卦,返回卦名、卦宫、世应等。""" def install_najia(hexagram: dict, day_ganzhi: str) -> dict: """按京房纳甲表装干支、六亲、六神,标注空亡月破。""" def render_tables(hexagram: dict) -> str: """输出本卦、变卦两张同构全表。""" def render_steps(hexagram: dict) -> str: """输出八步推导明细。"""命令行入口支持三个参数:-q 占事、--date 日期、-c 爻值、--full 完整模式。不加 -c 时程序自行掷卦;加 -c 时可精确复现某一卦。排盘结果默认存入 records/。
如果你想让 opencode 里的 AI 自己装这个 Skill,可以把仓库地址丢给它,说一句「帮我把这个六爻 skill 装到 .opencode/skills/ 下」,它会拉取并放好。仓库地址在文末给出。
4. 验证请求:一次端到端起卦与成功结果
配置好之后,先做一次最小验证,确认 Skill 被加载、脚本能跑、模型能调通。
第一步,在项目根目录启动 opencode:
opencode第二步,直接说:
帮我用六爻起一卦,问今日财运如果 Skill 加载正常,AI 会先调 scripts/liuyao.py 做排盘,再读 references/liuyao_method.md 组织解读。你会看到类似下面的排盘输出:
本卦:地风升(震宫四世,宫五行木) 变卦:泽天夬(坤宫土) 日辰:庚午 月建:申 空亡:戌亥 动爻:初、四、五 本卦排盘 爻位 六神 六亲 干支 五行 世应 卦象 上爻 螣蛇 官鬼 癸酉 金 — ━━ ━━ 五爻 勾陈 父母 癸亥 水 — ━━×━━(动·空) 四爻 朱雀 妻财 癸丑 土 世 ━━×━━(动) 三爻 青龙 官鬼 辛酉 金 — ━━━━━ 二爻 玄武 父母 辛亥 水 — ━━━━━(空) 初爻 白虎 妻财 辛丑 土 应 ━━×━━(动)第三步,验证指定爻值复现:
python .opencode/skills/liuyao-najia/scripts/liuyao.py \ -c 6 7 7 6 6 8 \ -q "今日财运" \ --date 2026-08-24 \ --full成功的话,终端会打印本卦、变卦两张全表,加八步推导明细。爻值顺序是初爻到上爻,6 老阴、7 少阳、8 少阴、9 老阳。上面这组 6 7 7 6 6 8 对应初爻老阴、二爻少阳、三爻少阳、四爻老阴、五爻老阴、上爻少阴,排出来就是地风升变泽天夬。
第四步,验证模型调用。在 opencode 里说:
用新排盘给我的地风升变泽天夬做趋势解读AI 会按方法论框架输出:取用神看妻财,本卦妻财双现且两财皆动;世爻妻财丑土持世,得日辰午火生扶而旺;但世爻动化妻财亥水落空亡,初爻动化妻财子水被日辰午火冲,财似有实虚;五爻父母亥水空动化子孙酉金,居君位发动,是辛苦或技术转化为实利之象;变卦泽天夬,利果断进取、速决小利,旧账宜清。结论偏向小步快取、靠专业变现、清旧账,忌重仓押注。
这一步能跑通,说明三件事都成了:Skill 被 opencode 发现、liuyao.py 排盘正确、TaoToken 的 Key 和 Model ID 配置有效。如果模型没调通,解读那一步会卡住或报鉴权错误,排盘表仍然会正常打印,可以据此定位问题在哪一层。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
配置过程中最容易踩的几类报错,逐个对照。
401 Unauthorized。这是 Key 没生效。先确认环境变量真的导出了:
echo $TAOTOKEN_API_KEY如果输出为空,说明当前 shell 没加载。opencode.json 里写的是 {env:TAOTOKEN_API_KEY},变量名必须完全一致。另外确认 Key 没有多余空格或换行,复制时容易带上。如果用的是 Claude Code,检查的是 ANTHROPIC_API_KEY 或对应字段,别把两套配置混了。
local proxy failed 或 connection refused。这类通常是 Base URL 写错。TaoToken 的 Base URL 是 https://taotoken.net/api ,不要写成 https://taotoken.net/api/v1 或带其他路径。opencode 的 openai-compatible provider 会自动拼 /chat/completions,你多写一层就 404 或连接失败。检查 opencode.json 里 baseURL 字段,确保就是 https://taotoken.net/api 。
reading 'choices' 或 cannot read properties of undefined。这是响应结构不符合预期,常见原因是 Model ID 填错,请求打到了不存在的模型,返回体里没有 choices 字段。确认 Model ID 是 taotoken/claude-sonnet-4-5 这种「provider/model」格式,provider 名要和 opencode.json 里定义的 key 一致。如果模型列表里没有你写的那个,去 https://taotoken.net/console 核对可用模型名。
OAuth 相关报错。opencode 某些 provider 会走 OAuth 流程,如果你用的是 API Key 模式,确保没有误触发登录流程。检查配置里没有 auth 相关字段,或者显式指定 apiKey。Claude Code 那边如果提示 OAuth,通常是没走 API Key 入口,确认 Base URL 和 Key 都填在正确位置。
Skill 没被加载。表现是你说「起一卦」,AI 不调脚本,直接自己编。检查 .opencode/skills/liuyao-najia/SKILL.md 是否存在,frontmatter 的 name 和 description 是否完整。opencode 启动时扫描 .opencode/skills/ 下的子目录,SKILL.md 缺失或 frontmatter 格式错误都会导致跳过。可以重启 opencode 再看。
脚本报 ModuleNotFoundError: sxtwl。这是依赖没装。在项目里装:
pip install sxtwl如果用了虚拟环境,确认 opencode 启动时用的是同一个 Python。可以在 SKILL.md 里写明依赖,或者让 AI 在调用前先检查。
排盘结果和预期不符。先确认爻值顺序是初爻到上爻,不是从上往下。再确认日期格式是 YYYY-MM-DD。空亡和月建依赖日期,日期错了整张表都会偏。用 --full 看八步明细,能定位到是哪一步装错了。
6. 语义一致 CTA:把排盘交给程序,把解读交给模型
这套 Skill 的核心就一句:你只管说「起一卦,问 XX」,算盘交给程序,解读交给 AI。排盘规则对齐京房纳甲表,可复现、可验证;解读走方法论框架,是概率性趋势判断,不是铁口直断。
如果你要复现本文的配置,按这个顺序走:先在 https://taotoken.net/api-keys 创建 Key,Base URL 用 https://taotoken.net/api ,Model ID 按控制台可用模型填;再把 liuyao-najia 目录放进 .opencode/skills/,确认 SKILL.md 的 frontmatter 完整;然后跑一次 python scripts/liuyao.py -c 6 7 7 6 6 8 -q "今日财运" --date 2026-08-24 --full 验证排盘;最后在 opencode 里说「起一卦,问今日财运」验证端到端。
排障和接入细节看 https://taotoken.net/doc ,模型对话体验在 https://taotoken.net/chat ,长期编码和 Agent 任务可以看 https://taotoken.net/coding-plan 。Claude Code 用户走 Anthropic 兼容入口,Base URL 同样是 https://taotoken.net/api 。
仓库地址:GitHub 是 github.com/stFloat/liuyao-skill,Gitee 是 gitee.com/dong_wang_han/liuyao.skill。clone 下来放进 .opencode/skills/ 就能用。本文案例为方法示范,仅用于演示排盘与解读框架。