Skip to content

Commit

Permalink
add proxy and fix replay
Browse files Browse the repository at this point in the history
  • Loading branch information
CsterKuroi committed Mar 28, 2023
1 parent a167b2a commit bcead82
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 11 deletions.
4 changes: 2 additions & 2 deletions chatgpt/chatgpt.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package chatgpt

import (
"github.com/poorjobless/wechatbot/config"
gpt35 "github.com/AlmazDelDiablo/gpt3-5-turbo-go"
gpt35 "github.com/poorjobless/wechatbot/gpt-client"
)

func Completions(msg string) (string, error) {
c := gpt35.NewClient(config.LoadConfig().ApiKey)
c := gpt35.NewClient(config.LoadConfig().ApiKey, config.LoadConfig().Proxy)
req := &gpt35.Request{
Model: gpt35.ModelGpt35Turbo,
Messages: []*gpt35.Message{
Expand Down
2 changes: 2 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
type Configuration struct {
// gtp apikey
ApiKey string `json:"api_key"`
// proxy
Proxy string `json:"proxy"`
// 自动通过好友
AutoPass bool `json:"auto_pass"`
}
Expand Down
4 changes: 1 addition & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@ module github.com/poorjobless/wechatbot

go 1.16

require (
github.com/eatmoreapple/openwechat v1.3.0
)
require github.com/eatmoreapple/openwechat v1.4.1
6 changes: 2 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
github.com/eatmoreapple/openwechat v1.2.1 h1:ez4oqF/Y2NSEX/DbPV8lvj7JlfkYqvieeo4awx5lzfU=
github.com/eatmoreapple/openwechat v1.2.1/go.mod h1:61HOzTyvLobGdgWhL68jfGNwTJEv0mhQ1miCXQrvWU8=
github.com/eatmoreapple/openwechat v1.3.0 h1:HlAx7emjaTnvAJ+fcPSc3J3PyF/tULBDWk0KoizARs8=
github.com/eatmoreapple/openwechat v1.3.0/go.mod h1:61HOzTyvLobGdgWhL68jfGNwTJEv0mhQ1miCXQrvWU8=
github.com/eatmoreapple/openwechat v1.4.1 h1:hIVEr2Xaj+r1SXzdTigqhIXiuu6TZd+NPWdEVVt/qeM=
github.com/eatmoreapple/openwechat v1.4.1/go.mod h1:ZxMcq7IpVWVU9JG7ERjExnm5M8/AQ6yZTtX30K3rwRQ=
87 changes: 87 additions & 0 deletions gpt-client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package gpt35

import (
"bytes"
"encoding/json"
"log"
"net/http"
"net/url"
"time"
)

const ModelGpt35Turbo = "gpt-3.5-turbo"

const MaxTokensGpt35Turbo = 4096

const (
RoleUser RoleType = "user"
RoleAssistant RoleType = "assistant"
RoleSystem RoleType = "system"
)

const DefaultUrl = "https://api.openai.com/v1/chat/completions"

type Client struct {
transport *http.Client
apiKey string
url string
}

func NewClient(apiKey, proxy string) *Client {
proxyUrl, err := url.Parse(proxy)
if err != nil {
log.Fatal(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
}

return &Client{
transport: &http.Client{
Transport: transport,
Timeout: 110 * time.Second,
},
apiKey: apiKey,
url: DefaultUrl,
}
}

func NewClientCustomUrl(apiKey string, url string) *Client {
return &Client{
transport: http.DefaultClient,
apiKey: apiKey,
url: url,
}
}

func (c *Client) GetChat(r *Request) (*Response, error) {
jsonData, err := json.Marshal(r)
if err != nil {
return nil, err
}

req, err := http.NewRequest("POST", c.url, bytes.NewBuffer(jsonData))
if err != nil {
return nil, err
}

req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+c.apiKey)

httpResp, err := c.transport.Do(req)

if err != nil {
return nil, err
}
defer func() {
_ = httpResp.Body.Close()
}()

var resp Response
err = json.NewDecoder(httpResp.Body).Decode(&resp)
if err != nil {
return nil, err
}

return &resp, nil
}
52 changes: 52 additions & 0 deletions gpt-client/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package gpt35

type RoleType string
type ModelType string

type Request struct {
Model ModelType `json:"model"`
Messages []*Message `json:"messages"`
Temperature float64 `json:"temperature,omitempty"`
TopP float64 `json:"top_p,omitempty"`
N int `json:"n,omitempty"`
Stream bool `json:"stream,omitempty"`
Stop interface{} `json:"stop,omitempty"`
MaxTokens int `json:"max_tokens,omitempty"`
PresencePenalty float64 `json:"presence_penalty,omitempty"`
FrequencyPenalty float64 `json:"frequency_penalty,omitempty"`
LogitBias interface{} `json:"logit_bias,omitempty"`
User string `json:"user,omitempty"`
}

type Response struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
Choices []*Choice `json:"choices"`
Usage *Usage `json:"usage"`
Error *Error `json:"error,omitempty"`
}

type Message struct {
Role RoleType `json:"role,omitempty"`
Content string `json:"content"`
}

type Choice struct {
Index int `json:"index"`
Message *Message `json:"message"`
FinishReason string `json:"finish_reason"`
}

type Usage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
}

type Error struct {
Message string `json:"message"`
Type string `json:"type"`
Param string `json:"param"`
Code string `json:"code"`
}
3 changes: 2 additions & 1 deletion handlers/group_msg_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"strings"

"github.com/eatmoreapple/openwechat"

"github.com/poorjobless/wechatbot/chatgpt"
)

Expand Down Expand Up @@ -40,7 +41,7 @@ func (g *GroupMessageHandler) ReplyText(msg *openwechat.Message) error {
}

// 替换掉@文本,然后向GPT发起请求
replaceText := "@" + sender.Self.NickName
replaceText := "@" + sender.NickName
requestText := strings.TrimSpace(strings.ReplaceAll(msg.Content, replaceText, ""))
reply, err := chatgpt.Completions(requestText)
if err != nil {
Expand Down
3 changes: 2 additions & 1 deletion handlers/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"log"

"github.com/eatmoreapple/openwechat"

"github.com/poorjobless/wechatbot/config"
)

Expand Down Expand Up @@ -41,7 +42,7 @@ func Handler(msg *openwechat.Message) {
// 好友申请
if msg.IsFriendAdd() {
if config.LoadConfig().AutoPass {
_, err := msg.Agree("你好我是基于chatGPT引擎开发的微信机器人,你可以向我提问任何问题。")
_, err := msg.Agree("你好我是基于GPT3.5引擎的微信机器人,你可以向我提问任何问题。")
if err != nil {
log.Fatalf("add friend agree error : %v", err)
return
Expand Down

0 comments on commit bcead82

Please sign in to comment.