Răsfoiți Sursa

fix:修复ai助手不显示错误信息问题

Jerry Liang 2 luni în urmă
părinte
comite
fe4c3d1196
1 a modificat fișierele cu 25 adăugiri și 3 ștergeri
  1. 25 3
      src/layout/header/Actions/AiChat/useAiChat.ts

+ 25 - 3
src/layout/header/Actions/AiChat/useAiChat.ts

@@ -530,7 +530,17 @@ export function useAiChat() {
         parseSSEEvent(buffer, aiMessage)
       }
     } catch (err: any) {
-      aiMessage.content += `\n\n[连接错误: ${err.message || '未知错误'}]`
+      const errText = `\n\n[连接错误: ${err.message || '未知错误'}]`
+      aiMessage.content += errText
+      // 同步写入 segments,确保 segments 渲染分支下也能显示错误
+      if (!aiMessage.segments) aiMessage.segments = []
+      const last = aiMessage.segments.at(-1)
+      if (last && last.kind === 'text') {
+        last.content += errText
+      }
+      else {
+        aiMessage.segments.push({ kind: 'text', content: errText })
+      }
     } finally {
       isStreaming.value = false
       // 每次消息完成后保存到 IndexedDB
@@ -668,9 +678,21 @@ export function useAiChat() {
           catch { /* ignore */ }
           break
         }
-        case 'error':
-          aiMessage.content += `\n\n[错误: ${payload.content || '未知'}]`
+        case 'error': {
+          const errText = `\n\n[错误: ${payload.content || '未知'}]`
+          aiMessage.content += errText
+          // 同步写入 segments:当本轮已产生 tool/text 片段时,渲染走 segments 分支,
+          // 若不同步写入,错误信息将不会显示(只存在于 content 中)。
+          if (!aiMessage.segments) aiMessage.segments = []
+          const last = aiMessage.segments.at(-1)
+          if (last && last.kind === 'text') {
+            last.content += errText
+          }
+          else {
+            aiMessage.segments.push({ kind: 'text', content: errText })
+          }
           break
+        }
       }
     } catch {
       // 非 JSON 数据忽略