修改代码
This commit is contained in:
parent
2b7291d7f6
commit
34d4612b51
68
core/data.go
68
core/data.go
|
@ -9,8 +9,72 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RequestData
|
// GPT
|
||||||
type RequestData struct {
|
type GPT struct {
|
||||||
|
ApiKey string
|
||||||
|
Proxy string
|
||||||
|
Timeout int
|
||||||
|
}
|
||||||
|
|
||||||
|
// messages
|
||||||
|
var messages []Message
|
||||||
|
|
||||||
|
// Message
|
||||||
|
// 单个消息
|
||||||
|
type Message struct {
|
||||||
|
Role string `json:"role"`
|
||||||
|
Content string `json:"content"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Payload
|
||||||
|
// 请求数据
|
||||||
|
type Payload struct {
|
||||||
|
Model string `json:"model"`
|
||||||
|
Messages []Message `json:"messages"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AnswerItem
|
||||||
|
// 回答数据
|
||||||
|
type AnswerItem struct {
|
||||||
|
FinishReason string `json:"finish_reason"`
|
||||||
|
Index int `json:"index"`
|
||||||
|
Message Message `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Answer
|
||||||
|
// 回答
|
||||||
|
type Answer struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Object int `json:"object"`
|
||||||
|
Created interface{} `json:"created"`
|
||||||
|
Model string `json:"model"`
|
||||||
|
Usage interface{} `json:"usage"`
|
||||||
|
Choices []AnswerItem `json:"choices"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuildApiPayload
|
||||||
|
// 构建Api数据
|
||||||
|
//
|
||||||
|
// @param question
|
||||||
|
// @return string
|
||||||
|
func BuildApiPayload(question string) string {
|
||||||
|
messages = append(messages, Message{
|
||||||
|
Role: "user",
|
||||||
|
Content: question,
|
||||||
|
})
|
||||||
|
|
||||||
|
payload := Payload{
|
||||||
|
Model: "gpt-3.5-turbo",
|
||||||
|
Messages: messages,
|
||||||
|
}
|
||||||
|
|
||||||
|
str, _ := json.Marshal(&payload)
|
||||||
|
return string(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Request
|
||||||
|
// 请求体
|
||||||
|
type Request struct {
|
||||||
Words string `json:"words"`
|
Words string `json:"words"`
|
||||||
Time int `json:"time"`
|
Time int `json:"time"`
|
||||||
Sign string `json:"sign"`
|
Sign string `json:"sign"`
|
||||||
|
|
66
core/gpt.go
66
core/gpt.go
|
@ -10,70 +10,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// messages
|
|
||||||
var messages []Message
|
|
||||||
|
|
||||||
// Message
|
|
||||||
// 单个消息
|
|
||||||
type Message struct {
|
|
||||||
Role string `json:"role"`
|
|
||||||
Content string `json:"content"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Payload
|
|
||||||
// 请求数据
|
|
||||||
type Payload struct {
|
|
||||||
Model string `json:"model"`
|
|
||||||
Messages []Message `json:"messages"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AnswerItem
|
|
||||||
// 回答数据
|
|
||||||
type AnswerItem struct {
|
|
||||||
FinishReason string `json:"finish_reason"`
|
|
||||||
Index int `json:"index"`
|
|
||||||
Message Message `json:"message"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Answer
|
|
||||||
// 回答
|
|
||||||
type Answer struct {
|
|
||||||
Id string `json:"id"`
|
|
||||||
Object int `json:"object"`
|
|
||||||
Created interface{} `json:"created"`
|
|
||||||
Model string `json:"model"`
|
|
||||||
Usage interface{} `json:"usage"`
|
|
||||||
Choices []AnswerItem `json:"choices"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// GPT
|
|
||||||
type GPT struct {
|
|
||||||
ApiKey string
|
|
||||||
Proxy string
|
|
||||||
Timeout int
|
|
||||||
}
|
|
||||||
|
|
||||||
// BuildPayload
|
|
||||||
// 构建请求数据
|
|
||||||
//
|
|
||||||
// @receiver g
|
|
||||||
// @param question
|
|
||||||
// @return string
|
|
||||||
func (g *GPT) BuildPayload(question string) string {
|
|
||||||
messages = append(messages, Message{
|
|
||||||
Role: "user",
|
|
||||||
Content: question,
|
|
||||||
})
|
|
||||||
|
|
||||||
payload := Payload{
|
|
||||||
Model: "gpt-3.5-turbo",
|
|
||||||
Messages: messages,
|
|
||||||
}
|
|
||||||
|
|
||||||
str, _ := json.Marshal(&payload)
|
|
||||||
return string(str)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HttpClientWithProxy
|
// HttpClientWithProxy
|
||||||
// 返回Http客户端对象
|
// 返回Http客户端对象
|
||||||
//
|
//
|
||||||
|
@ -109,7 +45,7 @@ func (g *GPT) HttpClientWithProxy(proxy string) *http.Client {
|
||||||
// @param question
|
// @param question
|
||||||
// @return Answer
|
// @return Answer
|
||||||
func (g *GPT) GetAnswer(question string) (Answer, error) {
|
func (g *GPT) GetAnswer(question string) (Answer, error) {
|
||||||
payload := g.BuildPayload(question)
|
payload := BuildApiPayload(question)
|
||||||
|
|
||||||
api := "https://api.openai.com/v1/chat/completions"
|
api := "https://api.openai.com/v1/chat/completions"
|
||||||
req, _ := http.NewRequest("POST", api, strings.NewReader(payload))
|
req, _ := http.NewRequest("POST", api, strings.NewReader(payload))
|
||||||
|
|
|
@ -40,17 +40,17 @@ func Handler(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Add("Content-Type", "application/json")
|
w.Header().Add("Content-Type", "application/json")
|
||||||
Timeout, _ := strconv.Atoi(TimeoutValue)
|
Timeout, _ := strconv.Atoi(TimeoutValue)
|
||||||
if r.Method == "POST" {
|
if r.Method == "POST" {
|
||||||
var requestData RequestData
|
var request Request
|
||||||
raw, _ := ioutil.ReadAll(r.Body)
|
raw, _ := ioutil.ReadAll(r.Body)
|
||||||
json.Unmarshal(raw, &requestData)
|
json.Unmarshal(raw, &request)
|
||||||
|
|
||||||
if privateKey != "" && requestData.Sign != MakeSign(requestData, privateKey) {
|
if privateKey != "" && request.Sign != MakeSign(request, privateKey) {
|
||||||
fmt.Fprintln(w, BuildResponse(privateKey, 0, "sign error", ResponseData{}))
|
fmt.Fprintln(w, BuildResponse(privateKey, 0, "sign error", ResponseData{}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
question := util.Base64{
|
question := util.Base64{
|
||||||
Content: []byte(requestData.Words),
|
Content: []byte(request.Words),
|
||||||
}.Decode()
|
}.Decode()
|
||||||
if len(question) > 0 {
|
if len(question) > 0 {
|
||||||
gpt := &GPT{
|
gpt := &GPT{
|
||||||
|
|
Loading…
Reference in New Issue