diff --git a/Debate_backend/pom.xml b/Debate_backend/pom.xml index ff0631a..99b91ba 100644 --- a/Debate_backend/pom.xml +++ b/Debate_backend/pom.xml @@ -77,6 +77,12 @@ runtime + + org.json + json + 20240303 + + org.springframework.boot diff --git a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java index 5966719..4952bd3 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/controller/WxAIController.java @@ -96,12 +96,11 @@ public class WxAIController { @PostMapping("/debate") public Result> debate(@RequestHeader ("Authorization") String token, @RequestBody Map params){ log.info("请求内容: {}", params); - String history = params.get("history"); String userMessage = params.get("userMessage"); conversationId = Long.parseLong(params.get("conversationId")); try { - String debate = wxDebateService.GetDebate(history, userMessage); + String debate = wxDebateService.GetDebate(conversationId, userMessage); if (debate == null) { return Result.error("辩论获取失败"); } diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java b/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java index 43362d1..54a01f5 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/WxDebateService.java @@ -1,6 +1,6 @@ package com.learning.newdemo.service; public interface WxDebateService { - String GetDebate(String history, String userMessage); + String GetDebate(Long conversationId, String userMessage); long UpdateDebate(Long conversationId, String content, String userMessage, String token); } diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxArgumentServiceImpl.java b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxArgumentServiceImpl.java index a5a8e7b..683d748 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxArgumentServiceImpl.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxArgumentServiceImpl.java @@ -1,19 +1,16 @@ package com.learning.newdemo.service.impl; +import org.json.JSONObject; +import org.json.JSONArray; import com.learning.newdemo.entity.WxArgument; import com.learning.newdemo.entity.WxConversation; import com.learning.newdemo.mapper.WxArgumentMapper; import com.learning.newdemo.mapper.WxConversationMapper; import com.learning.newdemo.service.WxArgumentService; import com.learning.newdemo.util.JwtUtil; -import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -90,7 +87,16 @@ public class WxArgumentServiceImpl implements WxArgumentService { HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); ResponseEntity response = _restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); - return response.getBody(); + + if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) { + JSONObject json = new JSONObject(response.getBody()); + JSONArray choices = json.getJSONArray("choices"); + if (!choices.isEmpty()) { + JSONObject message = choices.getJSONObject(0).getJSONObject("message"); + return message.getString("content"); + } + } + return null; } catch (Exception e) { log.error("向AI获取立论失败", e); return null; diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java index 6c119b9..380610c 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxDebateServiceImpl.java @@ -7,6 +7,8 @@ import com.learning.newdemo.mapper.WxDebateMapper; import com.learning.newdemo.service.WxDebateService; import com.learning.newdemo.util.JwtUtil; import lombok.extern.slf4j.Slf4j; +import org.json.JSONArray; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; @@ -48,12 +50,22 @@ public class WxDebateServiceImpl implements WxDebateService { } @Override - public String GetDebate(String history, String userMessage){ + public String GetDebate(Long conversationId, String userMessage){ try { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Authorization", authorizationHeader); + String history; + + if(conversationId == -1){ + history = ""; + } + else { + history = wxDebateMapper.selectByConversationId(conversationId).stream() + .map(WxDebate::getContent) + .reduce("", (a, b) -> a + b); + } StringBuilder requestBodyBuilder = new StringBuilder(); requestBodyBuilder.append("{") .append("\"messages\": [") @@ -86,7 +98,17 @@ public class WxDebateServiceImpl implements WxDebateService { log.info("请求体:{}", requestBody); HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); - return response.getBody(); + + if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) { + JSONObject json = new JSONObject(response.getBody()); + JSONArray choices = json.getJSONArray("choices"); + if (!choices.isEmpty()) { + JSONObject message = choices.getJSONObject(0).getJSONObject("message"); + return message.getString("content"); + } + } + return null; + } catch (Exception e){ log.error("模拟辩论获取失败", e); return null; diff --git a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java index 49cf49d..c048a27 100644 --- a/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java +++ b/Debate_backend/src/main/java/com/learning/newdemo/service/impl/WxReviewServiceImpl.java @@ -7,6 +7,8 @@ import com.learning.newdemo.mapper.WxReviewMapper; import com.learning.newdemo.service.WxReviewService; import com.learning.newdemo.util.JwtUtil; import lombok.extern.slf4j.Slf4j; +import org.json.JSONArray; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; @@ -85,7 +87,16 @@ public class WxReviewServiceImpl implements WxReviewService { HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); - return response.getBody(); + + if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) { + JSONObject json = new JSONObject(response.getBody()); + JSONArray choices = json.getJSONArray("choices"); + if (!choices.isEmpty()) { + JSONObject message = choices.getJSONObject(0).getJSONObject("message"); + return message.getString("content"); + } + } + return null; } catch (Exception e) { log.error("向AI获取立论失败", e); return null;