循环深度:给 Agent 装一个「思考预算」旋钮
古董级程序员,前百度/微博工程师,现在关注 AI 工程化与开发者工具。
微信公众号「字与码」,记录技术思考与行业观察。
本文同步发布于 zicode.com
GPT-6 Astra 被扒出可能用了 recurrent depth(循环深度)。这篇文章不聊八卦,聊这件事对你写 agent 到底有什么用——以及为什么「循环两次就够了」这条反直觉结论,可能比你想象的更有实操价值。
事情的起点是 The Information 的一篇报道:Astra 的秘密武器很可能是一种叫 recurrent depth 的架构——同一组 Transformer 参数在推理时被重复使用多次。随后研究者 @nrehiew_ 用一条长推把 looped transformer 方向的五篇关键论文串了起来。
但我关心的不是「Astra 又强了」,而是一个更工程的问题:这套东西里,有没有今天就能落在 agent 开发上的部分? 把五篇论文读下来,答案是有的,而且比我预想的多。下面按「概念 → 实用 → 泼冷水 → 对 agent 的映射 → 行动清单」来讲。
一、循环深度到底在循环什么
普通 Transformer 一次前向传播里,每层参数只用一次。Looped Transformer 的做法是把同一组参数重复用多次。这个「重复」有三种粒度:

- 整模型循环(model-loop):把整个模型跑完一遍后,把隐状态再喂回去。最经典的范式。
- 层块循环(block-loop):只循环中间连续的一段层。
- 逐层循环(layer-loop):每一层各自循环几次再往下走。今年 7 月的 Loopie 论文(arXiv:2607.16051)的实验发现,在大规模预训练下这种方式扩展性更好。
一个容易被忽略的关键点:循环结构是固定的,每个 token 拿到完全相同的计算量。 这和「想多久算多久」的自适应计算(ACT、early-exit)是两条路线。这个区别后面讲 agent 路由时会用到。
思想源头是 2018 年的 Universal Transformer:把 Transformer 的可并行性和 RNN 的循环归纳偏置结合起来,同一组参数在深度方向反复应用。当年它在 bAbI、LAMBADA、WMT14 上都有亮眼成绩,但之后八年基本处于「有意思但没人敢上规模」的状态——因为一个致命的质疑始终悬着:同样 N 倍的预训练算力,直接把参数量扩大 N 倍,通常比把模型循环 N 次更划算。
这八年真正变了的东西有两件。一是 2025 年 2 月的《Scaling up Test-Time Compute with Latent Reasoning》(arXiv:2502.05171)——Astra 报道里「recurrent depth」这个名字就出自这里——第一次把循环深度做到现代规模:3.5B 参数、800B token 预训练,测试时循环次数拉满可以打到约 50B 模型的等效计算水平,同时完全不依赖 CoT 训练数据。二是 7 月的 Loopie,第一次正面回答了上面那个致命质疑:在按真实墙钟时间做算力配平的对比下,Loopie-20B-A2B 显著超过同预算训练的普通 30B-A3B 基线,IMO/IPhO 2025 拿到无工具金牌。循环深度从学术玩具跨进了可规模化的训练范式。
二、最实用的一篇:不训练,直接给开源模型套个循环
五篇论文里,我认为对普通开发者价值最高的是《Training-Free Looped Transformers》(arXiv:2605.23872)。它问了一个非常工程师的问题:已经训练好的开源模型,能不能在推理时直接套个循环外壳就变强?
答案是:可以,但姿势极其重要。朴素地把某段层原样重复 K 次,通常会掉点——因为后面的层是在「这段层只跑一遍」的输出分布上训练的,你重复 K 次之后,隐状态会漂移到模型从未见过的区域。
突破口来自一个很漂亮的数学视角:每个 pre-norm Transformer 层,恰好是残差 ODE 上的一步前向欧拉积分(步长 h=1)。所以「循环」不应该是把一个大步重复 K 次(那等于把终点从 t=1 挪到了 t=K),而应该是把一次大步换成 K 个阻尼小步——同样的 t=1 终点,更精细的数值积分:
# 概念示意:真实实现需要 monkey-patch HF decoder 并处理 KV cache
# window = 中间连续的若干层,K = 子步数
# 朴素循环(错误姿势):终点漂到 t=K,掉点
# x = g(g(g(x)))
# 子步循环(论文姿势):同一段路程,K 次精细积分
def substep_loop(x, window, K):
for layer in window:
x = x + layer(x) / K # layer(x) 返回残差项 F(x)
return x
用这个姿势在 7 个模型家族、45 个(模型,基准)组合上做了开箱即用的验证,没有逐格调参:
| 模型 / 基准 | 基线 | 循环后 | 提升 |
|---|---|---|---|
| Qwen3-4B-Instruct / MMLU-Pro | 0.5714 | 0.5979 | +2.64pp |
| Qwen3-4B-Instruct / GPQA-Main | — | — | +2.01pp |
| Qwen1.5-MoE-A2.7B / ARC-Challenge | — | — | +2.30pp |
| Moonlight-16B-A3B / OpenBookQA | — | — | +1.20pp |
覆盖面相当广:稠密、稀疏 MoE、MLA+MoE 都有 0.7~2.6 个百分点的提升,整体 87% 的组合是正向或持平。论文还给出了几条「配方」,都很具体:
- 循环窗口 n=4(中间 4 层)是甜点,n≥6 会出现性能悬崖;
- MoE 必须用 layer-mode——block-mode 会让每次循环重新路由专家,路由抖动积累成噪声;dense 两种都行;
- 失败集中在 3B 以下的蒸馏模型做知识密集选择题上,而且这个边界是任务相关的,不是绝对的。
三、一次重要的泼冷水:循环两次就够了
如果只从这五篇论文里记住一件事,我会选这条。
《LoopCoder-v2》(arXiv:2606.18023)做了整个领域最扎实的受控实验:同样配方从头训练 4 个 7B 并行循环代码模型(R=1/2/3/4),各吃 18T token。结果非常有戏剧性:
| 循环次数 R | SWE-bench Verified | Multi-SWE | Terminal-Bench v1 |
|---|---|---|---|
| 1(无循环基线) | 43.0 | 14.0 | 37.0 |
| 2 | 64.4 | 31.0 | 46.0 |
| 3 | 27.6 | ↓ | ↓ |
| 4 | 更差 | ↓ | ↓ |
一次循环让 SWE-bench Verified 涨了 21.4 分(7B 模型在这个指标上直接超过了一票 30B~72B 的开源模型),第二次额外循环直接掉到 27.6,比不循环还惨。
更有价值的是机制解释。作者提出了一套「增益-成本剪刀差」的分析:每一次循环有边际精炼收益(对隐状态做有意义的修正),也有一个近似恒定的固定开销(并行循环的 CLP 位置偏移在每个循环边界引入错位)。诊断数据显示循环 2 的更新方向与前一循环负相关(在做真正的修正),表示有效秩达到峰值;循环 3 之后更新变得振荡、注意力路由趋同、有效秩持续下降——而固定开销不变,于是成本很快盖过收益。作者量化下来,后面每轮循环的成本超过收益 30~45 倍。

四、这对写 agent 的你意味着什么
下面是我自己的判断,不一定对,但都是拿上面的结果直接对着 agent 开发的痛点推的。
1. 你的 reflection 循环也有一个「两次定律」
Agent 圈最常见的循环不在模型权重里,而在编排层:reflect → critique → retry → 再来一轮。很多框架默认三轮 reflection。把 LoopCoder-v2 的剪刀差原样搬过来审视这件事,会发现惊人的对应:agent 的每一轮循环同样有一个近似恒定的摩擦成本——上下文重新序列化、工具调用往返、格式解析出错率、以及每轮把「上一轮失败」也写进上下文的噪声;而边际收益衰减得更快,因为第二轮之后模型大概率已经知道答案大概是什么了,再循环就开始在自我怀疑里空转。
所以我的第一条实操建议是:默认轮次设为 2,把「第 3 轮及以后」做成显式决策而不是默认值,并且像 LoopCoder-v2 那样给每轮循环挂上诊断信号(输出分布变化量、与上轮的重合度),一旦贡献量级掉下来就止损。这比「多循环总是更认真」靠谱得多。
2. 潜在空间的思考和显式 CoT 不是二选一,是叠加项
LoopCoder-v2 有个被我低估的消融:单独加显式 CoT 对无循环模型几乎无增益,单独用隐式循环只有个位数提升,但两者结合在 LiveCodeBench 上带来 +26.9 的超加性跃升。解释是两个机制在不同粒度上工作——CoT 把问题分解成文本步骤,循环精炼每一步底下的表征。
这对 agent 设计的直接推论:别指望靠更长的思维链无限换质量,也别指望「潜在推理」能取代审计轨迹。正确姿势是两层都留:外层 CoT / 编排日志留给人看和事后归因,内层的循环(无论是模型侧的 recurrent depth 还是编排层的低成本重试)负责真正提质。顺带一提,潜在推理还有一个工程红利——它不往上下文里写任何东西,不会污染后续轮次的注意力,这对长会话 agent 是实打实的好处。
3. 循环窗口就是你 agent 的「深思区」
循环深度真正可操作的含义,是给了你一个按任务分配计算量的旋钮。把 agent 的子任务拆开看,形状其实完全不同:

- 路由 / 打分 / 分类 / 格式校验——知识或判断密集、输出短。这正是 training-free loop 收益最大的任务形状(MMLU-Pro、GPQA、OpenBookQA 全是这一类),也正好是 agent 里调用最频繁的环节。
- 自由生成 / 工具参数拼装——论文里这块收益小甚至为负,不值得多花算力。
再叠加第一节那个「固定计算 vs 自适应计算」的区别,就能得到一个很具体的架构方案:固定循环做保底质量,自适应跳出做成本控制。实现上可以用 logit-lens 思路——每循环一轮,读一次中间层的输出分布,置信度够了就提前跳出。这就是 agent 世界里的 early-exit,而且是逐 token 粒度、不用改模型权重的。
4. KV cache 是长循环 agent 的隐形税
顺序循环的延迟和 KV cache 随循环次数线性增长——这也是为什么 LoopCoder-v2 要专门设计并行循环(CLP 偏移 + 共享 KV 门控滑窗)把延迟和内存压到近似常数。这个约束在 agent 场景里以另一种形式天天出现:多轮工具调用之间的重复 prefill。agent 每一轮都把整个上下文重新前向一遍,本质上就是你自己在付「线性循环税」。PLT 的解法(第一轮算好的 KV 共享给后续所有轮,后续轮只做局部小步修正)直接指向 agent 侧的对应物:prompt cache / 上下文前缀复用不是锦上添花,是结构性必要。
五、今天就能做的五件事
- 给开源模型部署的 agent 试一下 training-free loop wrapper。只对知识/判断密集的子任务开(路由、打分、分类),生成任务不开。期望值管理:+0.7~2.6pp,不是免费午餐,但要是没这 2 个点你的路由准确率就是过不了线,那它就值。
- 循环次数默认 2。无论是模型侧的循环,还是编排层的 reflection 轮数。把 n=3+ 做成需要证据才打开的选项。
- 画你自己的剪刀差。每多一轮循环测一次下游指标,把「边际收益 vs 固定摩擦」画出来。LoopCoder-v2 用的诊断信号(输出分布 KL、表示有效秩)在编排层都有廉价代理:两次输出的 diff 率、工具调用成功率的边际变化。
- 用最廉价的「伪循环」垫底:同一个上下文里让模型先答一遍、再批判一遍、再答一遍,这是不碰模型权重就能做的循环。代价是污染上下文,所以只适合短会话或一次性子任务。
- 把 prefill 复用当成基础设施做。只要你的 agent 有多轮结构,KV 复用就同时是成本问题和延迟问题。
六、几个需要泼冷水的点
- Astra 用没用 recurrent depth,目前是「很可能」,不是实锤。 The Information 的报道本身带了很多不确定。把它当作方向信号就好,别当作架构结论。
- 「3.5B 打出 50B」是等效计算,不是等效延迟。 循环 32 次意味着这条 token 的延迟也放大了 32 倍,除非大批量并行摊薄。对延迟敏感的交互式 agent,这笔账要单独算——这也是为什么我认为循环深度的真实落地场景大概率是端侧和小模型:参数少、内存紧、batch 可以开大,正好是「拿延迟换参数」划算的形状。
- Loopie 的「计算匹配」是墙钟时间口径,不是理论 FLOPs。 这是更工程、更诚实的口径,但也意味着结论绑定具体硬件和实现,别直接外推成理论证明。
- 训练侧结论不能直接搬到推理侧。 Loopie 说循环两次最优,training-free 说窗口 4 层最好——它们是不同设定下的不同甜点,共享的只有「边际收益快速衰减」这个定性规律。
一句话收尾: 循环深度给整个行业加了一个新的自由度——深度不再只是训练时堆出来的,也可以是推理时调出来的。对写 agent 的人来说,眼下真正值钱的不是等 Astra 同款模型,而是把这个思路降维到编排层:循环是稀缺资源,第二圈最值钱,第三圈开始你要拿证据来说话。 把这个纪律装进你的 agent,比记住任何一个 arXiv 编号都有用。
信息来源
- Universal Transformers — arXiv:1807.03819
- Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach — arXiv:2502.05171
- Training-Free Looped Transformers — arXiv:2605.23872
- LoopCoder-v2: Only Loop Once for Efficient Test-Time Computation Scaling — arXiv:2606.18023
- Loop the Loopies! — arXiv:2607.16051
- The Information:《Secret Technique Behind OpenAI’s Astra Model Sparks Security Concerns》(2026-09-02)
- @nrehiew_ 的 looped transformer 论文串联长推
微信公众号
欢迎关注「字与码」
如果这篇文章对你有用,也欢迎在微信里继续关注后续更新。
X / Twitter
关注 @ax2_zicode
更即时的技术观察、新文章提醒和一些短想法会发在 X 上。