一、修改流式數據處理問題
1.問題描述:由于傳來的數據形式如下:
event:START
data:350
data:<
data:t
data:h
data:i
data:n
data:k
data:>
data:
data:
data:
data:
data:嗯
data:,
導致需要修改獲取正常的當前信息id并更新的邏輯
2.修改代碼如下:
?
? while (true) {
? ? ? ? ? ? const { done, value } = await reader.read();
? ? ? ? ? ? if (done) break;
? ? ? ? ? ? buffer += decoder.decode(value, { stream: true });
? ? ? ? ? ? const lines = buffer.split('\n');
? ? ? ? ? ? buffer = lines.pop() || '';
? ? ? ? ? ?for (const line of lines) {
? if (line.startsWith('event:')) {
? ? currentEvent = line.replace('event:', '').trim();
? ? continue;
? }
? if (line.startsWith('data:')) {
? ? const data = line.replace('data:', '').trim();
? ? // 處理 START 事件
? ? if (currentEvent === 'START') {
? ? ? serverAIId = data;
? ? ? currentMessages.value.push({
? ? ? ? id: serverAIId,
? ? ? ? role: 'assistant',
? ? ? ? content: '',
? ? ? ? createdAt: new Date().toISOString(),
? ? ? ? streaming: true
? ? ? });
? ? ? currentEvent = null; // 重置事件狀態
? ? ? //console.log('START event received, serverAIId:', serverAIId);
? ? ? continue;
? ? }
? ? // 處理普通內容(MESSAGE 或未指定 event)
? ? if (currentEvent === null) {
? ? ? aiContent += data;
? ? ? currentMessages.value = currentMessages.value.map(msg =>
? ? ? ? msg.id === serverAIId ? { ...msg, content: aiContent } : msg
? ? ? );
? ? }
? ? // 處理 COMPLETE 事件(結束)
? ? if (currentEvent === 'COMPLETE') {
? ? ? currentMessages.value = currentMessages.value.map(msg =>
? ? ? ? msg.id === serverAIId ? { ...msg, streaming: false } : msg
? ? ? );
? ? }
? }
}
? ? ? ? }
? ? ? ? currentMessages.value = currentMessages.value.map(msg =>
? ? ? ? ? ? msg.id === serverAIId ? { ...msg, streaming: false } : msg
? ? ? ? );
? ? ? ? await fetchSessions(classic.value.id);
二、重新編輯問題時出現的問題
1.問題描述:由于發送信息后的userId也沒能及時更新到前端,導致在使用修改問題獲取msgid時無法獲取原始id的信息.
2.解決方法:后端返回時加上問題的id信息,具體返回如下:
?
event:USER_MSG
data:347
event:START
data:348
data:<
data:t
因此就可以正常更新問題id了