Commit 37790d5fc13571316a7fbc8e2b0b95dce5966145
1 parent
ebd5cbfc
临时提交 对话聊天chatStream 接口调用会超时!
Showing
2 changed files
with
49 additions
and
1 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/ChatController.java
| @@ -7,8 +7,13 @@ import cn.iocoder.yudao.module.ai.controller.admin.vo.AiChatReqVO; | @@ -7,8 +7,13 @@ import cn.iocoder.yudao.module.ai.controller.admin.vo.AiChatReqVO; | ||
| 7 | import cn.iocoder.yudao.module.ai.enums.AiModelEnum; | 7 | import cn.iocoder.yudao.module.ai.enums.AiModelEnum; |
| 8 | import io.swagger.v3.oas.annotations.Operation; | 8 | import io.swagger.v3.oas.annotations.Operation; |
| 9 | import io.swagger.v3.oas.annotations.tags.Tag; | 9 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 10 | +import jakarta.servlet.http.HttpServletResponse; | ||
| 11 | +import lombok.extern.slf4j.Slf4j; | ||
| 10 | import org.springframework.ai.chat.ChatClient; | 12 | import org.springframework.ai.chat.ChatClient; |
| 13 | +import org.springframework.ai.chat.ChatResponse; | ||
| 14 | +import org.springframework.ai.chat.prompt.Prompt; | ||
| 11 | import org.springframework.ai.openai.OpenAiChatClient; | 15 | import org.springframework.ai.openai.OpenAiChatClient; |
| 16 | +import org.springframework.ai.openai.api.OpenAiApi; | ||
| 12 | import org.springframework.beans.factory.annotation.Autowired; | 17 | import org.springframework.beans.factory.annotation.Autowired; |
| 13 | import org.springframework.context.ApplicationContext; | 18 | import org.springframework.context.ApplicationContext; |
| 14 | import org.springframework.validation.annotation.Validated; | 19 | import org.springframework.validation.annotation.Validated; |
| @@ -16,6 +21,10 @@ import org.springframework.web.bind.annotation.PostMapping; | @@ -16,6 +21,10 @@ import org.springframework.web.bind.annotation.PostMapping; | ||
| 16 | import org.springframework.web.bind.annotation.RequestBody; | 21 | import org.springframework.web.bind.annotation.RequestBody; |
| 17 | import org.springframework.web.bind.annotation.RequestMapping; | 22 | import org.springframework.web.bind.annotation.RequestMapping; |
| 18 | import org.springframework.web.bind.annotation.RestController; | 23 | import org.springframework.web.bind.annotation.RestController; |
| 24 | +import reactor.core.publisher.Flux; | ||
| 25 | + | ||
| 26 | +import java.util.Scanner; | ||
| 27 | +import java.util.function.Consumer; | ||
| 19 | 28 | ||
| 20 | /** | 29 | /** |
| 21 | * AI模块 | 30 | * AI模块 |
| @@ -26,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController; | @@ -26,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController; | ||
| 26 | @Tag(name = "AI模块") | 35 | @Tag(name = "AI模块") |
| 27 | @RestController | 36 | @RestController |
| 28 | @RequestMapping("/ai-api") | 37 | @RequestMapping("/ai-api") |
| 38 | +@Slf4j | ||
| 29 | public class ChatController { | 39 | public class ChatController { |
| 30 | 40 | ||
| 31 | @Autowired | 41 | @Autowired |
| @@ -44,6 +54,39 @@ public class ChatController { | @@ -44,6 +54,39 @@ public class ChatController { | ||
| 44 | return CommonResult.success(res); | 54 | return CommonResult.success(res); |
| 45 | } | 55 | } |
| 46 | 56 | ||
| 57 | + @PostMapping("/chatStream") | ||
| 58 | + @Operation(summary = "对话聊天chatStream", description = "简单的ai聊天") | ||
| 59 | + public CommonResult chatStream(HttpServletResponse response, @RequestBody @Validated AiChatReqVO reqVO) throws InterruptedException { | ||
| 60 | + OpenAiChatClient chatClient = applicationContext.getBean(OpenAiChatClient.class); | ||
| 61 | + Flux<ChatResponse> chatResponse = chatClient.stream(new Prompt(reqVO.getInputText())); | ||
| 62 | + chatResponse.subscribe(new Consumer<ChatResponse>() { | ||
| 63 | + @Override | ||
| 64 | + public void accept(ChatResponse chatResponse) { | ||
| 65 | + System.err.println(chatResponse.getResults().get(0).getOutput().getContent()); | ||
| 66 | + } | ||
| 67 | + }); | ||
| 68 | + return CommonResult.success("1"); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + public static void main(String[] args) { | ||
| 72 | + OpenAiChatClient openAiChatClient = new OpenAiChatClient(new OpenAiApi("openkey")); | ||
| 73 | + Flux<ChatResponse> responseFlux = openAiChatClient.stream(new Prompt("最好的编程语言!")); | ||
| 74 | + long now = System.currentTimeMillis(); | ||
| 75 | + responseFlux.subscribe(new Consumer<ChatResponse>() { | ||
| 76 | + @Override | ||
| 77 | + public void accept(ChatResponse chatResponse) { | ||
| 78 | + if (chatResponse.getResults().get(0).getOutput() == null) { | ||
| 79 | + return; | ||
| 80 | + } | ||
| 81 | + System.err.println(chatResponse.getResults().get(0).getOutput().getContent()); | ||
| 82 | + } | ||
| 83 | + }); | ||
| 84 | + | ||
| 85 | + // 阻止退出 | ||
| 86 | + Scanner scanner = new Scanner(System.in); | ||
| 87 | + scanner.nextLine(); | ||
| 88 | + } | ||
| 89 | + | ||
| 47 | /** | 90 | /** |
| 48 | * 根据 ai模型 获取对于的 模型实现类 | 91 | * 根据 ai模型 获取对于的 模型实现类 |
| 49 | * | 92 | * |
yudao-module-ai/yudao-module-ai-biz/src/main/resources/application.properties
| @@ -3,4 +3,9 @@ | @@ -3,4 +3,9 @@ | ||
| 3 | # openAI https://openai.com/ | 3 | # openAI https://openai.com/ |
| 4 | spring.ai.openai.api-key=${OPEN_AI_KEY} | 4 | spring.ai.openai.api-key=${OPEN_AI_KEY} |
| 5 | spring.ai.openai.chat.options.model=gpt-3.5-turbo | 5 | spring.ai.openai.chat.options.model=gpt-3.5-turbo |
| 6 | -spring.ai.openai.chat.options.temperature=0.7 | ||
| 7 | \ No newline at end of file | 6 | \ No newline at end of file |
| 7 | +spring.ai.openai.chat.options.temperature=0.7 | ||
| 8 | +#spring.ai.vectorstore.milvus.client.connect-timeout-ms=50000 | ||
| 9 | +#spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms=50000 | ||
| 10 | +#spring.ai.vectorstore.milvus.client.keep-alive-time-ms=80000 | ||
| 11 | +#spring.ai.vectorstore.pinecone.server-side-timeout=100s | ||
| 12 | + |