diff --git a/relay/channel/claude/adaptor.go b/relay/channel/claude/adaptor.go index 540742d6..c715c0c9 100644 --- a/relay/channel/claude/adaptor.go +++ b/relay/channel/claude/adaptor.go @@ -55,14 +55,34 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { } func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Header, info *relaycommon.RelayInfo) error { - channel.SetupApiRequestHeader(info, c, req) + if model_setting.GetGlobalSettings().PassThroughRequestEnabled { + // 穿透模式:直接复制原始请求头,但跳过系统级头信息 + for key, values := range c.Request.Header { + keyLower := strings.ToLower(key) + if keyLower == "host" || keyLower == "content-length" || keyLower == "connection" { + continue + } + for _, value := range values { + req.Add(key, value) + } + } + } else { + // 非穿透模式:使用通用设置 + channel.SetupApiRequestHeader(info, c, req) + } + + // 无论哪种模式都需要设置正确的API密钥 req.Set("x-api-key", info.ApiKey) - anthropicVersion := c.Request.Header.Get("anthropic-version") - if anthropicVersion == "" { - anthropicVersion = "2023-06-01" + + if !model_setting.GetGlobalSettings().PassThroughRequestEnabled { + // 非穿透模式才强制设置这些头 + anthropicVersion := c.Request.Header.Get("anthropic-version") + if anthropicVersion == "" { + anthropicVersion = "2023-06-01" + } + req.Set("anthropic-version", anthropicVersion) + model_setting.GetClaudeSettings().WriteHeaders(info.OriginModelName, req) } - req.Set("anthropic-version", anthropicVersion) - model_setting.GetClaudeSettings().WriteHeaders(info.OriginModelName, req) return nil }