论文

LLM即代码:面向智能体测试架的智能体编程

LLM-as-Code: Agentic Programming for Agent Harness

智能体系统Agent Harness

摘要

每个主要的LLM代理框架都赋予LLM协调者的角色;模型决定下一步做什么、何时调用工具以及何时停止。我们认为,词元爆炸、控制流幻觉和不可靠的完成不是实现错误,而是将循环、分支和排序的确定性工作分配给概率系统的架构后果。更好的提示或者更强的模型并不能保证LLM代理的可靠性。因此,我们提出代理编程,其中程序管理所有控制流,LLM 本身就是其中的一部分,我们将其称为 LLM-as-Code 的自适应组件,并且仅在任务需要推理或生成时调用。在每次调用中,模型保持完全的灵活性,但它不能改变程序的执行路径。通过程序的控制,LLM 的上下文是根据执行历史的调用树构建的,并形成有向无环图 (DAG)。然后,每个调用的上下文长度由其调用深度而不是步骤的累积确定。计算机使用代理的案例研究表明,该设计是实用的,而不仅仅是理论立场,大大提高了长视觉操作序列的稳定性。

LLM即代码:面向智能体测试架的智能体编程:论文配图
图 1. 简单多步骤任务上两种代理范例的比较。在左侧面板(LLM-as-Orchestrator)中,LLM 驱动循环本身。在右侧面板(LLM-as-Code)中,代码拥有循环,并且仅调用 LLM 来进行总结。该图并排比较了两个代理架构,其任务是获取八个 URL、对每个 URL 进行总结并编写一份报告。左侧面板(LLM-as-Orchestrator)显示了运行循环本身的模型:它获取并汇总 url1 和 url2,但由于没有循环变量来跟踪进度,因此它重新获取 url1,从不获取 url5,并提前声明完成,从而使报告不完整。右侧面板(LLM-as-Code)显示了一个 \texttt{for url in urls} 循环,该循环仅获取每个 URL 一次,并仅调用 LLM 来总结每个页面并编写最终报告,因此所有八个 URL 均已处理。