Skip to content

[Feature] 新建对话时保留当前图表 #928

Description

@Zonezzc

功能描述

希望增加一种“新建对话但保留当前 draw.io 画布”的方式。

界面可以提供两个独立操作:

  1. 新建空白对话:清空聊天并重置图表,即当前行为
  2. 基于当前图表新建对话:只清空聊天上下文,保留当前图表 XML

问题背景

当前 handleNewChat() 会同时清空消息和图表。因此,当对话过长或上下文受到污染时,用户无法在保留当前图表的前提下重新开始一次干净的 AI 对话。

一个实际场景:

  1. 用户和 AI 多轮迭代编辑图表;
  2. 用户又在 draw.io 画布中手工调整文字和布局;
  3. 对话变长后,模型开始固守之前的错误判断。即使本轮请求已经包含 Current diagram XML (AUTHORITATIVE - the source of truth),模型仍可能沿用旧结论;
  4. 新建对话可以清除被污染的上下文,但当前操作也会清空图表,导致用户无法继续编辑现有画布。

这对于人和 AI 交替修改的半自动化工作流尤其重要:画布应当是可以持续保留的工作成果,而聊天上下文应当可以单独重置。

相关反馈也反映了聊天与图表绑定过紧、状态或修改丢失等问题:

建议方案

增加一个新的操作,例如:

  • 基于当前图表新建对话
  • 重置聊天上下文,保留图表

建议行为:

  • 按当前逻辑先把旧会话保存到 History;
  • 清空聊天消息、输入框、附件、重试状态以及模型和工具调用历史;
  • 保留 draw.io iframe 中当前加载的图表 XML;
  • 新会话发送第一条消息时,继续把保留的图表作为权威 Current diagram XML 提交给模型;
  • 不重放旧会话中的历史工具调用;
  • 最好以当前保留的 XML 为基线重新初始化 Diagram History,而不是删除画布。

UI 可以使用下拉菜单或确认弹窗:

  • 新建空白对话:清空聊天并清空图表
  • 基于当前图表新建对话:只清空聊天,保留图表

从实现上看,第二条路径可以复用大部分 handleNewChat(),但跳过 clearDiagram(),并保留当前图表状态。

考虑过的替代方案

  • 导出并重新导入 .drawio 文件:可以使用,但操作繁琐,会打断自然的人机交替编辑流程;
  • 从 History 恢复旧会话:旧聊天也会一起恢复,无法清除已经污染的上下文;
  • 继续使用原对话:无法解决错误结论固化或上下文过长的问题;
  • 手工复制 XML:技术上可行,但体验较差,而且应用本身已经能够取得当前画布 XML。

补充说明

当前重置提示明确把两个操作绑定在一起:“这将清除当前对话并重置图表。”

增加“保留图表”选项不会改变现有默认行为,同时能够提供更安全、更符合半自动化编辑需求的工作流。

当前行为对应 components/chat-panel.tsx 中的 handleNewChat():它在清空消息后调用 clearDiagram(),并清空 Diagram History。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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