搭建 chatgpt 过程
搭建 chatgpt 的过程中,有很多知识需要学习,很多技巧需要学习。
搭建 chatgpt 过程
搭建 chatgpt 的过程中,有很多知识需要学习,很多技巧需要学习。
流式响应
前两天,实现了一个 chatgpt 的 demo ,其中最令他们诟病的就是,响应速度慢,如果能像 chatgpt 网页那样,逐字打印就好了。
所以,改进第一点,页面上实现打字机效果的逐字打印。
后端
在 golang 后端上,有幸在 github 上找到了一个人封装了 openAI 的接口,提供了流式响应的方法。
package main
import (
"context"
"errors"
"fmt"
"io"
openai "github.com/sashabaranov/go-openai"
)
func main() {
c := openai.NewClient("your token")
ctx := context.Background()
req := openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
MaxTokens: 20,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Lorem ipsum",
},
},
Stream: true,
}
stream, err := c.CreateChatCompletionStream(ctx, req)
if err != nil {
fmt.Printf("ChatCompletionStream error: %v\n", err)
return
}
defer stream.Close()
fmt.Printf("Stream response: ")
for {
response, err := stream.Recv()
if errors.Is(err, io.EOF) {
fmt.Println("\nStream finished")
return
}
if err != nil {
fmt.Printf("\nStream error: %v\n", err)
return
}
fmt.Printf(response.Choices[0].Delta.Content)
}
}
很有意思,等有空了,要看看代码实现,它是如何实现这一效果的。
我用上了,但是有个问题,在国内,是无法连接到 openai 的,显然,报错也显示无法与 openAi 的地址进行连接。
我抬起头,看到墙,我悟了。需要加代理。 浏览器的代理,我会加。但 golang 编译出来的 二进制 咋加代理。
网上一顿搜,终于给我找到了,在 创建 http 的 client 时,是可以添加代理的,因此,我修改了 github.com/sashabaranov/go-openai 的代码。在它创建 http 的 client 的时候,嵌入了 proxy 的配置。
func DefaultConfig(authToken string) ClientConfig {
u, _ := url.Parse("htttp://127.0.0.1:7890")
t := &http.Transport{
MaxIdleConns: 10,
MaxConnsPerHost: 10,
IdleConnTimeout: time.Duration(10) * time.Second,
//Proxy: http.ProxyURL(url),
Proxy: http.ProxyURL(u),
}
return ClientConfig{
HTTPClient: &http.Client{Transport: t},
BaseURL: apiURLv1,
OrgID: "",
authToken: authToken,
EmptyMessagesLimit: defaultEmptyMessagesLimit,
}
}
其中,核心也还没仔细看,大致一看,就是创建了一个 transport ,在其中加入了 代理,transport 是做什么的来着?明天得去看看、
总之,这样,就能与 openai 通信了。再接下来,就是搞前端了,有点头疼。明天见