Agent Runtime 与 Code Interpreter:你的 AI 应用需要哪一个?

Agent Runtime 与 Code Interpreter:你的 AI 应用需要哪一个?

代码解释器处理的是孤立、短期的执行任务——运行脚本、返回结果、丢弃一切。Agent 运行时处理的则是需要持久状态、工具访问、浏览器控制、文件 I/O 或长时间运行会话的多步骤工作流。正确的选择取决于你的工作负载,而不是产品用来描述自身的标签。

代码解释器实际做了什么

代码解释器为语言模型提供了一种运行代码并查看输出的方式。模型编写 Python 脚本,解释器在隔离环境中执行,结果以文本、文件或渲染图表的形式返回。当会话结束——甚至在有些实现中,两次交互之间——环境会被重置,没有任何信息会保留。

这种设计是有意为之的。代码解释器优先考虑安全性和简单性,而非连续性。隔离边界非常严格,因为唯一需要做的事情就是:运行这段代码,返回这个结果。

实际的功能足迹很小:一个沙箱化的 Python(或类似语言)运行时、一个限定在会话范围内的文件系统、足够的网络访问权限(以便在需要时获取库或外部数据),以及一个返回产物的机制。会话可能持续 30 秒或 10 分钟,但应用将其视为根本上的一次性的。

这清晰地映射到几种高价值的工作负载:

  • 单脚本执行:用户要求模型计算某些内容,结果以数字、表格或文件形式返回。
  • 数据分析:上传 CSV,生成摘要,制作图表。工作在一次交互内开始并完成。
  • 快速计算:数学运算、数据转换、格式转换等适合在单个代码块中完成的任务。
  • 教育环境:每个练习都是孤立的,不需要会话连续性。

代码解释器无法很好处理的是任何需要环境记住某些内容、在沙箱外执行操作或在用户停止关注后继续工作的事情。

Agent 运行时增加了什么

Agent 运行时是一种执行环境,专为跨越多个步骤、涉及外部工具、可能需要几分钟或几小时而非几秒钟的工作而设计。会话不会在步骤之间被丢弃——它是一个工作空间,Agent 在其中朝着目标推进。

与简单的解释器相比,实际增加的内容非常显著:

持久化工作空间:在某个步骤中写入的文件,在下一步仍然存在。一个编码 Agent 可以创建分支、编辑文件、运行测试、修复失败并提交——所有这些都在一个会话内完成,无需重新开始。

已安装的包和系统工具:Agent 运行时通常支持安装依赖项、执行 Shell 命令、调用 CLI、启动后台进程,以及在一个真实的开发环境(而非锁定的 Python 沙箱)中工作。

浏览器和 Web 访问:需要阅读文档、与 Web 应用交互、填写表单或自动化 Web 工作流的 Agent 需要在执行环境中拥有浏览器。代码解释器没有持久浏览器会话的概念。

文件存储和产物持久化:需要比单次执行存活更久的输出——生成的代码、中间数据、下载的文件、截图——需要一个在步骤之间以及在某些情况下跨会话持久化的文件系统。

长时间运行的会话:一些 Agent 任务需要 20 分钟,有些甚至更长。Agent 运行时被设计为在工作流持续期间保持存活,而不是为每次函数调用启动和销毁。

多工具编排:真实的 Agent 工作流涉及按顺序调用多个工具——Web 搜索、文件编辑、测试运行、Git 推送。Agent 运行时被构建为可靠地协调这个链条。

权衡是真实存在的:Agent 运行时操作更复杂,每次会话的成本高于轻量级解释器,并且暴露了更大的攻击面,需要仔细的策略配置。对于适合解释器模型的工作负载,添加所有这些复杂性是一种浪费。

关键决策维度

下表映射了实际的决策标准。大多数应用清晰地落在某一侧;混合模式将在下一节中介绍,针对跨越两者的场景。

维度 代码解释器 Agent 运行时
会话生命周期 秒到分钟,一次性 分钟到小时,持久化
步骤间的状态 丢弃或有限 保留
工具访问 仅代码执行 CLI、浏览器、文件 I/O、API、子进程
包安装 固定镜像或受限 动态,带策略控制
浏览器/Web 交互 不可用 支持
文件存储 仅限会话范围 跨步骤持久化
每次会话成本 较高
基础设施复杂度 较高
人工介入检查点 不典型 常见——在部署、合并或外部操作前批准
并发模型 大量并行的短会话 较少但更长的会话

会话生命周期和状态需求是最快的过滤器。如果你的工作负载在每次交互之间重置,使用解释器。如果你的工作负载在多次交互中朝着一个目标推进,使用运行时。

工具广度是第二个过滤器。浏览器控制、Git 操作、CLI 工具和外部 API 调用需要运行时。如果你唯一的工具是代码执行,解释器就足够了。

人工介入检查点几乎总是表明需要运行时。暂停会话等待批准然后继续,这需要持久化状态和可以恢复的会话。解释器并非为此设计。

代码解释器最适合的场景

当执行是有边界且自包含时,代码解释器是正确的选择。最强的用例:

数据分析助手:用户上传文件、提问、得到图表和摘要。当模型返回输出时工作就完成了。不存在依赖先前记忆的下一步。

数学与计算工具:计算器、单位转换器、统计分析、数值模拟。这些是单次通过的:输入进入,输出产生。

自动化报告:从数据源生成报告并通过电子邮件发送或保存的定时任务。任务运行,产生产物,然后退出。

图表和可视化生成:模型编写 matplotlib 或类似代码,解释器运行它,用户得到一张图片。不需要持久化环境。

沙箱化的 LLM 工具使用:当模型需要一个 code_interpreter 工具来推理数据、验证计算或格式化输出——并且仅此而已时——代码解释器正是 API 设计的目的。

在这些场景中,解释器的吸引力是实际的:每次会话更便宜,更容易操作,更易于保护。没有需要管理的持久化状态,没有需要跟踪的会话生命周期,而且攻击面很窄,因为代码只运行一次,环境随后消失。

Agent 运行时最适合的场景

当任务需要随时间协调多个工具、跨步骤维护状态、或在代码执行沙箱外执行操作才能完成时,Agent 运行时是正确的选择。

编码 Agent:一个读取代码库、编写更改、运行测试套件、修复失败并创建拉取请求的 Agent 需要一个带有 Git、终端和文件系统的持久化工作空间。这在架构上与一次性的解释器不兼容。

浏览器和 Web 自动化 Agent:抓取动态内容、填写表单、导航多步骤 Web 流程、从视觉界面提取结构化数据——所有这些都需要一个真实且持久到足以完成工作流的浏览器会话。

研究与数据收集流水线:从多个来源检索文档、交叉引用信息、将中间结果写入磁盘并生成最终综合输出的 Agent 需要一个在所有步骤中持久化的工作空间。

评估和 RL 工作负载:并行运行许多 Agent 剧集(每个维护自己的状态)、跟踪分数和写入检查点,需要一个为大规模并发和会话隔离而设计的运行时。

长时间运行的基础设施 Agent:在几分钟或几小时的时间窗口内配置资源、运行部署、监控输出并对变化做出反应的 Agent 需要一个可以暂停、恢复和设置检查点的会话模型。

Agent 化编码工具,如 Codex 风格的 Agent 或与 IDE 连接并在真实项目上执行操作的 Agent,需要开发环境的完整表面——而不是沙箱化的解释器。

当替代方案是手动拼接状态管理、工具协调和会话持久化时,运行时的成本是合理的。运行时提供了这些基础设施;你配置策略。

混合模式:在同一个应用中使用两者

许多真实应用同时嵌入两种模式。一个编码助手可能使用 Agent 运行时会话来管理整个会话——维护仓库上下文、跟踪哪些文件已被更改、管理分支——同时调用代码解释器专门用于运行测试或执行沙箱化的用户提供的脚本,作为更大 Agent 工作流中的一个子操作。

一个数据分析产品可能使用 Agent 运行时来编排整个工作流——下载数据、清洗数据、连接多个数据源——同时使用孤立的解释器调用来处理单个计算步骤,在这些步骤中严格的沙箱化很重要,且状态不需要持久化。

这种模式在实践中如下所示:

  1. 外层是 Agent 运行时:它持有会话、协调工具并管理状态。
  2. 需要严格隔离的内部操作使用短期的代码解释器调用作为众多工具之一。
  3. Agent 运行时决定何时调用解释器、传递什么输入以及如何处理输出。

这并不是一个复杂的架构模式;它只是让每一层都为其设计目的而服务。Agent 运行时管理工作流;解释器在需要时处理沙箱化执行。

针对每种模型评估沙箱基础设施

无论你是在评估托管的沙箱提供商还是设计自己的沙箱,你需要回答的问题根据你正在构建的模型类型而有显著不同。

对于代码解释器工作负载,评估标准相对狭窄:

  • 启动延迟是多少?对于交互式使用,亚秒级启动很重要。
  • 默认镜像中提供哪些语言和包?
  • 用户能否安装额外的包,你的安全模型是否允许?
  • 资源限制是多少(CPU、内存、执行时间)?
  • 会话产物如何返回——同步响应、文件下载还是预签名 URL?
  • 是否有持久化文件系统选项,还是所有内容在退出时被丢弃?

对于 Agent 运行时工作负载,评估标准显著扩展:

  • 环境是否支持跨会话步骤持久化的文件系统?
  • 会话能否被暂停和恢复——用于人工介入工作流或成本管理?
  • 是否支持浏览器,以及如何配置?
  • 哪些 Shell 工具和 CLI 可用?
  • 网络访问如何控制——出口策略、DNS 过滤、出站允许列表?
  • 会话并发模型是什么,它如何扩展?
  • Secret 如何注入和作用域化?
  • 存在哪些可观测性——命令日志、文件更改跟踪、资源指标?
  • 平台如何处理超出典型请求-响应周期的长时间运行会话?

Novita Agent Sandbox 专为 Agent 运行时工作负载设计——编码 Agent、浏览器自动化、数据分析流水线以及需要持久状态、工具访问和会话控制的评估/RL 工作负载。它使用微虚拟机隔离,支持暂停/恢复,并与 Novita 的模型 API 平台集成,因此使用 Novita 进行 LLM 推理的团队可以在同一平台上运行沙箱工作负载。对于评估用于 Agent 工作流的沙箱基础设施的团队,Novita Agent Sandbox 文档 涵盖了隔离模型、生命周期 API 和资源配置。

对于真正纯解释器的工作负载——单脚本、一次性、无状态——一个完整的 Agent 运行时是你不需要的开销。使用更简单的工具。

实际检验:如果你的工作负载在执行环境在每次模型交互之间被销毁并重建的情况下仍然能够正确完成,那么解释器很可能就足够了。如果不行——因为状态、工具访问或会话连续性很重要——你需要一个运行时。

常见问题

代码解释器和 Agent 运行时之间的主要区别是什么?

代码解释器在沙箱化环境中执行代码,并在会话结束时丢弃该环境。Agent 运行时在工作流的多个步骤中维护一个持久化工作空间——包含文件、已安装的工具、浏览器访问和会话状态。解释器回答“运行这段代码并返回结果”;运行时回答“在尽可能多的步骤中朝着这个目标推进”。

代码解释器能否使用 Web 搜索或文件访问等工具?

一些代码解释器实现支持有限的工具使用——文件上传、沙箱内的网络调用或返回产物。它们不支持的是跨交互携带状态的持久化工作空间,或比单次函数调用存活更久的浏览器会话。如果你的应用需要读取网页、写入文件然后在后续步骤中引用该文件,你需要一个运行时。

Agent 运行时总是比代码解释器更昂贵吗?

按每次会话计算,是的。Agent 运行时涉及更多基础设施——持久化文件系统、生命周期更长的进程、浏览器或 CLI 访问——这些组件的成本高于短期的解释器沙箱。对于真正需要多步骤协调的工作负载,运行时成本是合理的。对于单次通过的任务,这是开销。

什么时候应该在同一个应用中使用两者?

当外层工作流需要持久状态,但单个子操作受益于严格隔离时。一个在沙箱化解释器中运行测试套件的编码 Agent,或者一个将计算步骤委托给一次性解释器而编排层持有整体状态的数据流水线,都是常见的混合模式。

Novita Agent Sandbox 是否支持两种模式?

Novita Agent Sandbox 专为 Agent 运行时工作负载设计——持久化工作空间、暂停/恢复、浏览器访问和多步骤会话控制。对于孤立的、一次性解释器调用,根据你的用例,更轻量级的执行可能更合适。请参阅 Novita Agent Sandbox 文档 了解当前功能详情。

如何判断我的工作负载是否需要运行时?

实际检验:如果你的工作负载在执行环境在每次模型交互之间被销毁并重建的情况下仍然能够正确完成,那么解释器就足够了。如果答案是否定的——因为状态、工具访问、浏览器控制或会话连续性很重要——你需要一个运行时。

推荐文章