Browse Source

Merge branch 'feature/deepseek_rag_2.0' into debug

kobe6258 2 weeks ago
parent
commit
95f04c7a4f

+ 2 - 50
controllers/llm/promote_controller.go

@@ -15,54 +15,6 @@ type PromoteController struct {
 	controllers.BaseAuthController
 }
 
-// PromoteTrainRecordList @Title 获取聊天记录
-// @Description 获取聊天记录
-// @Success 101 {object} response.ListResp
-// @router /promote/train_list [get]
-func (pCtrl *PromoteController) PromoteTrainRecordList() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		pCtrl.Data["json"] = br
-		pCtrl.ServeJSON()
-	}()
-	sysUser := pCtrl.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-
-	pageSize, _ := pCtrl.GetInt("PageSize")
-	currentIndex, _ := pCtrl.GetInt("CurrentIndex")
-
-	//var total, startSize int
-	if pageSize <= 0 {
-		pageSize = utils.PageSize5
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
-	}
-	//startSize = paging.StartIndex(currentIndex, pageSize)
-	//page := paging.GetPaging(currentIndex, pageSize, total)
-	//total, err := rag.CountQuestionList()
-	//if err != nil {
-	//	br.Msg = "获取失败"
-	//	br.ErrMsg = "获取失败,Err:" + err.Error()
-	//	return
-	//}
-	//list, err := models.GetPptV2List(condition, pars, startSize, pageSize)
-	//if err != nil {
-	//	br.Msg = "获取失败"
-	//	br.ErrMsg = "获取失败,Err:" + err.Error()
-	//	return
-	//}
-	br.Data = nil
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取聊天记录成功"
-}
-
 // GenerateContent @Title 生成问答内容
 // @Description 生成问答内容
 // @Success 101 {object} response.ListResp
@@ -165,13 +117,13 @@ func (pCtrl *PromoteController) SavePromoteContent() {
 		return
 	}
 	var userContent, assistantContent llm_http.Content
-	parseErr := json.Unmarshal([]byte(gcReq.AigcContent), &assistantContent)
+	parseErr := json.Unmarshal(gcReq.AigcContent, &assistantContent)
 	if parseErr != nil {
 		br.Msg = "内容参数解析异常!"
 		br.ErrMsg = "内容参数解析异,err" + parseErr.Error()
 		return
 	}
