package aiser import ( "encoding/json" "errors" "eta/eta_api/models/aimod" "eta/eta_api/utils" "io/ioutil" "net/http" "strings" "time" ) func ChatAutoMsg(prompt string, historyChatList []aimod.HistoryChat) (result string, err error) { chatUrl := utils.EtaAiUrl + `chat/auto_msg` param := make(map[string]interface{}) param["Prompt"] = prompt param["HistoryChatList"] = historyChatList 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 string) (result *OpenAiFileUploadResp, err error) { chatUrl := utils.EtaAiUrl + `chat/file/upload` param := make(map[string]interface{}) param["FileUrl"] = fileUrl param["FileName"] = fileName 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 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 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 }