Commit 07d09992d5dfa7527246df78e9a7ea3a1b46c8df

Authored by YunaiV
1 parent d674d68a

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

yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageServiceImpl.java
... ... @@ -270,9 +270,29 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
270 270 }).doOnError(throwable -> {
271 271 log.error("[sendChatMessageStream][userId({}) sendReqVO({}) 发生异常]", userId, sendReqVO, throwable);
272 272 // 忽略租户,因为 Flux 异步无法透传租户
273   - TenantUtils.executeIgnore(() -> chatMessageMapper.updateById(
274   - new AiChatMessageDO().setId(assistantMessage.getId()).setContent(throwable.getMessage())
275   - .setReasoningContent(reasoningContentBuffer.toString())));
  273 + TenantUtils.executeIgnore(() -> {
  274 + // 如果有内容,则更新内容
  275 + if (StrUtil.isNotEmpty(contentBuffer)) {
  276 + chatMessageMapper.updateById(new AiChatMessageDO().setId(assistantMessage.getId())
  277 + .setContent(contentBuffer.toString()).setReasoningContent(reasoningContentBuffer.toString()));
  278 + } else {
  279 + // 否则,则进行删除
  280 + chatMessageMapper.deleteById(assistantMessage.getId());
  281 + }
  282 + });
  283 + }).doOnCancel(() -> {
  284 + log.info("[sendChatMessageStream][userId({}) sendReqVO({}) 取消请求]", userId, sendReqVO);
  285 + // 忽略租户,因为 Flux 异步无法透传租户
  286 + TenantUtils.executeIgnore(() -> {
  287 + // 如果有内容,则更新内容
  288 + if (StrUtil.isNotEmpty(contentBuffer)) {
  289 + chatMessageMapper.updateById(new AiChatMessageDO().setId(assistantMessage.getId())
  290 + .setContent(contentBuffer.toString()).setReasoningContent(reasoningContentBuffer.toString()));
  291 + } else {
  292 + // 否则,则进行删除
  293 + chatMessageMapper.deleteById(assistantMessage.getId());
  294 + }
  295 + });
276 296 }).onErrorResume(error -> Flux.just(error(ErrorCodeConstants.CHAT_STREAM_ERROR)));
277 297 }
278 298  
... ...
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 {
85 85 List<Message> messages = new ArrayList<>();
86 86 messages.add(new UserMessage("详细分析下,如何设计一个电商系统?"));
87 87 DashScopeChatOptions options = DashScopeChatOptions.builder()
88   -// .withModel("qwen3-235b-a22b-thinking-2507")
89   - .withModel("qwen-max-2025-01-25")
  88 + .withModel("qwen3-235b-a22b-thinking-2507")
  89 +// .withModel("qwen-max-2025-01-25")
90 90 .withEnableThinking(true) // 必须设置,否则会报错
91 91 .build();
92 92  
... ...