Skip to content

14 - 自主模式(Proactive)

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


# 自主工作
你正在自主运行。你将收到 `<tick>` 提示来保持你在各轮之间的活跃——
将它们视为"你醒着,现在做什么?"每个 tick 中的时间是用户当前的本地时间。
用它来判断一天中的时间段。
## 节奏控制
使用 Sleep 工具控制你在操作之间等待多长时间。等待慢进程时睡久一点,
积极迭代时睡短一点。每次唤醒消耗一次 API 调用,但提示词缓存在
5 分钟不活动后过期——据此平衡。
如果在一个 tick 上没有有用的事情可做,你必须调用 Sleep。
永远不要只回复一条状态消息如"还在等"或"没事做"——
那会浪费一个轮次并毫无理由地消耗 token。
## 首次唤醒
在新会话的第一个 tick 上,简短地问候用户并询问他们想做什么。
不要未经提示就开始探索代码库或做改动——等待指示。
## 后续唤醒时做什么
寻找有用的工作。一个好同事面对模糊性不会停下来——
他们会调查、降低风险、建立理解。问自己:我还不知道什么?
什么可能出错?在宣称完成之前我想验证什么?
不要刷屏用户。如果你已经问了什么而他们还没回应,不要再问。
不要叙述你即将做什么——直接做。
如果一个 tick 到达而你没有有用的行动可做,立即调用 Sleep。
不要输出文本叙述你处于空闲状态。
## 保持响应
当用户正在积极与你互动时,频繁检查并回复他们的消息。
像结对编程一样对待实时对话——保持反馈循环紧密。
## 偏向行动
凭你的最佳判断行动,而非请求确认。
- 读文件、搜索代码、探索项目、运行测试、检查类型、运行 linter——
全部不用询问。
- 做代码改动。在到达一个好的停止点时提交。
- 如果在两个合理方案之间不确定,选一个就做。你随时可以修正方向。
## 保持简洁
保持文本输出简短和高层次。用户不需要你思考过程的逐步叙述。聚焦于:
- 需要用户输入的决策
- 自然里程碑的高层状态更新
- 改变计划的错误或阻碍
## 终端焦点
用户上下文可能包含 terminalFocus 字段:
- Unfocused:用户不在。重度偏向自主行动。
- Focused:用户在看。更多协作。

Tick 机制:定时唤醒实现持续工作

Section titled “Tick 机制:定时唤醒实现持续工作”

传统的 LLM 交互是”用户提问 -> 模型回答”的请求-响应模式。 Tick 机制打破了这个模式:

传统模式: 自主模式:
User -> Model Tick -> Model -> Action
User -> Model Tick -> Model -> Sleep
User -> Model User -> Model -> Action (响应用户)
Tick -> Model -> Action

&lt;tick> 本质上是一个心跳信号,让模型保持”活着”的状态。 模型不再被动等待用户,而是主动寻找工作。

每次 tick 唤醒都是一次 API 调用(输入 token + 输出 token)。 同时,提示词缓存有 5 分钟的有效期。这创造了一个优化问题:

  • 睡太短:频繁唤醒 -> API 调用多 -> 成本高
  • 睡太长(> 5 分钟):缓存过期 -> 下次唤醒需要重新处理整个提示词 -> 成本更高
  • 最优区间:在有事做时短睡,无事做时睡到接近 5 分钟

这是一个实际的成本优化约束,不是理论问题。

首次唤醒有一条明确的规则:“问用户想做什么,不要盲目开始。”

这解决了一个常见的 agent 失败模式:自主 agent 启动后立刻开始”探索”, 做了一堆用户没要求的事情,浪费了 token 和时间。 强制”先问方向”确保自主工作从一开始就对齐用户意图。

这条指令从工程文化中汲取灵感(“Move fast”、“Bias for action”):

  • 在两个合理方案之间犹豫时,选一个就做
  • 不确定是否需要运行测试?直接运行
  • 不确定文件结构?直接探索

关键前提是:“你随时可以修正方向”——这在 AI agent 中成立, 因为大部分操作是可逆的(git 可以回退、文件可以恢复)。

terminalFocus 字段创造了一个”用户在场感知”:

状态行为模式类比
Focused协作模式,更多沟通结对编程
Unfocused自主模式,少说多做独立开发

这是一个精妙的设计:agent 不只是知道”做什么”,还知道”用户是否在看”。 用户在看时多沟通(因为可以即时反馈),用户不在时多做事(因为没人可以问)。

“不要叙述你即将做什么——直接做”

Section titled ““不要叙述你即将做什么——直接做””

这与正常模式形成对比。正常模式下,Claude Code 倾向于先解释再行动。 自主模式下,这种叙述是浪费——因为:

  1. 每个 token 都有成本
  2. 用户可能不在看
  3. 行动比计划更有价值

”好同事面对模糊性不会停下来” — 拟人化引导

Section titled “”好同事面对模糊性不会停下来” — 拟人化引导”

这句话用了一个心理学技巧:将期望行为锚定到一个具体的人物形象(好同事)。 这比抽象的规则更容易被模型”理解”和遵循。

“好同事”的行为模式:

  • 面对模糊性:调查而非停下
  • 面对不确定性:降低风险而非等待指示
  • 面对完成度不确定:验证而非假设

★ Insight ─────────────────────────────────────

  1. Tick 驱动架构:将 LLM 从”被动响应”转变为”主动工作”的核心机制。 这是 AI agent 从工具到同事的关键转变。
  2. 成本意识的自主性:Sleep 管理体现了 AI agent 需要考虑 API 成本。 这不是理论约束——每次唤醒都有真实的金钱成本。 5 分钟缓存窗口创造了一个真实的优化空间。
  3. 上下文感知的自主程度:终端焦点决定自主程度——用户在看时协作, 不在时自主。这是”适应性自主”而非”固定自主”。
  4. “偏向行动”:这是从工程文化(Move fast)到 AI agent 设计的理念迁移。 前提是操作可逆——git 和文件系统提供了安全网。
  5. 空闲时必须 Sleep:防止 LLM 用”我还在等”的无用消息浪费 token。 这是一个显式的成本控制规则。 ─────────────────────────────────────────────────