大疆无人机:如何革新雪崩救援行动
2026-07-14 3398501
2026-07-14 0

最近看到一种观点,把 Event-driven 架构和 Agent Loop 放在一起比较:
这个说法乍看很有道理。
毕竟,一个叫“事件驱动”,一个叫“循环”。从字面上理解,似乎前者是“有事才干活”,后者是“没事也一直转”。
但问题恰恰出在这里:
两者虽然都出现了 Loop,但不是同一种 Loop。
更根本的问题是,Event-driven 和 Agent Loop 所处的架构层级不同。一个解决任务如何产生和传递,另一个解决任务启动后如何完成。
因此,把它们当成两种竞争架构进行选择,就像在问:
问题本身就没有对齐。
Event-driven 主要回答:
Agent Loop 主要回答:
一个位于系统的触发、调度和协作层。
一个位于智能体的任务执行和决策层。
它们不仅不冲突,反而经常同时存在于同一个生产系统里:
复制代码业务事件发生
↓
事件总线或消息队列
↓
创建并分配 Agent 任务
↓
Agent Loop 多轮执行
↓
产生处理结果
↓
发布新的业务事件
外层可以是 Event-driven。
内层可以是 Agent Loop。
任务执行完成后,Agent 退出,不需要继续空转。
所以,更准确的关系不是:
复制代码Event-driven vs Agent Loop
而是:
复制代码Event-driven → 唤醒和调度 Agent
Agent Loop → 完成需要动态决策的任务
这种混淆并不奇怪,因为“Loop”这个词在软件系统里有多种含义。
例如一个程序每隔五秒查询一次数据库:
复制代码while true:
查询是否有新任务
sleep(5秒)
这确实可能产生空转。
即使没有新任务,系统仍然会定期唤醒、发起查询并消耗资源。
Event-driven 与这种轮询机制可以形成有效对比:
复制代码轮询:我每隔一段时间主动问“有事吗?”
事件:有事发生时,系统主动通知我
在这个语境下,比较 Event-driven 和 Polling 是合理的。
例如自动驾驶中的:
复制代码感知 → 定位 → 预测 → 规划 → 控制
这是一个实时控制闭环。
循环存在,是因为外部世界持续变化,系统必须持续感知和调整。
这种 Loop 不是在“等任务”,而是在持续控制一个动态系统。
典型 Agent Loop 是:
复制代码观察当前状态
↓
判断下一步行动
↓
调用工具
↓
读取工具结果
↓
判断目标是否完成
├─ 未完成:进入下一轮
└─ 已完成:结束
它的循环对象不是“有没有任务”,而是:
这是一种任务内部的迭代执行机制。
把第三种 Loop 错当成第一种 Loop,就会得出“Agent Loop 会在没有任务时不断轮询”的错误结论。
实际上,一个 Agent 完全可以在没有任务时不运行。只有当 API 请求、消息事件、定时任务或人工操作将任务交给它以后,它才启动内部循环。
Event-driven 是一种系统协作和任务触发方式。
它的核心不是“大模型”,也不是“智能决策”,而是:
例如,在电商系统中:
复制代码用户支付成功
↓
发布 PaymentSucceeded 事件
↓
订单服务更新状态
物流服务创建发货单
积分服务发放积分
消息服务发送通知
支付服务不需要同步调用所有下游系统。
它只需要发布一个事件,感兴趣的消费者各自处理。
Event-driven 主要带来以下价值。
事件生产者不必知道所有消费者是谁。
支付服务不需要关心积分服务、短信服务和数据分析服务的内部实现。
非关键操作可以延后处理,避免阻塞主链路。
高峰期的任务可以进入消息队列,由消费者按照自身处理能力逐步消费。
增加新的事件消费者时,通常不需要修改原来的事件生产者。
但 Event-driven 并不天然等于高性能,更不等于没有成本。
事件驱动系统同样要处理:
所以,Event-driven 解决的是系统协作问题,不是所有性能问题的万能答案。
Agent Loop 是智能体执行复杂任务的一种运行机制。
传统程序通常提前写好全部步骤:
复制代码先执行 A
再执行 B
然后执行 C
但很多任务无法在执行前确定完整路径。
例如让一个编码智能体修复程序故障,它可能需要:
这里第五步的结果会影响第六步的行动。
执行路径可能是:
复制代码读日志 → 查代码 → 修改 → 测试成功 → 结束
也可能是:
复制代码读日志 → 查代码 → 修改 → 测试失败
→ 阅读新错误 → 再次修改 → 再次测试
因此,系统不能只依赖一条提前写死的流程,而需要根据中间结果动态决定下一步。
这正是 Agent Loop 的价值:
Agent Loop 主要处理的是:
它不是一种消息调度架构,而是一种任务执行机制。
既然 Event-driven 和 Agent Loop 不在同一层,那么它们各自应该和谁比较?
例如:
这些比较都在回答同一类问题:
例如:
这些比较回答的是:
这样比较,架构边界才是清楚的。
一个智能系统至少可以拆成两个维度。
第一个维度是任务如何启动:
第二个维度是任务如何执行:
把这两个维度组合起来,会得到四种常见系统形态。
| 触发方式 | 执行方式 | 典型场景 |
|---|---|---|
| 同步请求 | 固定流程 | 参数校验、字段转换、普通查询 |
| 事件触发 | 固定流程 | 支付通知、订单同步、文件转码 |
| 同步请求 | Agent Loop | 研究问答、代码调试、复杂数据分析 |
| 事件触发 | Agent Loop | 自动处理工单、自动修复 Issue、销售线索跟进 |
这张表比“Event-driven 和 Agent Loop 谁更好”更有架构价值。
它告诉我们:
系统可以事件触发后执行固定代码,也可以事件触发后启动 Agent Loop。
同样,Agent Loop 可以由事件启动,也可以由用户同步请求启动。
假设电商平台收到客户投诉。
客户提交投诉后,系统发布事件:
复制代码CustomerComplaintCreated
事件消费者接收消息,创建一个投诉处理任务。
这一层负责:
Agent 被唤醒后开始处理:
复制代码读取投诉内容
↓
查询订单信息
↓
查询物流记录
↓
查询售后政策
↓
判断证据是否充分
├─ 不充分:向客户询问补充信息
├─ 可自动处理:提出解决方案
└─ 高风险:转人工审核
这里每一步都可能根据上一步的结果改变。
因此适合使用受控的 Agent Loop。
Agent 输出处理结果,并发布:
复制代码ComplaintResolved
或者:
复制代码ComplaintEscalated
下游服务再负责通知客户、更新工单和生成报表。
整个系统中,Event-driven 和 Agent Loop 不但没有冲突,反而职责分明:
复制代码Event-driven:让任务可靠地到达
Agent Loop:让复杂任务得到处理
电商秒杀确实经常使用消息队列、事件驱动和异步削峰。
但这不代表 Event-driven 是 Agent Loop 的替代品。
秒杀系统的核心交易链路包括:
这些任务要求:
因此,它们通常应该由确定性代码、事务机制、状态机和消息队列完成。
核心交易链路不适合交给大模型 Agent 自主规划。
Agent 可以用于秒杀系统外围,例如:
所以,真正的判断并不是:
而是:
自动驾驶确实存在持续循环:
复制代码感知 → 预测 → 规划 → 控制
但这属于实时控制循环,不应简单等同于基于大语言模型的 Agent Loop。
自动驾驶核心系统需要:
而大模型 Agent Loop 通常具有:
因此,自动驾驶可以包含循环,但“存在循环”并不能证明它应该使用 LLM Agent。
再次说明:
虽然 Agent Loop 不等于空转,但它确实存在自己的性能和成本风险。
这些风险不是“没有任务还不断轮询”,而是任务执行过程中失去边界。
Agent 不断尝试,却没有明确的完成条件和失败条件。
同一个工具被重复调用,或者在低价值步骤中消耗大量时间。
每一轮都把完整历史、日志和工具结果重新发送给模型,导致 Token 成本快速增加。
Agent 不断重新规划,却没有稳定的任务状态和阶段约束。
本应通过普通代码完成的权限校验、金额计算和状态变更,被交给模型自由判断。
系统没有设置最大轮数、最大时间、最大 Token、最大工具调用次数和人工升级条件。
因此,生产级 Agent Loop 必须具备:
复制代码明确目标
明确终止条件
最大循环次数
时间预算
成本预算
工具权限边界
状态持久化
失败恢复
人工接管
执行审计
真正应该批评的不是 Loop,而是没有约束的 Loop。
把 Agent Loop 描述成资源浪费,同时把 Event-driven 描述成“事件来了才执行,所以天然高效”,也是一种过度简化。
在高并发系统中,一个事件可能引发多个下游事件:
复制代码A 事件
├─ 触发 B
├─ 触发 C
└─ 触发 D
├─ 触发 E
└─ 触发 F
如果缺乏治理,系统可能出现事件风暴。
如果消费者处理能力不足,会产生消息积压。
如果同一事件被重复投递,消费者必须实现幂等。
如果事件之间存在时序依赖,还要处理乱序和最终一致性问题。
因此,Event-driven 不是“没有空转”这么简单,它是用新的复杂度换取解耦、异步和扩展能力。
架构设计从来不是选择一个听起来更先进的名词。
而是在明确问题之后,接受一种方案带来的收益,同时承担它带来的复杂度。
说到这里,似乎可以得出结论:
但这也不完全正确。
它们值得放在一起讨论,恰恰是因为现实中的 Agent 系统需要同时设计这两层。
我们需要同时回答:
因此,正确的讨论方式不是“比较谁更好”,而是:
它们可以出现在同一张架构图中。
但不能出现在同一个单选题里。
生产级 Agent 系统可以粗略分为四层。
负责接收任务来源:
这一层可能采用 Event-driven。
负责:
负责真正完成任务:
Agent Loop 位于这一层。
负责:
把系统分层以后,就不会再纠结“Event-driven 和 Agent Loop 谁更先进”。
因为我们会看到,它们只是不同层中的不同机制。
如果面试官问:
一个更成熟的回答不是直接列出性能对比表,而是先纠正问题的抽象层级:
然后再补充选型原则:
这才是真正的架构判断。
Event-driven 和 Agent Loop 最大的区别,不是一个节省资源、一个浪费资源。
也不是一个适合高并发、一个适合复杂推理。
它们最根本的区别是:
Agent Loop 不等于轮询。
Event-driven 也不等于天然高性能。
两者不是竞争关系,而是正交关系。
真正合理的架构问题应该是:
以及:
前一个问题决定系统怎样唤醒执行者。
后一个问题决定执行者怎样完成工作。
所以,别再问:
应该问的是:
当问题被拆成这两个层次,架构设计才真正开始。