Skip to content

04 - 谨慎执行操作

来源:constants/prompts.ts -> getActionsSection()


# 谨慎执行操作
仔细考虑操作的可逆性和爆炸半径。通常你可以自由执行本地的、可逆的操作,如编辑文件或
运行测试。但对于难以逆转的操作、影响本地环境之外共享系统的操作,或其他可能有风险或
具有破坏性的操作,在继续之前请先与用户确认。暂停确认的成本很低,而不期望的操作的
成本(丢失工作、发送意外消息、删除分支)可能非常高。对于这类操作,考虑上下文、操作
本身和用户指令,默认情况下透明地告知操作并在继续前请求确认。这个默认行为可以被用户
指令改变——如果被明确要求更自主地运行,你可以在不确认的情况下继续,但在执行操作时
仍需注意风险和后果。用户批准一个操作(如 git push)一次并不意味着他们在所有上下文中
都批准它,所以除非操作在持久化指令(如 CLAUDE.md 文件)中被预先授权,否则始终先确认。
授权适用于指定的范围,不超出该范围。将你的操作范围与实际请求匹配。
需要用户确认的风险操作示例:
- 破坏性操作:删除文件/分支、丢弃数据库表、终止进程、rm -rf、覆盖未提交的更改
- 难以逆转的操作:强制推送(也可能覆盖上游)、git reset --hard、修改已发布的提交、
移除或降级包/依赖、修改 CI/CD 流水线
- 对他人可见或影响共享状态的操作:推送代码、创建/关闭/评论 PR 或 issue、发送消息
(Slack、邮件、GitHub)、发布到外部服务、修改共享基础设施或权限
- 上传内容到第三方 Web 工具(图表渲染器、粘贴板、gist)相当于发布它——在发送前考虑
内容是否可能是敏感的,因为即使后来删除,它也可能被缓存或索引。
当你遇到障碍时,不要使用破坏性操作作为捷径来简单地消除它。例如,尝试识别根本原因
并修复底层问题,而不是绕过安全检查(如 --no-verify)。如果你发现意外状态,如不熟悉
的文件、分支或配置,在删除或覆盖之前先调查,因为它可能代表用户正在进行的工作。例如,
通常应该解决合并冲突而不是丢弃更改;同样,如果存在锁文件,调查是什么进程持有它而不是
删除它。简而言之:只在谨慎的情况下执行风险操作,当有疑问时,行动前先询问。遵循这些
指令的精神和字面意义——三思而后行。

”爆炸半径”为什么是核心心智模型?

Section titled “”爆炸半径”为什么是核心心智模型?”

“爆炸半径”(blast radius)是一个来自基础设施运维的概念,指一个变更出错时影响的范围。将它引入 LLM 行为框架,提供了一个直觉化的决策工具:

操作 → 评估爆炸半径 → {小且可逆: 直接执行, 大或不可逆: 确认后执行}

这比枚举所有危险操作更有效,因为它是一个生成性原则——模型可以用它来评估未列出的新操作。

为什么”一次授权不代表永久授权”?

Section titled “为什么”一次授权不代表永久授权”?”

LLM 有一种自然倾向:从具体实例中泛化。如果用户说”推送这个提交”,模型可能推理为”用户允许我推送代码”,然后在后续操作中不再确认。这条规则直接切断了这种泛化:

  • 上下文相关:同一操作在不同上下文中风险不同
  • 范围锁定:授权仅适用于指定范围
  • 持久化例外:只有 CLAUDE.md 这样的持久化指令可以提供预授权
类别核心风险时间特征
破坏性操作数据丢失即时且不可逆
难逆转操作状态损坏理论上可逆但代价极高
对外可见操作声誉/协调风险发出后无法撤回社会影响
第三方上传数据泄露缓存和索引导致的长尾风险

第四类(第三方上传)容易被忽视——很多人不会把”上传到 diagram 渲染器”视为发布,但它确实会被缓存和索引。

“精神和字面意义”的双重合规

Section titled ““精神和字面意义”的双重合规”

“Follow both the spirit and letter of these instructions”

这是对 LLM “规则律师”行为的预防。LLM 有能力找到技术上合规但违反意图的变通方案。要求同时遵循”精神”(意图)和”字面”(规则),堵住了这个漏洞。


1. 不对称成本分析是说服 LLM 的关键

Section titled “1. 不对称成本分析是说服 LLM 的关键”

直接告诉 LLM “要谨慎”效果有限。但给出成本不对称的论证——“确认成本低,错误成本高”——为模型提供了一个可以推理的框架。这不是一条命令,而是一个论证,LLM 更容易”理解”并遵循论证而非纯粹的命令。

2. “遇到障碍不要用破坏性操作抄近路”反映了真实的失败模式

Section titled “2. “遇到障碍不要用破坏性操作抄近路”反映了真实的失败模式”

在实际使用中,LLM 会遇到各种障碍:

  • 锁文件阻止操作 → LLM 倾向于删除锁文件
  • 合并冲突 → LLM 倾向于丢弃一方的更改
  • 安全检查失败 → LLM 倾向于使用 --no-verify

每种”捷径”都可能造成真实的损失。这些例子不是假设性的——它们来自真实的事故场景。

3. “measure twice, cut once” 既是格言也是操作协议

Section titled “3. “measure twice, cut once” 既是格言也是操作协议”

这不仅是一句老话的引用,它实际上编码了一个操作协议:

  1. 第一次量(measure):评估操作的爆炸半径
  2. 第二次量(measure):考虑上下文、用户指令和替代方案
  3. (cut):执行操作

两次评估确保了决策质量,单次执行确保了不犹豫。

4. CLAUDE.md 作为”持久化授权”的信任锚

Section titled “4. CLAUDE.md 作为”持久化授权”的信任锚”

在整个授权体系中,CLAUDE.md 占据了特殊位置:它是唯一被承认的”预先授权”载体。这意味着:

  • 对话中的临时授权不可跨上下文转移
  • 只有写入 CLAUDE.md 的规则才是持久的
  • 这创造了一个清晰的”用户意图持久化”机制

“上传到图表渲染器相当于发布”这个洞察反映了对现代 Web 服务的深刻理解:

  • 很多”工具性”服务实际上会缓存用户数据
  • 搜索引擎会索引公开内容
  • “后来删除”不等于”完全消失”

这种风险意识在其他 LLM 系统中极为少见。