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');