问题
curl: (28) Failed to connect to api.openai.com port 443: Connection timed out
前提
在有科学上网的情况下,开全局模式依然会请求不通,解决方式
- github上有一些代理方案借助于第三方例如:github.com/justjavac/o…; 还有一些其他的原理一样,这个的好处是一键部署,省时省力,但是会有实效性,所以决定用自己方式解决
解决方式
- 我这里直接用go举个例子,其他同理,可以直接用ChatGPT转js或者java都可以,我试过了,话不多说直接贴代码了 `
func ChatCompletions(c *gin.Context) {
var (
appG = app.Gin{C: c}
form ChatForm
)
httpCode, errCode := app.BindAndValid(c, &form)
if errCode != e.SUCCESS {
appG.Response(httpCode, errCode, nil)
return
}
ctx := context.Background()
log.Printf("[info]ChatCompletions %s", form.Text)
// 设置代理
proxyURL := "http://127.0.0.1:7890"
proxy := func(_ *http.Request) (*url.URL, error) {
return url.Parse(proxyURL)
}
transport := &http.Transport{Proxy: proxy}
httpClient := &http.Client{Transport: transport}
cfg := openai.DefaultConfig("apiKey")
cfg.BaseURL = "https://api.openai.com/v1"
cfg.HTTPClient = httpClient // 使用代理的 HTTP 客户端
client := openai.NewClientWithConfig(cfg)
var str = "你作为一个作家,将我书写的内容续写成一个富有戏剧性故事"
req := openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo1106,
MaxTokens: 1024,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: str + form.Text,
},
},
Stream: true,
}
stream, err := client.CreateChatCompletionStream(ctx, req)
if err != nil {
log.Printf("ChatCompletionStream error: %v\n", err)
appG.Response(http.StatusInternalServerError, e.ERROR, nil)
return
}
defer stream.Close()
for {
response, err := stream.Recv()
if errors.Is(err, io.EOF) {
fmt.Println("\nStream finished")
return
}
if err != nil {
log.Printf("\nStream error: %v\n", err)
appG.Response(http.StatusInternalServerError, e.ERROR, nil)
return
}
appG.StreamResponse(http.StatusOK, e.SUCCESS, response)
}
}
http://127.0.0.1:7890 这个是代理的前提,懂得都懂
下面是我的前端项目截图