From d6e9dc6839e5bd7e733775e40569369f35e79ebf Mon Sep 17 00:00:00 2001 From: RockYang Date: Fri, 19 Apr 2024 18:22:45 +0800 Subject: [PATCH] fixed markdown generating styles --- CHANGELOG.md | 3 ++- api/handler/markmap_handler.go | 3 ++- api/service/mj/service.go | 4 ++-- api/store/model/dalle_job.go | 16 ++++++++++++++++ api/store/vo/dalle_job.go | 14 ++++++++++++++ database/update-v4.0.4.sql | 1 + web/public/images/menu/dalle.png | Bin 0 -> 1399 bytes web/src/assets/css/mark-map.styl | 4 ++++ web/src/views/MarkMap.vue | 20 ++++++++++++-------- 9 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 api/store/model/dalle_job.go create mode 100644 api/store/vo/dalle_job.go create mode 100644 database/update-v4.0.4.sql create mode 100644 web/public/images/menu/dalle.png 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 0000000000000000000000000000000000000000..166d2215cb465832b89ca5628e5d71e9c97eb95e GIT binary patch literal 1399 zcmV--1&I2IP)Px)F-b&0RA@u(SzU-!Wf*>*Gh^bmo-=D{C0Vu?2?>T|5GkeA&Wz>S4{6$62nLox z2AWseRVJ09W!QyuQ-)H3EA5;?X(_c53W_j_P$4l&$vLx|X3deOPb9wUp?Nxp->4GMq2g=}` zCGbp+*0xbEAgkgYL7nwP*<;h37hAvs`u(OP*zO|HYCx?5TLHBaMyrcbGHAE(-n-DI zeVpLb+GbT)Byd+V48LR!456%w3jwVbFgpy%MmB^yFUPi?+INejL@%7j{K!}DNC3O? zOnp_2<0~L&X2J*}*p;KXuwwg=3T-8z128%ObpW_I3{KU~)B}|FCXnd*nC6d71!Ps6 z2Izo*YoiTtskOk)Jk7n{zXKCuYz8zr4(6b*)-)B6QSlWobm9+`oNV*zUp$c!ESSS1hd<5u`xPz6DxPCude;pnHfR6y@Ab`8$3aAdDw49X$w#3D};D4CVt9~o+ z4WJou2dhou2UWbajB+QCSO92l6np{Sdw4);ugwXcdA>dZ3P%Cn5@i4%+vjasn`_^v zRk#CCCt<7$8i&y098Sy@Ub0o?NC@d*&hW|h96iR?is}5tn&dhXSc!fzzfQaMg!8^Um z>wXp5lQ50|8e8Sl3nZsi&XGn~u>=r&I7f3&BjBL8uJ}~PcSg?p0G_DA+iBB!(r*%C z2>=F9+1f#}a+V74Dy*RAEt}Q~&nT_p0zzFC2LX5GX?;0t0t}3q(#@6=jRpvR5#&iA zF{=_Lm#wJJ$O+5=L2L6&ZD=GQBj;TJzRN#2)BeSKR?e0jt>-R#4tRh9m*r{hsDO9s zWXpMsTOHdzla*RdJngNA&`ycGU5UR%}O9~u8h*+sNpplR^WA;)(e$6Ps`a!U`doU z7_k)~a4<*fk~_{^DLEF!!%=c&qy&@*-jk#GdHq4xH$y0U{|8++`dx=pK>zI$;MCg2 z6oFMaTAP}MN>h-aa2>7g<11JwV_z zz&SaZUPHG3nXj`q3Z*XuS2j~qf=Go;YC-4nOf?L(Ay;J0ZlY-w?lWMVYZUi>f--Wx z_DSkfHmyk!uM&PWvDVm3Z45iZVeHcCokX}^->AV%>zK_{dqe@nCS3{bu$fvGhE!CW zta|4P?kDwr{MM#<-zq8a9`k=0IA-U4#}@fV`x2 z>w$y#M1D^s?ycrajIjjVPg1Id!$_5ti8 z)aQbI2FiT^j_25RJPfnI6$k?|k~aSf7|Gf9#=hcL;2#N&HP%EK(x(6b002ovPDHLk FV1k7&kTL)O literal 0 HcmV?d00001 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("请输入你的需求") }