zyx vor 2 Jahren
Ursprung
Commit
69bad798db

+ 3 - 0
src/main/java/com/sxtvs/api/chatgpt/dto/CompletionsParamsDto.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.stream.Collectors;
+
 @NoArgsConstructor
 @Data
 public class CompletionsParamsDto {
@@ -31,4 +33,5 @@ public class CompletionsParamsDto {
         this.model = "text-davinci-003";
         this.maxTokens = 2048;
     }
+
 }

+ 24 - 1
src/main/java/com/sxtvs/api/chatgpt/dto/CompletionsRequestDto.java

@@ -3,6 +3,7 @@ package com.sxtvs.api.chatgpt.dto;
 import lombok.Data;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Data
 public class CompletionsRequestDto {
@@ -12,11 +13,33 @@ public class CompletionsRequestDto {
     public static class Prompt {
         private String text;
         private ItemType type;
-
     }
 
     public enum ItemType {
         user,
         robot
     }
+
+    private String mergeText() {
+        return prompt
+                .stream()
+                .map(CompletionsRequestDto.Prompt::getText)
+                .collect(Collectors.joining("\n"));
+    }
+
+
+    public String toText() {
+        var text = mergeText();
+        // 文字过长后 就不携带上下文了 只保留最后一个问题
+        if (text.length() > 2000) {
+            for (int i = prompt.size() - 1; i >= 0; i--) {
+                var p = prompt.get(i);
+                if (p.type == ItemType.user) {
+                    return p.text;
+                }
+            }
+        }
+        return text;
+    }
+
 }

+ 3 - 6
src/main/java/com/sxtvs/api/chatgpt/service/ChatGptService.java

@@ -79,13 +79,10 @@ public class ChatGptService {
 
 
     @SneakyThrows
-    public  CompletionsResponseDto completions(@RequestBody CompletionsRequestDto dto) {
-        var paramsDto = new CompletionsParamsDto(dto.getPrompt()
-                .stream()
-                .map(CompletionsRequestDto.Prompt::getText)
-                .collect(Collectors.joining("\n")));
+    public CompletionsResponseDto completions(@RequestBody CompletionsRequestDto dto) {
+        var paramsDto = new CompletionsParamsDto(dto.toText());
         var params = objectMapper.writeValueAsString(paramsDto);
-        logger.info("request", params, "dto", objectMapper.writeValueAsString(dto));
+        logger.info("key", "completions", "request", params, "dto", objectMapper.writeValueAsString(dto));
 
         var result = request(params);