diff --git a/CHANGELOG.md b/CHANGELOG.md index 02dcbd8d..fa865cd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## v4.0.4 -* Bug修复:修复统一千问第二句不回复的问题。 +* Bug修复:修复统一千问第二句不回复的问题 +* 功能新增:Dalle AI 绘画功能实现 ## v4.0.3 diff --git a/api/handler/markmap_handler.go b/api/handler/markmap_handler.go index bfc905f7..e5d149eb 100644 --- a/api/handler/markmap_handler.go +++ b/api/handler/markmap_handler.go @@ -74,6 +74,7 @@ func (h *MarkMapHandler) Client(c *gin.Context) { logger.Info("Receive a message: ", message.Content) err = h.sendMessage(client, utils.InterfaceToString(message.Content), modelId, userId) if err != nil { + logger.Error(err) utils.ReplyChunkMessage(client, types.WsMessage{Type: types.WsErr, Content: err.Error()}) } @@ -102,7 +103,7 @@ func (h *MarkMapHandler) sendMessage(client *types.WsClient, prompt string, mode } messages := make([]interface{}, 0) - messages = append(messages, types.Message{Role: "system", Content: "你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。只输出 Markdown 内容,不要输出任何解释性的语句。"}) + messages = append(messages, types.Message{Role: "system", Content: "你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。不要输出任何解释性的语句。"}) messages = append(messages, types.Message{Role: "user", Content: prompt}) var req = types.ApiRequest{ Model: chatModel.Value, diff --git a/api/service/mj/service.go b/api/service/mj/service.go index ad118308..2c782d41 100644 --- a/api/service/mj/service.go +++ b/api/service/mj/service.go @@ -53,7 +53,7 @@ func (s *Service) Run() { // translate prompt if utils.HasChinese(task.Prompt) { - content, err := utils.OpenAIRequest(s.db, fmt.Sprintf(service.TranslatePromptTemplate, task.Prompt)) + content, err := utils.OpenAIRequest(s.db, fmt.Sprintf(service.RewritePromptTemplate, task.Prompt)) if err == nil { task.Prompt = content } else { @@ -62,7 +62,7 @@ func (s *Service) Run() { } // translate negative prompt if task.NegPrompt != "" && utils.HasChinese(task.NegPrompt) { - content, err := utils.OpenAIRequest(s.db, fmt.Sprintf(service.TranslatePromptTemplate, task.NegPrompt)) + content, err := utils.OpenAIRequest(s.db, fmt.Sprintf(service.RewritePromptTemplate, task.NegPrompt)) if err == nil { task.NegPrompt = content } else { diff --git a/api/store/model/dalle_job.go b/api/store/model/dalle_job.go new file mode 100644 index 00000000..56bbbcd7 --- /dev/null +++ b/api/store/model/dalle_job.go @@ -0,0 +1,16 @@ +package model + +import "time" + +type DallJob struct { + Id uint `gorm:"primarykey;column:id"` + UserId int + TaskId string + Prompt string + ImgURL string + Publish bool + Power int + Progress int + ErrMsg string + CreatedAt time.Time +} diff --git a/api/store/vo/dalle_job.go b/api/store/vo/dalle_job.go new file mode 100644 index 00000000..d7ca4df1 --- /dev/null +++ b/api/store/vo/dalle_job.go @@ -0,0 +1,14 @@ +package vo + +type DallJob struct { + Id uint `json:"id"` + UserId int `json:"user_id"` + TaskId string `json:"task_id"` + Prompt string `json:"prompt"` + ImgURL string `json:"img_url"` + Publish bool `json:"publish"` + Power int `json:"power"` + Progress int `json:"progress"` + ErrMsg string `json:"err_msg"` + CreatedAt int64 `json:"created_at"` +} diff --git a/database/update-v4.0.4.sql b/database/update-v4.0.4.sql new file mode 100644 index 00000000..3be95643 --- /dev/null +++ b/database/update-v4.0.4.sql @@ -0,0 +1 @@ +CREATE TABLE `chatgpt_plus`.`chatgpt_dalle` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `user_id` INT(11) NOT NULL COMMENT '用户ID' , `task_id` VARCHAR(20) NOT NULL COMMENT '任务ID' , `prompt` VARCHAR(2000) NOT NULL COMMENT '提示词' , `img_url` VARCHAR(255) NOT NULL COMMENT '图片地址' , `publish` TINYINT(1) NOT NULL COMMENT '是否发布' , `power` SMALLINT(3) NOT NULL COMMENT '消耗算力' , `progress` SMALLINT(3) NOT NULL COMMENT '任务进度' , `err_msg` VARCHAR(255) NOT NULL COMMENT '错误信息' , `created_at` DATETIME NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB COMMENT = 'DALLE 绘图任务表'; \ No newline at end of file diff --git a/web/public/images/menu/dalle.png b/web/public/images/menu/dalle.png new file mode 100644 index 00000000..166d2215 Binary files /dev/null and b/web/public/images/menu/dalle.png differ diff --git a/web/src/assets/css/mark-map.styl b/web/src/assets/css/mark-map.styl index d6d11f2a..b28ae05c 100644 --- a/web/src/assets/css/mark-map.styl +++ b/web/src/assets/css/mark-map.styl @@ -112,6 +112,10 @@ width 100% color #ffffff font-size 12px + + .markmap-foreign { + //height 30px + } } } } diff --git a/web/src/views/MarkMap.vue b/web/src/views/MarkMap.vue index 14ad64e1..76c7706d 100644 --- a/web/src/views/MarkMap.vue +++ b/web/src/views/MarkMap.vue @@ -102,14 +102,14 @@ const rightBoxHeight = ref(window.innerHeight - 85) const prompt = ref("") const text = ref(`# Geek-AI 助手 -* 完整的开源系统,前端应用和后台管理系统皆可开箱即用。 -* 基于 Websocket 实现,完美的打字机体验。 -* 内置了各种预训练好的角色应用,轻松满足你的各种聊天和应用需求。 -* 支持 OPenAI,Azure,文心一言,讯飞星火,清华 ChatGLM等多个大语言模型。 -* 支持 MidJourney / Stable Diffusion AI 绘画集成,开箱即用。 -* 支持使用个人微信二维码作为充值收费的支付渠道,无需企业支付通道。 -* 已集成支付宝支付功能,微信支付,支持多种会员套餐和点卡购买功能。 -* 集成插件 API 功能,可结合大语言模型的 function 功能开发各种强大的插件。 +- 完整的开源系统,前端应用和后台管理系统皆可开箱即用。 +- 基于 Websocket 实现,完美的打字机体验。 +- 内置了各种预训练好的角色应用,轻松满足你的各种聊天和应用需求。 +- 支持 OPenAI,Azure,文心一言,讯飞星火,清华 ChatGLM等多个大语言模型。 +- 支持 MidJourney / Stable Diffusion AI 绘画集成,开箱即用。 +- 支持使用个人微信二维码作为充值收费的支付渠道,无需企业支付通道。 +- 已集成支付宝支付功能,微信支付,支持多种会员套餐和点卡购买功能。 +- 集成插件 API 功能,可结合大语言模型的 function 功能开发各种强大的插件。 `) const md = require('markdown-it')({breaks: true}); const content = ref(text.value) @@ -170,6 +170,7 @@ const processContent = (text) => { if (line.indexOf("```") !== -1) { continue } + line = line.replace(/([*_~`>])|(\d+\.)\s/g, '') arr.push(line) } return arr.join("\n") @@ -240,6 +241,7 @@ const connect = (userId) => { break case "end": loading.value = false + content.value = processContent(text.value) nextTick(() => update()) break case "error": @@ -266,6 +268,8 @@ const generate = () => { // 使用 AI 智能生成 const generateAI = () => { + html.value = '' + text.value = '' if (prompt.value === '') { return ElMessage.error("请输入你的需求") }