AI Agent 状态机架构 深度研究报告
文章: 从文本补全到状态机循环:重定义 AI Agent 的操作系统架构
作者: guyskk (自宅创业)
链接: https://blog.guyskk.com/notes/ai-agent-state-machine
日期: 2026-02-23
报告日期: 2026-02-23
一句话总结
把 Context Window 当 CPU 寄存器用,不再追加聊天记录,而是每轮覆盖写状态——用"状态机循环"替代"日志追加"来解决上下文爆炸问题。
核心论点
问题诊断
推理速度突破 5000 tokens/s 后,Agent 的 Re-Act 循环进入毫秒级。但 Context Window(200K~1M tokens)在几十秒内就被思考日志填满。现有的"追加历史记录"模式 = 用 L1 缓存存整个程序生命周期的数据流,物理上不可能。
关键洞察: Transformer 是无状态的,它通过重放历史来模拟状态。
解决方案:Context Window 槽位化
把 Context Window 像 CPU 寄存器一样分区:
| 槽位 | 类比 | 内容 | 特性 |
|---|---|---|---|
| R_System | 指令集 | Agent 身份、能力边界、工具规范 | 只读 |
| R_IP | 程序计数器 | 当前执行步骤 | 读写 |
| R_State | 全局寄存器 | 结构化状态(JSON,≤4K tokens) | **覆盖写** |
| R_Working | 通用寄存器 | 当前工具返回的临时数据 | 用完即弃 |
| R_CallStack | 调用栈 | 子任务时压栈保存状态 | LIFO |
运行循环
Fetch → Decode → Execute → Writeback
↑ |
└──────────────────────────────┘
关键在 Writeback:
10,000 行日志 → R_Working
LLM 提取关键信息 → "error_line": 500
丢弃 R_Working → 上下文仅增加几个 token
深度评价
👍 说得对的部分
1. 问题诊断精准 — 上下文爆炸确实是长时间运行 Agent 的核心瓶颈。Claude Code、Cursor 用久了都会变慢/变笨,本质就是这个问题。
2. CPU 类比很有启发性 — 把 Context Window 当寄存器、把 LLM 推理当汇编指令执行,这个心智模型帮助理解为什么"追加日志"是错的。
3. 状态覆盖 > 日志追加 — 这是正确方向。保留"当前状态"而非"如何到达当前状态",信息密度高得多。
🤔 值得商榷的部分
1. LLM 不是真正的 CPU — CPU 执行指令是确定性的,LLM 每次推理有随机性。状态压缩过程中可能丢失关键信息,但 CPU 从不会丢寄存器里的位。作者低估了"压缩"这一步的损耗——让 LLM 自己决定什么重要什么不重要,本身就是 lossy compression。
2. 4K token 的 R_State 够吗? — 复杂任务(如重构一个大型代码库)的状态可能远超 4K。作者没有讨论状态溢出怎么办——难道要引入"虚拟内存"?
3. 没有讨论状态损坏 — CPU 寄存器有硬件保证不会无故翻转,但 LLM 的状态更新可能引入幻觉。一次错误的 R_State 覆盖会像雪崩一样影响后续所有决策(没有历史日志可回溯)。
4. 忽略了现有实践 — OpenClaw 的 MEMORY.md + 每日记忆文件、Claude Code 的 CLAUDE.md、Cursor 的 .cursorrules,本质上都在做类似的事——只是没有用"寄存器"的术语。文章把一个已在发生的渐进演化包装成了革命性突破。
与 OpenClaw 架构的映射
这个对比其实很有趣——OpenClaw 已经在实践这篇文章描述的很多理念:
| 状态机概念 | OpenClaw 对应 |
|---|---|
| R_System (指令集) | SOUL.md + AGENTS.md |
| R_IP (指令指针) | HEARTBEAT.md + 当前任务上下文 |
| R_State (全局寄存器) | MEMORY.md + memory/*.md |
| R_Working (临时寄存器) | 当前对话中的工具返回 |
| R_CallStack (调用栈) | sessions_spawn 子 Agent |
| 主存/磁盘 | docs/、projects/ 等文件系统 |
| 状态覆盖 | 每天更新 memory/YYYY-MM-DD.md,定期精简 MEMORY.md |
OpenClaw 的做法更务实: 不强求每轮都做状态压缩(太贵),而是通过文件系统做"分级存储"——高频状态放 .md 文件(L2 缓存),低频数据放文件系统(主存),通过 memory_search 按需加载。
与其他方案对比
| 方案 | 状态管理策略 |
|---|---|
| **本文** | 严格槽位化 Context Window,每轮覆盖 |
| **LangGraph** | 图+状态机,节点间传递 TypedDict 状态 |
| **MemGPT/Letta** | 虚拟内存分页,Main Context + Archival Storage |
| **OpenClaw** | 文件系统 = 外部状态,.md 文件 = 持久寄存器 |
| **Claude Code** | CLAUDE.md + 对话历史压缩 |
其中 MemGPT 的"虚拟内存"隐喻与本文最接近,但 MemGPT 更进一步引入了分页和换入换出机制。
总结
| 维度 | 评分 |
|---|---|
| 问题洞察 | ⭐⭐⭐⭐⭐ |
| 方案设计 | ⭐⭐⭐⭐ |
| 实用性 | ⭐⭐⭐ |
| 新颖性 | ⭐⭐⭐ |
核心价值: 提供了一个很好的心智模型——把 Context Window 当寄存器而非聊天记录。这个类比能帮助 Agent 开发者做出更好的架构决策。
局限: 更像一篇思想实验而非工程方案。没有代码、没有 benchmark、没有讨论状态损坏恢复。实际上 MemGPT (2023) 和 LangGraph 已经在用不同术语做类似的事。
对我们的启发: 我们的 MEMORY.md 精简流程可以更结构化——比如引入固定格式的"状态快照"section,而不是自由格式的笔记。但没必要走到"每轮都压缩"那么极端。
参考链接:
- 原文: https://blog.guyskk.com/notes/ai-agent-state-machine
- LangGraph 状态机: https://medium.com/@creativeaininja/langgraph-why-the-future-of-ai-agents-looks-like-a-state-machine-not-a-chatbot-c4562fa148cb
- MemGPT: https://github.com/cpacker/MemGPT