[Feature] 新建对话时保留当前图表
Author: ZonezzcCreated Aug 22, 2026Updated Aug 22, 2026
功能描述
希望增加一种“新建对话但保留当前 draw.io 画布”的方式。
界面可以提供两个独立操作:
- 新建空白对话:清空聊天并重置图表,即当前行为
- 基于当前图表新建对话:只清空聊天上下文,保留当前图表 XML
问题背景
当前 handleNewChat() 会同时清空消息和图表。因此,当对话过长或上下文受到污染时,用户无法在保留当前图表的前提下重新开始一次干净的 AI 对话。
一个实际场景:
- 用户和 AI 多轮迭代编辑图表;
- 用户又在 draw.io 画布中手工调整文字和布局;
- 对话变长后,模型开始固守之前的错误判断。即使本轮请求已经包含
Current diagram XML (AUTHORITATIVE - the source of truth),模型仍可能沿用旧结论; - 新建对话可以清除被污染的上下文,但当前操作也会清空图表,导致用户无法继续编辑现有画布。
这对于人和 AI 交替修改的半自动化工作流尤其重要:画布应当是可以持续保留的工作成果,而聊天上下文应当可以单独重置。
相关反馈也反映了聊天与图表绑定过紧、状态或修改丢失等问题:
- #194:如何新建或清除会话
- #210 / #224:恢复 Chat 窗口后会清空更改
- #445:一个对话与一张图表强绑定
- #614:长对话或截断后持续消耗上下文与 Token
- #875:历史聊天和图表记录消失
- #882:希望独立编辑多个图表
建议方案
增加一个新的操作,例如:
- 基于当前图表新建对话
- 重置聊天上下文,保留图表
建议行为:
- 按当前逻辑先把旧会话保存到 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。
Source: DayuanJiang/next-ai-draw-io