From fc9663a1009ccf5d9e2fda9febcac18dd903f395 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Nov 2025 19:46:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90antd=E3=80=91=E3=80=90ai?= =?UTF-8?q?=E3=80=91chat=20=E2=80=9CThinking=20=E6=B7=B1=E5=BA=A6=E6=80=9D?= =?UTF-8?q?=E8=80=83=E5=8A=9F=E8=83=BD=E2=80=9D=E7=9A=84=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-antd/src/api/ai/chat/message/index.ts | 1 + .../src/views/ai/chat/index/index.vue | 26 +++++++++++++++---- .../ai/chat/index/modules/message/list.vue | 5 ++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/apps/web-antd/src/api/ai/chat/message/index.ts b/apps/web-antd/src/api/ai/chat/message/index.ts index fc031d044..4c65446e6 100644 --- a/apps/web-antd/src/api/ai/chat/message/index.ts +++ b/apps/web-antd/src/api/ai/chat/message/index.ts @@ -19,6 +19,7 @@ export namespace AiChatMessageApi { model: number; // 模型标志 modelId: number; // 模型编号 content: string; // 聊天内容 + reasoningContent?: string; // 推理内容(深度思考) tokens: number; // 消耗 Token 数量 segmentIds?: number[]; // 段落编号 segments?: { diff --git a/apps/web-antd/src/views/ai/chat/index/index.vue b/apps/web-antd/src/views/ai/chat/index/index.vue index f8c1f07fc..931778f93 100644 --- a/apps/web-antd/src/views/ai/chat/index/index.vue +++ b/apps/web-antd/src/views/ai/chat/index/index.vue @@ -337,6 +337,7 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) { conversationId: activeConversationId.value, type: 'assistant', content: '思考中...', + reasoningContent: '', // 初始化推理内容 createTime: new Date(), } as AiChatMessageApi.ChatMessage, ); @@ -366,10 +367,11 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) { return; } - // 如果内容为空,就不处理。 - if (data.receive.content === '') { + // 如果内容和推理内容都为空,就不处理 + if (data.receive.content === '' && !data.receive.reasoningContent) { return; } + // 首次返回需要添加一个 message 到页面,后面的都是更新 if (isFirstChunk) { isFirstChunk = false; @@ -379,9 +381,23 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) { // 更新返回的数据 activeMessageList.value.push(data.send, data.receive); } - // debugger - receiveMessageFullText.value = - receiveMessageFullText.value + data.receive.content; + + // 处理 reasoningContent + if (data.receive.reasoningContent) { + const lastMessage = + activeMessageList.value[activeMessageList.value.length - 1]; + // 累加推理内容 + lastMessage.reasoningContent = + (lastMessage.reasoningContent || '') + + data.receive.reasoningContent; + } + + // 处理正常内容 + if (data.receive.content !== '') { + receiveMessageFullText.value = + receiveMessageFullText.value + data.receive.content; + } + // 滚动到最下面 await scrollToBottom(); }, diff --git a/apps/web-antd/src/views/ai/chat/index/modules/message/list.vue b/apps/web-antd/src/views/ai/chat/index/modules/message/list.vue index bd44a7be6..11499338a 100644 --- a/apps/web-antd/src/views/ai/chat/index/modules/message/list.vue +++ b/apps/web-antd/src/views/ai/chat/index/modules/message/list.vue @@ -18,6 +18,7 @@ import { deleteChatMessage } from '#/api/ai/chat/message'; import { MarkdownView } from '#/components/markdown-view'; import MessageKnowledge from './knowledge.vue'; +import MessageReasoning from './reasoning.vue'; import MessageWebSearch from './web-search.vue'; const props = defineProps({ @@ -132,6 +133,10 @@ onMounted(async () => {
+