Claude Artifact 编辑后被回滚到旧版本

Artifact 改了半天,发一条新 prompt 后直接回滚到三轮前的版本。多半是同步竞争或者对话状态脏掉——这样修,并且让它别再发生。

在 Artifact 面板里直接改了二十分钟,再给 Claude 发一条 follow-up,Artifact 静悄悄退回到三轮前的状态。面板里所有手改的东西全没了。这是 Claude.ai 里挺让人崩溃的一类 bug,看着像数据丢了,其实老版本基本都还在 version 历史里。原因几乎都是同一个:你在面板里的修改和 Claude 理解里 Artifact 的当前状态出现了竞争——Claude 是从某个老的服务端快照开始重新生成的,因为你的面板修改根本没进对话上下文。把生命周期搞懂了就能避免。

常见原因

按命中率从高到低。

1. 面板修改还没同步就发了下一条 prompt

你在面板里直接改,改动是本地的,要等到下一次 save 事件才上服务器。如果你立刻发下一条 prompt,Claude 读到的是更老的服务端版本,从那里重新生成。

怎么判断:发下一条消息前你有没有点编辑器外面、或者按 save?没有的话基本就是这个原因。

2. Claude 选择了重新生成而不是局部 patch

模糊的指令比如「把标题搞大点」,很容易触发整段重生。新版本是从更早的服务端快照开始的,不是从你改过的那一份开始。

怎么判断:看 Artifact 顶部的版本下拉。你那条消息后新建了一个版本而不是 patch 过的版本,那就是整段重生。

3. 同一个对话开了多个标签页

同一个对话同时开两个标签页,A 标签里的编辑还没同步到 B 标签,B 标签发了一条消息,就 last write wins 把你的改动盖掉了。

怎么判断:看看是不是另一个窗口或标签页里也开着这个对话。

4. 浏览器自动保存撞上服务端更新

Claude 大概每隔几秒自动保存草稿。保存途中网络抖一下,你的修改会停在 pending 状态,下一次服务端响应回来就直接把它盖掉。

怎么判断:打开 DevTools → Network,看修改那个时间点附近有没有失败的 PATCH 或 PUT 请求。

5. 不小心从历史里恢复了一个旧版本

Artifact 面板里的版本下拉是可以预览历史版本的。点了一个老版本预览、又发了 follow-up,等于隐式地把那个老版本恢复成了新的基底。

怎么判断:回想丢失修改之前你是不是刚打开过版本历史。是的话,可能不小心选了老版本自己没意识到。

6. Artifact 在带过时指令的 Project 里

Project 里的 Artifact 会继承 Project 的系统指令。指令里写了「always rewrite from scratch」之类的,Claude 就真的会从头重写,把你的修改盖掉。

怎么判断:打开 Project → Custom instructions,看有没有让 Claude 直接重生而不是 patch 的指令。

开始前

  • 先决定是要恢复丢失的修改还是只想防止以后再丢——两种修法都用得到,但恢复优先。
  • 立刻打开 Artifact 版本历史,看清所有保留的快照,再做下一步。
  • 暂时别再发新 prompt,否则可能再叠一个新版本上去。

需要收集的信息

  • Artifact 的标题和大致创建时间。
  • 当前下拉里显示的版本号。
  • 历史里一共有多少版本,哪个看上去「对」。
  • 对话是否在某个带自定义指令的 Project 里。
  • 浏览器、OS、是否另一个标签页也开着同一对话。
  • 最近几条 prompt 的原话,特别是触发回滚的那一条。

一步一步修复

Step 1:立刻打开 Artifact 版本历史

点 Artifact 面板顶部的版本下拉。每个老版本都留着。翻到带你手工修改的那版,右键把内容拷出来到一个临时文件里再做别的。

Step 2:把那个正确版本恢复为新基底

下拉里选中你改过的那版,点「Use this version」或者恢复按钮。这样下次重生就从这里开始。

Step 3:用明确的 save 动作锁住改动

以后改:打完字点编辑器外面、或者按 Cmd+S 触发保存。看到下面那个小「Saved」提示之后再发新 prompt。

Step 4:让 Claude 做 patch、不要重生

follow-up 的话说清楚。别说「把标题搞大点」,要说「当前 artifact 里,只把 h1 的 font-size 从 24px 改成 32px,其他完全不动」。patch 式指令能大幅减少整段重生。

Step 5:关掉同一对话的多余标签页

如果一个对话开了两份,关掉一份。剩下那份刷新一下,把最新服务端状态拿全,再继续。

Step 6:去掉 Project 里「always rewrite」类指令

打开 Project → Custom instructions,把任何偏向「整段重写」的指令删掉。换成:「编辑 Artifact 时优先做最小化 in-place patch,不要整段重生。」

Step 7:高价值 Artifact 每轮都拷出来

Artifact 很关键(长文档、能跑的原型)的话,每次有意义的修改之后都把源码拷到 VS Code 或笔记 App 里。把 Claude 当 co-editor 用,不要当成 source of truth。

怎么验证修好了

  • 版本下拉里恢复后的那版就是当前 head。
  • 发一条小 patch(「在第 12 行加注释」),其他内容都还在。
  • 关掉对话重新打开,版本依然正确。
  • Claude 最近的回复里没有「重写」「从头开始」一类表达。

长期预防

  • 面板里改完先显式保存,再数三秒发下一条 prompt。
  • 用 patch 式 prompt(「只把 X 改成 Y,其他不动」),别用开放式编辑请求。
  • 同一对话绝不开两个标签页并行编辑。
  • Project 指令里不要写「always regenerate」一类。
  • 重要 Artifact 每隔几轮就导出到本地文件。
  • 团队协作把 Artifact 版本化到 git,别只靠 Claude 自己的历史。

容易踩的坑

  • 面板里打完字立刻发下一条 prompt——可能还没 save。
  • 把 Claude 的版本历史当永久保存。它是按对话维度存的,对话删了版本也没了。
  • 以为「让它更好一点」会保留你的修改。多半触发整段重生。
  • 从预览里恢复老版本之后忘了真的点「Use this version」。
  • 觉得 Project 指令影响不到 Artifact 编辑行为,其实非常能影响。

常见问答

  • 老的 Artifact 版本真的都留着吗? 留着,在 Artifact 面板顶部的下拉里,按对话维度存。
  • 没保存就丢了的修改还能找回来吗? 有时能,看浏览器自动保存的草稿。DevTools → Application → Local Storage 里翻 unsaved draft key。
  • Claude 为啥老是重写而不是 patch? 模糊 prompt + Project 指令暗示要整段重写,这两个是最大原因。
  • 代码型 Artifact 也会这样吗? 一样的机制。大型代码 Artifact 反而更容易中招,因为 Claude 觉得重生更省事。
  • Anthropic 会修吗? 版本下拉就是他们这边的兜底。竞争条件每个版本都在改善,但 patch vs regen 的歧义很难根除。
  • 有自动保存提示吗? 有,Artifact 面板下方有个小小的「Saved」文本,每次保存后会更新,盯着它。

相关

标签: #Claude #排查 #artifact