package aiser import ( "encoding/json" "errors" "eta_gn/eta_api/models/aimod" "eta_gn/eta_api/utils" "io/ioutil" "net/http" "strings" "time" "github.com/PuerkitoBio/goquery" ) func QueryAskContent(ask string) (result string, err error) { if ask == "" { return "", errors.New("ask is empty") } doc, err := goquery.NewDocumentFromReader(strings.NewReader(ask)) if err != nil { return } var text string doc.Find("p").Each(func(i int, s *goquery.Selection) { if _, ok := s.Attr("data-f-id"); !ok { text += s.Text() } }) tmpText := []rune(text) if len(tmpText) > 80 { result = string(tmpText[:80]) } else { result = text } if result == "" { askLen := len([]rune(ask)) if askLen > 80 { result = string([]rune(ask)) } else { result = ask } } return } func FormatAskContent(ask string) (result string, err error) { doc, err := goquery.NewDocumentFromReader(strings.NewReader(ask)) if err != nil { return } doc.Find("p[data-f-id]").Remove() result, err = doc.Html() result = strings.ReplaceAll(result, "", "") result = strings.ReplaceAll(result, "", "") result = strings.ReplaceAll(result, "", "") result = strings.ReplaceAll(result, "", "") result = strings.ReplaceAll(result, "", "") result = strings.ReplaceAll(result, "", "") return } func ChatAutoMsg(prompt string, historyChatList []aimod.HistoryChat, model string) (result string, err error) { chatUrl := utils.EtaAiUrl + `chat/auto_msg` param := make(map[string]interface{}) param["Prompt"] = prompt param["HistoryChatList"] = historyChatList param["model"] = model postData, err := json.Marshal(param) if err != nil { return result, err } client := &http.Client{} //提交请求 reqest, err := http.NewRequest("POST", chatUrl, strings.NewReader(string(postData))) businessCode := utils.BusinessCode if businessCode == "" { return businessCode, errors.New("未获取到商户号") } nonce := utils.GetRandStringNoSpecialChar(16) timestamp := time.Now().Format(utils.FormatDateTimeUnSpace) signature := utils.GetSign(nonce, timestamp, utils.EtaAppid, utils.EtaSecret) //增加header选项 reqest.Header.Add("BusinessCode", businessCode) reqest.Header.Add("Nonce", nonce) reqest.Header.Add("Timestamp", timestamp) reqest.Header.Add("Appid", utils.EtaAppid) reqest.Header.Add("Signature", signature) reqest.Header.Set("Content-Type", "application/json") utils.FileLog.Info("postData:" + string(postData)) response, err := client.Do(reqest) if err != nil { return } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) utils.FileLog.Info("result:" + string(body)) resp := new(ChatAutoMsgResp) err = json.Unmarshal(body, &resp) if err != nil { return result, err } if resp.Ret != 200 { return resp.Msg, nil } result = resp.Data return result, nil } func OpenAiFileUpload(fileUrl, fileName, model string) (result *OpenAiFileUploadResp, err error) { chatUrl := utils.EtaAiUrl + `chat/file/upload` param := make(map[string]interface{}) param["FileUrl"] = fileUrl param["FileName"] = fileName param["Model"] = model postData, err := json.Marshal(param) if err != nil { return result, err } client := &http.Client{} //提交请求 reqest, err := http.NewRequest("POST", chatUrl, strings.NewReader(string(postData))) businessCode := utils.BusinessCode if businessCode == "" { return nil, errors.New("未获取到商户号") } nonce := utils.GetRandStringNoSpecialChar(16) timestamp := time.Now().Format(utils.FormatDateTimeUnSpace) signature := utils.GetSign(nonce, timestamp, utils.EtaAppid, utils.EtaSecret) //增加header选项 reqest.Header.Add("BusinessCode", businessCode) reqest.Header.Add("Nonce", nonce) reqest.Header.Add("Timestamp", timestamp) reqest.Header.Add("Appid", utils.EtaAppid) reqest.Header.Add("Signature", signature) reqest.Header.Set("Content-Type", "application/json") utils.FileLog.Info("postData:" + string(postData)) response, err := client.Do(reqest) if err != nil { return } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) utils.FileLog.Info("result:" + string(body)) resp := new(OpenAiFileUploadResp) err = json.Unmarshal(body, &resp) if err != nil { return result, err } return resp, nil } func FileRetrieve(assistantId, threadId, model string, historyChatList []aimod.HistoryChat, OpenaiFileId []string) (result *OpenAiFileRetrieveResp, err error) { chatUrl := utils.EtaAiUrl + `chat/file/retrieve` param := make(map[string]interface{}) param["FileRetrieveList"] = historyChatList param["OpenaiFileId"] = OpenaiFileId param["AssistantId"] = assistantId param["ThreadId"] = threadId param["Model"] = model postData, err := json.Marshal(param) if err != nil { return result, err } client := &http.Client{} //提交请求 reqest, err := http.NewRequest("POST", chatUrl, strings.NewReader(string(postData))) businessCode := utils.BusinessCode if businessCode == "" { return nil, errors.New("未获取到商户号") } nonce := utils.GetRandStringNoSpecialChar(16) timestamp := time.Now().Format(utils.FormatDateTimeUnSpace) signature := utils.GetSign(nonce, timestamp, utils.EtaAppid, utils.EtaSecret) //增加header选项 reqest.Header.Add("BusinessCode", businessCode) reqest.Header.Add("Nonce", nonce) reqest.Header.Add("Timestamp", timestamp) reqest.Header.Add("Appid", utils.EtaAppid) reqest.Header.Add("Signature", signature) reqest.Header.Set("Content-Type", "application/json") utils.FileLog.Info("postData:" + string(postData)) response, err := client.Do(reqest) if err != nil { return } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return } utils.FileLog.Info("result:" + string(body)) resp := new(OpenAiFileRetrieveResp) err = json.Unmarshal(body, &resp) if err != nil { return result, err } return resp, nil } type ChatAutoMsgResp struct { Ret int Data string Msg string } type OpenAiFileUploadResp struct { Ret int Data *OpenAiFile Msg string } type OpenAiFile struct { Bytes int `json:"bytes"` CreatedAt int64 `json:"created_at"` ID string `json:"id"` FileName string `json:"filename"` Object string `json:"object"` Status string `json:"status"` Purpose string `json:"purpose"` StatusDetails string `json:"status_details"` } type OpenAiFileRetrieveResp struct { Ret int Data *FileRetrieveResp Msg string ErrMsg string } type FileRetrieveResp struct { AssistantId string `description:"助手ID"` ThreadId string `description:"进程id"` Answer string }