添加豆包会话文件内容添加,目前图片已完成,文件内容未测试

This commit is contained in:
junleea 2025-04-07 18:00:24 +08:00
parent 7850126c50
commit d148d453b8
4 changed files with 15 additions and 12 deletions

View File

@ -206,13 +206,13 @@ func doReceiveGenChatMessage(userId int, sessionID *uint, data *proto.WSMessageR
}
var err error
sessionName := ""
if data.IsImage {
var imgMsg proto.UserImageMsg
err = json.Unmarshal([]byte(data.Msg), &imgMsg)
if data.IsImage || data.IsFile {
var fileMsg proto.UserFileMessage
err = json.Unmarshal([]byte(data.Msg), &fileMsg)
if err != nil {
log.Println("Error parsing JSON:", err)
}
sessionName = imgMsg.Text
sessionName = fileMsg.Text
} else {
sessionName = data.Msg
}
@ -258,7 +258,7 @@ func doReceiveGenChatMessage(userId int, sessionID *uint, data *proto.WSMessageR
var userMsgID uint
status := proto.MsgHasRead
if data.IsImage {
if data.IsImage || data.IsFile {
status = proto.UserToModelImageMsgType //图片类型
}
//将消息存入数据库

View File

@ -26,6 +26,7 @@ type WSMessageReq struct {
ToID int `json:"to_id"` //接收者id
ModelID uint `json:"model_id"` //模型id
IsImage bool `json:"is_image"` //是否为图片(图片消息)如果是图片消息则msg为图片消息结构为{"img_url":"","text":""}
IsFile bool `json:"is_file"` //是否为文件(文件消息)如果是文件消息则msg为文件消息结构为{"file_url":"","text":""}
}
type ModelParam struct {

View File

@ -167,7 +167,7 @@ const (
// 文件类型(文本、图片)
const (
DownloadFileBaseURL = "https://pm.ljsea.top/tool/"
DownloadFileBaseURL = "https://pm.ljsea.top/tool/file/"
FileTypeText = "text_file"
FileTypeImage = "image_file"
)

View File

@ -86,7 +86,7 @@ func DouBaoV2(modelParam proto.ModelParam, imCtx *proto.IMParamContext) {
)
ctx := context.Background()
messages := make([]*model.ChatCompletionMessage, 0)
err := GetDouBaoSessionHistoryMsg(imCtx.SessionID, modelParam.System, &messages, imCtx.Question)
err := GetDouBaoSessionHistoryMsgV2(imCtx.SessionID, modelParam.System, &messages, imCtx.UserID)
if err != nil {
log.Println("get doubao session history message error:", err)
}
@ -273,12 +273,13 @@ func GetDouBaoSessionHistoryMsgV2(sessionID int, systemPrompt string, messages *
//只取最后的 SparkContextLength 条消息
msgs = msgs[len(msgs)-proto.DouBaoContextLength-1:]
}
for _, v := range msgs {
//log.Println("get doubao session history message:", msgs)
for i, v := range msgs {
var message model.ChatCompletionMessage
if v.Type == proto.UserToModelMsgType {
message.Role = model.ChatMessageRoleUser
//用户消息为有图片类型
if v.Status == proto.UserToModelFileMsgType {
//用户消息为有图片类型且是最后一条消息
if v.Status == proto.UserToModelFileMsgType && i == len(msgs)-1 {
listValue, err2 := decodeFileMessageToDouBaoMessage(v.Msg, userID)
if err2 != nil {
log.Println("unmarshal user image message error:", err2)
@ -315,14 +316,15 @@ func decodeFileMessageToDouBaoMessage(msg string, userID int) ([]*model.ChatComp
log.Println("DouBao unmarshal file message error:", err)
return nil, err
}
log.Println("doubaov2,decode file message:", fileMsgContent)
var listValue []*model.ChatCompletionMessageContentPart
for _, file := range fileMsgContent.FileContent {
//文件消息为文本类型,则获取文本内容,若为图片则添加图片链接
if file.FileType == proto.FileTypeText {
fileContents, err2 := FindFileContentV2(file.FileContent.FileID, userID)
if err2 != nil {
log.Println("doubao find file content error:", err2)
return nil, err2
log.Println("doubao find file content error:", err2, "\t,file id:", file.FileContent.FileID, "\t,file name:", file.FileContent.UserFileName)
continue
}
fileContent := fileContents[0].FileContent
//文件文本内容