claude格式请求模型列表异常返回错误模型
已打开 05:46AM - 10 Jul 26 UTC
已关闭 08:14AM - 10 Jul 26 UTC
当使用Claude API格式(x-api-key + anthropic-version header)请求时,API后端对模型名称进行了奇怪的转换:
1.… 反转了原始模型名 (例如 gpt-image-2 → 2-egami-tpg)
2. 添加了前缀 claude-fable-5-dd-
证据:
Claude格式返回: claude-fable-5-dd-2-egami-tpg
实际模型名: gpt-image-2 (反转后得到)
Claude格式返回: claude-fable-5-dd-6-4-tennos-edualc/ciporhtna
实际模型名: anthropic/claude-sonnet-4-6 (反转后得到)
说明:
- OpenAI格式返回的是正确的模型名称
- Claude格式返回的模型名被错误地处理了(反转+添加前缀)
- 这导致使用Claude格式的客户端会错误
问题定位:
提交记录: ee71dc52 (2026-07-09 22:39:59)
提交标题: feat(auth/models): implement Claude model ID prefix handling
问题代码: internal/util/claude_model.go 中的 EnsureClaudeModelIDPrefix 函数
🐛 问题逻辑
// EnsureClaudeModelIDPrefix rewrites model IDs for Anthropic /models listings.
// IDs that already start with "claude-" are returned unchanged; all other IDs
// become "claude-fable-5-dd-" plus the original ID with its characters reversed.
func EnsureClaudeModelIDPrefix(id string) string {
if id == "" {
return id
}
if strings.HasPrefix(id, "claude-") {
return id
}
return claudeDDModelPrefix + reverseModelID(id) // ❌ 这里反转了模型名!
}
📍 调用位置
在 sdk/api/handlers/claude/code_handlers.go 的 ClaudeModels 函数中:
func (h *ClaudeCodeAPIHandler) ClaudeModels(c *gin.Context) {
models := h.Models()
for i := range models {
if id, ok := models[i]["id"].(string); ok {
models[i]["id"] = util.EnsureClaudeModelIDPrefix(id) // ❌ 这里转换了所有模型ID
}
}
// ...
}