Browse Source

1.修改消息块之间分隔符“<quan-cut>”

zzf 2 days ago
parent
commit
684e1cf388

+ 2 - 7
src/main/java/com/rf/AIquantum/dialogue/dao/repository/ChatHistoryRepository.java

@@ -2,19 +2,14 @@ package com.rf.AIquantum.dialogue.dao.repository;
 
 import com.rf.AIquantum.base.repository.BaseRepository;
 import com.rf.AIquantum.dialogue.dao.model.ChatHistoryEntity;
-import com.rf.AIquantum.dialogue.dao.model.DialogueEntity;
-import com.rf.AIquantum.user.dao.model.UserEntity;
-import org.apache.catalina.User;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
-import java.util.Optional;
 
 /**
  * @Description: 聊天记录相关接口
@@ -24,7 +19,7 @@ import java.util.Optional;
 public interface ChatHistoryRepository extends BaseRepository<ChatHistoryEntity, String> {
 
 
-    List<ChatHistoryEntity> findChatHistoryByDialogueIdAndStatus(String dialogueId,int status);
+    List<ChatHistoryEntity> findChatHistoryByDialogueIdAndStatus(String dialogueId, int status, Sort createTime);
 
     @Query(value = "select * from t_chat_history where dialogue_id = ?1 AND status = ?2 order by create_time desc",nativeQuery = true)
     Page<ChatHistoryEntity> findByDialogueIdAndStatus(String dialogueId, int status, PageRequest of);

+ 45 - 33
src/main/java/com/rf/AIquantum/dialogue/rest/ChatHistoryController.java

@@ -74,7 +74,7 @@ public class ChatHistoryController extends BaseController {
     @PostMapping("/refresh")
     @JwtIgnore
     @ApiOperation(value = "刷新某条回答", notes = "ChatHistory对象")
-    public Result refresh(@RequestBody String json) {
+    public Result refresh(@RequestBody String json) throws InterruptedException {
         ChatHistoryEntity chatHistoryEntity = JSONObject.parseObject(json, ChatHistoryEntity.class);
         String dialogueId = chatHistoryEntity.getDialogueId();
         String createTime = chatHistoryEntity.getCreateTime();
@@ -151,7 +151,9 @@ public class ChatHistoryController extends BaseController {
                 .post(requestBody)
                 .build();
         // 发送请求并处理响应
+        String progress = "undo";
         try (Response response = client.newCall(request).execute()) {
+            progress = "doing";
             if (!response.isSuccessful()) {
                 log.error("Unexpected code " + response);
                 return fail();
@@ -162,55 +164,63 @@ public class ChatHistoryController extends BaseController {
             if (responseBody != null) {
                 BufferedSource bufferedSource = responseBody.source();
                 try {
-                    String line;
                     byte[] buffer = new byte[1024];
                     while (!bufferedSource.exhausted()) {
                         int bytesRead = bufferedSource.read(buffer);
-                        line = new String(buffer, 0, bytesRead);
+                        String datas = new String(buffer, 0, bytesRead);
                         if (sseEmitterService.getEmitter(dialogueId) == null) {
                             if (flag.equals("think")) {
                                 stringBuilder.append("</").append(flag).append(">");
                             }
                             break;
                         }
-                        sseResultDataDto.setType(flag);
-                        System.out.println("line==" + line);
-                        JSONObject jsonObject = null;
-                        try {
-                            if(StringUtils.isNotEmpty(line)){
-                                jsonObject=JSONObject.parseObject(line);
-                            }
+                        log.info("datas==" + datas+"===end");
+                        String[] lines  = datas.split("<quan-cut>");
+                        for (String line : lines) {
 
-                        } catch (Exception e) {
-                            log.error(line+"json解析失败",e);
-                            continue;
+                            sseResultDataDto.setType(flag);
+                            System.out.println("line==" + line);
+                            log.info("line==="+line+"===");
+                            JSONObject jsonObject = null;
+                            try {
+                                if (StringUtils.isNotEmpty(line)) {
+                                    jsonObject = JSONObject.parseObject(line);
+                                }
+
+                            } catch (Exception e) {
+                                log.error(line + "json解析失败", e);
+                                continue;
 
-                        }
-                        String event = jsonObject.getString("event");
-                        if(event.equals("error")){
-                            if (flag.equals("think")) {
-                                stringBuilder.append("</").append(flag).append(">");
                             }
-                            break;
-                        }
-                        String data = jsonObject.getString("data");
-                        if (StringUtils.isNotEmpty(data)) {
-                            stringBuilder.append(data);
-                            if(data.contains("</think>")){
-                                flag = "text";
-                                data = data.replace("</think>","");
+                            String event = jsonObject.getString("event");
+                            if (event.equals("error")) {
+                                if (flag.equals("think")) {
+                                    stringBuilder.append("</").append(flag).append(">");
+                                }
+                                break;
                             }
-                            if(data.contains("<think>")){
-                                data = data.replace("<think>","");
+                            String data = jsonObject.getString("data");
+                            if (StringUtils.isNotEmpty(data)) {
+                                stringBuilder.append(data);
+                                if (data.contains("</think>")) {
+                                    flag = "text";
+                                    data = data.replace("</think>", "");
+                                }
+                                if (data.contains("<think>")) {
+                                    data = data.replace("<think>", "");
+                                }
+                                sseResultDataDto.setContent(data);
+                                log.info("发送消息:{}", sseResultDataDto);
+                                sseEmitterService.sendMessage(dialogueId, sseResultDataDto);
                             }
-                            sseResultDataDto.setContent(data);
-                            sseEmitterService.sendMessage(dialogueId, sseResultDataDto);
+                            Thread.sleep(5);
                         }
-                        Thread.sleep(5);
+
                     }
+                    progress = "done";
                 } catch (InterruptedException e) {
                     throw new RuntimeException(e);
-                }finally {
+                } finally {
                     bufferedSource.close();
                 }
             }
@@ -228,7 +238,9 @@ public class ChatHistoryController extends BaseController {
         chatHistoryEntity.setCreateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
         chatHistoryEntity.setUpdateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
         chatHistoryEntity = this.chatHistoryService.save(chatHistoryEntity);
-
+        while (progress.equals("doing")) {
+            Thread.sleep(100);
+        }
         return success(chatHistoryEntity);
     }
 

+ 39 - 31
src/main/java/com/rf/AIquantum/dialogue/rest/DialogueController.java

@@ -21,6 +21,7 @@ import com.rf.AIquantum.user.service.UserService;
 import com.rf.AIquantum.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
@@ -211,6 +212,7 @@ public class DialogueController extends BaseController {
         sseResultDataDto.setDialogueId(dialogueId);
         OkHttpClient client = new OkHttpClient.Builder().connectTimeout(3, TimeUnit.MINUTES).writeTimeout(60, TimeUnit.MINUTES).readTimeout(60, TimeUnit.MINUTES).build();
         StringBuilder stringBuilder = new StringBuilder();
+        log.info("payload=" + jsonChat.toJSONString());
         // 创建请求体
         okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(jsonChat.toJSONString(), MediaType.parse("application/json"));
         ParamEntry paramEntry = this.paramService.findByParamName("chat_url");
@@ -236,52 +238,58 @@ public class DialogueController extends BaseController {
             if (responseBody != null) {
                 BufferedSource bufferedSource = responseBody.source();
                 try {
-                    String line;
                     byte[] buffer = new byte[1024];
                     while (!bufferedSource.exhausted()) {
                         int bytesRead = bufferedSource.read(buffer);
-                        line = new String(buffer, 0, bytesRead);
+                         String datas = new String(buffer, 0, bytesRead);
                         if (sseEmitterService.getEmitter(dialogueId) == null) {
                             if (flag.equals("think")) {
                                 stringBuilder.append("</").append(flag).append(">");
                             }
                             break;
                         }
-                        sseResultDataDto.setType(flag);
-                        System.out.println("line==" + line);
-                        JSONObject jsonObject = null;
-                        try {
-                            if (StringUtils.isNotEmpty(line)) {
-                                jsonObject = JSONObject.parseObject(line);
-                            }
+                        log.info("datas==" + datas+"===end");
+                        String[] lines  = datas.split("<quan-cut>");
+                        for (String line : lines) {
 
-                        } catch (Exception e) {
-                            log.error(line + "json解析失败", e);
-                            continue;
+                            sseResultDataDto.setType(flag);
+                            System.out.println("line==" + line);
+                            log.info("line==="+line+"===");
+                            JSONObject jsonObject = null;
+                            try {
+                                if (StringUtils.isNotEmpty(line)) {
+                                    jsonObject = JSONObject.parseObject(line);
+                                }
+
+                            } catch (Exception e) {
+                                log.error(line + "json解析失败", e);
+                                continue;
 
-                        }
-                        String event = jsonObject.getString("event");
-                        if (event.equals("error")) {
-                            if (flag.equals("think")) {
-                                stringBuilder.append("</").append(flag).append(">");
                             }
-                            break;
-                        }
-                        String data = jsonObject.getString("data");
-                        if (StringUtils.isNotEmpty(data)) {
-                            stringBuilder.append(data);
-                            if (data.contains("</think>")) {
-                                flag = "text";
-                                data = data.replace("</think>", "");
+                            String event = jsonObject.getString("event");
+                            if (event.equals("error")) {
+                                if (flag.equals("think")) {
+                                    stringBuilder.append("</").append(flag).append(">");
+                                }
+                                break;
                             }
-                            if (data.contains("<think>")) {
-                                data = data.replace("<think>", "");
+                            String data = jsonObject.getString("data");
+                            if (StringUtils.isNotEmpty(data)) {
+                                stringBuilder.append(data);
+                                if (data.contains("</think>")) {
+                                    flag = "text";
+                                    data = data.replace("</think>", "");
+                                }
+                                if (data.contains("<think>")) {
+                                    data = data.replace("<think>", "");
+                                }
+                                sseResultDataDto.setContent(data);
+                                log.info("发送消息:{}", sseResultDataDto);
+                                sseEmitterService.sendMessage(dialogueId, sseResultDataDto);
                             }
-                            sseResultDataDto.setContent(data);
-                            log.info("发送消息:{}", sseResultDataDto);
-                            sseEmitterService.sendMessage(dialogueId, sseResultDataDto);
+                            Thread.sleep(5);
                         }
-                        Thread.sleep(5);
+
                     }
                     progress = "done";
                 } catch (InterruptedException e) {

+ 2 - 1
src/main/java/com/rf/AIquantum/dialogue/service/impl/ChatHistoryServiceImpl.java

@@ -11,6 +11,7 @@ import com.rf.AIquantum.utils.Constant;
 import com.rf.AIquantum.utils.PageRequestUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -34,7 +35,7 @@ public class ChatHistoryServiceImpl implements ChatHistoryService {
 
     @Override
     public List<ChatHistoryEntity> findChatHistoryByDialogueIdAndStatus(String dialogueId) {
-        return this.chatHistoryRepository.findChatHistoryByDialogueIdAndStatus(dialogueId,1);
+        return this.chatHistoryRepository.findChatHistoryByDialogueIdAndStatus(dialogueId,1,Sort.by(Sort.Direction.DESC, "createTime"));
     }
 
     @Override

+ 1 - 1
src/main/java/com/rf/AIquantum/user/dao/model/TempUserEntity.java

@@ -25,7 +25,7 @@ import javax.persistence.Table;
 @org.hibernate.annotations.Table(appliesTo = "t_temp_user_info", comment = "用户临时信息表")
 public class TempUserEntity extends BaseEntity {
     @ApiModelProperty(value = "ip",required = true)
-    @Column(name = "ip",columnDefinition = "varchar(100) comment 'ip'")
+    @Column(name = "ip",unique = true,columnDefinition = "varchar(100) comment 'ip'")
     private String ip;
     @ApiModelProperty("用户名")
     @Column(name = "username",columnDefinition = "varchar(100) comment '用户名'")

+ 1 - 1
src/main/java/com/rf/AIquantum/user/dao/model/UserEntity.java

@@ -25,7 +25,7 @@ public class UserEntity extends BaseEntity {
     @Column(name = "user_name", columnDefinition = "varchar(50) not null comment '用户名'")
     private String userName;
 
-    @Column(name = "phone", columnDefinition = "varchar(36) not null comment '手机号(唯一、登录名)'")
+    @Column(name = "phone", unique = true,columnDefinition = "varchar(36) not null comment '手机号(唯一、登录名)'")
     private String phone;
 
     @Column(name = "password", columnDefinition = "varchar(32) not null comment '密码'")