问题描述
在 Copilot 实时面试辅助页面,输入 2-3 次 HR 提问后,右侧策略分析面板(CopilotPanel)的内容会消失,变成空白状态。
复现步骤
- 创建一个 Copilot 准备会话并完成分析
- 进入实时辅助模式
- 手动输入第 1 条 HR 提问 → 右侧面板正常显示策略树、核心要点、预测追问等
- 手动输入第 2 条 HR 提问 → 之前的回答建议被清空(预期),但同时面板部分区域可能变空
- 手动输入第 3 条 HR 提问 → 面板整体变为空白
根因分析
Bug 1:copilot_update 消息全量替换而非合并
Copilot.jsx L770:
case "copilot_update":
setCurrentUpdate(msg); // ← 全量替换,不是合并
setStreamingAnswer(""); // ← 清空上一轮回答
setAnswerLoading(true);
setPerfMetrics(null);
break;
setCurrentUpdate(msg) 将整个 currentUpdate 替换为新的 WebSocket 消息。如果后端某轮发送的 copilot_update 缺少某些字段(如 recommended_points、children、prep_hint),之前轮次的数据会被丢失。CopilotPanel 中这些字段变为 undefined,对应区域回落到空状态:
const recommendedPoints = update?.recommended_points || []; // → []
const children = update?.children || []; // → []
const prepHint = update?.prep_hint; // → undefined
修复:应改为增量合并:
setCurrentUpdate((prev) => ({ ...prev, ...msg }));
Bug 2:strategy_recommendation 消息被静默丢弃
useCopilotStream.js L56-74,WebSocket onmessage 的 switch 没有包含 strategy_recommendation:
case "copilot_update":
case "risk_alert":
case "answer_chunk":
case "answer_meta":
case "answer_done":
case "hr_profile_update":
case "monitor_update":
case "progress":
case "started":
case "stopped":
case "error":
if (onUpdateRef.current) onUpdateRef.current(msg);
break;
// ← strategy_recommendation 不在列表中,被默认 case 丢弃
后端 _run_mcts_and_push() 发送的 strategy_recommendation 消息(包含最优策略、预测追问、危险区域、胜率等)永远不会到达前端 handleUpdate。
修复:在 switch 中增加 case "strategy_recommendation":。
Bug 3:每次 copilot_update 无条件清空回答区域
setStreamingAnswer(""); // 上一轮的完整回答被清空
setPerfMetrics(null); // 性能指标被清空
在新一轮 Answer Coach 回答尚未开始流式推送时,面板的回答区域会短暂变空。如果 Answer Coach 响应较慢或失败,回答区域会持续为空。
影响
- 用户连续提问后失去策略分析数据的可视化
- MCTS 博弈引擎的策略推荐(胜率、预测追问、危险区域)完全不可见
- 面试过程中核心辅助信息断层
涉及文件
frontend/src/pages/Copilot.jsx — handleUpdate 回调、CopilotPanel 组件
frontend/src/hooks/useCopilotStream.js — WebSocket 消息转发
问题描述
在 Copilot 实时面试辅助页面,输入 2-3 次 HR 提问后,右侧策略分析面板(CopilotPanel)的内容会消失,变成空白状态。
复现步骤
根因分析
Bug 1:
copilot_update消息全量替换而非合并Copilot.jsxL770:setCurrentUpdate(msg)将整个currentUpdate替换为新的 WebSocket 消息。如果后端某轮发送的copilot_update缺少某些字段(如recommended_points、children、prep_hint),之前轮次的数据会被丢失。CopilotPanel中这些字段变为undefined,对应区域回落到空状态:修复:应改为增量合并:
Bug 2:
strategy_recommendation消息被静默丢弃useCopilotStream.jsL56-74,WebSocketonmessage的 switch 没有包含strategy_recommendation:后端
_run_mcts_and_push()发送的strategy_recommendation消息(包含最优策略、预测追问、危险区域、胜率等)永远不会到达前端handleUpdate。修复:在 switch 中增加
case "strategy_recommendation":。Bug 3:每次
copilot_update无条件清空回答区域在新一轮 Answer Coach 回答尚未开始流式推送时,面板的回答区域会短暂变空。如果 Answer Coach 响应较慢或失败,回答区域会持续为空。
影响
涉及文件
frontend/src/pages/Copilot.jsx—handleUpdate回调、CopilotPanel组件frontend/src/hooks/useCopilotStream.js— WebSocket 消息转发