From 07d09992d5dfa7527246df78e9a7ea3a1b46c8df Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 29 Aug 2025 00:38:56 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E3=80=90ai=20=E5=A4=A7=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E3=80=91=E6=A8=A1=E5=9E=8B=E8=BF=94=E5=9B=9E=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=97=B6=EF=BC=8C=E7=A9=BA=E6=B6=88=E6=81=AF=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=88=A0=E9=99=A4=EF=BC=9B=E5=8F=96=E6=B6=88=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=B9=9F=E8=BF=9B=E8=A1=8C=E6=B6=88=E6=81=AF=E5=AD=98?= =?UTF-8?q?=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/AiChatMessageServiceImpl.java | 26 ++++++++++++++++--- .../core/model/chat/TongYiChatModelTests.java | 4 +-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java b/yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java index 0ce0d15bda..399ca5a6e3 100644 --- a/yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java +++ b/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))); } diff --git a/yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java b/yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java index 7c62ec71b6..23bd5d9e04 100644 --- a/yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java +++ b/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 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();