package llm import ( "encoding/json" "eta/eta_api/cache" "eta/eta_api/controllers" "eta/eta_api/models" "eta/eta_api/models/rag" "eta/eta_api/models/rag/request" "eta/eta_api/models/rag/response" "eta/eta_api/services" "eta/eta_api/services/elastic" "eta/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "strconv" "strings" ) // AbstractController // @Description: 摘要管理 type AbstractController struct { controllers.BaseAuthController } // List // @Title 列表 // @Description 列表 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} []*rag.QuestionListListResp // @router /abstract/list [get] func (c *AbstractController) List() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") keyWord := c.GetString("KeyWord") tagIdStr := c.GetString("TagId") tagIdList := make([]int, 0) if tagIdStr != `` { tagIdStrList := strings.Split(tagIdStr, `,`) for _, v := range tagIdStrList { if v == `0` { continue } tagId, tmpErr := strconv.Atoi(v) if tmpErr != nil { br.Msg = "标签ID有误" br.ErrMsg = fmt.Sprintf("标签ID有误, %s", v) return } tagIdList = append(tagIdList, tagId) } } var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) // 获取列表 total, viewList, err := getAbstractList(keyWord, tagIdList, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := response.AbstractListListResp{ List: viewList, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } func getAbstractList(keyWord string, tagList []int, startSize, pageSize int) (total int, viewList []rag.WechatArticleAbstractView, err error) { //if keyWord == `` { // var condition string // var pars []interface{} // condition += fmt.Sprintf(` AND c.%s = ?`, rag.WechatPlatformColumns.Enabled) // pars = append(pars, 1) // // if keyWord != "" { // condition += fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content) // pars = append(pars, `%`+keyWord+`%`) // } // // if tagId > 0 { // condition += fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID) // pars = append(pars, tagId) // } // // obj := new(rag.WechatArticleAbstract) // tmpTotal, list, tmpErr := obj.GetPageListByTagAndPlatformCondition(condition, pars, startSize, pageSize) // if tmpErr != nil { // err = tmpErr // return // } // total = tmpTotal // viewList = obj.WechatArticleAbstractItem(list) //} else { // sortMap := map[string]string{ // //"ModifyTime": "desc", // //"WechatArticleAbstractId": "desc", // } // // obj := new(rag.WechatPlatform) // platformList, tmpErr := obj.GetListByCondition(` AND enabled = 1 `, []interface{}{}, 0, 100000) // if tmpErr != nil { // err = tmpErr // return // } // platformIdList := make([]int, 0) // for _, v := range platformList { // platformIdList = append(platformIdList, v.WechatPlatformId) // } // tagList := make([]int, 0) // if tagId > 0 { // tagList = append(tagList, tagId) // } // tmpTotal, list, tmpErr := elastic.WechatArticleAbstractEsSearch(keyWord, tagList, platformIdList, startSize, pageSize, sortMap) // if tmpErr != nil { // err = tmpErr // return // } // total = int(tmpTotal) // if list != nil && len(list) > 0 { // viewList = list[0].ToViewList(list) // } //} sortMap := map[string]string{ //"ModifyTime": "desc", //"WechatArticleAbstractId": "desc", } obj := new(rag.WechatPlatform) platformList, tmpErr := obj.GetListByCondition(` AND enabled = 1 `, []interface{}{}, 0, 100000) if tmpErr != nil { err = tmpErr return } platformIdList := make([]int, 0) for _, v := range platformList { platformIdList = append(platformIdList, v.WechatPlatformId) } tmpTotal, list, tmpErr := elastic.WechatArticleAbstractEsSearch(keyWord, tagList, platformIdList, startSize, pageSize, sortMap) if tmpErr != nil { err = tmpErr return } total = int(tmpTotal) if list != nil && len(list) > 0 { viewList = list[0].ToViewList(list) } return } // Del // @Title 删除摘要 // @Description 删除摘要 // @Param request body request.BeachOpAbstractReq true "type json string" // @Success 200 Ret=200 新增成功 // @router /abstract/del [post] func (c *AbstractController) Del() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() var req request.BeachOpAbstractReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if len(req.WechatArticleAbstractIdList) <= 0 && !req.IsSelectAll { br.Msg = "请选择摘要" br.IsSendEmail = false return } vectorKeyList := make([]string, 0) wechatArticleAbstractIdList := make([]int, 0) obj := rag.WechatArticleAbstract{} list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() if utils.IsErrNoRow(err) { br.Msg = "问题不存在" br.IsSendEmail = false } return } if len(list) > 0 { for _, v := range list { // 有加入到向量库,那么就加入到待删除的向量库list中 if v.VectorKey != `` { vectorKeyList = append(vectorKeyList, v.VectorKey) } wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) } } //if !req.IsSelectAll { // list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // // 有加入到向量库,那么就加入到待删除的向量库list中 // if v.VectorKey != `` { // vectorKeyList = append(vectorKeyList, v.VectorKey) // } // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} else { // notIdMap := make(map[int]bool) // for _, v := range req.NotWechatArticleAbstractIdList { // notIdMap[v] = true // } // // _, list, err := getAbstractList(req.KeyWord, req.TagId, 0, 100000) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // if notIdMap[v.WechatArticleAbstractId] { // continue // } // // 有加入到向量库,那么就加入到待删除的向量库list中 // if v.VectorKey != `` { // vectorKeyList = append(vectorKeyList, v.VectorKey) // } // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} // 删除向量库 err = services.DelLlmDoc(vectorKeyList, wechatArticleAbstractIdList) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除向量库失败,Err:" + err.Error() return } // 删除摘要 err = obj.DelByIdList(wechatArticleAbstractIdList) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,Err:" + err.Error() return } // 删除es数据 for _, wechatArticleAbstractId := range wechatArticleAbstractIdList { go services.DelEsWechatArticleAbstract(wechatArticleAbstractId) } br.Ret = 200 br.Success = true br.Msg = `删除成功` } // VectorDel // @Title 删除摘要向量库 // @Description 删除摘要向量库 // @Param request body request.BeachOpAbstractReq true "type json string" // @Success 200 Ret=200 新增成功 // @router /abstract/vector/del [post] func (c *AbstractController) VectorDel() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() var req request.BeachOpAbstractReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if len(req.WechatArticleAbstractIdList) <= 0 && !req.IsSelectAll { br.Msg = "请选择摘要" br.IsSendEmail = false return } vectorKeyList := make([]string, 0) wechatArticleAbstractIdList := make([]int, 0) obj := rag.WechatArticleAbstract{} list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() if utils.IsErrNoRow(err) { br.Msg = "问题不存在" br.IsSendEmail = false } return } if len(list) > 0 { for _, v := range list { // 有加入到向量库,那么就加入到待删除的向量库list中 if v.VectorKey != `` { vectorKeyList = append(vectorKeyList, v.VectorKey) } wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) } } //if !req.IsSelectAll { // list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // // 有加入到向量库,那么就加入到待删除的向量库list中 // if v.VectorKey != `` { // vectorKeyList = append(vectorKeyList, v.VectorKey) // } // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} else { // notIdMap := make(map[int]bool) // for _, v := range req.NotWechatArticleAbstractIdList { // notIdMap[v] = true // } // _, list, err := getAbstractList(req.KeyWord, req.TagId, 0, 100000) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // if notIdMap[v.WechatArticleAbstractId] { // continue // } // // // 有加入到向量库,那么就加入到待删除的向量库list中 // if v.VectorKey != `` { // vectorKeyList = append(vectorKeyList, v.VectorKey) // } // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} // 删除摘要库 err = services.DelLlmDoc(vectorKeyList, wechatArticleAbstractIdList) if err != nil { br.Msg = "删除失败" br.ErrMsg = "删除失败,Err:" + err.Error() return } // 修改ES数据 for _, wechatArticleAbstractId := range wechatArticleAbstractIdList { go services.AddOrEditEsWechatArticleAbstract(wechatArticleAbstractId) } br.Ret = 200 br.Success = true br.Msg = `删除成功` } // AddVector // @Title 删除摘要向量库 // @Description 删除摘要向量库 // @Param request body request.BeachOpAbstractReq true "type json string" // @Success 200 Ret=200 新增成功 // @router /abstract/vector/add [post] func (c *AbstractController) AddVector() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() var req request.BeachOpAbstractReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if len(req.WechatArticleAbstractIdList) <= 0 && !req.IsSelectAll { br.Msg = "请选择摘要" br.IsSendEmail = false return } wechatArticleAbstractIdList := make([]int, 0) obj := rag.WechatArticleAbstract{} list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() if utils.IsErrNoRow(err) { br.Msg = "问题不存在" br.IsSendEmail = false } return } if len(list) > 0 { for _, v := range list { wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) } } //if !req.IsSelectAll { // list, err := obj.GetByIdList(req.WechatArticleAbstractIdList) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} else { // notIdMap := make(map[int]bool) // for _, v := range req.NotWechatArticleAbstractIdList { // notIdMap[v] = true // } // // _, list, err := getAbstractList(req.KeyWord, req.TagId, 0, 100000) // if err != nil { // br.Msg = "修改失败" // br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error() // if utils.IsErrNoRow(err) { // br.Msg = "问题不存在" // br.IsSendEmail = false // } // return // } // if len(list) > 0 { // for _, v := range list { // if notIdMap[v.WechatArticleAbstractId] { // continue // } // wechatArticleAbstractIdList = append(wechatArticleAbstractIdList, v.WechatArticleAbstractId) // } // } //} for _, wechatArticleAbstractId := range wechatArticleAbstractIdList { cache.AddWechatArticleLlmOpToCache(wechatArticleAbstractId, ``) } br.Ret = 200 br.Success = true br.Msg = `添加向量库中,请稍后查看` } // //func init() { // obj := rag.WechatArticle{} // item, tmpErr := obj.GetById(1722) // if tmpErr != nil { // // 找不到就处理失败 // return // } // services.GenerateWechatArticleAbstract(item, false) //}