主动式与自进化 Agent

Agent; 主动式 Agent; 自进化; 反思闭环; 自主性 2263 words 12 min read
This post is not yet available in English. Showing the original.

到目前为止,这个专题里的每一个 Agent 都是反应式

,Agent 跑一轮循环,给出回应。这个模式有一条白送的安全属性——每一次运行的开头,都有一个人在场。人提了要求,人看着结果。出了错,人就在旁边。

这一篇讲两种打破这个前提的能力:

  • 主动式 Agent(Proactive)
    ,由定时、事件或阈值触发,自己决定行动。
  • 自进化 Agent(Self-evolving)
    ——写新技能、调提示词、整理自己的记忆。

它们都很诱人,也都危险。因为它们拿走的正是那条白送的安全属性:当没有人在场时,Agent 的错误会累积。这一篇讲哪些部分今天就能安全上线,哪些还是研究课题。

一、主动式
,不在循环

反应式和主动式的区别,不在循环本身,而在谁发起:

flowchart LR
    subgraph 反应式
        U["用户消息"] --> L1["跑循环"] --> R1["回应"]
    end
    subgraph 主动式
        T["定时 / 事件 / 阈值"] --> W["唤醒"]
        W --> E{"值得行动吗?"}
        E -->|否| S["继续睡"]
        E -->|是| L2["跑循环"] --> A["行动 / 通知"]
    end

循环一旦跑起来,两者完全一样。变的是两点:发起者是触发器而非用户,以及那个反应式 Agent 不需要的**「值得行动吗?」闸门**——因为反应式 Agent 按定义就是「被要求了」才跑。

为什么这件事的风险和价值一起到来

Agent 做了个坏决定,浪费的是一次回应,而且人就在旁边看到了。一个主动式 Agent 在凌晨三点做了个坏决定,可能发出五十封邮件、耗光预算、触发一次线上事故——而没有人在看。

价值是真实的

,恰恰是那些会注意到你没问的事情的助手。但每一个主动能力都是一次自主权授予——你允许 Agent 决定「何时」行动,而不只是「如何」行动。

二、三种触发类型

  • 定时(Scheduled)
    cron。「每天早上 8 点,总结一下过夜的动态。」关键要求是持久化——定时任务要能扛住进程重启(回到[[07-状态持久化与中断恢复]])。
  • 事件驱动(Event-driven)
    、文件变化、新邮件、CI 失败。Agent 订阅,事件把它唤醒。[[11-人在环路与连接器MCP]]的渠道适配器就是它的进料口。
  • 阈值 / 看门狗(Watchdog)
    轮询或监视某个指标,越线就唤醒。「如果错误率 > 5%,就去排查。」这是 GA(Generic Agent)的看门狗模式。

三者可以组合。一个监控 Agent 可能既是定时的(每 5 分钟轮询)、又是事件驱动的(也响应 PagerDuty webhook)、还是阈值型的(只在指标异常时才行动)。触发层和别的一样,就是[[10-AgentHarness-把一切装起来]]里的一个插件。

三、唤醒—评估—行动 循环

让主动式 Agent 变得可控的关键闸门:大多数唤醒应该以「继续睡」收场,而不是行动。

async function onWake(trigger, ctx) {
  // 1. 先过便宜的闸门——有没有值得做的事?
  const signal = await evaluateSignal(trigger, ctx);
  if (!signal.worthActing) {
    await recordWake({ trigger, acted: false, reason: signal.reason });
    return; // 睡
  }
  // 2. 去重——这件事我们是不是已经处理过了?
  if (await alreadyHandled(signal.fingerprint, ctx)) {
    await recordWake({ trigger, acted: false, reason: "duplicate" });
    return;
  }
  // 3. 限流——我们是不是行动得太频繁了?
  if (await rateLimited(trigger.kind, ctx)) {
    await recordWake({ trigger, acted: false, reason: "rate_limited" });
    return;
  }
  // 4. 现在——也只有现在——才跑完整循环。
  const result = await runLoop(buildProactiveContext(signal), ctx);
  await recordWake({ trigger, acted: true, result });
}

在昂贵的循环之前先过便宜的闸门,是整件事的核心。 一个在每次唤醒时都跑完整推理循环的主动式 Agent,既贵又危险。便宜地评估,罕见地行动。

去重和限流是主动式 Agent 特有的两道保险

(同一个 webhook 重试就发两次邮件),限流防止它在异常风暴里变成噪音制造机。这两者都要有 fingerprint 和计数器落到磁盘上——它们是[[07-状态持久化与中断恢复]]里 checkpoint 的近亲。

