双型智能体架构对照:Claude Code 与 Codex 运行机制与核心设计对比¶
在当前的 AI Agent 工程实践中,Claude Code(代表高度交互式、极致本地体验的开发助手)与 Codex Agent(代表企业级、面向长期复杂任务的异步服务端智能体)分别代表了两种截然不同的运行时设计哲学。本文将从系统架构设计、会话状态机、内存压缩及安全屏障等多维度,对两者进行深度定量分析。
1. 系统架构与执行流向对比¶
两者的底层架构体现了交互侧(CLI/TUI)与服务侧(API/WebSocket)的不同设计约束:
========================================================================================
【Claude Code: 交互型 CLI 驱动管道】
用户输入 (CLI) ──> QueryEngine (同步组装上下文) ──> Transcript Loop (采样-执行-回填闭环)
│
└──> 本地 Tool (直接 exec / stdio)
========================================================================================
【Codex Agent: 企业级服务端异步会话引擎】
外部请求 ──> app-server ──> Session (异步原子操作队列) ──> Thread / Turn / Item 结构体
│
└──> Sandboxed Runner (Docker / gVisor 进程物理隔离)
========================================================================================
- Claude Code:围绕一个轻量级的 QueryEngine 与 Transcript(转录记录) 循环展开。它的状态是高度线性的,模型输出的工具意图直接在本地执行并通过 async/await 进行同步等待回填,极度追求低延迟和瞬态交互的完整性。
- Codex Agent:采用典型的生产级服务端运行时架构。引入了
Thread -> Turn -> Item三层状态模型。所有的用户任务被归入独立队列进行无冲突调度,外部接口通过 WebSocket 或 EventSource 流式推送事件,工具执行跑在独立的物理隔离沙箱内,高度追求长期运行的鲁棒性与分布式对齐。
2. 核心技术规格对比矩阵¶
| 技术规格维度 | Claude Code (高度本地交互型) | Codex Agent (企业级异步服务型) |
|---|---|---|
| 会话模型定义 (Session Modeling) | Transcript-centric:会话即为一份持续追加、可恢复的转录历史记录。 | Thread-Turn-Item:三层强类型定义。Thread 承载长期会话;Turn 承载单次用户任务;Item 承载原子结构化事件(消息、命令、补丁、审批)。 |
| 执行引擎模型 (Event Loop) | Transcript Loop:基于本地 async/await 循环,流式拦截并分发事件。 | Operation Queue Session Loop:所有读写操作必须排队(Mutex / Channel)进入 Session 队列,防止并发脑裂。 |
| 上下文压缩策略 (Compaction) | Heuristic Truncation / Summary:基于阈值对旧 Transcript 执行启发式剪枝与文本摘要。 | Reactive Compaction (反应式压缩):计算历史 Item 的信息熵,由后台任务提取事实形成结构化长期记忆(Long-term Memory),保留因果证据链。 |
| 安全沙箱隔离 (Sandboxing) | Bare-metal Local Execution:工具处理器默认跑在宿主机物理环境,通过白名单与提示词做防御。 | Isolated Sandboxed Container:通过容器(Docker/Containerd)或轻量虚拟化(gVisor/Firecracker)进行物理隔离,拦截一切越权 I/O。 |
| 权限阻断逻辑 (ACL / Human-in-the-Loop) | Explicit CLI CLI-Ask Prompt:终端挂起直接通过 stdin/stdout 进行同步阻断问询。 | Asynchronous Approval Item:将审批抽象为标准 Item 写入队列,客户端可异步通过 UI 做出审批确认。 |
| 持久化与分叉 (Restore & Fork) | Transcript Serialization:序列化为本地 JSON 文件,支持 resume 读取。 | State Rollout & DB Snapshot:保存完整系统快照,支持从任意 Turn 节点进行分叉(Fork)与回滚(Rollback)。 |
3. 核心机制深度对比剖析¶
3.1 内存与上下文压缩机制 (Compaction Algorithm)¶
大模型的上下文窗口是有限的,智能体运行越久,历史 Token 堆积越严重。两者的压缩机制体现了不同的工程解法:
- Claude Code 的剪枝方案: 每次向 Claude API 发送请求前,运行时会计算当前转录历史的 Token 总数。若超出设定水位(如 \(120\text{K}\) Tokens),则自动触发剪枝钩子(Pruning Hook)。它将旧消息进行总结(Summary Attachment),并物理截断(Truncate)前部最老的工具执行细节,只保留大纲,释放注意力空间。
- Codex 的反应式压缩机制(Reactive Compaction):
Codex 在后台运行一个并行的压缩进程。它不会粗暴地物理删除 Item,而是根据时间局部性(Temporal Locality)和主题相关性对历史 Item 进行“语义浓缩”:
- 抽取核心事实:将无用命令的
stdout噪声过滤掉,提取因果结论。 - 构造知识节点(Fact Nodes):将事实归档至 Thread 的长期记忆网络中。
- 仅保留基础基线(Baseline Context),后续 Turn 采用动态检索(Vector Search over past turns)局部注入,极大节省了 Context 成本,保障了极长周期任务的连续性。
- 抽取核心事实:将无用命令的
3.2 权限控制与风控屏障(Human-in-the-Loop)¶
智能体自动修改本地代码或执行 Shell 命令时,安全是决定能否上线的生命线:
- Claude Code 的本地交互屏障:
由于 Claude Code 独占当前终端,它的安全屏障是“终端阻断问询”。当模型想要执行不符合只读策略(
ReadOnly)的 Shell 命令时,运行时直接劫持标准输入,输出:? Approve bash command "rm -rf build"? (y/N)。这是一种强交互、单线程阻塞的安全策略。 - Codex 的异步队列屏障:
在分布式或多用户环境下,不能直接阻塞进程输入。Codex 引入了 “审批通道(Approval Channel)与审批条目(Approval Item)” 机制:
- 当高危工具触发时,运行时产生一个
ApprovalRequiredItem插入 Thread 中,并将当前 Turn 的状态转换为SUSPENDED(挂起)。 - 客户端(如 Web UI)监听到该事件后,展示确认按钮。
- 用户确认后,产生一个
ApproveAction写入 Session 操作队列。 - Session 收到审批操作后激活 Turn,把审批结果包装为用户回复,回填给模型继续生成。这种模型将安全隔离与异步执行做到了完美统一。
- 当高危工具触发时,运行时产生一个
4. 资深系统架构师面试表达方案¶
面试提问:你如何看待像 Claude Code 这样的终端交互式 Agent 和部署在服务端的复杂 Agent 运行时(如 Codex Pattern)在架构设计上的核心差异?
回答模版: 这两种智能体运行时代表了“极致瞬时响应”与“长期鲁棒运行”两种截然不同的架构约束。
Claude Code 代表的是极致的“交互型流水线”。 它的核心设计围绕 Transcript 展开,将本地终端视为单一注意力边界。它的状态机是线性的,工具执行直接在 Bare-metal 本地跑,安全校验完全依赖本地 TUI 同步阻断。这种架构换来了开发场景下的极高效率和毫秒级流畅响应,但不适合多租户、异步大吞吐的业务场景。
而 Codex 代表的是经典的“服务端运行时引擎”。 它必须解决网络不稳定、多任务并发脑裂及高危代码越权的本质痛点。因此,我们采用 Thread-Turn-Item 的高内聚状态机,所有的写操作和模型采样任务必须序列化进入 Operation Queue。最核心的系统边界在于,我们必须对工具处理器引入 物理级沙箱物理隔离(如 gVisor 沙箱或独立 Docker 运行),所有的权限审批不再是简单的 TUI 阻断,而是作为异步的 Approval Item 插入状态机,实现了命令挂起、异步回调与系统快照分叉。
在企业级 AI 系统的建设中,我倾向于引入 Codex 的服务端设计哲学,将安全边界、持久化追踪和队列化调度下沉为基础设施层,从而保障智能体在离线、复杂多步骤任务中具备确定性的安全与容灾边界。