package service import ( "WorldEpcho/src/config" "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "strings" ) // ApiResponse 映射API响应体 type ApiResponse struct { Text string `json:"text"` MessageID string `json:"message_id"` } // SendSemanticAnalysisRequest 发送语义分析请求 func SendSemanticAnalysisRequest(sentence string) (string, error) { // 构造请求体 requestBody, err := json.Marshal(map[string]interface{}{ "query": sentence, // 修改了这里,直接使用字符串作为查询条件 "history": []map[string]string{ { "role": "system", "content": "语义理解大师,请分析接下来这句话在问谁,只回答名字", }, { "role": "user", "content": "潘金莲被贾宝玉打了,潘金莲请唐僧评理,白骨精你怎么看?(回答这句话在向谁提问,只写名字)", }, { "role": "assistant", "content": "白骨精", }, { "role": "user", "content": "马云在开讲啦节目上进行演讲,当主持人撒贝宁问马云是否对钱感兴趣,马云说对钱不感兴趣;马斯克,你对马云这句话,怎么理解?(回答这句话在向谁提问,只写名字)", }, { "role": "assistant", "content": "马斯克", }, { "role": "user", "content": "马斯克,马克思说你是资本家,你怎么看?(回答这句话在向谁提问,只写名字)", }, { "role": "assistant", "content": "马斯克", }, { "role": "user", "content": "马斯克说你是资本家马云你怎么看?(回答这句话在向谁提问,只写名字)", }, { "role": "assistant", "content": "马云", }, }, "stream": false, "model_name": "Awakener", "temperature": 0.27, "max_tokens": 0, "prompt_name": "default", }) if err != nil { return "", fmt.Errorf("error marshalling request body: %v", err) } // 发送POST请求 //quest_url := "http://52.83.116.11:13679/Think/chat/chat" quest_url := config.Conf.SemanticAnalysisUrl + "/Think/chat/chat" fmt.Println("语义解析请求的url: ", quest_url) resp, err := http.Post(quest_url, "application/json", bytes.NewBuffer(requestBody)) if err != nil { return "", fmt.Errorf("error sending request: %v", err) } defer resp.Body.Close() // 读取响应体 body, err := ioutil.ReadAll(resp.Body) if err != nil { return "", fmt.Errorf("error reading response body: %v", err) } // 响应回来的数据 data: {"text": "唐僧", "message_id": "ca79a6c85c3c4d9c868d2966f9c960e0"} //检查并移除"data: "前缀 responseStr := string(body) if strings.HasPrefix(responseStr, "data: ") { responseStr = strings.TrimPrefix(responseStr, "data: ") } var apiResponse ApiResponse // 解析JSON响应 if responseStr == "" { fmt.Println("responseStr: ", responseStr) return "", nil } if err = json.Unmarshal([]byte(responseStr), &apiResponse); err != nil { fmt.Println("responseStr: ", responseStr) return "", fmt.Errorf("error unmarshalling response JSON: %v", err) } // 返回text字段的内容 return apiResponse.Text, nil }