Agent 运行时: 从消息循环到 LLM 调用

用红绿灯建立直觉

后面会反复出现"状态机""消息循环"两个词——它们是 Agent 内部的两层抽象,先用一个熟悉的例子建立直觉。

状态机:静止的规则图

   ┌─────┐  30s    ┌─────┐  5s    ┌─────┐
   │ 绿  │ ──────> │  黄  │ ──────> │  红  │
   └─────┘        └─────┘        └─────┘
     ↑                                │
     │                                │
     └────────── 30s ─────────────────┘
                 (回到绿,循环)
  • 方框 = 状态(绿 / 黄 / 红)
  • 箭头 = 可以怎么转(单向,只有这一条路)
  • 箭头上的字 = 触发条件(30s / 5s / 30s)

这张图本身是静止的——你不动它,十字路口永远是绿,谁都不变。

消息循环:不停执行规则的人

让红绿灯真转起来,需要一段"不停在做事的程序":

// 状态机(规则):一张表
const TRANSITIONS = {
  绿: { next: "黄", after: 30 },
  : { next: "红", after: 5 },
  : { next: "绿", after: 30 },
};

// 消息循环(执行):不停转
let state = "绿";
while (true) {
  sleep(TRANSITIONS[state].after * 1000);  // 阻塞等时间到
  state = TRANSITIONS[state].next;          // 改状态(状态机被动地被改)
  lightOn(state);                            // 副作用:亮灯
}

两者的关系:

  • 状态机是被动的——它只记录"现在到哪",自己不主动变
  • 消息循环是主动的——它不停等事件(时间到就是事件)、读状态、按规定改状态、触发副作用
  • 状态机永远静止;消息循环永远在转
  • 没有状态机,消息循环不知道现在该做啥
  • 没有消息循环,状态机永远是绿
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