diff --git a/log.md b/log.md index d8bfde2..605d118 100644 --- a/log.md +++ b/log.md @@ -53,3 +53,6 @@ ## [2026-08-06] sync | daily conversation scan — found 0 items - 窗口内无新对话知识:Aug 05 22:12 sync 已采集 7 条;links sync 06:30 已入库 post 2983-2989;仅新增例行新闻简报(post #2991,走 links 管线明早入库) + +## [2026-08-07] sync | daily conversation scan — found 1 item +- 主模型切换决策:OpenCode Go 订阅为主(deepseek-v4-flash via opencode-go)+ DeepSeek 官方 fallback;坑:opencode.ai Cloudflare 需浏览器 UA、deepseek-v4-flash 需中国区 opt-in(403 RegionError 立即触发 fallback)、hermes config set 写 fallback_providers 会存成字符串被静默忽略(需 Python API 写列表)、DeepSeek max_tokens=10 被 reasoning 吃光返回空回复 → raw/2026-08/2026-08-07-opencode-go-primary-deepseek-fallback.md diff --git a/raw/2026-08/2026-08-07-opencode-go-primary-deepseek-fallback.md b/raw/2026-08/2026-08-07-opencode-go-primary-deepseek-fallback.md new file mode 100644 index 0000000..ea046b3 --- /dev/null +++ b/raw/2026-08/2026-08-07-opencode-go-primary-deepseek-fallback.md @@ -0,0 +1,33 @@ +--- +ingested: 2026-08-07 +status: inbox +--- + +# 主模型切换:OpenCode Go(订阅)为主 + DeepSeek 官方 fallback(2026-08-07) + +大哥拍板:把 Hermes 主模型供应商从 DeepSeek 官方改为 **OpenCode Go 订阅**(opencode-go 里的 deepseek-v4-flash),不可用时自动 fallback 回 DeepSeek 官方同模型。目的:主流量走 OpenCode Go 订阅额度,省钱(不再按量计费)。 + +## 最终配置(~/.hermes/config.yaml) +```yaml +model: + default: deepseek-v4-flash + provider: opencode-go +fallback_providers: + - provider: deepseek + model: deepseek-v4-flash +``` +- opencode-go:base_url `https://opencode.ai/zen/go/v1`,env `OPENCODE_GO_API_KEY`,别名 `go`/`opencode-go-sub`;模型列表在 `hermes_cli/models.py`(25 个,含 deepseek-v4-flash、kimi-k3、glm-5.2、mimo 系列等),default_aux_model=glm-5 +- 机制:**每轮(turn)先试主模型**,429/5xx 重试耗尽后切 fallback;401/403/404 立即切(不重试);下一轮自动回到主模型。切换无缝保留上下文,但会重置 prompt cache(成本提示) + +## 踩坑记录 +1. **opencode.ai 有 Cloudflare 防护**:无浏览器 UA 直接 403 error 1010,请求必须带 Mozilla UA +2. **OpenCode Go 的 deepseek-v4-flash 需显式 opt-in**:最新版托管在中国区,未确认启用时返回 403 RegionError(提示去 opencode.ai 工作台确认)。403 属 auth 类 → fallback 立即触发,链路仍可用,只是每轮白打一次 403 +3. **`hermes config set fallback_providers ''` 是坑**:值会被存成字符串,而 `_iter_fallback_entries`(fallback_config.py)只接受 dict/list,字符串被静默忽略 → fallback 不生效。原配置 `fallback_providers: '["openrouter"]'` 就是这个无效旧格式。正确姿势:用 Hermes 自身 Python API `from hermes_cli.config import load_config, save_config` 写列表 +4. `hermes fallback add` 是交互式 TTY 命令,无法脚本化;agent 的 patch 工具被安全策略拒绝直接改 config.yaml(需用 `hermes config` 或 Python API) +5. **DeepSeek 官方 API 测试坑**:max_tokens=10 时 reasoning_tokens 吃光额度返回空回复(max_tokens=200 正常)——测 deepseek-v4-flash 时 max_tokens 要设够 +6. gateway 重启防护(详见 08-04 hermes-v020-upgrade):内部任何方式无法重启自身,最终大哥手动重启(20:13 AEST),重启后会话无损继续,当前回复即走 OpenCode Go 主模型验证生效 + +## 验证 +- opencode-go key 有效、模型在列表中;opt-in 后实测 opencode.ai 返回正常 +- `hermes fallback list`:Primary deepseek-v4-flash (via opencode-go),Fallback chain 1 entry deepseek-v4-flash (via deepseek) +- gateway 为 systemd user 服务 hermes-gateway.service