ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Cherry Studio 消息删除行为变更:保留会话分支与多模型回复组的精准删除

Cherry Studio 消息删除行为变更:保留会话分支与多模型回复组的精准删除 人工智能大模型AI 应用交互助手本地部署【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址https://gitcode.com/CherryHQ/cherry-studio点击查看免费下载导读本技术指南围绕 Cherry Studio 的一次消息删除行为变更展开自 2026-08-06 起首轮消息可以与其他消息一样按拼接splice语义删除删除多模型回复组时只会移除各模型产生的 assistant 回复而用户的提问与后续消息将原样保留删除动作不再误伤整个会话分支子树。读完本文你将理解这次变更的触发场景、前端删除可用性的判定机制not-loaded/generating两种禁用原因、多选删除与分组删除的实现细节以及配套国际化文案的更新内容。变更概述变更前的问题在旧行为中当用户删除一条位于会话分支中部的消息时删除动作会以该消息为根将其整棵后续消息子树一并移除。这在大多数普通对话里是符合预期的——删除一条用户提问往往意味着连同其所有回复一起清理。然而在多模型回复组multi-model reply group场景下这种级联删除会造成误伤一条用户提问可能同时触发多个模型分别作答界面中它们以同一组的形式并列展示用户只想删掉其中一个模型的回答但旧逻辑会连同用户提问与整条分支一并删除或者用户想删掉整组 assistant 回复、保留自己的提问继续追问旧逻辑同样做不到。变更后的新行为本次变更引入 PR #17996变更类别为changed影响级别notice明确规定了三条新规则首轮消息可删除会话的第一轮first-turn消息现在可以像其他消息一样执行删除并遵循与其他消息相同的 splice 拼接行为——即只移除该消息本身不级联删除后续内容多模型回复组删除语义删除一个多模型回复组时只移除其中的 assistant 回复各模型的回答用户提问与之后的消息均被保留生成期间的删除保护当被涉及的 assistant 回复仍在生成中时单条删除、多模型组删除以及多选删除三种操作均不可用。从用户视角看这次变更带来的核心收益是删除消息不再因为动作只针对一个多模型回复组而连带移除整个会话子树会话分支结构因此得以保全。变更属于自动生效的行为调整用户无需任何手动配置。删除可用性的前端判定机制新行为在前端代码中对应一套显式的删除可用性delete availability模型。该模型定义在 ChatWriteContext.ts 中export interface DeleteMessageOptions { // ... } export type MessageDeleteAvailability | { enabled: true } | { enabled: false; reason: not-loaded | generating }即每条消息的删除可用性只有三种状态状态含义触发时机{ enabled: true }可以删除消息已加载完毕且不处于生成中{ enabled: false; reason: not-loaded }暂时不可删除消息列表仍在加载中{ enabled: false; reason: generating }暂时不可删除该消息所属组的 assistant 回复仍在生成负责把禁用原因翻译成用户可读提示的是 messageDeleteAvailability.ts核心逻辑如下export function getMessageDeleteUnavailableText( reason: MessageDeleteUnavailableReason | undefined, t: TFunction ): string | undefined { if (reason not-loaded) return t(message.delete.root_unavailable) if (reason generating) return t(message.delete.generating_unavailable) return undefined }该工具函数被消息组菜单栏、多选操作弹层MultiSelectActionPopup等多个删除入口复用保证同一禁用原因、同一提示文案的语义一致。测试对生成期禁用行为的验证在 MultiSelectActionPopup.test.tsx 中测试用例逐一验证了两种禁用原因[ [not-loaded, message.delete.root_unavailable], [generating, message.delete.generating_unavailable] ] as const)(disables only deletion for %s, (deleteDisabledReason, tooltip) { render(MultiSelectActionPopup {...controlledProps()} deleteDisabledReason{deleteDisabledReason} /) // ... expect(buttonFor(delete-icon)).toBeDisabled() expect(buttonFor(delete-icon).parentElement).toHaveAttribute(data-tooltip-content, tooltip) })注意这里断言的是只禁用删除disables only deletion——生成期间其他操作复制、导出、保存等仍保持可用只有删除按钮被禁用并展示对应 tooltip这正是本次变更中生成期间三种删除路径全部不可用这一约束的可执行化体现。删除动作的调用链与分组删除单条删除message.delete 命令单条删除由命令message.delete触发实现在 messageMenuBarActions.tsxregisterCommand(message.delete, async ({ actions, message }) { await actions.abortMessageTranslation?.(message.id) await actions.deleteMessage?.(message.id, { modelName: getMessageListItemModelName(message) || undefined }) })删除前会先中止该消息可能存在的翻译任务再携带模型名调用deleteMessage。deleteMessage与分组删除、多选删除相关的动作统一声明在 MessageListActions 中getMessageDeleteAvailability?: (messageId: string) MessageDeleteAvailability deleteMessage?: (messageId: string, options?: DeleteMessageOptions) void | Promisevoid // ... deleteMessageGroup?: (messageIds: readonly string[]) void | Promisevoid deleteMessageGroupWithConfirm?: (messageIds: readonly string[]) void | Promisevoid其中deleteMessage单条消息删除也是多模型回复组内单条 assistant 回复的删除入口deleteMessageGroup/deleteMessageGroupWithConfirm整组删除后者带确认弹窗即变更文档所述的删除多模型回复组只移除 assistant 回复的实现入口deleteSelectedMessages多选模式下的批量删除与MultiSelectActionPopup联动。从源码结构看这三类删除入口在调用前都需要通过getMessageDeleteAvailability或等价的deleteDisabledReason判定这也解释了为何生成期间单条、整组、多选三种删除全部不可用——它们共享同一套可用性判定。多选删除useMessageSelectionController多选删除由 useMessageSelectionController.ts 管理其通过useCache(chat.multi_select_mode)与useCache(chat.selected_message_ids)维护多选模式与选中集合并将deleteMessage注入为deleteSelectedMessages的底层实现。选中消息为空时弹出chat.multiple.select.empty提示避免空删。测试用例 useMessageSelectionController.test.tsx 与 MessageGroupMenuBar.test.tsx 覆盖了这些交互路径。多模型组删除的确认文案更新新增生成期不可删除提示本次变更为 release manager 指出的第二处配套改动是新增了message.delete.generating_unavailable文案用于向用户解释为什么生成期间无法删除。该文案已同步到全部 13 个语言包例如英文en-us.jsonmessage.delete.generating_unavailable:A reply in this group is still generating and cannot be deleted yet.message.delete.root_unavailable:Messages are still loading and cannot be deleted yet.message.delete.confirm.title:Delete Confirmationmessage.delete.confirm.content:Are you sure you want to delete the selected {{count}} message(s)?简体中文zh-cn.jsonmessage.delete.generating_unavailable:该分组中仍有回答正在生成暂时无法删除。message.delete.root_unavailable:消息仍在加载暂时无法删除。message.delete.confirm.title:删除确认message.delete.confirm.content:确认删除选中的 {{count}} 条消息吗更新多模型组删除确认文案多模型组删除的确认弹窗文案message.delete.confirm.*也已同步改写用于描述哪些消息会被保留——即明确告知用户删除动作只移除 assistant 回复用户提问与后续消息不受影响。这避免了用户因担心删一个回答会清空整条对话而不敢执行删除。变更影响总结与注意事项维度变更前变更后首轮消息删除不支持/行为特殊与其他消息一致按 splice 语义删除删除多模型回复组可能级联移除整条子树仅移除 assistant 回复保留用户提问与后续消息生成期间的删除行为未明确定义单条、整组、多选删除全部禁用并提示原因会话分支保全删除可能破坏分支结构分支得以保留注意事项自动生效无用户操作本变更是客户端行为调整升级到包含该变更PR #17996的版本后自动生效生成期保护是硬约束只要被涉及的 assistant 回复还在生成删除入口就处于禁用状态并展示message.delete.generating_unavailable提示此时应等待生成完成后再删除文案已本地化新增与更新的文案message.delete.generating_unavailable、message.delete.root_unavailable、message.delete.confirm.*已随 13 个语言包同步发布i18n 资源目录 是排查文案问题的首选位置测试保障删除可用性判定与禁用交互均有对应的单元测试覆盖MultiSelectActionPopup.test.tsx、MessageGroupMenuBar.test.tsx、useMessageSelectionController.test.tsx后续改动可据此回归。延伸阅读变更声明原文2026-08-06-message-deletion-preserves-branches.md删除可用性类型定义ChatWriteContext.ts删除禁用原因→文案映射messageDeleteAvailability.ts消息列表动作契约MessageListActionstypes.ts删除命令注册与分组删除messageMenuBarActions.tsx多选删除控制器useMessageSelectionController.ts赞分享人工智能大模型AI 应用交互助手本地部署【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址https://gitcode.com/CherryHQ/cherry-studio点击查看免费下载相关推荐Cherry Studio 删除 Workspace 的行为变更级联清理其下所有 Agent Session磁盘目录原样保留Cherry Studio 删除 Workspace 的行为变更级联清理其下所有 Agent Session磁盘目录原样保留 本文基于 Cherry Stu人工智能大模型AI 应用交互助手本地部署Cherry Studio 消息树虚拟根Virtual Root模型单根不变量、兄弟组与删除语义深度解析Cherry Studio 消息树虚拟根Virtual Root模型单根不变量、兄弟组与删除语义深度解析 Cherry Studio 的主题TopicAI 应用大模型桌面应用本地部署RAGRoo Code 2.2.43 消息删除功能详解单条删除与级联回退的对话控制机制Roo Code 2.2.43 消息删除功能详解单条删除与级联回退的对话控制机制 导读 Roo Code 2.2.43 为任务对话引入了消息删除能力用户可以人工智能AI Agent代码智能体开发工具工具调用MCP Clients创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表