promote_controller.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package llm
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/controllers/llm/llm_http"
  6. "eta/eta_api/models"
  7. "eta/eta_api/models/rag"
  8. "eta/eta_api/services/llm/facade"
  9. "eta/eta_api/utils"
  10. "time"
  11. )
  12. type PromoteController struct {
  13. controllers.BaseAuthController
  14. }
  15. // GenerateContent @Title 生成问答内容
  16. // @Description 生成问答内容
  17. // @Success 101 {object} response.ListResp
  18. // @router /promote/generate_content [post]
  19. func (pCtrl *PromoteController) GenerateContent() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. pCtrl.Data["json"] = br
  23. pCtrl.ServeJSON()
  24. }()
  25. var gcReq llm_http.GenerateContentReq
  26. err := json.Unmarshal(pCtrl.Ctx.Input.RequestBody, &gcReq)
  27. if err != nil {
  28. br.Msg = "参数解析异常!"
  29. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  30. return
  31. }
  32. sysUser := pCtrl.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. if gcReq.Promote == "" {
  40. br.Msg = "提示词不能为空"
  41. br.ErrMsg = "提示词不能为空"
  42. return
  43. }
  44. if gcReq.WechatArticleId <= 0 {
  45. br.Msg = "公众号文章编号非法"
  46. br.ErrMsg = "公众号文章编号非法"
  47. return
  48. }
  49. userSendTime := time.Now()
  50. userContent := llm_http.Content{
  51. Content: gcReq.Promote,
  52. Role: "user",
  53. SendTime: userSendTime.Format(utils.FormatDateTime),
  54. }
  55. res, err := facade.AIGCBaseOnPromote(facade.AIGC{
  56. Promote: gcReq.Promote,
  57. ArticleId: gcReq.WechatArticleId,
  58. })
  59. if err != nil {
  60. br.Msg = "内容生成失败"
  61. br.ErrMsg = "内容生成失败,Err:" + err.Error()
  62. return
  63. }
  64. aiSendTime:=time.Now()
  65. aiContent := llm_http.Content{
  66. Content: res.Answer,
  67. Role: "assistant",
  68. SendTime: aiSendTime.Format(utils.FormatDateTime),
  69. }
  70. br.Data = llm_http.AIGCResp{
  71. Promote: userContent,
  72. Answer: aiContent,
  73. }
  74. saveContentReq := rag.PromoteTrainRecord{
  75. WechatArticleId: gcReq.WechatArticleId,
  76. Title: userContent.Content,
  77. AigcContent: res.Answer,
  78. AigcSendTime: aiSendTime,
  79. TemplatePromote: userContent.Content,
  80. PromoteSendTime: userSendTime,
  81. CreatedTime: time.Now(),
  82. }
  83. err = saveContentReq.SaveContent()
  84. if err != nil {
  85. br.Msg = "保存内容失败"
  86. br.ErrMsg = "保存内容失败,err:" + err.Error()
  87. return
  88. }
  89. br.Ret = 200
  90. br.Success = true
  91. br.Msg = "内容生成成功"
  92. }
  93. // SavePromoteContent @Title 保存问答内容
  94. // @Description 生成问答内容
  95. // @Success 101 {object} response.ListResp
  96. // @router /promote/save_content [post]
  97. func (pCtrl *PromoteController) SavePromoteContent() {
  98. br := new(models.BaseResponse).Init()
  99. defer func() {
  100. pCtrl.Data["json"] = br
  101. pCtrl.ServeJSON()
  102. }()
  103. var gcReq llm_http.SaveContentReq
  104. err := json.Unmarshal(pCtrl.Ctx.Input.RequestBody, &gcReq)
  105. if err != nil {
  106. br.Msg = "参数解析异常!"
  107. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  108. return
  109. }
  110. sysUser := pCtrl.SysUser
  111. if sysUser == nil {
  112. br.Msg = "请登录"
  113. br.ErrMsg = "请登录,SysUser Is Empty"
  114. br.Ret = 408
  115. return
  116. }
  117. if gcReq.Promote == nil {
  118. br.Msg = "提示词内容不能为空"
  119. br.ErrMsg = "提示词不能为空"
  120. return
  121. }
  122. if gcReq.AigcContent == nil {
  123. br.Msg = "回答内容不能为空"
  124. br.ErrMsg = "提示词不能为空"
  125. return
  126. }
  127. if gcReq.WechatArticleId <= 0 {
  128. br.Msg = "公众号文章编号非法"
  129. br.ErrMsg = "公众号文章编号非法"
  130. return
  131. }
  132. var userContent, assistantContent llm_http.Content
  133. parseErr := json.Unmarshal(gcReq.AigcContent, &assistantContent)
  134. if parseErr != nil {
  135. br.Msg = "内容参数解析异常!"
  136. br.ErrMsg = "内容参数解析异,err" + parseErr.Error()
  137. return
  138. }
  139. parseErr = json.Unmarshal(gcReq.Promote, &userContent)
  140. if parseErr != nil {
  141. br.Msg = "内容参数解析异常!"
  142. br.ErrMsg = "内容参数解析异,err" + parseErr.Error()
  143. return
  144. }
  145. var titile string
  146. if gcReq.Title != "" {
  147. titile = gcReq.Title
  148. } else {
  149. titile = userContent.Content
  150. }
  151. var userSendTime, assistantSendTime time.Time
  152. if userContent.SendTime != "" {
  153. userSendTime, parseErr = time.ParseInLocation(utils.FormatDateTime, userContent.SendTime, time.Local)
  154. if parseErr != nil {
  155. br.Msg = "用户发送时间解析异常!"
  156. br.ErrMsg = "用户发送时间解析异常,err" + parseErr.Error()
  157. return
  158. }
  159. } else {
  160. br.Msg = "用户发送时间不能为空!"
  161. br.ErrMsg = "用户发送时间不能为空"
  162. return
  163. }
  164. if assistantContent.SendTime != "" {
  165. assistantSendTime, parseErr = time.ParseInLocation(utils.FormatDateTime, assistantContent.SendTime, time.Local)
  166. if parseErr != nil {
  167. br.Msg = "AI生成时间解析异常!"
  168. br.ErrMsg = "AI生成时间解析异常,err" + parseErr.Error()
  169. return
  170. }
  171. } else {
  172. br.Msg = "AI生成时间不能为空!"
  173. br.ErrMsg = "AI生成时间不能为空"
  174. return
  175. }
  176. saveContentReq := rag.PromoteTrainRecord{
  177. WechatArticleId: gcReq.WechatArticleId,
  178. Title: titile,
  179. AigcContent: assistantContent.Content,
  180. AigcSendTime: assistantSendTime,
  181. TemplatePromote: userContent.Content,
  182. PromoteSendTime: userSendTime,
  183. CreatedTime: time.Now(),
  184. }
  185. err = saveContentReq.SaveContent()
  186. if err != nil {
  187. br.Msg = "保存内容失败"
  188. br.ErrMsg = "保存内容失败,err:" + err.Error()
  189. return
  190. }
  191. br.Ret = 200
  192. br.Success = true
  193. br.Msg = "保存内容成功"
  194. }
  195. // DeletePromoteContent @Title 删除问答内容
  196. // @Description 生成问答内容
  197. // @Success 101 {object} response.ListResp
  198. // @router /promote/delete_content [post]
  199. func (pCtrl *PromoteController) DeletePromoteContent() {
  200. br := new(models.BaseResponse).Init()
  201. defer func() {
  202. pCtrl.Data["json"] = br
  203. pCtrl.ServeJSON()
  204. }()
  205. var gcReq llm_http.DeleteContentReq
  206. err := json.Unmarshal(pCtrl.Ctx.Input.RequestBody, &gcReq)
  207. if err != nil {
  208. br.Msg = "参数解析异常!"
  209. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  210. return
  211. }
  212. sysUser := pCtrl.SysUser
  213. if sysUser == nil {
  214. br.Msg = "请登录"
  215. br.ErrMsg = "请登录,SysUser Is Empty"
  216. br.Ret = 408
  217. return
  218. }
  219. if gcReq.RecordId <= 0 {
  220. br.Msg = "记录编号非法"
  221. br.ErrMsg = "记录编号非法"
  222. return
  223. }
  224. err = rag.DeleteContent(gcReq.RecordId)
  225. if err != nil {
  226. br.Msg = "删除内容失败"
  227. br.ErrMsg = "删除内容失败,err:" + err.Error()
  228. return
  229. }
  230. br.Ret = 200
  231. br.Success = true
  232. br.Msg = "删除内容成功"
  233. }
  234. // PromoteContentList @Title 删除问答内容
  235. // @Description 生成问答内容
  236. // @Success 101 {object} response.ListResp
  237. // @router /promote/content_list [get]
  238. func (pCtrl *PromoteController) PromoteContentList() {
  239. br := new(models.BaseResponse).Init()
  240. defer func() {
  241. pCtrl.Data["json"] = br
  242. pCtrl.ServeJSON()
  243. }()
  244. wechatArticleId, _ := pCtrl.GetInt("WechatArticleId")
  245. sysUser := pCtrl.SysUser
  246. if sysUser == nil {
  247. br.Msg = "请登录"
  248. br.ErrMsg = "请登录,SysUser Is Empty"
  249. br.Ret = 408
  250. return
  251. }
  252. if wechatArticleId <= 0 {
  253. br.Msg = "记录编号非法"
  254. br.ErrMsg = "记录编号非法"
  255. return
  256. }
  257. list, err := rag.GetRecordList(wechatArticleId)
  258. if err != nil {
  259. br.Msg = "查询列表失败"
  260. br.ErrMsg = "查询列表失败,err:" + err.Error()
  261. return
  262. }
  263. br.Data = list
  264. br.Ret = 200
  265. br.Success = true
  266. br.Msg = "查询列表成功"
  267. }