Просмотр исходного кода

fix:【ai 大模型】模型返回异常时,空消息进行删除;取消时,也进行消息存储

YunaiV месяцев назад: 9
Родитель
Сommit
07d09992d5

+ 23 - 3
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java

@@ -270,9 +270,29 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
         }).doOnError(throwable -> {
             log.error("[sendChatMessageStream][userId({}) sendReqVO({}) 发生异常]", userId, sendReqVO, throwable);
             // 忽略租户,因为 Flux 异步无法透传租户
-            TenantUtils.executeIgnore(() -> chatMessageMapper.updateById(
-                    new AiChatMessageDO().setId(assistantMessage.getId()).setContent(throwable.getMessage())
-                            .setReasoningContent(reasoningContentBuffer.toString())));
+            TenantUtils.executeIgnore(() -> {
+                // 如果有内容,则更新内容
+                if (StrUtil.isNotEmpty(contentBuffer)) {
+                    chatMessageMapper.updateById(new AiChatMessageDO().setId(assistantMessage.getId())
+                            .setContent(contentBuffer.toString()).setReasoningContent(reasoningContentBuffer.toString()));
+                } else {
+                    // 否则,则进行删除
+                    chatMessageMapper.deleteById(assistantMessage.getId());
+                }
+            });
+        }).doOnCancel(() -> {
+            log.info("[sendChatMessageStream][userId({}) sendReqVO({}) 取消请求]", userId, sendReqVO);
+            // 忽略租户,因为 Flux 异步无法透传租户
+            TenantUtils.executeIgnore(() -> {
+                // 如果有内容,则更新内容
+                if (StrUtil.isNotEmpty(contentBuffer)) {
+                    chatMessageMapper.updateById(new AiChatMessageDO().setId(assistantMessage.getId())
+                            .setContent(contentBuffer.toString()).setReasoningContent(reasoningContentBuffer.toString()));
+                } else {
+                    // 否则,则进行删除
+                    chatMessageMapper.deleteById(assistantMessage.getId());
+                }
+            });
         }).onErrorResume(error -> Flux.just(error(ErrorCodeConstants.CHAT_STREAM_ERROR)));
     }
 

+ 2 - 2
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java

@@ -85,8 +85,8 @@ public class TongYiChatModelTests {
         List<Message> messages = new ArrayList<>();
         messages.add(new UserMessage("详细分析下,如何设计一个电商系统?"));
         DashScopeChatOptions options = DashScopeChatOptions.builder()
-//                .withModel("qwen3-235b-a22b-thinking-2507")
-                .withModel("qwen-max-2025-01-25")
+                .withModel("qwen3-235b-a22b-thinking-2507")
+//                .withModel("qwen-max-2025-01-25")
                 .withEnableThinking(true) // 必须设置,否则会报错
                 .build();