-	parseErr = json.Unmarshal([]byte(gcReq.Promote), &userContent)
+	parseErr = json.Unmarshal(gcReq.Promote, &userContent)
 	if parseErr != nil {
 		br.Msg = "内容参数解析异常!"
 		br.ErrMsg = "内容参数解析异,err" + parseErr.Error()

+ 0 - 9
routers/commentsRouter.go

@@ -8728,15 +8728,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_api/controllers/llm:PromoteController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/llm:PromoteController"],
-        beego.ControllerComments{
-            Method: "PromoteTrainRecordList",
-            Router: `/promote/train_list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_api/controllers/llm:QuestionController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/llm:QuestionController"],
         beego.ControllerComments{
             Method: "Add",

+ 6 - 0
services/llm/facade/bus_response/eta_response.go

@@ -10,3 +10,9 @@ type AIGCEtaResponse struct {
 	Answer string   `json:"answer"`
 	Docs   []string `json:"docs"`
 }
+
+type FileChatBaseResponse struct {
+	Data AIGCEtaResponse `json:"data"`
+	Msg  string          `json:"msg"`
+	Code int             `json:"code"`
+}

+ 68 - 82
services/llm/facade/llm_service.go

@@ -57,7 +57,6 @@ func AIGCBaseOnPromote(aigc AIGC) (resp bus_response.AIGCEtaResponse, err error)
 	} else {
 		var kbId string
 		var file *os.File
-		params := make(map[string]interface{})
 		if mapping.Id == 0 || mapping.KbId == "" {
 			article, fileErr := rag.GetArticleById(aigc.ArticleId)
 			if fileErr != nil {
@@ -81,7 +80,7 @@ func AIGCBaseOnPromote(aigc AIGC) (resp bus_response.AIGCEtaResponse, err error)
 				utils.FileLog.Error("打开文件失败,err:", err)
 				return
 			}
-			uploadResp, httpErr := llmService.UploadFileToTemplate([]*os.File{file}, params)
+			uploadResp, httpErr := llmService.UploadFileToTemplate([]*os.File{file}, nil)
 			if httpErr != nil {
 				utils.FileLog.Error("上传文件失败,err:", err.Error())
 				err = fmt.Errorf("上传文件失败,err:%v", httpErr)
@@ -113,98 +112,43 @@ func AIGCBaseOnPromote(aigc AIGC) (resp bus_response.AIGCEtaResponse, err error)
 			err = fmt.Errorf("内容生成失败,err:%v", httpErr)
 			return
 		}
-		if !response.Success {
-			utils.FileLog.Error("内容生成失败,code:%v,msg:%v", response.Ret, response.Msg)
-			err = fmt.Errorf("内容生成失败,code:%v,msg:%v", response.Ret, response.Msg)
+
+		gcResp, gcErr := dealFileChatResp(response)
+		if gcErr != nil {
+			utils.FileLog.Error("内容生成失败,err:%v", gcErr.Error())
+			err = fmt.Errorf("内容生成失败,err:%v", gcErr)
 			return
-		} else {
-			var dataStr string
-			// 按行分割输入
-			lines := strings.Split(string(response.Data), "\n")
-			// 遍历每一行,提取以 "data:" 开头的内容
-			for _, line := range lines {
-				if !strings.HasPrefix(line, ": ping") && strings.TrimSpace(line) != "" {
-					// 去掉 "data:" 前缀
-					dataStr += line
-				}
-			}
-			// 去除 "data: " 前缀
-			if strings.HasPrefix(dataStr, "data: ") {
-				dataStr = strings.TrimPrefix(dataStr, "data: ")
-				parseErr := json.Unmarshal([]byte(dataStr), &resp)
-				if parseErr != nil {
-					utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
-					err = fmt.Errorf("内容生成失败,err:%v", parseErr)
-					return
-				}
+		}
+		if gcResp.Code == 200 {
+			resp = gcResp.Data
+			return
+		}
+		if gcResp.Code == 404 {
+			response, httpErr = llmService.FileChat(aigc.Promote, kbId, nil)
+			if httpErr != nil {
+				utils.FileLog.Error("内容生成失败,err:%v", httpErr.Error())
+				err = fmt.Errorf("内容生成失败,err:%v", httpErr)
 				return
-			} else {
-				var baseResp eta_llm_http.RagBaseResponse
-				parseErr := json.Unmarshal([]byte(dataStr), &baseResp)
-				if parseErr != nil {
-					utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
-					err = fmt.Errorf("内容生成失败,err:%v", parseErr)
-					return
-				}
-				if baseResp.Code == 404 {
-					params["PrevId"] = kbId
-					_, putErr := llmService.UploadFileToTemplate([]*os.File{file}, params)
-					if putErr != nil {
-						utils.FileLog.Error("内容生成失败,err:", err.Error())
-						err = fmt.Errorf("内容生成失败,err:%v", httpErr)
-						return
-					}
-				} else {
-					utils.FileLog.Error("内容生成失败,code:%v", baseResp.Code)
-					err = fmt.Errorf("内容生成失败,code:%v", baseResp.Code)
-					return
-				}
 			}
-			gcResp, gcErr := llmService.FileChat(aigc.Promote, kbId, nil)
+			gcResp, gcErr = dealFileChatResp(response)
 			if gcErr != nil {
 				utils.FileLog.Error("内容生成失败,err:%v", gcErr.Error())
 				err = fmt.Errorf("内容生成失败,err:%v", gcErr)
 				return
 			}
-			if !gcResp.Success {
-				utils.FileLog.Error("内容生成失败,code:%v,msg:%v", gcResp.Ret, gcResp.Msg)
-				err = fmt.Errorf("内容生成失败,err:%v", gcResp.Msg)
-			}
-
-			var gcStr string
-			// 按行分割输入
-			lines = strings.Split(string(gcResp.Data), "\n")
-			// 遍历每一行,提取以 "data:" 开头的内容
-			for _, line := range lines {
-				if !strings.HasPrefix(line, ": ping") && strings.TrimSpace(line) != "" {
-					// 去掉 "data:" 前缀
-					gcStr += line
-				}
-			}
-			// 去除 "data: " 前缀
-			if strings.HasPrefix(dataStr, "data: ") {
-				dataStr = strings.TrimPrefix(dataStr, "data: ")
-				parseErr := json.Unmarshal([]byte(dataStr), &resp)
-				if parseErr != nil {
-					utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
-					err = fmt.Errorf("内容生成失败,err:%v", parseErr)
-					return
-				}
-			} else {
-				var baseResp eta_llm_http.RagBaseResponse
-				parseErr := json.Unmarshal([]byte(dataStr), &baseResp)
-				if parseErr != nil {
-					utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
-					err = fmt.Errorf("内容生成失败,err:%v", parseErr)
-					return
-				}
-				utils.FileLog.Error("内容生成失败,code:%v", baseResp.Code)
-				err = fmt.Errorf("内容生成失败,code:%v", baseResp.Code)
+			if gcResp.Code == 200 {
+				resp = gcResp.Data
 				return
 			}
+			utils.FileLog.Error("内容生成失败,err:%v", gcResp.Code, gcResp.Msg)
+			err = fmt.Errorf("内容生成失败,code:%v,err:%v", gcResp.Code, gcResp.Msg)
+			return
+		} else {
+			utils.FileLog.Error("内容生成失败,code:%v,msg:%v", gcResp.Code, gcResp.Msg)
+			err = fmt.Errorf("内容生成失败,err:%v", gcResp.Msg)
+			return
 		}
 	}
-	return
 }
 
 type LLMKnowledgeSearch struct {
@@ -216,3 +160,45 @@ type AIGC struct {
 	Promote   string
 	ArticleId int
 }
+
+func dealFileChatResp(response eta_llm_http.BaseResponse) (httpResponse bus_response.FileChatBaseResponse, err error) {
+	if !response.Success {
+		utils.FileLog.Error("内容生成失败,code:%v,msg:%v", response.Ret, response.Msg)
+		err = fmt.Errorf("内容生成失败,code:%v,msg:%v", response.Ret, response.Msg)
+		return
+	} else {
+		var dataStr string
+		// 按行分割输入
+		lines := strings.Split(string(response.Data), "\n")
+		// 遍历每一行,提取以 "data:" 开头的内容
+		for _, line := range lines {
+			if !strings.HasPrefix(line, ": ping") && strings.TrimSpace(line) != "" {
+				// 去掉 "data:" 前缀
+				dataStr += line
+			}
+		}
+		// 去除 "data: " 前缀
+		if strings.HasPrefix(dataStr, "data: ") {
+			dataStr = strings.TrimPrefix(dataStr, "data: ")
+			var streamResponse bus_response.AIGCEtaResponse
+			parseErr := json.Unmarshal([]byte(dataStr), &streamResponse)
+			if parseErr != nil {
+				utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
+				err = fmt.Errorf("内容生成失败,err:%v", parseErr)
+				return
+			}
+			httpResponse.Data = streamResponse
+			httpResponse.Msg = "返回成功"
+			httpResponse.Code = 200
+			return
+		} else {
+			parseErr := json.Unmarshal([]byte(dataStr), &httpResponse)
+			if parseErr != nil {
+				utils.FileLog.Error("内容生成失败,code:%v,msg:%v", parseErr)
+				err = fmt.Errorf("内容生成失败,err:%v", parseErr)
+				return
+			}
+			return
+		}
+	}
+}

+ 1 - 1
utils/llm/eta_llm/eta_llm_http/response.go

@@ -12,7 +12,6 @@ type SteamResponse struct {
 	Data ChunkResponse `json:"data"`
 }
 
-
 // ChunkResponse 定义流式响应的结构体
 type ChunkResponse struct {
 	ID          string   `json:"id"`
@@ -32,6 +31,7 @@ type RagBaseResponse struct {
 	Code int             `json:"code"`
 }
 
+
 // Choice 定义选择的结构体
 type Choice struct {
 	Delta Delta  `json:"delta"`