From 3bad30bff1bb021bb06f47577ef1133f47663eb5 Mon Sep 17 00:00:00 2001 From: npc0-hue Date: Fri, 24 Apr 2026 09:59:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(bedrock):=20=E6=94=AF=E6=8C=81=20bedrock?= =?UTF-8?q?=5Fproxy=5Furl=20=E4=BB=A3=E7=90=86=E9=85=8D=E7=BD=AE=20?= =?UTF-8?q?=E4=BB=8E=20Dify=20provider=5Fcredentials=20=E7=9A=84=20encrypt?= =?UTF-8?q?ed=5Fconfig=20=E4=B8=AD=E8=AF=BB=E5=8F=96=20bedrock=5Fproxy=5Fu?= =?UTF-8?q?rl=20=E5=AD=97=E6=AE=B5=EF=BC=8C=20=E8=8B=A5=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E5=88=99=E5=B0=86=20HTTP=20=E8=AF=B7=E6=B1=82=E7=BB=8F?= =?UTF-8?q?=E8=AF=A5=E4=BB=A3=E7=90=86=EF=BC=88host:port=20=E6=88=96=20htt?= =?UTF-8?q?p://host:port=EF=BC=89=E8=BD=AC=E5=8F=91=E5=88=B0=20AWS=20Bedro?= =?UTF-8?q?ck=EF=BC=8C=20=E4=B8=8D=E5=86=8D=E5=BC=BA=E5=88=B6=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=20bedrock-runtime.{region}.amazonaws.com=E3=80=82=20?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=EF=BC=9A=20-=20ProviderCredentials=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20BedrockProxyURL=20=E5=AD=97=E6=AE=B5=20-?= =?UTF-8?q?=20ConfigKeyBedrockProxyURL=20=E5=B8=B8=E9=87=8F=20-=20GetDifyP?= =?UTF-8?q?roviderCredentials=20=E6=8F=90=E5=8F=96=20bedrock=5Fproxy=5Furl?= =?UTF-8?q?=EF=BC=88=E6=98=8E=E6=96=87=EF=BC=8C=E4=B8=8D=E8=A7=A3=E5=AF=86?= =?UTF-8?q?=EF=BC=89=20-=20proxyBedrockRequest=20=E6=A0=B9=E6=8D=AE=20Bedr?= =?UTF-8?q?ockProxyURL=20=E9=85=8D=E7=BD=AE=20http.Transport.Proxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gaia/model_provider_constants_extend.go | 1 + .../model/gaia/response/model_provider.go | 2 ++ admin/server/service/gaia/bedrock_extend.go | 18 ++++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/admin/server/model/gaia/model_provider_constants_extend.go b/admin/server/model/gaia/model_provider_constants_extend.go index e53831bd8..fce2c4e56 100644 --- a/admin/server/model/gaia/model_provider_constants_extend.go +++ b/admin/server/model/gaia/model_provider_constants_extend.go @@ -28,6 +28,7 @@ const ( ConfigKeyAWSSecretAccessKey = "aws_secret_access_key" ConfigKeyAWSSessionToken = "aws_session_token" ConfigKeyAWSRegion = "aws_region" + ConfigKeyBedrockProxyURL = "bedrock_proxy_url" // 可选:HTTP 代理地址,格式 host:port 或 http://host:port ) // SupportedProviders 列表展示的提供商顺序 diff --git a/admin/server/model/gaia/response/model_provider.go b/admin/server/model/gaia/response/model_provider.go index 60b2a9660..4a933d46e 100644 --- a/admin/server/model/gaia/response/model_provider.go +++ b/admin/server/model/gaia/response/model_provider.go @@ -11,6 +11,8 @@ type ProviderCredentials struct { AWSSecretAccessKey string `json:"aws_secret_access_key,omitempty"` AWSSessionToken string `json:"aws_session_token,omitempty"` AWSRegion string `json:"aws_region,omitempty"` + // Bedrock 可选代理地址(host:port 或 http://host:port),非空时请求经该代理转发到 AWS + BedrockProxyURL string `json:"bedrock_proxy_url,omitempty"` } // ModelInfo 模型信息 diff --git a/admin/server/service/gaia/bedrock_extend.go b/admin/server/service/gaia/bedrock_extend.go index 0d7fccea8..5af49168a 100644 --- a/admin/server/service/gaia/bedrock_extend.go +++ b/admin/server/service/gaia/bedrock_extend.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "net/url" "strings" "time" @@ -100,9 +101,19 @@ func (s *ModelProviderService) proxyBedrockRequest( return fmt.Errorf("Bedrock SigV4 签名失败:%w", err) } - // 5) 发起请求 + // 5) 发起请求(若配置了 bedrock_proxy_url 则经 HTTP 代理转发) startTime := time.Now() - client := &http.Client{Timeout: 5 * time.Minute} + transport := http.DefaultTransport + if creds.BedrockProxyURL != "" { + proxyAddr := creds.BedrockProxyURL + if !strings.HasPrefix(proxyAddr, "http://") && !strings.HasPrefix(proxyAddr, "https://") { + proxyAddr = "http://" + proxyAddr + } + if proxyURL, parseErr := url.Parse(proxyAddr); parseErr == nil { + transport = &http.Transport{Proxy: http.ProxyURL(proxyURL)} + } + } + client := &http.Client{Timeout: 5 * time.Minute, Transport: transport} resp, err := client.Do(httpReq) if err != nil { s.logBedrock(userID, modelID, "error", err.Error(), startTime, 0, 0) @@ -271,3 +282,6 @@ func (s *ModelProviderService) logBedrock(userID, modelID, status, errMsg string global.GVA_LOG.Warn("logBedrock 写日志失败", zap.Error(err)) } } + + +