Slate 架构设计分析
Related topics: [[agent-architecture]], [[memory-system]], [[rlm-architecture]]
概述
Slate 是 Random Labs 提 出的一种新型 Agent 架构,旨在超越 ReAct 和 RLM(递归语言模型)。该架构通过基于线程的片段记忆系统(Thread-based Episodic Memory)同时解决了现代 LLM Agent面临的三大核心问题:长时序任务执行、策略与战术平衡、以及工作记忆管理。
项目地址: https://github.com/randomlabs-ai/slate 官方文档: https://docs.randomlabs.ai
1. 核心挑战
1.1 长时序任务
长时序任务是路径依赖的(path-dependent),即完成任务所需的步骤数量超过了最小 harness 能处理的范围。Agent 需要具备:
- 充足的工作记忆 - 模型能在正确的时间关注正确的上下文
- 策略与战术的平衡 - 既能制定良好的计划,又能正确执行
- 整合新信息的能力 - 在执行过程中整合发现的新信息,而不丢失整体目标
1.2 工作记忆与 "Dumb Zone"
模型无法在整个上下文窗口中均匀地分配注意力。随着上下文长度增长,模型关注信息的能力会退化。可用的部分(即退化区域之前的部分)就是工作记忆。
Dex Horthy 创造了 "Dumb Zone" 这一术语来描述上下文窗口中检索质量下降的部分。
┌─────────────────────────────────────────────────────────┐
│ Context Window │
├─────────────────────┬───────────────────────────────────┤
│ Working Memory │ Dumb Zone │
│ (有效注意力区域) │ (注意力退化区域) │
└─────────────────────┴───────────────────────────────────┘
研究表明,即使 在简单任务上,四个前沿模型(Claude Sonnet 4、GPT-4.1、Qwen3-32B、Gemini 2.5)的性能都随着输入长度增长而非均匀地退化。
1.3 策略与战术
- 策略(Strategy): 基于知识的开放性规划,引导系统走向目标
- 战术(Tactics): 学到的、局部的动作序列,帮助实质性地朝目标推进
这个区别与 RL 在围棋和象棋中的历史解决方式惊人地相似:
- Stockfish: 暴力搜索遍历整个走法树(基于战术的搜索)
- AlphaZero: 自我对弈学习哪些位置在战略上重要(价值网络 + 策略网络)
AlphaZero 的研究揭示了一个重要发现:战术概念(子力价值)最先学习,战略概念(王的安全性、威胁、机动性)随后出现。它们在网络的不同层中分离地出现。
2. 现有方案的局限性
| 方案 | 问题 |
|---|---|
| Compaction(压缩) | 本质上是有损压缩,可能不可预测地丢失重要信息 |
| Subagents(子代理) | 上下文隔离,但信息传递仅限于返回一条响应消息 |
| Markdown Planning | 计划会过时;三种失败模式:计划不详细、执行不彻底、忘记更新计划 |
| Task Trees(任务树) | 刚性结构,适应性差,表达性低 |
| RLM(递归语言模型) | 缺乏中间反馈,像在迷宫中盲目猜测 N 步 |
| Devin/Manus/Altera | 压缩边界存在丢失关键状态的风险 |
| Claude Code/Codex | 同步依赖消息传递,能力受限于模型训练 |
3. Slate 架构
3.1 核心概念:Thread(线程)
Thread 是 Slate 的核心原语:
- Orchestrator(编排器): 中央调度 Agent,使用高度表达的界面(DSL)将动作委托给工作线程
- Worker Thread(工作线程): 执行单个动作,完成后暂停并将控制权交还给主线程
- Episode(片段): 线程完成动作后返回的压缩表示,包含该动作序列的步骤历史
┌────────────────── ───────────────────────────────────────────┐
│ Orchestrator (主线程) │
│ (LLM 作为操作系统内核) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Thread 1 │ │ Thread 2 │ │ Thread 3 │ ← 并行执行 │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌ ──────────┐ │
│ │ Episode1 │ │ Episode2 │ │ Episode3 │ ← 压缩返回 │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └──────────────┴──────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Episode Composition │ ← 片段可组合 │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3.2 Thread vs Subagent
| 特性 | Subagent | Thread |
|---|---|---|
| 生命周期 | 持久化 | 单次动作 |
| 通信方式 | 消息传递 | 显式共享上下文 |
| 上下文传递 | 隔离 | 通过 Episode 传递 |
| 执行模式 | 可能是异步 | 同步完成 |
3.3 片段记忆(Episodic Memory)
Episode 是线程完成动作时采取的步骤的压缩表示:
- 不是完整的战术轨迹,而是只保留重要结果
- 线程不与主线程进行来回的消息传递
- 执行完成后直接返回 Episode
- 这种内置的完成边界使压缩变得自然
Episode 的可组合性:
- 一个 Thread 可以用另一个 Thread 的 Episode 作为输入
- 继承有用的结论和工作历史,而不继承完整上下文
3.4 Thread Weaving(线程编织)
"编排器分派,线程执行,片段组合"
核心机制:
- 编排器通过引用使用线程