Command Palette
Search for a command to run...
代码即智能体骨架:迈向可执行、可验证且有状态的智能体系统
代码即智能体骨架:迈向可执行、可验证且有状态的智能体系统
摘要
近期大语言模型(LLM)在理解和生成代码方面展现出强大能力,涵盖从竞赛编程到仓库级软件工程等任务。在新兴的智能体系统中,代码不再仅是目标输出,它日益成为智能体推理、行动、环境建模和基于执行的验证的操作基底。我们通过智能体骨架的视角来审视这一转变,并提出“代码即智能体骨架”这一统一观点,将代码置于智能体基础设施的核心。为系统研究这一视角,我们围绕三个相互关联的层次组织本综述。首先,我们研究骨架接口,即代码将智能体与推理、行动和环境建模相连接的层面。其次,我们考察骨架机制:用于长周期执行的规划、记忆和工具使用,以及使骨架可靠且自适应的反馈驱动控制与优化。第三,我们讨论将骨架从单智能体系统扩展到多智能体环境,其中共享的代码制品支持多智能体协调、审查和验证。贯穿这些层次,我们总结了代码作为智能体骨架的代表性方法和实际应用,涵盖编码助手、GUI/OS 自动化、具身智能体、科学发现、个性化与推荐、DevOps 以及企业工作流。我们进一步概述了骨架工程面临的开放挑战,包括超越最终任务成功的评估、不完整反馈下的验证、无退化的骨架改进、多智能体间一致的共享状态、面向安全关键行动的人类监督,以及向多模态环境的扩展。通过将代码置于智能体 AI 骨架的核心,本综述为构建可执行、可验证且有状态的 AI 智能体系统提供了一份统一的路线图。
一句话总结
来自伊利诺伊大学厄巴纳-香槟分校、Meta 和斯坦福大学的研究人员提出了一项关于“代码作为 agent harness”的统一综述,将 agent 基础设施划分为接口、机制和扩展层,为编码助手、GUI/OS 自动化、具身 agent 和企业工作流构建可执行、可验证且具有状态的 AI 系统。
核心贡献
- 该综述引入了“代码作为 agent harness”的概念,将代码定位为 agent 推理、行动、环境建模和基于执行的验证的操作基底。
- 综述围绕三个层次组织:harness 接口(将 agent 连接到推理、行动和环境建模)、harness 机制(规划、记忆、工具使用和反馈驱动的控制)以及扩展(通过共享代码工件实现多 agent 协调)。
- 综述识别了开放挑战,如多模态验证、无回归的 harness 改进以及安全的长时程自主性,并勾勒出一条通往可执行、可检查、有状态且受治理的 agent 系统的路线图。
引言
作者综述了大型语言模型(LLM)agent 设计中的一项转变:代码不再仅仅是生成的产物,而是一种可执行、可检查且具有状态的媒介,agent 通过它进行推理、行动和协调。尽管以往的综述将代码视为 LLM 的最终产物,本文强调,长期运行的 agent 系统的可靠性依赖于将模型输出与工具、记忆、执行和反馈连接起来的软件 harness,而 agent 发起的代码工件仍未得到充分探索。作者提出了“代码作为 agent harness”的概念框架,并构建了一个三层分类法,涵盖 harness 接口(用于推理、行动和环境建模的代码)、harness 机制(规划、记忆、工具使用和反馈驱动的控制),以及将 harness 扩展到多 agent 协调,同时分析了评估、验证、安全性和 harness 演化方面的开放挑战。
方法
作者将基于 LLM 的 agent 设计围绕一个原则展开:代码充当核心的 harness 接口,将无状态的语言模型转变为一个功能性 agent,能够通过可执行、可检查且具有状态的工件进行推理、行动并建模其环境。harness 并非仅仅依赖自然语言,而是将模型的输出建立在外部执行、持久状态和可验证的反馈之上。代码(广义上包括程序、脚本、形式规约、证明脚本、API 模式、测试、仓库、模拟器和执行轨迹)提供了这样一种媒介:模型意图通过它转化为具有形式上可验证结果的操作,中间计算以结构化轨迹的形式暴露,任务进度则以持久、可修改的形式在步骤间保持。
整体架构围绕代码在 agent 循环中承担的三种角色组织:推理、行动和环境建模。用于推理的代码将内部逻辑外化为可验证的计算。模型生成可执行程序,由外部运行时、解释器或符号求解器执行并评估,从而将高层分解与底层计算分离。该范式包括程序委托推理(模型生成代码,解释器执行以产生形式上可靠的结果);形式验证与符号推理(证明助手或符号求解器检查每个推导步骤);以及迭代式代码基础推理(通过反复的生成—执行—验证—细化循环闭合生成、执行和反馈之间的回路,通常利用基于执行奖励的强化学习)。
用于行动的代码将高层意图转化为可执行操作,与具身、GUI、软件或工具使用环境交互。在此,harness 必须将抽象的语言输出映射为受约束的、符合目标环境限制的具身行为,包括具身限制、接口 API 和安全要求。该接口通过具身技能选择实现,agent 在可行性约束下从可执行能力库中选择;通过程序化策略生成实现,harness 直接将控制策略具体化为代码,规定感知条件分支、反馈循环和 API 交互;通过终身代码-base agent 实现,可执行技能和交互轨迹作为持久记忆积累,使 agent 在长期部署中演化其能力。
用于环境建模的代码引入可执行程序作为环境接口本身,通过模拟器、仓库、测试、执行轨迹和状态转换程序等计算工件,将世界状态、转换动态和反馈信号具体化。这使得 agent 能够显式地存储、检查、执行和修改环境状态。该方法涵盖结构化世界表示(环境被编码为 agent 可操作的程序化结构);执行轨迹世界建模(运行时转换本身成为环境行为的主要表示);以及可验证的环境构建(harness 合成具有转换动态和验证 oracle 的可运行环境,将环境变为可复现的程序世界)。
在此接口之上,harness 机制层提供了使代码 harness agent 在单步生成之外保持可靠的控制基础设施。规划通过将目标外化分解、结构约束、搜索轨迹或工作流级编排来组织长时程任务执行。其形式可以是线性分解、基于结构的规划(在依赖图或仓库图上进行)、基于搜索的规划(利用蒙特卡洛树搜索或其他推理时计算分配探索多个候选轨迹),以及基于编排的规划(harness 通过显式合约和运行时解释协调专门角色、阶段和反馈循环)。
记忆和上下文工程管理跨长交互的可变状态。harness 维护工作记忆(当前轨迹)、语义记忆(检索仓库证据)、经验记忆(捕捉跨任务可复用的调试或修复模式)、长期记忆(以紧凑形式保存已验证的知识),以及多 agent 记忆(跨角色同步共享状态)。上下文压缩和状态卸载进一步将决策相关的活跃上下文与持久化的完整保真工件分离,使记忆可扩展且可审计。
工具使用扩展了 agent 的行动空间,同时向外部系统暴露受治理的接口。工具按其主要的 harness 功能分类:面向功能的工具将 agent 锚定在 API 和文档中;环境交互工具允许 agent 在仓库、终端和沙箱内行动;验证驱动的工具通过测试、linter 和静态分析器提供确定性反馈;工作流编排工具协调多个工具、角色和生命周期策略,形成可靠的执行过程。生命周期钩子在工具执行前后强制执行权限检查、输出净化及记忆更新。
计划—执行—验证(PEV)循环将反馈驱动的调试重新定义为更广泛的控制过程。harness 首先将预期的变更及其验证标准外化为合约,然后在沙箱化且带权限的环境中执行该变更,最后通过确定性传感器(如编译器、测试、静态分析器和人工审核关卡)验证结果状态。该循环将规划、执行、调试、验证和升级统一为单一 harness 级控制过程,其中验证证据决定是继续、修订、升级还是回滚。
Agentic harness 工程将运行环境本身视为优化对象。深度遥测记录模型决策、harness 动作、环境状态和结果的结构化轨迹。演化 agent 利用这些遥测诊断故障模式,对 harness 组件(提示、工具模式、记忆策略、权限规则等)提出修订,在留出任务上评估它们,并仅推广那些在不引入回归的情况下提高可靠性的更改。受治理的 harness 变更确保对安全关键边界的修改需要人工批准,从而将演化 agent 本身也置于 PEV 循环之下。
为了扩展到仓库级和多步任务,该框架扩展为基于代码的多 agent 编排。职责被分配到专门的角色——程序合成、理解、验证、执行和规划——它们通过共享的代码工件和执行反馈进行交互。交互模式包括协作合成、批评与修复、对抗验证和推理论辩。工作流拓扑从预定义的链式和循环模式到动态生成或按任务优化的自适应拓扑不等。执行反馈(从编译器错误到细粒度模拟轨迹)提供客观信号,为协调提供基础。共享 harness 同步机制,如顺序交接、黑板、带合并的并行分支以及结构化上下文调度,在 agent 之间保持程序状态的一致视图。作者主张将共享的代码中心 harness 基底——一种 agent 可以查询和更新的、对程序环境的正式持久表示——作为稳健、可扩展多 agent 智能的基础。
实验
综述所涵盖的工作确立了从静态文本基准到代码基础评估环境的转变,在这些环境中,agent 与可执行系统交互,接收运行时反馈,并通过可验证的状态转换而非输出匹配进行评估。这些设置验证了代码可作为感知、行动和评估的统一基底,实现跨软件工程、GUI 控制和具身任务的可扩展、可复现测试。然而,最终任务成功指标混杂了模型和 harness 的能力,这促使需要 harness 级评估,衡量执行可靠性、反馈质量和 oracle 充足性,以确保评估者捕获的是预期的任务,而非狭窄的代理指标。
代码通过两种主要范式充当推理基底:委托系统生成代码以增强语言模型推理,以及形式系统与符号求解器或证明助手交互以获得机器可检查的输出。随着代码成为 agent 感知、行动和世界模型的统一媒介,评估必须从最终任务准确性转向衡量运行时系统可靠性、反馈质量和安全性的 harness 级指标。PoT 和 PAL 等委托方法将代码与自然语言推理融合,以解耦逻辑与计算,而 SATLM 和 ReProver 等形式化方法则使用外部求解器和证明助手提供可验证的推理后端。当前仅衡量最终任务成功的评估混淆了模型能力与 harness 质量,这促使需要新的指标,如轨迹效率、验证强度、恢复能力、状态一致性、安全合规性和可复现性。
代码正越来越多地被用作行动接口,像 AutoHarness 这样的系统合成 harness 以验证行动,其他系统则将语言模型计划建立在物理可行性、不确定性校准或终身技能复用之上。这一向端到端 agent 和可执行世界模型的转变使代码成为观测、行动和评估的共同媒介,但评估此类代码 agent harness 需要超越最终任务成功的新指标,以捕捉 harness 质量、反馈可靠性和 oracle 充足性。AutoHarness 生成代码 harness 以过滤无效的环境交互,专注于行动验证。SayCan 和 KnowNo 分别基于物理可行性和校准后的规划器不确定性来选择技能。SkillVLA 和 BOSS 将具身化扩展到组合技能复用,并通过引导式实践合成新的技能链。LRLL 通过记忆和自我探索实现终身具身化,随时间演化技能接口。最终任务成功指标混杂了基础模型能力与 harness 质量,这促使需要诸如轨迹效率和验证强度等 harness 层面的维度。Oracle 充足性是一个核心瓶颈,因为狭窄的可执行代理指标可能无法捕获完整的预期任务。
将环境表示为代码的系统分为结构化方法(将环境编码为显式的代码工件,如对象层次结构或可渲染的 HTML)和基于轨迹的方法(利用程序执行轨迹进行语义对齐或基于模型的强化学习)。创新点涵盖从视觉场景编码到直接在执行轨迹上训练大型语言模型。结构化方法包括 ViStruct(将视觉场景编码为数据结构)和 Code2World(将 GUI 状态预测为可渲染的 HTML 用于强化学习)。基于轨迹的系统如 WorldCoder 从执行轨迹合成转换和奖励模型,而 CWM 则在程序执行轨迹上原生训练大型语言模型。
代码 agent 规划模块涵盖线性分解、结构基础、基于搜索和基于编排的类别,反馈范围从无反馈到结合批评与测试信号。向内部化规划与具身化的端到端 agent 的转变正在取代这些模块化流水线,这使得评估整个运行时 harness 而非仅最终任务成功变得至关重要。规划模块从无反馈的线性分解(如 Self-Planning)到集成执行环境并组合批评与测试信号的基于搜索和基于编排的方法(如 ReThinkMCTS、MapCoder)。端到端 agent 将感知、规划、具身化和行动内部化,正在取代模块化规划模块,将评估需求转向反馈质量和轨迹效率等 harness 级指标。
代码 agent harness 使用不同的记忆机制来管理长时程软件工程任务中的状态。工作记忆跟踪修复轨迹和运行时状态以锚定编辑,语义记忆检索仓库结构和代码证据以进行上下文感知生成,经验记忆回放过去的轨迹,以复用高质量经验并过滤噪声。这些方法将记忆外化为一类可治理的系统组件,而非仅仅依赖对话历史。工作记忆方法(SWE-agent、CodeMem、RepairAgent)通过结构化状态跟踪、预算化槽位管理和动态提示状态更新来管理修复轨迹、上下文槽位和 bug 证据。语义记忆方法(AutoCodeRover、RepoCoder、CodeRAG)通过结构感知检索、迭代检索和多路径重排序,将定位和补丁建立在仓库结构中。MemGovern 引入经验记忆,通过受治理的回放方式回放轨迹、反思和批评,以复用高质量经验并过滤噪声。记忆正越来越多地被视为一种外化、可检索且可追溯的状态管理层,而非单纯的对话历史积累。
实验考察了代码作为推理基底、行动接口、环境表示、规划模块和记忆层,每一项都验证了向端到端 agent 的转变,其中代码统一了感知、行动和世界模型。它们表明,仅评估最终任务成功会混杂模型能力与 harness 质量,从而促使需要新的指标,如轨迹效率、验证强度、恢复能力和 oracle 充足性。结构化和基于轨迹的环境编码、具有不同反馈的规划模块以及外化记忆机制都说明,运行时 harness 的可靠性、反馈质量和安全性至关重要。总体而言,这些发现倡导进行 harness 级评估,以捕捉系统在最终准确性之外的鲁棒性和安全性。