promote_controller.go 6.6 KB

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