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 随后附上。
Source: farion1231/cc-switch