# 流式输出调试指南 ## 如何确认流式是否启用 ### 1. 检查控制台日志 发送消息后,你应该看到以下日志(按顺序): ``` ✅ 流式已启用的标志: 🚀 [callModelStream] === 开始真正的流式请求 === 🚀🚀🚀 [sendChatRequestStream] === 进入流式请求方法 === 🌊🌊🌊 [makeChatRequestStream] === 开始读取流数据 === ⚡⚡⚡ [makeChatRequestStream] 收到第一个数据块!耗时: XX ms ⚡ [callModelStream] 首字延迟: XX ms ❌ 流式未启用的标志: ⏱️ [callModel] 开始处理 ← 如果看到这个,说明用的是非流式 ⏱️ [callModelStream] 模拟流式输出耗时 ← 旧的模拟流式 ``` ### 2. 观察用户体验 **流式已启用**: - 发送消息后 1-2秒内开始看到文字 - 文字一个个或一小段一小段地出现 - 没有明显的"模拟打字"效果 **流式未启用**: - 等待 8-10秒后才看到文字 - 文字以固定速度"打字"出现 - 看起来很假的打字效果 ### 3. 检查网络面板 **Chrome DevTools → Network**: - 查找请求到 `/chat/completions` - 查看 Response 标签: - **流式**: 显示 `(pending)` 并逐渐增加内容 - **非流式**: 一次性显示完整内容 ## 可能的问题 ### 问题1: 代码没有调用流式方法 **症状**: 控制台没有 `🚀🚀🚀` 日志 **原因**: `callModelStream` 可能还在调用 `callModel` 而不是 `sendChatRequestStream` **检查**: ```typescript // web/src/services/chatService.ts 第625行左右 // 应该是: const result = await modelServiceManager.sendChatRequestStream(...) // 不应该是: const result = await this.callModel(...) ``` ### 问题2: API不支持流式 **症状**: 有 `🚀🚀🚀` 日志,但没有 `🌊🌊🌊` 日志 **原因**: - 服务类型识别错误 - `stream: true` 没有生效 **检查**: ```typescript // 查看控制台日志 🔍 [mapProviderType] volcengine → volcengine // 应该正确映射 // 查看请求体 body = { model: "...", messages: [...], stream: true // ← 必须是 true } ``` ### 问题3: 流式解析错误 **症状**: 有 `🌊🌊🌊` 日志,但没有 `⚡⚡⚡` 日志 **原因**: SSE (Server-Sent Events) 格式解析失败 **检查**: 在 `makeChatRequestStream` 中添加调试: ```typescript for (const line of lines) { console.log('🔍 收到行:', line.slice(0, 100)) // 查看原始数据 if (line.startsWith('data: ')) { try { const data = JSON.parse(line.slice(6)) console.log('🔍 解析后:', data) // 查看解析结果 } catch (e) { console.error('❌ 解析失败:', e, line) } } } ``` ## 手动测试流式API 你可以手动测试API是否支持流式: ```bash curl -N -X POST https://ark.cn-beijing.volces.com/api/v3/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "doubao-seed-1-6-flash-250828", "messages": [{"role": "user", "content": "你好"}], "stream": true }' ``` **期望输出** (流式): ``` data: {"choices":[{"delta":{"content":"你"}}]} data: {"choices":[{"delta":{"content":"好"}}]} data: {"choices":[{"delta":{"content":"!"}}]} data: [DONE] ``` **如果看到这样** (非流式): ```json { "choices": [{ "message": {"content": "你好!我是AI助手..."} }] } ``` 说明API不支持流式或配置错误。 ## 快速修复步骤 ### 步骤1: 确认流式方法被调用 1. 刷新页面 2. 打开控制台 (F12) 3. 发送消息 "测试" 4. 搜索 `🚀🚀🚀` - ✅ **找到**: 进入步骤2 - ❌ **没找到**: 代码问题,检查 `chatService.ts` ### 步骤2: 确认开始读取流 1. 搜索 `🌊🌊🌊` - ✅ **找到**: 进入步骤3 - ❌ **没找到**: API配置问题,检查 `stream: true` ### 步骤3: 确认收到数据 1. 搜索 `⚡⚡⚡` - ✅ **找到**: 流式成功! - ❌ **没找到**: SSE解析问题,检查数据格式 ### 步骤4: 检查首字延迟 流式成功后,查看性能: ``` ⚡ [callModelStream] 首字延迟: 1500.00 ms ← 应该 <2000ms ``` - ✅ **<2000ms**: 性能良好 - ⚠️ **2000-5000ms**: 网络慢但可接受 - ❌ **>5000ms**: 网络问题,考虑换API端点 ## 性能对比 ### 非流式 (当前可能的状态): ``` ⏱️ [makeChatRequest] 网络请求耗时: 9,660 ms ⏱️ [callModelStream] 模拟流式输出耗时: 521 ms 总延迟: ~10,181 ms 首字延迟: 9,660 ms (等待完整响应) ``` ### 真流式 (目标状态): ``` ⏱️ [makeChatRequestStream] 首字节响应耗时: 1,200 ms ⚡ [callModelStream] 首字延迟: 1,200 ms ⏱️ [makeChatRequestStream] 流式总耗时: 3,500 ms 总延迟: ~3,500 ms 首字延迟: 1,200 ms (实时流式) ``` **改善**: - 首字延迟: 9,660ms → 1,200ms (提升 **8倍**) ⚡ - 总延迟: 10,181ms → 3,500ms (提升 **3倍**) 🚀 ## 常见问题 FAQ ### Q: 为什么我看不到流式效果? **A**: 检查以下几点: 1. 控制台是否有 `🚀🚀🚀` 日志? 2. API是否支持 `stream: true`? 3. 服务类型是否正确识别? ### Q: 流式请求报错怎么办? **A**: 常见错误: - `无法获取响应流`: API不支持流式 - `流式请求超时`: 网络问题或API响应慢 - `HTTP 400`: 请求参数错误,检查 `stream: true` ### Q: 首字延迟还是很高? **A**: 可能原因: - API服务器响应慢 - 网络延迟高 - 模型计算时间长 **解决**: 更换更快的模型或API端点 ### Q: 如何回退到非流式? **A**: 修改 `chatService.ts`: ```typescript // 回退方案 const result = await this.callModel(conversation, model) // 而不是 const result = await modelServiceManager.sendChatRequestStream(...) ``` --- **创建时间**: 2025年10月14日 **用途**: 调试流式输出功能