while (true) { const { done, value } = await reader.read() if (done) break buffer += decoder.decode(value, { stream: true }) const parts = buffer.split(/\r?\n\r?\n/) buffer = parts.pop() for (const part of parts) { if (!part.trim()) continue
const lines = part.split(/\r?\n/)
let id = '' let event = 'message'// 默认值 let data = '' for (const line of lines) { if (line.startsWith('id:')) { id = line.replace('id:', '').trim() } if (line.startsWith('event:')) { event = line.replace('event:', '').trim() } if (line.startsWith('data:')) { data += line.slice(5).replace(/^ /, '') } }
if (data === '[[END]]') return } } }
后端实现:FastAPI + sse_starlette
from sse_starlette.sse import EventSourceResponse from langchain_core.messages import HumanMessage, AIMessage
# 定义生成器函数 defstream_generator(session_id: str, text: str): # 1. 获取上下文(实现记忆功能) history = get_history(session_id) current_messages = history + [HumanMessage(content=text)]