init: 初始化仓库
This commit is contained in:
90
handler/headmaster/headmaster.go
Normal file
90
handler/headmaster/headmaster.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package headmaster
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.lxtend.com/qqbot/handler"
|
||||
"git.lxtend.com/qqbot/model"
|
||||
"git.lxtend.com/qqbot/util"
|
||||
"github.com/sashabaranov/go-openai"
|
||||
)
|
||||
|
||||
var (
|
||||
histories = make(map[string][]openai.ChatCompletionMessage)
|
||||
histories_time = make(map[string]time.Time)
|
||||
)
|
||||
|
||||
func init() {
|
||||
handler.RegisterHandler("校长", headmasterHandler)
|
||||
handler.RegisterPrivateHandler(headmasterHandler)
|
||||
}
|
||||
|
||||
func headmasterHandler(msg model.Message) (reply model.Reply) {
|
||||
from := util.From(msg.GroupInfo.GroupId, msg.UserId)
|
||||
if len(msg.Msg) > 7 && msg.Msg[0:7] == "校长 " {
|
||||
return model.Reply{
|
||||
ReplyMsg: ask(from, msg.Msg[7:]),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
// nickname := msg.UserNickName
|
||||
return model.Reply{
|
||||
ReplyMsg: ask(from, msg.Msg),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
|
||||
func ask(from string, question string) (reply string) {
|
||||
client := openai.NewClientWithConfig(openai.DefaultAzureConfig("none", "http://127.0.0.1:8000/v1"))
|
||||
resp, err := client.CreateChatCompletion(
|
||||
context.Background(),
|
||||
openai.ChatCompletionRequest{
|
||||
Model: "minimind",
|
||||
Messages: GenRequestFromUsr(from, question),
|
||||
// Messages: []openai.ChatCompletionMessage{
|
||||
// {
|
||||
// Role: openai.ChatMessageRoleUser,
|
||||
// Content: question,
|
||||
// },
|
||||
// },
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("ChatCompletion error: %v\n", err)
|
||||
return
|
||||
}
|
||||
AppendReplyToHistory(from, resp.Choices[0].Message.Content)
|
||||
return enterFormatter(resp.Choices[0].Message.Content)
|
||||
}
|
||||
|
||||
func enterFormatter(msgIn string) string {
|
||||
return strings.ReplaceAll(msgIn, "\\n", "\n")
|
||||
}
|
||||
|
||||
func GenRequestFromUsr(from string, question string) []openai.ChatCompletionMessage {
|
||||
if _, ok := histories[from]; !ok || histories_time[from].Add(2*time.Minute).Before(time.Now()) {
|
||||
histories[from] = make([]openai.ChatCompletionMessage, 0)
|
||||
}
|
||||
histories[from] = append(histories[from], openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: question,
|
||||
})
|
||||
return histories[from]
|
||||
}
|
||||
|
||||
func AppendReplyToHistory(from string, reply string) {
|
||||
histories[from] = append(histories[from], openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleAssistant,
|
||||
Content: reply,
|
||||
})
|
||||
histories_time[from] = time.Now()
|
||||
for len(histories[from]) > 10 {
|
||||
histories[from] = histories[from][1:]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user