12 KiB
12 KiB
报告协作工作台 — 交互重设计方案(v2)
日期:2026-09-07 状态:待确认(确认后按 §7 分期实施) 取代:现行「规则澄清 + 三张模板方案卡 + 画布为主」的交互 原则:回到最初设计 —— 协调者智能体全程与用户对话的主线
1. 设计目标与总体形态
用户视角只有一条主线:和一个规划师智能体对话 → 它摸清意图并规划工作流 → 确认后执行、过程在流程图上可见 → 随时插话干预、指定智能体重跑 → 最终成稿、继续对话式修改。
┌─────────────────────────────────────────────────────────┐
│ 阶段1 计划模式 阶段2/3 执行+干预 阶段4 成稿 │
│ ┌───────────┐ ┌───────────┐ ┌──────────┐ │
│ │ 规划师对话 │ 确认 │ 聊天时间线 │ 审稿过 │ 对话改稿 │ │
│ │ 需求摘要卡 │ ─────→ │ +成员Tab │ ─────→ │ 版本/diff│ │
│ │ 工作流卡 │ 冻结 │ +流程图动画│ 报告卡 │ 上游重跑 │ │
│ └───────────┘ └───────────┘ └──────────┘ │
│ ↑ 回到计划模式(replan)随时可触发 ↑ │
└─────────────────────────────────────────────────────────┘
与现行的核心差异:
| 维度 | 现行(做偏的) | v2 |
|---|---|---|
| 需求澄清 | 规则模板问句秒回 | 规划师智能体(LLM)领域化提问 |
| 工作流来源 | 3 张确定性模板 | LLM 按意图生成自定义 DAG,对话迭代修改 |
| 执行展示 | 画布为主、聊天为辅 | 聊天时间线为主(成员 Tab 切换保留),执行状态在流程图上动画呈现 |
| 干预 | 命令确认卡体系 | 输入框常开 → 协调者智能体分类;支持指定智能体重跑 |
| 报告修改 | 改写候选(纯文字层) | 意图分流:润色走改写;事实性问题触发上游节点重跑 |
2. 阶段 1:计划模式 — 需求梳理与工作流规划
2.1 计划模式状态
- 用户发出第一条需求消息起进入计划模式,Header 显示徽章「📋 计划模式」,输入框提示语切换为「梳理需求中,你可以随时补充或纠正…」。
- 计划模式在工作流确认冻结时结束;执行期大改可通过 replan 回到计划模式(见 §5.4)。
2.2 规划师对话(LLM,替换现行规则路由)
- 必须调用独立内置智能体
report-collaboration-intent的真实 LangGraph thread,并原样消费messages-tupleSSE;禁止用ainvoke()等待完整 JSON 后再包装成一话。 - 流式正文、思考内容和工具步骤直接进入工作台现有
MessageList,与普通智能体问答采用同一套步骤条 / Reasoning 展示。 - 模型:
report_collaboration.planner_model(回退coordinator_model→ 默认模型,复用现有 model_resolver 冻结机制)。 - 提问是领域化的:写市场分析就问「关注整车还是供应链 / 要不要竞品对比 / 给谁看 / 篇幅」,而非固定模板问句。
- 澄清轮次上限沿用
max_clarification_rounds;用户随时可以说「直接开始」按默认假设推进。
2.3 需求摘要卡
信息足够后,规划师在对话中输出一张结构化需求摘要卡(业务卡插槽渲染):主题 / 目的 / 读者 / 角度清单 / 篇幅与重点 / 默认假设。用户逐项看,可在对话里继续改(「读者改成投资人」→ 卡片更新出新版)。
2.4 工作流生成与迭代
- 规划师判断意图信息足够后,立即按已确认意图自动生成一份工作流方案(不是三选一),不再要求用户额外点击“确认意图/生成方案”;方案以工作流卡(成员构成、各节点使命、预计时长/成本)+ 右侧流程图预览呈现。
- 生成约束(保证可执行):节点类型受词表约束 —
research / verify / analyze / write / review;自由的是结构(几条线、并行还是串行、核验深度)与每个节点的使命/角度/工具。 - 对话式修改:「把价格策略单独拆一条线」「加一个政策风险分析」→ 规划师修订后出新版工作流卡(带变更说明),再确认。
- 「开始执行」→ 冻结需求 + 工作流(含模型/预算快照,沿用现有 freeze 机制)。
3. 阶段 2:执行 — 过程在流程图上可见
3.1 流程图动画规格(执行状态的可视化主载体)
节点状态 → 样式(ReportFlowCanvas / ReportFlowNode,状态源 selectNodeStatusMap,事件源 node.status.changed SSE):
| 状态 | 节点样式 | 连入边 |
|---|---|---|
| planned / queued | 灰色常态 | 静态 |
| running | 主色描边 + 呼吸脉冲动画(ring)+ 角标 spinner | 流动动画(@xyflow 内置 animated: true 的 dash 流动) |
| completed | 绿色 + ✓ 角标,常驻 | 恢复静态实线 |
| failed | 红色 + 错误角标 | 红色虚线 |
| awaiting_input | 橙色 + ?角标 | 橙色静态 |
| interrupted / superseded | 半透明降级 | 灰 |
- 语义:边流动 = 数据正在流入该节点(该节点执行中);节点完成即停动画换完成样式。
- 实现成本:@xyflow 原生支持 animated 边与自定义节点 className,纯 CSS 补呼吸动画即可,无需新依赖。
3.2 聊天区(保留现有 Tab 切换)
- 并行成员沿用 AgentStageSelector Tab 切换(维持现状,不改交错时间线)。
- 每个 Tab 内是该成员的完整流式输出:思考、工具调用卡、检索过程、正文 —— 与普通智能体问答同观感(message-adapter 已具备映射能力)。
- 协调者播报(「研究线 A 完成,核心发现 X,开始交叉核验」)进入总时间线 Tab。
4. 阶段 3:干预 — 对话即干预 + 指定重跑
4.1 输入框常开,协调者智能体分流
执行期输入框永远可用,所有输入先到协调者(LLM 分类,规则高精度直判兜底——复用 RC-BE-014 IntentRouter 骨架,把「规则优先」反转为「LLM 优先 + 规则快路径」):
| 用户意图 | 协调者行为 | 生效时机 |
|---|---|---|
| 提问(「查到什么了?」) | 直接回答 | 立即,不打断 |
| 修正方向(「重点看下沉市场」) | 小改:在安全点注入 overlay,并回复说明 | 下个安全点 |
| 指定重跑(见 §4.2) | 出确认卡 → 重开节点 attempt | 确认后 |
| 大改(砍线/加线) | 提议 replan → 回计划模式 | 用户确认 |
| 停止 | 直接取消 | 立即 |
4.2 指定智能体重跑(新增核心交互)
场景:用户发现某节点传给下游的信息不对(如研究线 B 的结论有误)。
两个入口,同一后端动作:
- 对话:「研究线 B 的结果不对,重新查,重点看价格战」→ 协调者解析出
node_id+ 新指令; - 画布:点节点 → 抽屉(NodeInspectorDrawer)加「↻ 重新执行」按钮。
级联规则(复用并补全 ledger 的 targeted rework):
重跑节点 N(attempt+1,带用户新指令作为 mission overlay)
→ N 完成 → 所有直接/间接依赖 N 产物的下游节点标记 superseded
→ 按 DAG 依赖序逐波重跑(边动画重新流动,用户全程可见)
→ 受影响章节重新生成
- 确认卡必须展示影响面:「将级联重跑 核验B / 分析 / 写作 共 3 个节点,预计 +8 分钟」。
- 成本保护:级联重跑计入 run 预算(现有 budget 机制),预算不足时明确报因。
5. 阶段 4:报告成稿与对话式修改
5.1 成稿
审稿通过 → 报告卡出现在时间线(点开 ReportPreviewDialog 全文),协调者播报总结(各线核心发现 → 结论如何形成)。
5.2 修改意图分流(协调者 LLM 判定)
| 用户说 | 判定 | 动作 |
|---|---|---|
| 「把第二章结论写得更笃定」 | 文字润色 | 改写候选(现有 rewrite API)→ 对比预览 → apply → 新版本 |
| 「这个数据不对 / 重新收集一下」 | 事实性问题 | 定位来源节点 → 触发该节点重跑(可带新角度)→ 级联 §4.2 → 受影响章节重生成 → 新版本 |
| 「再从供应链角度补一节」 | 结构性新增 | replan:回计划模式改工作流(只增不删已完成部分) |
| 「恢复到上一版」 | 版本回退 | 现有 restore API |
- 版本链:每次 apply / restore / 级联重跑产出均产生新 head,历史完整保留(现有机制)。
- 修改对话里协调者必须先复述理解(「你是想让研究线 B 换个角度重查,然后重写第三章,对吗?」)再执行,避免误触发昂贵的级联。
6. 工程改造清单
6.1 保留(本次联调已验证)
- 持久化 13 张表 + durable SSE +
after_seq断线续传;幂等键 / 乐观锁 / 预算框架。 - MessageList 复用链路(message-adapter → LangGraph Message → 业务卡插槽)。
- AgentStageSelector Tab、commands 安全点骨架(RC-BE-014)、报告版本三件套(RC-BE-015)、前端 hooks/reducer/selectors 主体。
- 「清空历史」「生成候选方案」等本次新增入口。
6.2 后端重做 / 新建
| 项 | 说明 |
|---|---|
| 规划师智能体 | LLM 多轮澄清(替换 requirement/intent_router.py 规则路由)+ 需求摘要结构化 + 工作流 LLM 生成(受 §2.4 词表约束,替换 planning/controller.py 三模板)+ 对话式工作流修订 |
| 协调者智能体升级 | 干预分类 LLM 优先;修改意图分流(§5.2);执行前复述确认 |
| 指定重跑 + 级联 | ledger targeted rework 补全级联 superseded/重跑波次;确认卡带影响面计算 |
| AgentScope 适配器修复 | count_tokens 协议缺失(上下文压缩必崩);attempt 耗尽终态化(防僵尸 run) |
| 事件补齐 | 边流动所需的节点状态事件已有;补「级联影响预告」事件 |
6.3 前端重做 / 新建
| 项 | 说明 |
|---|---|
| 计划模式 UI | Header 徽章、composer 提示切换、需求摘要卡、工作流卡(替换现三张模板卡) |
| 流程图动画 | running 节点呼吸动画 + 入边 animated、completed ✓ 样式、级联重跑时边动画重流(§3.1) |
| 节点抽屉 | 加「重新执行」按钮 → 确认卡 |
| 干预交互 | 执行期输入框常开;意图确认卡(含影响面);修改对话复述确认 |
| 布局 | 聊天为主、画布为辅的默认比例微调(不动整体两栏结构) |
7. 实施分期
| 期 | 内容 | 验收 |
|---|---|---|
| P0 地基 | AgentScope count_tokens 修复;attempt 耗尽终态化;级联重跑的 ledger 补全 |
执行阶段不崩、无僵尸 run、单节点重跑级联正确(后端测试) |
| P1 计划模式 + 执行可视化 | 规划师 LLM 对话、需求摘要卡、工作流 LLM 生成与迭代、计划模式 UI、流程图动画 | 从新会话到确认工作流全程对话完成;执行时动画正确随状态流转 |
| P2 干预 + 成稿修改 | 协调者 LLM 分类、指定重跑(两入口 + 影响面确认卡)、报告修改意图分流、上游级联重跑 | 四类干预各自走通;「数据不对→重跑→新章节→新版本」全链路 |
每期结束跑 RC 全量测试(当前基线 233 通过)+ 前端 26 单测,不引入对其他模块的影响。