🆕 新增群聊对话记录总结

This commit is contained in:
李寻欢
2024-04-12 11:37:21 +08:00
parent 3da8b327d0
commit b3ed0fcc6f
14 changed files with 211 additions and 19 deletions

81
tasks/summary/summary.go Normal file
View File

@@ -0,0 +1,81 @@
package summary
import (
"context"
"fmt"
"github.com/sashabaranov/go-openai"
"go-wechat/config"
"go-wechat/service"
"go-wechat/utils"
"go-wechat/vo"
"log"
"strings"
)
// AiSummary
// @description: AI总结群聊记录
func AiSummary() {
groups, err := service.GetAllEnableSummary()
if err != nil {
log.Printf("获取启用了聊天排行榜的群组失败, 错误信息: %v", err)
return
}
for _, group := range groups {
// 获取对话记录
var records []vo.TextMessageItem
if records, err = service.GetTextMessagesById(group.Wxid); err != nil {
log.Printf("获取群[%s]对话记录失败, 错误信息: %v", group.Wxid, err)
continue
}
//if len(records) < 100 {
// log.Printf("群[%s]对话记录不足100条跳过总结", group.Wxid)
// continue
//}
// 组装对话记录为字符串
var content []string
for _, record := range records {
content = append(content, fmt.Sprintf("%s: %s\n-----end-----", record.Nickname, record.Message))
}
msg := fmt.Sprintf("请帮我总结一下一下的群聊内容的梗概(内容尽可能详细一些)。\n"+
"注意,他们可能是多个话题,请仔细甄别。\n"+
"每一行代表一个人的发言,每一行的的格式为: \n{nickname}: {content}\n-----end-----"+
"\n\n聊天记录如下: \n%s", strings.Join(content, "\n"))
// AI总结
messages := []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: msg,
},
}
// 默认使用AI回复
conf := openai.DefaultConfig(config.Conf.Ai.ApiKey)
if config.Conf.Ai.BaseUrl != "" {
conf.BaseURL = fmt.Sprintf("%s/v1", config.Conf.Ai.BaseUrl)
}
ai := openai.NewClientWithConfig(conf)
var resp openai.ChatCompletionResponse
resp, err = ai.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: config.Conf.Ai.SummaryModel,
Messages: messages,
},
)
if err != nil {
log.Printf("群聊记录总结失败: %v", err.Error())
continue
}
// 返回消息为空
if resp.Choices[0].Message.Content == "" {
continue
}
replyMsg := fmt.Sprintf("#昨日消息总结\n\n%s", resp.Choices[0].Message.Content)
utils.SendMessage(group.Wxid, "", replyMsg, 0)
}
}

View File

@@ -4,6 +4,7 @@ import (
"github.com/go-co-op/gocron"
"go-wechat/config"
"go-wechat/tasks/friends"
"go-wechat/tasks/summary"
"go-wechat/tasks/watergroup"
"log"
"time"
@@ -37,6 +38,13 @@ func InitTasks() {
}
}
// 群聊总结
if config.Conf.Task.GroupSummary.Enable {
log.Printf("群聊总结任务已启用,执行表达式: %s", config.Conf.Task.GroupSummary.Cron)
_, _ = s.Cron(config.Conf.Task.GroupSummary.Cron).Do(summary.AiSummary)
}
// 更新好友列表
if config.Conf.Task.SyncFriends.Enable {
log.Printf("更新好友列表任务已启用,执行表达式: %s", config.Conf.Task.SyncFriends.Cron)