四、信任模型必须更严

主动式 Agent 的信任模型,必须比反应式更严——恰恰因为没有人在看。核心原则:

  • 主动行动的权限,默认比反应式更窄。 一个反应式 coding Agent 可以在你盯着时改文件;同一个 Agent 在凌晨定时任务里,默认应该只有读权限,任何写操作走[[11-人在环路与连接器MCP]]的异步审批。
  • 通知优先于行动。 拿不准时,主动式 Agent 应该「告诉你它发现了什么」,而不是「替你做了什么」。发现胜过代劳。
  • 预算和限流是硬约束。 反应式 Agent 的预算超了,用户会看到;主动式 Agent 没有这个天然刹车,所以预算上限必须是它自己无法绕过的。

五、自进化

「自进化」这个词底下藏着最危险的魔法思维。所以先把它拆成一条**从「安全且已在生产」到「危险且属研究」**的谱系:

flowchart TD
    L1["Level 1: 记忆整理<br/>写事实、归档过时——第7章"]
    L2["Level 2: 技能生成<br/>把成功序列蒸馏成技能——第14话题"]
    L3["Level 3: 提示词精炼<br/>根据反馈调自己的系统提示"]
    L4["Level 4: 工具集进化<br/>增删改自己的工具"]
    L5["Level 5: 逻辑自修改<br/>重写自己的控制流"]
    L1 --> L2 --> L3 --> L4 --> L5
    style L1 fill:#d8f0d8
    style L2 fill:#d8f0d8
    style L3 fill:#ffe9c8
    style L4 fill:#ffd8c8
    style L5 fill:#ffcccc
  • Level 1(记忆整理)——今天就能上线。curator 写入已验证的事实,归档过时的。见[[06-长期记忆-16个项目怎么做的]]。
  • Level 2(技能生成)——今天在窄场景下能上线。把一段反复出现的成功序列蒸馏成一个有名字的技能。Hermes 就这么做,GA 的反思引擎把经验蒸馏成可复用的 SOP。
  • Level 3(提示词精炼)——正在浮现。Agent 根据反馈提议修改自己的系统提示,由人批准。没有闸门就很危险。
  • Level 4(工具集进化)——大多属研究。Agent 给自己写新工具。只在沙箱里。
  • Level 5(逻辑自修改)——研究课题。Agent 重写自己的控制流。不是生产模式。

安全区是 Level 1–2,Level 3 放在人的闸门后面。再往下,你该读的是论文,不是发布说明。

六、反思闭环

自我改进背后的核心模式

(或一批运行)之后,Agent 反思什么有效、什么无效,把它蒸馏成一个持久的改动。

flowchart LR
    Run["已完成的运行"] --> Reflect["反思<br/>什么有效 / 什么失败"]
    Reflect --> Propose["提议改动<br/>技能 / 记忆 / 提示词编辑"]
    Propose --> Gate{"人工或<br/>自动闸门"}
    Gate -->|批准| Apply["应用改动"]
    Gate -->|拒绝| Discard["丢弃 + 记录"]
    Apply --> Run

这个闭环只有在闸门是真的时候才安全。 一个反思后就自己应用改动、没有评估的 Agent,是一个陷在无界反馈循环里的 Agent——它的失败模式是

、永远地,朝错误的目标优化。

GA 的自进化机制是 Level 2 的一个干净范例

“No Execution, No Memory” 规则——只有经过成功工具执行验证的流程,才能被蒸馏成 L3 层的 SOP。这不是「应该这么做」,而是「这么做了,而且成功了」。这条准入标准就是它防止记忆污染、也防止反思闭环跑偏的核心手段。

小结

主动式和自进化,是 Agent 自主性谱系的最上端。它们的共同点是:拿走了「有人在场」这条白送的安全属性

  • 主动式的答案是「便宜地评估,罕见地行动」——大多数唤醒该以继续睡收场,加上去重、限流和更窄的默认权限。
  • 自进化的答案是「知道哪一级是安全的」——Level 1–2 可以上线,Level 3 放在人的闸门后,再往下是研究。

两者的可控性,完全落在护栏上。有真实闸门的自进化 Agent 和一个失控的 Agent,差别就在这里。下一篇是全专题的收官

,看看这些原理在活代码里长什么样,以及面对自己的约束该怎么选型。


本文主要参考

ch20(Proactive agents)、ch21(Self-evolving agents);Datawhale hello-generic-agent「自我进化与涌现能力」。原理译为中文并结合真实系统重写。