最近看到一篇挺适合拿来做博客开张读物的论文:SGA-MCTS: Decoupling Planning from Execution via Training-Free Atomic Experience Retrieval

一句话概括:它想把 MCTS 这种“推理时很强但很慢”的搜索能力,提前离线跑完,压缩成一批可以检索的经验原子。真正在线执行任务时,模型不再每次从零开始搜索,而是先把相似的经验捞出来,当作软提示塞回当前上下文。

这件事很像是给 Agent 做了一个经验库:慢思考可以提前发生,快执行只需要调经验。

为什么值得看

现在做 LLM Agent,经常会遇到一个很尴尬的三角:

  • 只靠模型直接生成动作,速度快,但是复杂任务里容易短视;
  • 推理时加搜索,比如 MCTS、Tree-of-Thought,效果可能更好,但是延迟和成本很难看;
  • 用监督微调把规划能力灌进去,又会受限于数据覆盖和任务泛化。

SGA-MCTS 的切入点是:能不能把“搜索”从在线阶段拆出去?

论文把规划看成一种非参数检索问题。离线阶段用 MCTS 探索解空间,把高质量轨迹拆成 State-Goal-Action,也就是 SGA atoms。在线阶段来了新任务,再通过符号加语义的混合检索,把相关 SGA 找出来,重新 grounding 到当前任务里,变成模型的行动提示。

SGA atoms 是什么

SGA 可以粗略理解成:

State: 当前处在什么状态
Goal: 接下来要达成什么子目标
Action: 在这个状态和目标下,应该采取什么动作

关键不只是存三元组,而是要把具体任务里的实体“去词汇化”。比如某次轨迹里出现的是具体网页、具体商品、具体表单字段,论文希望抽出来的是更抽象的因果逻辑,而不是死记硬背那个任务。

这样一来,经验原子就更像“可迁移的操作模式”:

  • 当前信息不够时,先补充观察;
  • 目标需要约束满足时,先拆成可检查条件;
  • 搜索空间太大时,先用中间状态缩小候选;
  • 行动失败时,回到上一个可验证状态重新计划。

这些东西如果每次在线都靠模型临场想,既慢又不稳定;如果提前沉淀成检索经验,就有机会把复杂推理摊销掉。

它和普通 RAG 有什么区别

普通 RAG 更多是在检索“知识”:事实、文档、代码片段、历史记录。

SGA-MCTS 更像是在检索“行动经验”:在某类状态下,为了某个目标,曾经有效的动作是什么。它检索的不是答案本身,而是可复用的规划片段。

这个区别挺重要。因为 Agent 真正难的地方,往往不是缺一个事实,而是不知道下一步该怎么走。搜索方法能解决这个问题,但太贵;经验检索如果能接住一部分搜索结果,就可能变成一个工程上很划算的折中。

一个直觉例子

假设有个网页任务:帮用户找到某个服务的退款政策,并判断当前订单是否满足退款条件。

在线 MCTS 可能会探索很多路径:

  1. 搜首页导航;
  2. 查帮助中心;
  3. 找订单详情;
  4. 对照退款条件;
  5. 如果缺少付款时间,再回订单页补信息。

SGA-MCTS 想做的是,把这些成功轨迹抽成类似这样的经验:

State: 已找到政策页,但缺少用户订单中的关键字段
Goal: 判断订单是否满足政策约束
Action: 回到订单详情页提取缺失字段,再进行条件匹配

下次遇到另一个网站、另一个订单,具体实体都变了,但“缺字段就回源页面补证据”这个策略仍然可以复用。

我比较喜欢的点

这篇论文最有意思的地方,是它没有急着说“再训练一个更强的 planner”。它把问题拆成两个阶段:

  • 离线:用重计算换高质量经验;
  • 在线:用检索把经验注入当前决策。

这个思路很工程。很多系统里,真正贵的不是某一次推理,而是每次都重复做同一种探索。如果任务分布有重复结构,提前把搜索结果原子化、抽象化、索引化,是很自然的方向。

论文摘要里还提到,SGA-MCTS 让 frozen open-weights model 在复杂 benchmark 上接近 SOTA 系统,同时不需要任务特定微调。这个 claim 当然要看实验细节,但方向本身值得追。

我会重点关注什么

后面细读时,我准备重点看几个问题:

  • SGA atoms 的抽象规则到底有多强,是否依赖人工设计;
  • hybrid symbolic-semantic retrieval 怎么做,符号匹配和语义匹配各解决什么;
  • 检索出来的经验如何重新 grounding,避免把旧任务动作硬套到新任务;
  • 离线 MCTS 的成本有多大,经验库规模和在线收益之间怎么权衡;
  • benchmark 是否真的覆盖了需要长期规划的任务,而不是只是在模板化任务上收益明显。

如果这些问题处理得好,SGA-MCTS 这类方法可能会成为 Agent 系统里一个很实用的中间层:不直接改模型参数,也不每次在线爆搜,而是在两者之间加一个“可复用规划经验”的缓存。

先留个坑

这篇可以作为后续几篇文章的入口。下一步我想拆一下它的完整 pipeline:MCTS 怎么生成轨迹,轨迹怎么变成 SGA atoms,检索模块怎么把它们喂回 LLM。

Agent 方向现在最有意思的地方,不是单纯让模型“想更久”,而是让系统知道哪些思考值得保留下来。SGA-MCTS 正好踩在这个点上。