为了提升用户体验,让对话感觉更加实时和自然,我们已经将整个LLM对话系统升级为支持流式推送。现在无论是传统LLM模式还是AutoGen多智能体模式,都支持实时的流式文本显示。
handleRoundRobinStream()- 轮询模式流式处理handleGroupChatStream()- 群聊模式流式处理handleSequentialStream()- 顺序模式流式处理generateAgentResponseStream()- 智能体流式回复生成callLLMStream()- LLM API流式调用
流式更新通过事件驱动的方式工作,支持以下事件类型:
// 智能体选择事件(仅群聊模式)
{
type: 'agent_selected',
agent: selectedAgent,
reason: '根据消息内容智能选择'
}
// 智能体开始回复
{
type: 'agent_start',
agent: currentAgent,
message: responseMessage
}
// 内容实时更新
{
type: 'content_update',
content: chunk, // 新增的文本片段
fullContent: fullText, // 完整的文本内容
message: responseMessage
}
// 智能体完成回复
{
type: 'agent_complete',
agent: currentAgent,
message: responseMessage
}
// 顺序模式特有事件
{
type: 'sequence_start',
agent: agent,
index: i,
total: totalAgents
}传统模式现在也支持流式显示:
- 创建空白消息占位
- 实时更新消息内容
- 自动滚动到底部
- 状态指示(thinking → idle)
- thinking: 正在思考/生成中
- idle: 空闲状态
- streaming: 流式推送中
- 文字逐字显示,而非一次性出现
- 自动滚动跟随最新内容
- 智能体状态实时更新
- 流畅的视觉过渡
// 启用流式响应
const response = await fetch(endpoint, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: model,
messages: messages,
stream: true // 关键:启用流式
})
});
// 处理流式数据
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
// 解析SSE格式数据
// 实时更新UI
}// 使用流式更新回调
const updatedConversation = await autogenService.sendMessage(
conversationId,
content,
'user',
handleStreamUpdate // 流式更新处理器
);- 保留了所有原有的非流式方法
- 现有配置和数据无需修改
- 渐进式升级,平滑过渡
确保您使用的LLM API支持Server-Sent Events (SSE)格式的流式响应:
- OpenAI API ✅
- Ollama ✅
- 阿里云DashScope ✅
- 其他兼容OpenAI格式的API ✅
- 首字符响应时间显著减少
- 用户可以立即看到回复开始
- 更好的并发处理能力
- 自动清理流式连接
- 内存占用优化
- 错误处理机制
- 网络环境: 在稳定的网络环境下效果最佳
- 消息长度: 对于长文本响应,流式效果尤其明显
- 多智能体: 顺序模式下可以看到智能体依次实时回复
如果遇到流式显示问题:
- 检查网络连接稳定性
- 确认LLM API支持流式响应
- 查看浏览器控制台错误信息
- 确保API密钥和端点配置正确
- 支持暂停/恢复流式输出
- 添加打字机音效
- 流式内容的实时语音合成
- 更精细的流式控制选项
- 流式内容的搜索和高亮
- 流式内容的实时翻译
- 基于内容的动态主题切换
- 流式响应的性能分析
- 智能体协作的可视化流程
通过这次升级,用户现在可以享受到更加流畅、实时的对话体验,无论是单个LLM对话还是多智能体协作场景。