Skip to content

Copilot 前端:多轮提问后右侧策略分析面板内容消失 #15

@ldemon2333

Description

@ldemon2333

问题描述

在 Copilot 实时面试辅助页面,输入 2-3 次 HR 提问后,右侧策略分析面板(CopilotPanel)的内容会消失,变成空白状态。

复现步骤

  1. 创建一个 Copilot 准备会话并完成分析
  2. 进入实时辅助模式
  3. 手动输入第 1 条 HR 提问 → 右侧面板正常显示策略树、核心要点、预测追问等
  4. 手动输入第 2 条 HR 提问 → 之前的回答建议被清空(预期),但同时面板部分区域可能变空
  5. 手动输入第 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_pointschildrenprep_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.jsxhandleUpdate 回调、CopilotPanel 组件
  • frontend/src/hooks/useCopilotStream.js — WebSocket 消息转发

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions