2026 年 10 月 6 日提交到 arXiv 的《Stateless Language Agents: Scaling Long-Horizon Automated Research》,作者来自 Stanford、CMU、UW 与 SambaNova(Qizheng Zhang、Changxiu Ji、Kunle Olukotun 等)。它把长时程自动研究(autoresearch)里的失效模式,直接归因到两个设计问题:研究状态存在哪里,以及由谁决定下一步试什么。
作者给的答案叫 SLA(Stateless Language Agents),原则一句话概括:有状态搜索,无状态智能体(stateful search with stateless agents)。任何 Agent 都不在多次调用之间携带自己的对话;harness(外围执行框架)持有研究状态——候选解与实测结果——并在每次调用时重建一份全新、针对角色的上下文。于是「Agent 能看到什么」从「随运行不断变长的历史」变成了一个显式的设计选择。
这里的 harness 指模型与工具之间的运行时:它负责存储状态、重建提示、调度 Worker、记录评估器结果。注意与常见做法的区别——多数编码 Agent 也支持并行子 Agent,但编排者本身是有状态的,它保留自己的对话,决定每个子 Agent 看到什么、何时停。SLA 里连 Advisor 都是无状态的,上下文完全由 harness 决定。
论文把问题拆成三个具体观测到的失效:
论文还引了一项对照:coding agent 的会话拉到 1 亿 token 量级后,前期比独立采样进步快,会话越长越落后——把一个固定预算拆成几段更短的会话,可能比一个超长会话更强。这直接指向核心矛盾:既要保住可复用的证据,又要给每个 Agent 挑选它当前决策真正需要的那部分。
SLA 每一轮(epoch)做全局规划,然后在局部做实验,循环往复。关键是把「状态」和「上下文」彻底分开:
Advisor 上下文(全局决策用):每个 epoch,harness 重建 Advisor 的全局证据上下文——任务规格、当前全局最优的代码与分数、以及 harness 生成的证据摘要。摘要覆盖近期尝试、按搜索方向分组的结果、Worker 状态、近期进展,外加任务特有的诊断信息。它还会把「实测没有改进」与「因实现、运行或正确性而结论不明的失败」分开,避免把一个跑挂的实验误判为该方向已穷尽。
Worker 上下文(局部实验用):每次试验,Worker 只拿到自己的任务分配、自己保留的候选解、以及紧凑的局部反馈(上一轮状态、实测分数、可用的正确性诊断)。Worker 之间不能访问彼此的 workspace,也看不到完整研究历史。
每个 Worker 在独立 workspace 里跑若干局部试验,独立评估器给每个候选打分,harness 记录结果并更新 Worker 的局部候选与全局最优,直到预算耗尽。每个 Advisor epoch、每个 Worker trial 都是一次调用,每次调用开一个新会话,只有 harness 记录进研究状态的东西才跨调用保留。
这套结构可以浓缩成伪代码:
# harness 是唯一持有持久状态的地方
state = {
"task": task_spec,
"global_best": {"code": ..., "score": ...},
"experiments": [], # 追加式全量日志,只有 harness 读
"directions": {}, # 按搜索方向分组的证据汇总
"workers": {}, # 每个 Worker 的候选解 + 最近反馈
}
def run_epoch():
# 1) 重建 Advisor 上下文:喂汇总证据,不喂原始历史
adv_ctx = build_context(
task=state["task"],
best=state["global_best"],
evidence=summarize(state["experiments"]),
)
assignments = call_agent("advisor", adv_ctx) # 全新会话
# 2) 每个 Worker 独立会话、独立 workspace
for a in assignments:
w = state["workers"][a.id]
worker_ctx = build_context(
task=state["task"],
assignment=a,
candidate=w["candidate"],
feedback=w["feedback"], # 上轮状态 / 分数 / 诊断
)
result = call_agent("worker", worker_ctx) # 不继承其他 Worker 对话
score = evaluate(result)
state["experiments"].append((a, result, score))
update(w, result, score)对比之下,SwarmResearch 的探索型 Search Agent 用全新上下文窗口,而优化型 Search Agent 会 fork 父 Agent 的对话历史;CORAL 则是长期运行的 Agent 加共享持久记忆。SLA 的不同在于:连编排者都无状态,且上下文的构成是 harness 的显式契约。
论文在软件工程、内核优化、算法设计三类任务上,把预算拉到最高 10 亿 token,与三个近期框架对比。结论是 SLA 在每项任务上都取得最佳最终结果。
最硬的一组数据在 Anthropic 内核优化任务上,用 Codex/GPT-5.5、10 亿 token 预算:SLA 平均周期数 1112.0(越低越好),最强基线 SwarmResearch 为 1275.7。SLA 累计消耗 67.9M token 就达到了 SwarmResearch 的平均最终性能,而后者用了 986.3M token——报告称 token 少用 93.1%,约 14.5 倍。 摘要里概括为「追平最强内核基线的最终性能,token 减少 84% 以上」,覆盖到 93% 的区间。
Advisor 本身很便宜:只占 0.24%–0.51% 的 token、至多 2.3% 的模型成本(摘要口径为「不到 0.6% 的 token」)。这与「规划层开销小、执行层省得多」的直觉一致。
消融实验用共享检查点做,每个变体从同一保存状态续跑、各续跑 1 亿 token、三次独立运行。以 FrontierSWE libexpat 从 7000 万 token 检查点续跑为例(起分 16.12):完整 SLA 达到 18.78 ± 0.92,而取消 Advisor 任务分配的变体只有 16.54 ± 0.33——相当于放弃了该检查点之后所获进展的 84.2%。整体上,去掉 Advisor 上下文重建、Worker 上下文隔离或 Advisor 任务分配中的任意一项,每项比较的平均进展都下降。
还有一组时间尺度上的发现:在 FrontierSWE 上,SLA 在 1.75 亿 token 时落后于最强基线,到 7 亿 token 时才反超;在 25% 预算时落后,全预算时领先。宽 Worker 池在 25% 预算时落后 337 个周期,到全预算时与最窄配置只差 4 个周期。作者据此建议:报告进度时要在多个累计 token 预算下给结果——短时程评估会系统性误判研究系统及其组件。
这条路线并非只有 SLA 一家,方向甚至相反,值得摆在一起看:
SLA 的取舍很清楚:它放弃了「Agent 自己记得住」的便利,换取可复现、可审计、可并行、上下文可被显式设计。 代价是 harness 要承担更多工程——状态 schema、证据摘要、Worker 隔离、评估器接线,全都得自己搭;而且它假设任务有可执行评估器(论文所有任务都满足),目标模糊、评估缓慢的任务未被测试。
还有一条重要限定:所谓「累计 token」是整个运行的输入+输出之和,不是经过的时间。它衡量 token 用量,不能证明实际运行时间更短或总费用更低——并行 Worker 会推高瞬时推理量。复现范围也有限:只有 Anthropic 内核优化任务和检查点消融被复现过,且每方法只跑一次。
适合这几类场景:需要跑很久的自动研究/优化(内核、算法、超参、代码性能),任务有确定性评估器能给候选打分,并且你关心的是单位算力买到的进展(quality per token)而非峰值耗时。
上手路径大致是:
一句话判断:如果你的 Agent 长跑后开始「重放历史、撞车、假装收敛」,而任务又有客观打分,那么把状态搬进 harness、让 Agent 每次从干净上下文出发,是低风险、高杠杆的一步。
创作说明:本文在资料整理与成文中使用了 AI 辅助(DeepSeek),经作者审阅后发布,作者对内容负责。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。