From a2e60bb944ba4e6158965e1d7674671bc4fa574a Mon Sep 17 00:00:00 2001
From: wangys <3401275564@qq.com>
Date: Tue, 30 Dec 2025 18:22:59 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
schoolNewsWeb/src/apis/ai/chat.ts | 60 +++++++++++++++----
.../ai/components/DocumentSegmentDialog.vue | 1 -
.../manage/ai/components/KnowledgeInfo.vue | 19 ++++--
.../src/views/public/ai/AIAgent.mobile.vue | 3 +
schoolNewsWeb/src/views/public/ai/AIAgent.vue | 4 ++
5 files changed, 68 insertions(+), 19 deletions(-)
diff --git a/schoolNewsWeb/src/apis/ai/chat.ts b/schoolNewsWeb/src/apis/ai/chat.ts
index d5db5f6..9077152 100644
--- a/schoolNewsWeb/src/apis/ai/chat.ts
+++ b/schoolNewsWeb/src/apis/ai/chat.ts
@@ -77,14 +77,32 @@ export const chatApi = {
eventSource.addEventListener('message', (event) => {
try {
// 解析JSON字符串,处理Unicode转义
- const data = JSON.parse(event.data);
- fullMessage += data;
- callback?.onMessage?.(data);
+ let data = JSON.parse(event.data);
+ // 过滤掉SSE格式残留的data:前缀、空行和思考标签
+ if (typeof data === 'string') {
+ data = data
+ .replace(/^data:/gm, '')
+ .replace(/^\s*[\r\n]/gm, '')
+ .replace(/<\/?think>/gi, '');
+ }
+ if (data && data.trim()) {
+ fullMessage += data;
+ callback?.onMessage?.(data);
+ }
} catch (e) {
// 如果不是JSON,直接使用原始数据
- const data = event.data;
- fullMessage += data;
- callback?.onMessage?.(data);
+ let data = event.data;
+ // 过滤掉SSE格式残留的data:前缀、空行和思考标签
+ if (typeof data === 'string') {
+ data = data
+ .replace(/^data:/gm, '')
+ .replace(/^\s*[\r\n]/gm, '')
+ .replace(/<\/?think>/gi, '');
+ }
+ if (data && data.trim()) {
+ fullMessage += data;
+ callback?.onMessage?.(data);
+ }
}
});
@@ -345,14 +363,32 @@ export const chatApi = {
eventSource.addEventListener('message', (event) => {
try {
// 解析JSON字符串,处理Unicode转义
- const data = JSON.parse(event.data);
- fullMessage += data;
- callback?.onMessage?.(data);
+ let data = JSON.parse(event.data);
+ // 过滤掉SSE格式残留的data:前缀、空行和思考标签
+ if (typeof data === 'string') {
+ data = data
+ .replace(/^data:/gm, '')
+ .replace(/^\s*[\r\n]/gm, '')
+ .replace(/<\/?think>/gi, '');
+ }
+ if (data && data.trim()) {
+ fullMessage += data;
+ callback?.onMessage?.(data);
+ }
} catch (e) {
// 如果不是JSON,直接使用原始数据
- const data = event.data;
- fullMessage += data;
- callback?.onMessage?.(data);
+ let data = event.data;
+ // 过滤掉SSE格式残留的data:前缀、空行和思考标签
+ if (typeof data === 'string') {
+ data = data
+ .replace(/^data:/gm, '')
+ .replace(/^\s*[\r\n]/gm, '')
+ .replace(/<\/?think>/gi, '');
+ }
+ if (data && data.trim()) {
+ fullMessage += data;
+ callback?.onMessage?.(data);
+ }
}
});
diff --git a/schoolNewsWeb/src/views/admin/manage/ai/components/DocumentSegmentDialog.vue b/schoolNewsWeb/src/views/admin/manage/ai/components/DocumentSegmentDialog.vue
index 906005e..69d365a 100644
--- a/schoolNewsWeb/src/views/admin/manage/ai/components/DocumentSegmentDialog.vue
+++ b/schoolNewsWeb/src/views/admin/manage/ai/components/DocumentSegmentDialog.vue
@@ -736,7 +736,6 @@ function formatTimestamp(timestamp: number): string {
line-height: 1.6;
color: #4A5565;
font-size: 14px;
- white-space: pre-wrap;
word-break: break-word;
letter-spacing: -0.01em;
}
diff --git a/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue b/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue
index 5260bb6..654aba2 100644
--- a/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue
+++ b/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue
@@ -229,13 +229,14 @@
$1');
html = html.replace(/`([^`]+)`/g, '$1');
html = html.replace(/\*\*([^*]+)\*\*/g, '$1');
diff --git a/schoolNewsWeb/src/views/public/ai/AIAgent.vue b/schoolNewsWeb/src/views/public/ai/AIAgent.vue
index d3edc63..9844e8f 100644
--- a/schoolNewsWeb/src/views/public/ai/AIAgent.vue
+++ b/schoolNewsWeb/src/views/public/ai/AIAgent.vue
@@ -1114,6 +1114,10 @@ function formatMarkdown(content: string) {
// 简单的 Markdown 转换(可以使用 marked.js 等库进行更复杂的转换)
let html = content;
+ // 过滤掉思考标签和data:前缀
+ html = html.replace(/<\/?think>/gi, '');
+ html = html.replace(/^data:/gm, '');
+
// 代码块
html = html.replace(/```(\w+)?\n([\s\S]*?)```/g, '$2');