From 22aa541bd17f714bf81bbb06d7cb28ebeb7d215f Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Wed, 16 Apr 2025 00:23:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20SOCKS5=20=E5=92=8C?= =?UTF-8?q?=20HTTP/HTTPS=20=E4=BB=A3=E7=90=86=E6=94=AF=E6=8C=81=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E4=BC=98=E5=8C=96=20OpenAI=20API=20=E7=9A=84=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/headmaster/headmaster.go | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/handler/headmaster/headmaster.go b/handler/headmaster/headmaster.go index 0f44958..8ff7e76 100644 --- a/handler/headmaster/headmaster.go +++ b/handler/headmaster/headmaster.go @@ -3,6 +3,10 @@ package headmaster import ( "context" "fmt" + "log" + "net" + "net/http" + "net/url" "strings" "time" @@ -12,6 +16,7 @@ import ( "git.lxtend.com/qqbot/model" "git.lxtend.com/qqbot/util" "github.com/sashabaranov/go-openai" + "golang.org/x/net/proxy" ) var ( @@ -49,6 +54,36 @@ func ask(from string, question string) (reply string) { llmConfig := openai.DefaultAzureConfig(config.ConfigManager.GetConfig().OpenaiApiKey, config.ConfigManager.GetConfig().OpenaiApiBaseUrl) llmConfig.APIType = openai.APITypeOpenAI llmConfig.APIVersion = "" + if config.ConfigManager.GetConfig().Management.ProxyAddr != "" { + proxyURL, err := url.Parse(config.ConfigManager.GetConfig().Management.ProxyAddr) + if err != nil { + log.Printf("解析代理地址失败: %v\n", err) + } else { + if proxyURL.Scheme == "socks5" { + dialer, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct) + if err == nil { + llmConfig.HTTPClient = &http.Client{ + Timeout: 10 * time.Second, + Transport: &http.Transport{ + Dial: func(network, addr string) (net.Conn, error) { + return dialer.Dial(network, addr) + }, + }, + } + } else { + log.Printf("创建SOCKS5代理失败: %v\n", err) + } + } else { + // 使用 HTTP/HTTPS 代理 + llmConfig.HTTPClient = &http.Client{ + Timeout: 10 * time.Second, + Transport: &http.Transport{ + Proxy: http.ProxyURL(proxyURL), + }, + } + } + } + } client := openai.NewClientWithConfig(llmConfig) resp, err := client.CreateChatCompletion( context.Background(),