#7461·cc-switch

Claude → OpenAI 转换:工具 description 为空时省略字段仍被严格聚合端点拒绝(opencode Zen Go 实测)——建议回退为工具名

Author: Astrix74Created Sep 17, 2026Updated Sep 17, 2026

自检

  • 已读 README FAQ;已搜索过已有 issue。
  • CC Switch v3.20.3(本地实测),macOS。
  • 涉及应用:Claude Code。

现象

OpenCode Zen Go(https://opencode.ai/zen/go,预设 "OpenCode Go")上游对 tools 数组做严格校验:任何 function 的 description 缺失或为空字符串,整个请求被拒:

[invalid_request_error] tools[N]: function.description is required

#7319 已把缺失 description 从序列化 null 改为省略字段——这是必要的第一步,但对要求"字段存在且非空"的端点仍然不够:实测该端点对省略字段同样返回 400。

触发场景

  • hosted 工具(web_search_20250305 等)在 Anthropic 协议中本身无 description 字段;
  • MCP / 自定义工具的 description 是可选的,开发者留空即命中;
  • 主会话通常全绿(Anthropic 内置工具描述齐全),子代理因工具集组成更易混入无描述工具,表现为"间歇性 400",难以排查。

实测证据(经本地代理转发 curl)

description 上游结果
缺失 400 tools[1]: function.description is required
"" 400 同上
省略字段(#7319 方案) 400 同上
非空字符串(如 ".") 200,正常调用

建议

转换做 description 归一化:缺失/null/空串/纯空白 → 回退为该工具的 name(截断空白)。工具名是可得的、语义上最接近描述的信号,对宽松上游零损失,对严格端点保证字段存在且非空。补丁已在 #7378 之外另行实测可用,PR 随后附上。