告别失控循环!LLM-as-Code重塑Agent架构,15步通关百步任务

LLM-as-Code Agentic Programming for Agent Harness

当前主流的Agent框架几乎都遵循同一个默认设定:让大语言模型担任核心调度员。 无论是大名鼎鼎的ReAct模式,还是广泛使用的AutoGen或MetaGPT框架。 它们都赋予了模型决定下一步调用什么工具、提供什么参数以及何时停止任务的最高权限。 在简短的任务或演示中,这种设计显得极其优雅。 只需要一段精心的提示词,就能替代传统软件工程中长篇累牍的调度代码。 然而,当任务转入长线作战时,深刻的架构危机便开始在底层悄然浮现。

ArXiv URL:http://arxiv.org/abs/2606.15874v1

这不仅仅是上下文疯狂膨胀导致早期关键线索丢失的问题。 更是由于控制流幻觉,模型经常在验证程序尚未运行时就宣布任务成功。 面对这些长程连贯性失效,行业内的常规解法仅仅停留在修修补补的层面。 但来自香港城市大学与腾讯的研究敏锐地指出,这些补丁永远无法触及核心。 上述乱象绝非工程实现上的Bug,而是底层架构设计带来的必然恶果。

架构灾难的根源:概率与确定性的类别谬误

要理解这场危机的根源,必须正视确定性与概率性系统之间的类别错误。 一个标准的软件工作流,不可避免地包含大量确定性的迭代、分支和序列操作。 传统编程语言通过底层运行时,能够提供百分之百的可靠性执行保障。 如果代码要求一个循环执行$for$逻辑$n$次,它绝对不会只执行$n-1$次。 然而,LLM本质上是一个基于概率分布进行采样的推理黑盒。

让概率模型来充当控制执行流的总控器,无疑是一场极具风险的架构冒险。 这好比用抛硬币的方式,来决定现代铁路网络中每一个关键道岔的走向。 即使你拥有最聪明的调度员,只要他每次决策存在哪怕极微小的出错概率。 在成百上千次的长线任务中,这些微小的误差也会在暗处呈指数级累积。 最终,一次轻微的控制流幻觉就能让整列执行流程彻底脱轨崩溃。 无论底层的模型参数量有多庞大,都无法从数学原理上消除这种复合误差。

强制合规失效与上下文爆炸的双重危机

这种底层类别错误,不可避免地衍生出两个直接且致命的系统性后果。 首先是合规性的彻底失控。 由于系统将控制权全盘交给了模型,导致无法在架构层面上强制执行约束。 在调度员模式下,你只能在提示词中反复乞求模型遵守安全规则。 由于每一步操作依然是采样生成的,模型是否真的听话依然是个概率盲盒。

其次,是令人绝望的上下文信息溢出。 为了让大模型调度员随时掌握执行进度,系统必须在每一轮对话中复读历史。 这种将任务记录原封不动重新喂给模型的方式,导致了上下文的线性爆炸。 文本长度随着步数呈现出无情的$O(\text{steps}\times\text{avg_output})$增长。 这不仅极易触碰窗口硬性天花板,更会导致极其高昂的软性推理成本。 在填满窗口前,模型对超长文本的注意力就会发散,导致单步调用成本狂飙。

重塑控制流:Agentic Programming登场

为了彻底斩断概率累积的死循环,本文提出了一种颠覆性的工程范式。 该范式被命名为智能体编程Agentic Programming)。 其核心思想极为干脆:剥夺LLM的全局调度权,将控制流交还给计算机程序。 在这套新架构中,LLM不再是高高在上的总指挥,而是被降级为普通组件。 这个自适应组件被称为代码化大模型LLM-as-Code)。 只有在任务切实需要语义理解、逻辑推理或文本生成时,底层的代码才会唤醒它。

回到之前的比喻,这套架构重新用坚固的钢铁铸造了铁路的确定性道岔。 火车的行进路线完全由确定性的代码规则所掌控,不再受制于随机采样。 而LLM则化身为特定站点的货物高级质检员,仅在需要拆解包裹时才被调用。 它凭借强大的分析能力处理复杂业务,却绝对无法私自改变列车的主干路线。

在代码驱动的工作流中,业务规则得到了真正的物理级强制执行。 一个底层调用的循环就是严格的代码级循环,无需通过提示词去乞求模型配合。 值得注意的是,这种设计并不意味着将工作流退化为僵死的静态执行管道。 当LLM的推理结果表明需要额外处理时,它触发的是封装好的普通代码逻辑。 这些逻辑内部可能又包裹着新的LLM调用节点,使得调用图在运行时动态展开。 系统的灵活性被巧妙隐藏在递归深度中,而可靠性则由每一层坚实的代码托底。

上下文瘦身:从流水账到有向无环图

为了配合控制流的转移,该范式对长线上下文管理进行了极为优雅的重构。 传统模式下的上下文是一部永远在变厚的流水账,充满了无用的历史赘肉。 而在Agentic Programming中,上下文被重构为有向无环图。

Refer to caption

正如原论文这幅架构图所示,上下文的追踪轨迹直接与程序的函数调用图绑定。 正在运行的子调用树,只会携带自身的祖先调用链作为必要的历史依据。 那些已执行完毕并返回结果的同级分支,会被立刻压缩成极简的单行摘要。 当执行流程跳转到新分支时,旧的繁杂细节会自动剥离,不再污染当前视域。 这意味着模型面临的输入长度仅受限于调用树深度$O(\text{depth})$。 这种设计彻底阻断了历史信息的无序堆砌,让模型的每一次唤醒都极度聚焦。

无缝协作与代码级的自我演进

这一架构优势还能以极低的成本,无缝延伸到多智能体的复杂协作场景中。 在此范式下,一个所谓的Agent,本质上就是一个普通的计算机底层函数。 启动多个并发的协作模型,就等同于在程序中常规并行调用多个函数实例。 每个子Agent被死死限制在当前且受限的短上下文中进行深度推理分析。 当并行分支结束后,主函数利用严格的代码逻辑对返回结果进行分类与去重。 这种基于返回值接口的协作,彻底杜绝了模型在汇总意见时可能产生的幻觉。 某个子节点的崩溃,仅仅是一次普通函数报错,系统可依靠重试机制轻松化解。

此外,该架构甚至原生支持更高阶的自编程演进体系。 当负责优化的元模型生成了新逻辑时,只要通过测试,就会被持久化为底层代码。 相比于传统框架仅在提示词层面的反思,这种演进彻底改变了系统的处理结构。

降维打击的实验结果与工程启示

纸上得来终觉浅,这套理论在真实的复杂界面环境中表现究竟如何? 研究团队将这种架构应用于极具挑战的OSWorld基准测试平台上进行了公开验证。 面对多步界面的点击与校验,常规Agent极易在子页面陷入不断重试的死循环。 这就是为什么基准模型往往耗尽100步额度,最高也只能艰难取得80.4的成功率。

然而,Agentic Programming的解法显得极其冷酷而高效。 底层代码直接接管了界面的状态机循环机制,LLM仅负责感知当前页面状态。 当发现目标未达成时,由代码逻辑果断触发回退,而非让模型漫无目的地摸索。 最终,系统仅使用了短短15步,就摧枯拉朽般斩获了高达86.8的惊人成功率。 这用无可辩驳的数据证明了,摆脱控制流幻觉的唯一出路就是重构控制流的所有权。

结语:让大模型回归推理本职

当然,本文也坦诚指出,没有任何一项前沿技术是包治百病的通用银弹。 对于纯依靠发散思维的开放式探索任务,保留大模型的全局调度权或许仍是优解。 但对于绝大多数具备已知逻辑框架的现代长线软件工程任务而言。 随着AI应用的深入,行业不应再盲目迷信模型全盘接管业务的万能属性。 将控制流还给代码,让大模型专注于纯粹的推理,才是更务实的落地路径。 这不仅是对当前Agent架构的深刻反思,更是指明了未来智能工程的演进方向。