|
| 1 | +--- |
| 2 | +tags: agent-architecture, memory-system, slate, random-labs, threads, episodic-memory |
| 3 | +--- |
| 4 | + |
| 5 | +# Slate 架构设计分析 |
| 6 | + |
| 7 | +> **Related topics**: [[agent-architecture]], [[memory-system]], [[rlm-architecture]] |
| 8 | +
|
| 9 | +## 概述 |
| 10 | + |
| 11 | +Slate 是 Random Labs 提出的一种新型 Agent 架构,旨在超越 ReAct 和 RLM(递归语言模型)。该架构通过**基于线程的片段记忆系统**(Thread-based Episodic Memory)同时解决了现代 LLM Agent面临的三大核心问题:长时序任务执行、策略与战术平衡、以及工作记忆管理。 |
| 12 | + |
| 13 | +**项目地址**: https://github.com/randomlabs-ai/slate |
| 14 | +**官方文档**: https://docs.randomlabs.ai |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## 1. 核心挑战 |
| 19 | + |
| 20 | +### 1.1 长时序任务 |
| 21 | + |
| 22 | +长时序任务是**路径依赖的**(path-dependent),即完成任务所需的步骤数量超过了最小 harness 能处理的范围。Agent 需要具备: |
| 23 | + |
| 24 | +1. **充足的工作记忆** - 模型能在正确的时间关注正确的上下文 |
| 25 | +2. **策略与战术的平衡** - 既能制定良好的计划,又能正确执行 |
| 26 | +3. **整合新信息的能力** - 在执行过程中整合发现的新信息,而不丢失整体目标 |
| 27 | + |
| 28 | +### 1.2 工作记忆与 "Dumb Zone" |
| 29 | + |
| 30 | +模型无法在整个上下文窗口中均匀地分配注意力。随着上下文长度增长,模型关注信息的能力会退化。**可用的部分(即退化区域之前的部分)就是工作记忆**。 |
| 31 | + |
| 32 | +Dex Horthy 创造了 **"Dumb Zone"** 这一术语来描述上下文窗口中检索质量下降的部分。 |
| 33 | + |
| 34 | +``` |
| 35 | +┌─────────────────────────────────────────────────────────┐ |
| 36 | +│ Context Window │ |
| 37 | +├─────────────────────┬───────────────────────────────────┤ |
| 38 | +│ Working Memory │ Dumb Zone │ |
| 39 | +│ (有效注意力区域) │ (注意力退化区域) │ |
| 40 | +└─────────────────────┴───────────────────────────────────┘ |
| 41 | +``` |
| 42 | + |
| 43 | +研究表明,即使在简单任务上,四个前沿模型(Claude Sonnet 4、GPT-4.1、Qwen3-32B、Gemini 2.5)的性能都随着输入长度增长而**非均匀地**退化。 |
| 44 | + |
| 45 | +### 1.3 策略与战术 |
| 46 | + |
| 47 | +- **策略(Strategy)**: 基于知识的开放性规划,引导系统走向目标 |
| 48 | +- **战术(Tactics)**: 学到的、局部的动作序列,帮助实质性地朝目标推进 |
| 49 | + |
| 50 | +这个区别与 RL 在围棋和象棋中的历史解决方式惊人地相似: |
| 51 | +- **Stockfish**: 暴力搜索遍历整个走法树(基于战术的搜索) |
| 52 | +- **AlphaZero**: 自我对弈学习哪些位置在战略上重要(价值网络 + 策略网络) |
| 53 | + |
| 54 | +AlphaZero 的研究揭示了一个重要发现:战术概念(子力价值)最先学习,战略概念(王的安全性、威胁、机动性)随后出现。它们在网络的不同层中分离地出现。 |
| 55 | + |
| 56 | +--- |
| 57 | + |
| 58 | +## 2. 现有方案的局限性 |
| 59 | + |
| 60 | +| 方案 | 问题 | |
| 61 | +|------|------| |
| 62 | +| **Compaction(压缩)** | 本质上是有损压缩,可能不可预测地丢失重要信息 | |
| 63 | +| **Subagents(子代理)** | 上下文隔离,但信息传递仅限于返回一条响应消息 | |
| 64 | +| **Markdown Planning** | 计划会过时;三种失败模式:计划不详细、执行不彻底、忘记更新计划 | |
| 65 | +| **Task Trees(任务树)** | 刚性结构,适应性差,表达性低 | |
| 66 | +| **RLM(递归语言模型)** | 缺乏中间反馈,像在迷宫中盲目猜测 N 步 | |
| 67 | +| **Devin/Manus/Altera** | 压缩边界存在丢失关键状态的风险 | |
| 68 | +| **Claude Code/Codex** | 同步依赖消息传递,能力受限于模型训练 | |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## 3. Slate 架构 |
| 73 | + |
| 74 | +### 3.1 核心概念:Thread(线程) |
| 75 | + |
| 76 | +**Thread** 是 Slate 的核心原语: |
| 77 | + |
| 78 | +1. **Orchestrator(编排器)**: 中央调度 Agent,使用高度表达的界面(DSL)将动作委托给工作线程 |
| 79 | +2. **Worker Thread(工作线程)**: 执行单个动作,完成后暂停并将控制权交还给主线程 |
| 80 | +3. **Episode(片段)**: 线程完成动作后返回的**压缩表示**,包含该动作序列的步骤历史 |
| 81 | + |
| 82 | +``` |
| 83 | +┌─────────────────────────────────────────────────────────────┐ |
| 84 | +│ Orchestrator (主线程) │ |
| 85 | +│ (LLM 作为操作系统内核) │ |
| 86 | +├─────────────────────────────────────────────────────────────┤ |
| 87 | +│ │ |
| 88 | +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ |
| 89 | +│ │ Thread 1 │ │ Thread 2 │ │ Thread 3 │ ← 并行执行 │ |
| 90 | +│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ |
| 91 | +│ │ │ │ │ |
| 92 | +│ ▼ ▼ ▼ │ |
| 93 | +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ |
| 94 | +│ │ Episode1 │ │ Episode2 │ │ Episode3 │ ← 压缩返回 │ |
| 95 | +│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ |
| 96 | +│ └──────────────┴──────────────┘ │ |
| 97 | +│ │ │ |
| 98 | +│ ▼ │ |
| 99 | +│ ┌─────────────────────┐ │ |
| 100 | +│ │ Episode Composition │ ← 片段可组合 │ |
| 101 | +│ └─────────────────────┘ │ |
| 102 | +└─────────────────────────────────────────────────────────────┘ |
| 103 | +``` |
| 104 | + |
| 105 | +### 3.2 Thread vs Subagent |
| 106 | + |
| 107 | +| 特性 | Subagent | Thread | |
| 108 | +|------|----------|--------| |
| 109 | +| 生命周期 | 持久化 | 单次动作 | |
| 110 | +| 通信方式 | 消息传递 | 显式共享上下文 | |
| 111 | +| 上下文传递 | 隔离 | 通过 Episode 传递 | |
| 112 | +| 执行模式 | 可能是异步 | 同步完成 | |
| 113 | + |
| 114 | +### 3.3 片段记忆(Episodic Memory) |
| 115 | + |
| 116 | +**Episode** 是线程完成动作时采取的步骤的压缩表示: |
| 117 | + |
| 118 | +- **不是完整的战术轨迹**,而是只保留重要结果 |
| 119 | +- 线程不与主线程进行来回的消息传递 |
| 120 | +- 执行完成后直接返回 Episode |
| 121 | +- 这种内置的完成边界使压缩变得自然 |
| 122 | + |
| 123 | +**Episode 的可组合性**: |
| 124 | +- 一个 Thread 可以用另一个 Thread 的 Episode 作为输入 |
| 125 | +- 继承有用的结论和工作历史,而不继承完整上下文 |
| 126 | + |
| 127 | +### 3.4 Thread Weaving(线程编织) |
| 128 | + |
| 129 | +> "编排器分派,线程执行,片段组合" |
| 130 | +
|
| 131 | +核心机制: |
| 132 | +1. 编排器**通过引用**使用线程 |
| 133 | +2. 动作在线程内**逐步执行**(每步都有中间反馈) |
| 134 | +3. 线程范围有界,系统自然与当前计划同步 |
| 135 | +4. 线程是 LLM 驱动的,可以对意外环境状态做出反应 |
| 136 | + |
| 137 | +--- |
| 138 | + |
| 139 | +## 4. 与 OS 类比 |
| 140 | + |
| 141 | +Slate 的架构直接映射到 Karpathy 提出的 **LLM OS** 框架: |
| 142 | + |
| 143 | +| LLM OS 概念 | Slate 实现 | |
| 144 | +|-------------|------------| |
| 145 | +| Kernel(内核) | Orchestrator(编排层) | |
| 146 | +| Process(进程) | Thread(线程) | |
| 147 | +| RAM(内存) | Context Window(上下文窗口) | |
| 148 | +| Process Return Values | Episode(片段) | |
| 149 | +| Filesystem, Terminal | Peripherals(外设) | |
| 150 | + |
| 151 | +> "Slate 的片段架构直接回答了这个问题:与其让 RAM 填充直到进程崩溃,每个线程返回都是一个自然的机会来决定保留什么、压缩什么、丢弃什么。" |
| 152 | +
|
| 153 | +--- |
| 154 | + |
| 155 | +## 5. Agent 架构对比 |
| 156 | + |
| 157 | +| 特性 | ReAct | Markdown Plan | Task Trees | RLM | Devin/Manus | Claude Code | **Slate** | |
| 158 | +|------|-------|---------------|------------|-----|-------------|-------------|-----------| |
| 159 | +| 规划方式 | 隐式 | 文件 | 显式 | REPL | 规划代理 | Plan 模式 | 隐式 | |
| 160 | +| 分解方式 | 无 | 无 | 直接树 | REPL 函数 | 任务型 | 子代理 | 隐式 | |
| 161 | +| 同步方式 | 单线程 | 单线程 | 门控步骤 | REPL 返回 | 压缩返回 | 消息传递 | **片段** | |
| 162 | +| 中间反馈 | 每步 | 每步 | 任务失败时 | 执行时 | 压缩后 | 消息传递 | **每片段** | |
| 163 | +| 上下文隔离 | N/A | N/A | 每子任务 | 每子调用 | 子代理 | 子代理 | **每线程** | |
| 164 | +| 压缩方式 | N/A | N/A | 任务型 | REPL 切片 | 子代理压缩 | 压缩 | **片段压缩** | |
| 165 | +| 并行执行 | N/A | N/A | N/A | REPL 内 | 仅 Altera | 原生 | **原生** | |
| 166 | +| 表达性 | 高 | 高 | 低 | 高 | 中 | 中 | **高** | |
| 167 | +| 适应性 | 是 | 是(若更新计划) | 否 | 是 | 是 | 有限 | **是** | |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## 6. 关键洞察 |
| 172 | + |
| 173 | +### 6.1 长时序任务的瓶颈 |
| 174 | + |
| 175 | +> "长时序 Agent 任务的真正瓶颈是**上下文管理**,而不是模型智能。模型已经有能力解决比当前成功解决的更多任务——这是**知识过剩(Knowledge Overhang)**。差距是系统问题,不是能力问题。" |
| 176 | +
|
| 177 | +### 6.2 知识过剩 |
| 178 | + |
| 179 | +模型的潜在知识覆盖了任务空间中的广泛轨迹,但直接的单步采样只能访问狭窄区域。规划、思维链和脚手架扩展了采样区域。 |
| 180 | + |
| 181 | +### 6.3 有趣的观察 |
| 182 | + |
| 183 | +1. **大规模并行执行**:真实的软件任务自然分解为并行线程工作流,编排器可以同时分派多个线程 |
| 184 | +2. **跨模型组合**:在相同任务中使用 Sonnet 和 Codex 效果良好,片段边界作为模型之间的清晰交接 |
| 185 | + |
| 186 | +--- |
| 187 | + |
| 188 | +## 7. 技术栈 |
| 189 | + |
| 190 | +| 组件 | 技术 | |
| 191 | +|------|------| |
| 192 | +| 核心接口 | DSL(领域特定语言) | |
| 193 | +| 包管理 | npm | |
| 194 | +| 安装 | `npm i -g @randomlabs/slate` | |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## 8. 参考资料 |
| 199 | + |
| 200 | +- [Slate GitHub](https://github.com/randomlabs-ai/slate) |
| 201 | +- [Random Labs 官方文档](https://docs.randomlabs.ai) |
| 202 | +- [RLM - Recursive Language Models (paper)](https://arxiv.org/pdf/2512.24601v1) |
| 203 | +- [Karpathy - LLM OS](https://x.com/karpathy/status/1935518272667217925) |
| 204 | +- [Context Rot (Chroma, 2025)](https://research.trychroma.com/context-rot) |
| 205 | +- [Manus - Context Engineering](https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus) |
0 commit comments