跳到主要内容

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. 策略与战术的平衡 - 既能制定良好的计划,又能正确执行
  3. 整合新信息的能力 - 在执行过程中整合发现的新信息,而不丢失整体目标

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 的核心原语:

  1. Orchestrator(编排器): 中央调度 Agent,使用高度表达的界面(DSL)将动作委托给工作线程
  2. Worker Thread(工作线程): 执行单个动作,完成后暂停并将控制权交还给主线程
  3. Episode(片段): 线程完成动作后返回的压缩表示,包含该动作序列的步骤历史
┌─────────────────────────────────────────────────────────────┐
│ Orchestrator (主线程) │
│ (LLM 作为操作系统内核) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Thread 1 │ │ Thread 2 │ │ Thread 3 │ ← 并行执行 │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Episode1 │ │ Episode2 │ │ Episode3 │ ← 压缩返回 │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └──────────────┴──────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Episode Composition │ ← 片段可组合 │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

3.2 Thread vs Subagent

特性SubagentThread
生命周期持久化单次动作
通信方式消息传递显式共享上下文
上下文传递隔离通过 Episode 传递
执行模式可能是异步同步完成

3.3 片段记忆(Episodic Memory)

Episode 是线程完成动作时采取的步骤的压缩表示:

  • 不是完整的战术轨迹,而是只保留重要结果
  • 线程不与主线程进行来回的消息传递
  • 执行完成后直接返回 Episode
  • 这种内置的完成边界使压缩变得自然

Episode 的可组合性

  • 一个 Thread 可以用另一个 Thread 的 Episode 作为输入
  • 继承有用的结论和工作历史,而不继承完整上下文

3.4 Thread Weaving(线程编织)

"编排器分派,线程执行,片段组合"

核心机制:

  1. 编排器通过引用使用线程
  2. 动作在线程内逐步执行(每步都有中间反馈)
  3. 线程范围有界,系统自然与当前计划同步
  4. 线程是 LLM 驱动的,可以对意外环境状态做出反应

4. 与 OS 类比

Slate 的架构直接映射到 Karpathy 提出的 LLM OS 框架:

LLM OS 概念Slate 实现
Kernel(内核)Orchestrator(编排层)
Process(进程)Thread(线程)
RAM(内存)Context Window(上下文窗口)
Process Return ValuesEpisode(片段)
Filesystem, TerminalPeripherals(外设)

"Slate 的片段架构直接回答了这个问题:与其让 RAM 填充直到进程崩溃,每个线程返回都是一个自然的机会来决定保留什么、压缩什么、丢弃什么。"


5. Agent 架构对比

特性ReActMarkdown PlanTask TreesRLMDevin/ManusClaude CodeSlate
规划方式隐式文件显式REPL规划代理Plan 模式隐式
分解方式直接树REPL 函数任务型子代理隐式
同步方式单线程单线程门控步骤REPL 返回压缩返回消息传递片段
中间反馈每步每步任务失败时执行时压缩后消息传递每片段
上下文隔离N/AN/A每子任务每子调用子代理子代理每线程
压缩方式N/AN/A任务型REPL 切片子代理压缩压缩片段压缩
并行执行N/AN/AN/AREPL 内仅 Altera原生原生
表达性
适应性是(若更新计划)有限

6. 关键洞察

6.1 长时序任务的瓶颈

"长时序 Agent 任务的真正瓶颈是上下文管理,而不是模型智能。模型已经有能力解决比当前成功解决的更多任务——这是知识过剩(Knowledge Overhang)。差距是系统问题,不是能力问题。"

6.2 知识过剩

模型的潜在知识覆盖了任务空间中的广泛轨迹,但直接的单步采样只能访问狭窄区域。规划、思维链和脚手架扩展了采样区域。

6.3 有趣的观察

  1. 大规模并行执行:真实的软件任务自然分解为并行线程工作流,编排器可以同时分派多个线程
  2. 跨模型组合:在相同任务中使用 Sonnet 和 Codex 效果良好,片段边界作为模型之间的清晰交接

7. 技术栈

组件技术
核心接口DSL(领域特定语言)
包管理npm
安装npm i -g @randomlabs/slate

8. 参考资料