|
@@ -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
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|