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; // 模型标志
modelId: number; // 模型编号
content: string; // 聊天内容
reasoningContent?: string; // 推理内容(深度思考)
tokens: number; // 消耗 Token 数量
segmentIds?: number[]; // 段落编号
segments?: {

View File

@@ -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();
},

View File

@@ -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 () => {
<div
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
class="text-sm text-gray-600"
:content="item.content"