Skip to content

[Bug] opencode go 连接不稳定 #83

Description

@FanXingGuo

CSSwitch 版本

v0.8.4

macOS 版本 + 芯片

macOS 26.6 (25G72) / arm64

用的是哪个 provider

自定义 / 其它

复现步骤

ai 撰写

[Bug] OpenCode Go 间歇性失败:30s 超时 502 + 上游 400「Thinking mode does not support this tool_choice」

环境

  • CSSwitch 版本:v0.8.4(public artifact)
  • macOS 版本 + 芯片:macOS 26.6 (25G72) / arm64
  • Claude Science:claude-science 0.1.18-dev.20260709.t211149.shab3f5130(官方 sandbox,CSSwitch 托管运行时)
  • 用的是哪个 provider:OpenCode GoOpenCode Go — OpenAI Chat 模板,https://opencode.ai/zen/go/v1,Bearer key;也试过 custom-openai 模板同样复现)
  • 网络:iPhone 个人热点(Wi-Fi)

复现步骤

  1. CSSwitch 选 OpenCode Go,一键启动沙箱
  2. 在 Science 里正常对话一段时间(几分钟到几十分钟)
  3. 对话开始持续失败:模型下拉变 No models,聊天提示 “Claude is temporarily unavailable — retrying… · Check service status”
  4. 等几分钟到十几分钟自动恢复;再隔一阵又复发
  5. 同一台机器切到国内 provider(硅基流动 / DeepSeek)后完全正常,不复发

期望结果 / 实际结果

期望:opencode.ai 上游可用时,Science 对话稳定。

实际:间歇性整段失败,自愈后又复发。Science 服务端日志出现三类错误:

1) 每次恰好 30 秒超时的 502(最常见)

[perf] llm: frame=908aed08 ttft=n/a total=30056ms in=0 out=0 ... model=claude-sonnet-5 result=error
[LLM] Streaming server error (attempt 1), retrying in 1.20s: Error: 502 {"type":"error","error":{"type":"api_error","message":"error sending request for url (https://opencode.ai/zen/go/v1/chat/completions)"}}
  • 所有尝试 total 都精确落在 30000–30070 ms(网关 30s 总超时上限)
  • 一次失败窗口内连续 attempt 1→10 全部 502 后放弃;计数:error sending request ×109,Streaming server error ×106

2) 上游明确拒绝:thinking + tool_choice 组合

upstream 400: {"error":{"param":null,"type":"invalid_request_error","code":"invalid_request_error",
  "message":"Error from provider (Console Go): Upstream request failed: [invalid_request_error] Thinking mode does not support this tool_choice"}}

这条是确凿的协议翻译问题:发往 opencode.ai 的请求同时带 thinking 模式与 tool_choice,被 Console Go 上游以 invalid_request_error 拒绝。

3) 翻译结果空内容

502 {"type":"error","error":{"type":"api_error","message":"OpenAI Chat response message has no content"}}

排除项(已实测,排除网络原因)

  • 同一把 key、原生 OpenAI 格式 curl POST https://opencode.ai/zen/go/v1/chat/completions:网关故障期间仍稳定 200(~0.7–2s,10/10 全通)
  • 同机 opencode CLI 连同一个 Cloudflare IP2606:4700:78::90:0:141)正常不卡
  • 网关出站为绕过 Clash 直连(IPv6 2408:844f:… → 2606:4700:78::90:0:141 ESTABLISHED,无 7897 代理连接);Clash 中 DOMAIN,opencode.ai,DIRECT 规则对网关无效
  • 直连 IPv4 / IPv6、经 Clash 代理,在恢复窗口内均稳定 200——即问题只在“故障窗口”内出现,指向请求/协议层而非纯网络

附带观察

建议排查方向

  1. Thinking mode does not support this tool_choice:确认 opencode-go 模板在 thinking 开启时是否仍下发了 tool_choice,应裁剪或降级
  2. 30s 总超时对 opencode.ai/zen/go 的聚合慢响应是否过紧;失败窗口是否与上游对该类型请求的慢处理相关
  3. OpenAI Chat response message has no content 的触发条件(reasoning 空内容?)

期望结果 / 实际结果(含完整报错文字)

希望解决opencode go 连接不稳定问题

日志(可选,强烈建议)


确认

  • 我已确认贴出的内容里不含 API key、令牌等任何密钥

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions