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 () => {
+