diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 21427b1f..2982945c 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -811,7 +811,8 @@ func HandleStreamFinalResponse(c *gin.Context, info *relaycommon.RelayInfo, clau } // 只补缺失字段,不整份覆盖——保留 message_start 已拿到的 cache 字段 fallback := service.ResponseText2Usage(c, claudeInfo.ResponseText.String(), info.UpstreamModelName, info.GetEstimatePromptTokens()) - if claudeInfo.Usage.CompletionTokens == 0 { + if claudeInfo.Usage.CompletionTokens == 0 || + (!claudeInfo.Done && fallback.CompletionTokens > claudeInfo.Usage.CompletionTokens) { claudeInfo.Usage.CompletionTokens = fallback.CompletionTokens } if claudeInfo.Usage.PromptTokens == 0 {