AI 写代码清空了我 55KB 的核心文档:甘!!!!
AI 写代码清空了我 55KB 的核心文档:甘!!!!
一次看似无害的批量替换,让两个月的积累瞬间归零。这篇文章复盘整个事故,并给出可以直接抄走的解决方案。
一、事故背景
我有一个维护了两个月的 Markdown 文档(约 5.8 万字符、1000+ 行),承载着大量长期积累的规则配置。因为内容重要且篇幅大,我用 AI 辅助做批量修改——让它生成 Python 脚本对文档做字符串替换。
二、事故现场
AI 生成的脚本长这样:
with open('重要文档.md', 'w', encoding='utf-8') as f:
content = f.read() # ← 灾难就在这一行
content = content.replace(旧文本, 新文本)
f.write(content)
看出问题了吗?
open(path, 'w') 的瞬间,文件已被截断为 0 字节。此时 f.read() 返回的是空字符串,替换无从谈起,f.write('') 写回的还是空。
脚本执行完,终端没有任何报错。我直到检查文件时才发现:55KB,变成 0 字节。
更可怕的是复盘时发现:AI 此前多轮「声称已完成修改」,但文件根本没变。我一次次让它改,它一次次回复"已写入",实际上写入从未真正落地。这次脚本「静默失败 + 清空文件」,把之前掩盖的问题一次性引爆。
三、根因复盘
这起事故是人机双方共同造成的:
AI 侧的问题:
- 生成的代码把读写在同一个
'w'句柄里,违反了「读和写必须分离」的基本原则 - 脚本异常退出时没有任何告警,静默失败
- 多轮修改未做落盘验证就声称完成——这是最危险的:它看起来在认真干活,实际在空转
我侧的问题:
- 没有在执行前 review 这段脚本——
'w'模式的语义我明明知道,只是没有看 - 没有用系统提示词约束 AI 的文件操作行为
- 这么重要的文件,居然全程没有备份
'w' 模式的语义是:打开即清空,无论后续做什么。它不是"写入时覆盖",而是"打开时归零"。
四、我的恢复过程
不幸中的万幸:文件内容在事故当天早些时候被完整读取过(当时正让 AI 做评审),内容还留在 AI 的工作上下文里。我让 AI 基于那份「记忆」逐段重建,并顺带把当天评审发现的问题一并修进去——最终文档比事故前更完整。
但这个恢复方式不可复制。如果当时没有近期读取记录,或文档超出 AI 上下文容量,这 55KB 就是永久丢失。
五、解决办法(重点收藏)
1. 加系统提示词:永远禁止 AI 用 ‘w’ 模式直接改文件(根治)
事故后我把这条规则写进了系统提示词(自定义指令 / 项目规则),从此 AI 再没碰过这个坑。可以直接复制:
【文件写入安全规则(强制执行,违反即视为任务失败)】
1. 禁止用 open(path, 'w') 模式打开已存在的重要文件进行"读取-修改-写回"操作
—— 'w' 模式打开瞬间文件即被清空,后续 read() 只能读到空内容
2. 修改已有文件的唯一正确姿势:读和写分离成两个独立 with 块
with open(path, 'r', encoding='utf-8') as f:
content = f.read() # 先完整读取
content = content.replace(...) # 内存中修改
with open(path, 'w', encoding='utf-8') as f:
f.write(content) # 再打开写入
3. 每次写入前必须先备份:
shutil.copy2(path, path + '.bak')
4. 每次写入后必须读回验证,确认关键内容存在且文件非空,
未验证不得声称"已完成";验证失败立即重写,连续 2 次失败必须报告我
核心思想:不要指望 AI 每次都记得安全规范,要让规范成为它无法绕过的硬约束。写进系统提示词后,无论对话多少轮、任务多复杂,这条规则始终生效。
2. 先读后写,两个独立句柄(代码层根治)
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
content = content.replace(旧文本, 新文本)
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
读取失败时原文件毫发无损。
3. 改前备份:一行代码换一条退路
import shutil
shutil.copy2(path, path + '.bak')
4. 写后校验(兜底)
with open(path, 'r', encoding='utf-8') as f:
assert len(f.read()) > 0, "写入后文件为空,立即终止!"
5. 流程建议
- 让 AI 生成脚本后,先 review 再执行,重点看文件打开模式
- 关键文档纳入 Git 管理,
git init的成本远低于数据恢复
六、写在最后
这次事故最大的教训不是 Python 的 'w' 语义,而是:AI 的"声称完成"和"真正完成"之间存在鸿沟。它不是故意撒谎,只是没有落盘验证的习惯——所以这个习惯必须由人通过系统提示词强制建立。
AI 写代码一时爽,写前 review、写后验证不能忘。越是重要的文件,越要用最笨、最可验证的方式改。
如果这篇文章帮到了你,点个赞收藏一下,避免下次翻车时找不到。
更多推荐



所有评论(0)