learn-claude-code
·
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); // 副作用:亮灯
}
两者的关系:
- 状态机是被动的——它只记录"现在到哪",自己不主动变
- 消息循环是主动的——它不停等事件(时间到就是事件)、读状态、按规定改状态、触发副作用
- 状态机永远静止;消息循环永远在转
- 没有状态机,消息循环不知道现在该做啥
- 没有消息循环,状态机永远是绿
更多推荐


所有评论(0)