作者 lixiang

1、智能助手增加多轮对话流式返回接口

@@ -16,10 +16,11 @@ enum Api { @@ -16,10 +16,11 @@ enum Api {
16 export const sendMessage = async (params: { questionText: string }) => { 16 export const sendMessage = async (params: { questionText: string }) => {
17 try { 17 try {
18 const userStore = useUserStore(); 18 const userStore = useUserStore();
  19 + console.log("userStore",userStore.getUserInfo.username)
19 const token = userStore.getToken; 20 const token = userStore.getToken;
20 21
21 const response = await fetch( 22 const response = await fetch(
22 - `/jeecgboot/airag/zdyRag/sendStream?questionText=${encodeURIComponent(params.questionText)}`, 23 + `/jeecgboot/airag/zdyRag/multiStageStream?questionText=${encodeURIComponent(params.questionText)}`,
23 { 24 {
24 method: 'GET', 25 method: 'GET',
25 headers: { 26 headers: {
@@ -56,7 +57,7 @@ export const sendMessage = async (params: { questionText: string }) => { @@ -56,7 +57,7 @@ export const sendMessage = async (params: { questionText: string }) => {
56 try { 57 try {
57 const jsonStr = line.substring(5).trim(); 58 const jsonStr = line.substring(5).trim();
58 if (jsonStr) { 59 if (jsonStr) {
59 - yield JSON.parse(jsonStr); // 直接 yield 解析后的数据 60 + yield JSON.parse(jsonStr);
60 } 61 }
61 } catch (e) { 62 } catch (e) {
62 console.error('JSON解析错误:', e); 63 console.error('JSON解析错误:', e);
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <div class="chat-messages" ref="messagesContainer"> 6 <div class="chat-messages" ref="messagesContainer">
7 <div v-for="(message, index) in messages" :key="index" :class="['message', message.type]"> 7 <div v-for="(message, index) in messages" :key="index" :class="['message', message.type]">
8 <div class="message-content"> 8 <div class="message-content">
9 - <div class="message-text" v-html="message.text"></div> 9 + <div class="message-text" style="white-space: pre-wrap;" v-html="message.text"></div>
10 <div v-if="message.type === 'assistant' && message.similarity" class="message-meta"> 10 <div v-if="message.type === 'assistant' && message.similarity" class="message-meta">
11 相似度: {{ (message.similarity * 100).toFixed(2) }}% 11 相似度: {{ (message.similarity * 100).toFixed(2) }}%
12 <div v-if="message.fileBase64"> 12 <div v-if="message.fileBase64">
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 <!-- 流式响应时显示的临时消息 --> 19 <!-- 流式响应时显示的临时消息 -->
20 <div v-if="streamingMessage" class="message assistant"> 20 <div v-if="streamingMessage" class="message assistant">
21 <div class="message-content"> 21 <div class="message-content">
22 - <div class="message-text">{{ streamingMessage }}</div> 22 + <div class="message-text" style="white-space: pre-wrap;">{{ streamingMessage }}</div>
23 </div> 23 </div>
24 </div> 24 </div>
25 <div v-if="loading" class="message assistant"> 25 <div v-if="loading" class="message assistant">
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 </div> 50 </div>
51 <div class="preview-content"> 51 <div class="preview-content">
52 <div v-if="previewType === 'txt' || previewType === 'md'" class="text-preview"> 52 <div v-if="previewType === 'txt' || previewType === 'md'" class="text-preview">
53 - <pre>{{ previewContent }}</pre> 53 + <pre style="white-space: pre-wrap;">{{ previewContent }}</pre>
54 </div> 54 </div>
55 <div v-else-if="previewType === 'pdf'" class="pdf-preview" ref="pdfPreview"></div> 55 <div v-else-if="previewType === 'pdf'" class="pdf-preview" ref="pdfPreview"></div>
56 <div v-else-if="previewType === 'docx'" class="docx-preview" ref="docxPreview"></div> 56 <div v-else-if="previewType === 'docx'" class="docx-preview" ref="docxPreview"></div>
@@ -275,6 +275,7 @@ const sendButtonMessage = async (buttonValue: string) => { @@ -275,6 +275,7 @@ const sendButtonMessage = async (buttonValue: string) => {
275 scrollToBottom(); 275 scrollToBottom();
276 } 276 }
277 }; 277 };
  278 +
278 // 显示文件预览 279 // 显示文件预览
279 const showPreview = async (message: any) => { 280 const showPreview = async (message: any) => {
280 try { 281 try {
@@ -671,6 +672,7 @@ onBeforeUnmount(() => { @@ -671,6 +672,7 @@ onBeforeUnmount(() => {
671 672
672 .message-text { 673 .message-text {
673 font-size: 15px; 674 font-size: 15px;
  675 + white-space: pre-wrap;
674 } 676 }
675 677
676 .message-meta { 678 .message-meta {