feat:【antd】【ai】chat “Thinking 深度思考功能”的迁移

This commit is contained in:
YunaiV
2025-11-15 19:46:10 +08:00
parent 71e638188e
commit fc9663a100
3 changed files with 27 additions and 5 deletions

View File

@@ -19,6 +19,7 @@ export namespace AiChatMessageApi {
model: number; // 模型标志 model: number; // 模型标志
modelId: number; // 模型编号 modelId: number; // 模型编号
content: string; // 聊天内容 content: string; // 聊天内容
reasoningContent?: string; // 推理内容(深度思考)
tokens: number; // 消耗 Token 数量 tokens: number; // 消耗 Token 数量
segmentIds?: number[]; // 段落编号 segmentIds?: number[]; // 段落编号
segments?: { segments?: {

View File

@@ -337,6 +337,7 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) {
conversationId: activeConversationId.value, conversationId: activeConversationId.value,
type: 'assistant', type: 'assistant',
content: '思考中...', content: '思考中...',
reasoningContent: '', // 初始化推理内容
createTime: new Date(), createTime: new Date(),
} as AiChatMessageApi.ChatMessage, } as AiChatMessageApi.ChatMessage,
); );
@@ -366,10 +367,11 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) {
return; return;
} }
// 如果内容为空,就不处理 // 如果内容和推理内容都为空,就不处理
if (data.receive.content === '') { if (data.receive.content === '' && !data.receive.reasoningContent) {
return; return;
} }
// 首次返回需要添加一个 message 到页面,后面的都是更新 // 首次返回需要添加一个 message 到页面,后面的都是更新
if (isFirstChunk) { if (isFirstChunk) {
isFirstChunk = false; isFirstChunk = false;
@@ -379,9 +381,23 @@ async function doSendMessageStream(userMessage: AiChatMessageApi.ChatMessage) {
// 更新返回的数据 // 更新返回的数据
activeMessageList.value.push(data.send, data.receive); activeMessageList.value.push(data.send, data.receive);
} }
// debugger
// 处理 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 =
receiveMessageFullText.value + data.receive.content; receiveMessageFullText.value + data.receive.content;
}
// 滚动到最下面 // 滚动到最下面
await scrollToBottom(); await scrollToBottom();
}, },

View File

@@ -18,6 +18,7 @@ import { deleteChatMessage } from '#/api/ai/chat/message';
import { MarkdownView } from '#/components/markdown-view'; import { MarkdownView } from '#/components/markdown-view';
import MessageKnowledge from './knowledge.vue'; import MessageKnowledge from './knowledge.vue';
import MessageReasoning from './reasoning.vue';
import MessageWebSearch from './web-search.vue'; import MessageWebSearch from './web-search.vue';
const props = defineProps({ const props = defineProps({
@@ -132,6 +133,10 @@ onMounted(async () => {
<div <div
class="relative flex flex-col break-words rounded-lg bg-gray-100 p-2.5 pb-1 pt-2.5 shadow-sm" class="relative flex flex-col break-words rounded-lg bg-gray-100 p-2.5 pb-1 pt-2.5 shadow-sm"
> >
<MessageReasoning
:reasoning-content="item.reasoningContent || ''"
:content="item.content || ''"
/>
<MarkdownView <MarkdownView
class="text-sm text-gray-600" class="text-sm text-gray-600"
:content="item.content" :content="item.content"