我在 LangGraph 上重新实现了 Arbor(一个能生长假设树的研究代理)—— 一个保留实验记录而非遗忘失败经验的代理
摘要
一位开发者在 LangGraph 上重新实现了一篇论文中的多代理研究系统 Arbor,分享了关于图结构强制不变性以及从失败中反向传播洞察的经验。该重新实现 arbor-lg 使用 LangGraph 的 StateGraph 和 SQLite 检查点实现持久化。
我见到的大多数智能体演示都只是一个 LLM 在 while 循环中调用工具。我读到一篇更有趣结构的论文——一个运行真实实验并*记住哪些方法有效*的多智能体设置——为了理解其工作原理,我重新构建了一个小版本。分享这个重新实现以及几个让我印象深刻的智能体设计经验。
论文是《Arbor: Toward Generalist Autonomous Research via Hypothesis-Tree Refinement》(中国人民大学高瓴人工智能学院 + 微软研究院,arXiv 2606.11926)。Arbor 的做法(论文中)不是一次性尝试,而是一个长期运行的协调智能体构建假设树:每个节点包含一个假设、一个可执行的工件、运行该工件得到的证据以及提炼后的洞察。短期的执行智能体运行实验并报告结果;协调智能体吸收结果并进行优化。关键的是,它只保留那些通过留出评估的变更,从而避免对自身开发信号过拟合。论文报告称,在相同的计算预算下,它在六个优化任务上的平均相对留出增益比 Claude Code 和 Codex 高出约 2.5 倍(这是他们的数据——我没有复现这些基准测试)。
我构建的内容。一个在 LangGraph 上的小型重新实现(我称之为 arbor-lg)。我选择 LangGraph 主要是因为它有两个特性:
- StateGraph——我将假设树建模为图状态,一个带有不可变合并缩减器的类型化字段(`tree: dict[str, Node]`),而不是将其塞入消息列表。节点作为完整对象写回,因此对不同节点的并发写操作可以组合。
- SQLite 检查点——整个循环是持久的,因此数小时的运行在崩溃后能够存活并从上一次检查点恢复。(演示很简单:在第 N 个周期崩溃,重新运行,它会从上次中断的地方继续。)
循环是一个有向循环图:`observe → ideate → select → dispatch → backpropagate → decide`,`decide` 有一条条件边,可以循环回去或结束。
我发现了两件真正有趣的事情:
1. 由图结构强制的不变性,而非靠纪律保证。我想要确保两条规则:(a) 留出评估器仅在合并门节点中被调用;(b) 执行器永远不会接收到完整的树状态——它作为一个隔离的子智能体运行,接收一个紧凑的输入字典并返回一个紧凑的报告。由于这些被嵌入图中,测试集泄露和上下文膨胀不需要我特意去避免——它们在结构上就不可能发生。
2. 结果不仅以分数的形式反向传播,更是作为洞察。实验运行后,每个节点的教训(通过 LLM)被提炼并向上推送给父节点,因此下一轮构思会参考该路径上已尝试过的所有内容。这种“树从自身的失败中学习”的特性使其区别于网格搜索或随机搜索。
具体来说,在一个 Kaggle 比赛中,我将其用于 Spaceship Titanic(一个入门级表格数据比赛)。每个假设是 LLM 编写的一段特征工程代码——一个完整的 `engineer(df)` 函数,它优化了父节点的代码——我执行它,然后训练一个固定模型并用 5 折交叉验证评分。失败的代码被修剪成一条“教训”,而非致命错误。它达到了一致的准确率(约 0.79–0.82 范围);目标是理解方法,而不是登上排行榜。训练作为 Kubeflow Pipelines 作业运行,所有内容都在 MLflow 中追踪,并通过一个实时 Streamlit 仪表盘显示树的生长(视频如下)。
诚实的注意事项,因为这是一个学习性的重新实现:
- 代码执行器使用一个白名单的 `__builtins__` 加上一个禁用令牌筛选。这是尽力而为,并非真正的沙盒——实际的隔离边界是训练子进程/容器。只在你信任的模型上运行。
- 我分别对每一折应用 `engineer(df)`(因此跨行特征不会在折之间泄露),但这并非黄金标准的 fit-on-train / transform-on-val 转换器约定。这是一个已知的简化。
- Spaceship Titanic 是一个玩具比赛。这不是论文基准结果的复现,我也不宣称达到他们的数据。
我很好奇是否有人将树搜索/假设优化结构用于机器学习以外的目标导向智能体任务——例如提示词优化、代码性能、配置搜索等。如果你尝试过类似的方法(或者发现我在合并门/泄露处理设置中的漏洞),我真诚地希望得到反馈。
相似文章
Arbor:树搜索作为自主代理的认知层
Arbor 引入了结构化树搜索作为自主代理的认知层,通过制衡多代理架构,实现多日、全栈 LLM 推理优化,相比供应商基线,吞吐量-延迟提升高达 193%。
@HuggingPapers: Microsoft Research 推出 Arbor,一个使用持久假设树精炼的通用自主研究代理…
Microsoft Research 推出 Arbor,一个使用持久假设树精炼进行累积学习的通用自主研究代理,在六个研究任务上超越 Codex 和 Claude Code,并在 MLE-Bench Lite 上达到 86% 的 Any-Medal。
通过假设树优化实现通用自主研究
Arbor是一个用于自主科学研究的AI框架,它使用协调器、执行器和一个持久的假设树,在多个领域迭代改进研究成果,在六个真实研究任务上取得了强劲的成果。
@neural_avb: 关于LLM智能体图记忆的最新论文
一篇新论文介绍了适用于LLM智能体的图记忆。
在LangGraph上构建了一个确定性代理框架,其中评判门是结构性的,而非提示
一位开发者介绍了SPINE,这是一个基于LangGraph构建的确定性代理框架,它使用结构性评判门而非基于提示的护栏,并在工具层驱动行为,以实现更可靠的本地推理代理。