概念
现代智能体只有能够操作文件系统中的真实文件,才能发挥最佳效果。沙盒智能体可以利用专用工具和 shell 命令搜索并处理大型文档集、编辑文件、生成产物以及运行命令。沙盒为模型提供了一个持久工作区,智能体可以在其中代您完成工作。Agents SDK 中的沙盒智能体可帮助您将智能体与沙盒环境配对运行,轻松地将正确文件放入文件系统,并大规模编排沙盒以启动、停止和恢复任务。
您可以围绕智能体所需的数据定义工作区。全新工作区可以从 GitHub 仓库、本地文件和目录、合成任务文件、S3 或 Azure Blob Storage 等远程文件系统,以及您提供的其他沙盒输入中填充内容。

SandboxAgent 扩展自 Agent,因此它仍然是一个 Agent。它保留常规智能体接口,例如 instructions、tools、handoffs、mcpServers、modelSettings、输出类型、护栏和钩子,并且仍通过常规的 run() 和 Runner API 运行。变化的是执行边界:
SandboxAgent定义智能体本身:常规智能体配置,以及defaultManifest、baseInstructions、runAs等沙盒专用默认值,还有文件系统工具、shell 访问、技能、记忆或压缩等能力。Manifest声明全新沙盒工作区所需的初始内容和布局,包括文件、仓库、挂载和环境。- 沙盒会话是运行命令和更改文件的实时执行环境。
sandbox运行选项决定本次运行如何获取沙盒会话,例如直接注入会话、根据序列化的沙盒会话状态重新连接,或通过沙盒客户端创建全新的沙盒会话。- 已保存的沙盒状态和快照可让后续运行重新连接到之前的工作,或使用已保存的内容为全新沙盒会话提供初始数据。
Manifest 定义新沙盒工作区的初始内容。它并不描述每个实时沙盒中的当前文件,因为复用的会话、序列化的会话状态和快照都可以在运行时提供或更改工作区。
本页中的”沙盒会话”是指由沙盒客户端管理的实时执行环境。确切边界取决于客户端:Unix 本地会话在主机上的本地工作区中运行,而 Docker 和托管客户端则提供更强的环境隔离。这与会话中介绍的 SDK 对话式 Session 接口不同。
外层运行时仍负责审批、追踪、交接和恢复记录。沙盒会话负责命令、文件更改和环境隔离。这种职责划分是该模型的核心部分。
一次沙盒运行会将智能体定义与每次运行的沙盒配置结合起来。运行器会准备智能体,将其绑定到实时沙盒会话,并可保存状态以供后续运行使用。
沙盒专用默认值保留在 SandboxAgent 上。每次运行的沙盒会话选择则保留在 sandbox 运行选项中。
可以将生命周期分为三个阶段:
- 使用
SandboxAgent、Manifest和能力定义智能体及工作区初始内容。 - 通过向
run()或Runner提供用于注入、恢复或创建沙盒会话的sandbox运行选项来执行运行。 - 稍后通过运行器管理的
RunState、显式沙盒sessionState或已保存的工作区快照继续运行。
如果 shell 访问只是一项偶尔使用的工具,请先使用工具中的托管 shell。当工作区隔离、沙盒客户端选择或沙盒会话恢复行为属于设计的一部分时,再使用沙盒智能体。
沙盒智能体非常适合以工作区为中心的工作流,例如:
- 编码和调试:针对 GitHub 仓库中的问题报告编排自动修复并运行针对性测试。
- 文档处理和编辑:从用户的财务文档中提取信息,并创建填写完毕的税务表单草稿。
- 基于文件的审查或分析:在回答前检查入职资料包、生成的报告或产物集合。
- 隔离的多智能体模式:为每个审查智能体或编码子智能体提供独立工作区。
- 多步骤工作区任务:在一次运行中修复错误,之后再添加回归测试,或从快照或沙盒会话状态恢复。
如果不需要访问文件或持续存在的文件系统,请继续使用 Agent。如果 shell 访问只是一项偶尔使用的能力,请添加托管 shell;如果工作区边界本身就是功能的一部分,请使用沙盒智能体。
沙盒客户端选择
Section titled “沙盒客户端选择”在 macOS 或 Linux 上进行本地开发时,请先使用 UnixLocalSandboxClient。在 Windows 上,请改用 DockerSandboxClient 或托管提供商。在任何受支持的平台上,需要容器隔离或镜像一致性时可改用 DockerSandboxClient;需要由提供商管理执行时,则可改用托管提供商。
大多数情况下,SandboxAgent 定义保持不变,只需在 sandbox 运行选项中更改沙盒客户端及其选项。有关本地、Docker、托管和远程挂载选项,请参阅沙盒客户端。
| 层级 | 主要 SDK 组件 | 所回答的问题 |
|---|---|---|
| 智能体定义 | SandboxAgent、Manifest、能力 | 要运行什么智能体,以及它应以什么样的全新会话工作区约定作为起点? |
| 沙盒执行 | sandbox 运行选项、沙盒客户端和实时沙盒会话 | 本次运行如何获取实时沙盒会话,以及工作在哪里执行? |
| 已保存的沙盒状态 | RunState 沙盒载荷、sessionState 和快照 | 此工作流如何重新连接到之前的沙盒工作,或使用已保存的内容为全新沙盒会话提供初始数据? |
主要 SDK 组件与这些层级的对应关系如下:
| 组件 | 负责的内容 | 需要回答的问题 |
|---|---|---|
SandboxAgent | 智能体定义 | 此智能体应该做什么,以及哪些默认值应随其携带? |
Manifest | 全新会话的工作区文件和文件夹 | 运行开始时,文件系统中应存在哪些文件和文件夹? |
Capability | 沙盒原生行为 | 应将哪些工具、指令片段或运行时行为附加到此智能体? |
sandbox 运行选项 | 每次运行的沙盒客户端和沙盒会话来源 | 本次运行应该注入、恢复还是创建沙盒会话? |
RunState | 运行器管理的已保存沙盒状态 | 我是否正在恢复之前由运行器管理的工作流,并自动延续其沙盒状态? |
sandbox.sessionState | 显式序列化的沙盒会话状态 | 我是否想从已经在 RunState 外部序列化的沙盒状态恢复? |
sandbox.snapshot | 用于全新沙盒会话的已保存工作区内容 | 新沙盒会话是否应从已保存的文件和产物开始? |
实际的设计顺序如下:
- 使用
Manifest或清单初始化对象定义全新会话的工作区约定。 - 使用
SandboxAgent定义智能体。 - 添加内置或自定义能力。
- 决定每次运行应如何在
run(agent, input, { sandbox: ... })或new Runner({ sandbox: ... })中获取沙盒会话。
沙盒运行的准备流程
Section titled “沙盒运行的准备流程”运行时,运行器会将该定义转换为由沙盒支持的具体运行:
- 从
sandbox运行选项解析沙盒会话。 - 确定本次运行实际使用的工作区输入。
- 让能力处理生成的清单。
- 按固定顺序构建最终指令:SDK 的默认沙盒提示;如果您显式覆盖,则使用
baseInstructions;然后是instructions、能力指令片段、任何远程挂载策略文本,最后是渲染后的文件系统树。 - 将能力工具绑定到实时沙盒会话,并通过常规的
run()和RunnerAPI 运行准备好的智能体。
沙盒机制不会改变轮次的含义。一个轮次仍是一个模型步骤,而不是一条 shell 命令或一次沙盒操作。沙盒侧操作与轮次之间不存在固定的 1:1 映射。实际使用中,只有当沙盒工作完成后智能体运行时需要模型再次响应时,才会消耗另一个轮次。
SandboxAgent 选项
Section titled “SandboxAgent 选项”以下是在常规 Agent 字段之外提供的沙盒专用选项:
| 选项 | 最佳用途 |
|---|---|
defaultManifest | 运行器创建的全新沙盒会话所使用的默认工作区。 |
instructions | 追加在 SDK 沙盒提示之后的角色、工作流和成功标准。 |
baseInstructions | 用于替换 SDK 沙盒提示的高级逃生舱。 |
capabilities | 应随此智能体携带的沙盒原生工具和行为。 |
runAs | 面向模型的沙盒工具所使用的用户身份,例如 shell 命令、文件读取和补丁操作。 |
沙盒客户端选择、沙盒会话复用、清单覆盖和快照选择都应放在 sandbox 运行选项中,而不是智能体上。
defaultManifest
Section titled “defaultManifest”defaultManifest 是运行器为此智能体创建全新沙盒会话时使用的默认工作区。可以传入 Manifest 实例,也可以传入与 new Manifest(...) 相同的初始化对象。使用它来指定智能体通常应从哪些文件、仓库、辅助材料、输出目录和挂载开始。
defaultManifest 仅提供默认工作区。一次运行可以使用 sandbox.manifest 覆盖 defaultManifest,而复用或恢复的沙盒会话会保留其现有工作区状态。
import { file, gitRepo, Manifest } from '@openai/agents/sandbox';
const manifest = new Manifest({ root: '/workspace', entries: { 'task.md': file({ content: 'Fix the failing test and summarize the change.', }), repo: gitRepo({ repo: 'openai/openai-agents-js', ref: 'main', }), }, environment: { NODE_ENV: 'test', },});instructions 和 baseInstructions
Section titled “instructions 和 baseInstructions”使用 instructions 设置应在不同提示下保持不变的简短规则。在 SandboxAgent 中,这些指令会追加到 SDK 的沙盒基础提示之后,因此您既能保留内置沙盒指导,又能添加自己的角色、工作流和成功标准。
仅当您想替换 SDK 的沙盒基础提示时才使用 baseInstructions。大多数智能体不应设置它。
| 放置位置 | 用途 | 示例 |
|---|---|---|
instructions | 智能体的稳定角色、工作流规则和成功标准。 | “检查入职文档,然后交接。”、“将最终文件写入 output/。“ |
baseInstructions | 完全替换 SDK 的沙盒基础提示。 | 自定义底层沙盒封装提示。 |
| 用户提示 | 本次运行的一次性请求。 | “总结此工作区。“ |
| 清单中的工作区文件 | 较长的任务规范、仓库本地指令或范围明确的参考材料。 | repo/task.md、文档集合、示例资料包。 |
应避免将用户的一次性任务复制到 instructions 中、嵌入本应放入清单的长篇参考材料、重复内置能力已注入的工具文档,或混入模型在运行时不需要的本地安装说明。
capabilities
Section titled “capabilities”能力会将沙盒原生行为附加到 SandboxAgent。它们可以在运行开始前调整工作区、追加沙盒专用指令、公开绑定到实时沙盒会话的工具,并调整该智能体的模型行为或输入处理。
内置能力包括:
| 能力 | 添加时机 | 说明 |
|---|---|---|
shell() | 智能体需要 shell 访问权限。 | 添加 exec_command;当沙盒客户端支持 PTY 交互时,还会添加 write_stdin。 |
filesystem() | 智能体需要编辑文件或检查本地图像。 | 添加 apply_patch 和 view_image;补丁路径相对于工作区根目录。 |
skills() | 您希望在沙盒中发现并写入技能。 | 对于沙盒本地的 SKILL.md 技能,优先使用此能力,而不是手动挂载 .agents 或 .agents/skills。 |
memory() | 后续运行应读取或生成记忆产物。 | 需要 shell();实时更新还需要 filesystem()。 |
compaction() | 长时间运行的流程需要在压缩项之后修剪上下文。 | 调整模型采样和输入处理。 |
默认情况下,SandboxAgent.capabilities 使用 Capabilities.default(),其中包括 filesystem()、shell() 和 compaction()。如果传入 capabilities: [...],该列表将替换默认列表,因此请加入您仍需要的所有默认能力。
Manifest 描述全新沙盒会话的工作区。它可以设置工作区 root、声明文件和目录、复制本地文件、克隆 Git 仓库、附加远程存储挂载、设置环境变量、定义用户或组,以及授权访问工作区之外的特定绝对路径。
清单环境值默认会持久保存。对于 API 密钥、访问令牌或其他不应与沙盒状态一起保存的短期凭据,请使用 { value: "...", ephemeral: true } 等临时条目。
对于在清单物化或恢复时必须重新查找的密钥,请继承 EnvValueReference 并使用 registerEnvValueReference() 注册。引用仅持久保存非敏感的查找元数据,并通过 resolve() 解析当前运行时值。每个子类都必须声明自己稳定、非空的静态 type,且 serialize() 不得包含保留字段 value。重建清单前,请在每个进程中注册解析器,并让解析器验证查找键并实施允许列表。恢复持久化 RunState 中的环境引用时,需要提供包含对应引用条目的当前可信清单;否则,SDK 会在恢复会话前拒绝恢复操作。
清单条目路径相对于工作区。它们不能是绝对路径,也不能使用 .. 逃逸工作区,这可以让工作区约定在本地、Docker 和托管客户端之间保持可移植性。
使用清单条目提供智能体开始工作前所需的材料:
| 清单条目 | 用途 |
|---|---|
file()、dir() | 小型合成输入、辅助文件或输出目录。 |
localFile()、localDir() | 应写入沙盒的主机文件或目录。 |
gitRepo() | 应提取到工作区的仓库。 |
s3Mount()、gcsMount()、r2Mount()、azureBlobMount()、s3FilesMount() 等挂载 | 应显示在沙盒内的外部存储。 |
对于本地物化,localFile() 和 localDir() 的源路径必须位于本地源基础目录内。默认基础目录是 Node 进程的当前工作目录,本地沙盒客户端在物化条目时可能会提供客户端专用的基础目录。如果源必须来自其他主机绝对目录,请添加范围尽可能小的 Manifest.extraPathGrants 条目。
本地延迟技能发现也会使用 extraPathGrants。如果 localDirLazySkillSource() 指向源基础目录之外,且清单未授权该目录,则会将其忽略。对于共享技能、数据集和参考仓库等输入集合,建议设置 readOnly: true。
每项路径授权都有一个沙盒路径,并可在需要时指定单独的主机路径:
path是沙盒内可见的 POSIX 绝对路径。hostPath是可选的主机原生绝对路径,在主机路径与沙盒路径不同时使用。在 Windows 上,它必须包含驱动器限定符;不支持 UNC 路径和设备路径。
UnixLocalSandboxClient 要求主机路径与沙盒路径相同,因此使用它时请省略 hostPath。如果创建容器所用的清单中存在授权,DockerSandboxClient 支持单独的 hostPath。它无法在已运行的容器上添加或更改该映射。Docker 命令可以使用创建时已授权的沙盒路径作为其 workdir;工作区和已配置授权之外的路径仍会被拒绝。
import { Manifest, localDir, skills } from '@openai/agents/sandbox';import { localDirLazySkillSource } from '@openai/agents/sandbox/local';import { dirname, join } from 'node:path';import { fileURLToPath } from 'node:url';
const appRoot = dirname(fileURLToPath(import.meta.url));const repoDir = join(appRoot, 'repo');const sharedSkillsDir = '/opt/company/agent-skills';
const manifest = new Manifest({ extraPathGrants: [ { path: sharedSkillsDir, readOnly: true, description: 'Shared skill bundle.', }, ], entries: { repo: localDir({ src: repoDir }), },});
const skillCapability = skills({ lazyFrom: localDirLazySkillSource({ src: sharedSkillsDir, }),});挂载条目描述要公开哪些存储;挂载策略描述沙盒后端如何附加这些存储。有关挂载选项和提供商支持,请参阅沙盒客户端。
Permissions 控制清单条目的文件系统权限。它针对沙盒物化的文件,而不是模型权限、审批策略或 API 凭据。
用户是可以在沙盒中执行工作的身份。如果希望某个身份存在于沙盒中,请将用户添加到清单;当 shell 命令、文件读取和补丁操作等面向模型的沙盒工具应以该用户身份运行时,再设置 SandboxAgent.runAs。
如果还需要文件级共享规则,请将用户与清单组及条目的 group 元数据结合使用。runAs 用户控制由谁执行沙盒原生操作;Permissions 控制沙盒物化工作区后,该用户可以读取、写入或执行哪些文件。
SnapshotSpec
Section titled “SnapshotSpec”SnapshotSpec 指定全新沙盒会话应从何处恢复已保存的工作区内容,以及将其持久保存到何处。它是沙盒工作区的快照策略,而 sessionState 是用于恢复特定沙盒后端的序列化连接状态。
当应用提供远程快照客户端时,可使用本地快照实现本地持久快照,或使用远程快照。挂载路径和临时路径不会作为持久工作区内容复制到快照中。恢复数据时,SDK 会在将归档写入工作区之前,拒绝任何与受保护挂载路径或临时路径重叠的归档成员。如果工作区根目录本身是临时目录,则只能恢复空归档。
沙盒生命周期
Section titled “沙盒生命周期”生命周期有两种模式:SDK 所有和开发者所有。
传入
sandbox.client。- 运行器创建或恢复沙盒会话。
智能体运行,并可持久保存由快照支持的工作区状态。
- 运行器关闭其拥有的资源。
创建
session。将
sandbox.session传入运行。- 智能体使用现有工作区。
- 自行检查、复用并关闭会话。
当沙盒只需存在一次运行时,请使用 SDK 所有的生命周期。传入 client、可选的 manifest、可选的 snapshot 和客户端 options;运行器会创建或恢复沙盒、运行智能体、持久保存由快照支持的工作区状态,并允许客户端清理运行器拥有的资源。
import { run } from '@openai/agents';import { SandboxAgent } from '@openai/agents/sandbox';import { UnixLocalSandboxClient } from '@openai/agents/sandbox/local';
const agent = new SandboxAgent({ name: 'Workspace reviewer', model: 'gpt-5.6-sol', instructions: 'Inspect the sandbox workspace before answering.',});
const result = await run(agent, 'Inspect the workspace.', { sandbox: { client: new UnixLocalSandboxClient(), },});
console.log(result.finalOutput);如果您想预先创建沙盒、在多次运行中复用同一个实时沙盒、在运行后检查文件、通过自行创建的沙盒进行流式传输,或精确决定清理时机,请使用开发者所有的生命周期。传入 session 会指示运行器使用该实时沙盒,但运行器不会替您关闭它。
import { run } from '@openai/agents';import { Manifest, SandboxAgent } from '@openai/agents/sandbox';import { UnixLocalSandboxClient } from '@openai/agents/sandbox/local';
const manifest = new Manifest();const agent = new SandboxAgent({ name: 'Workspace reviewer', model: 'gpt-5.6-sol', instructions: 'Inspect the sandbox workspace before answering.',});
const client = new UnixLocalSandboxClient();const session = await client.create({ manifest });
try { await run(agent, 'First task.', { sandbox: { session } }); await run(agent, 'Follow-up task.', { sandbox: { session } });} finally { await session.close?.();}sandbox 运行选项
Section titled “sandbox 运行选项”sandbox 运行选项包含每次运行的配置,用于确定沙盒会话的来源,以及如何初始化全新会话。
以下选项决定运行器应复用、恢复还是创建沙盒会话:
| 选项 | 使用时机 | 说明 |
|---|---|---|
client | 您希望运行器替您创建、恢复和清理沙盒会话。 | 除非提供实时沙盒 session,否则为必需项。 |
session | 您已经自行创建实时沙盒会话。 | 调用方拥有生命周期;运行器会复用该实时沙盒会话。 |
sessionState | 您拥有序列化的沙盒会话状态,但没有实时沙盒会话对象。 | 需要 client;运行器从该显式状态恢复,并拥有恢复后的会话。 |
全新会话输入
Section titled “全新会话输入”以下选项仅在运行器创建全新沙盒会话时生效:
| 选项 | 使用时机 | 说明 |
|---|---|---|
manifest | 您希望一次性覆盖全新会话的工作区。 | 接受 Manifest 或清单初始化对象。省略时回退到 agent.defaultManifest。 |
snapshot | 全新沙盒会话应从快照获取初始数据。 | 适用于类似恢复的流程或远程快照客户端。 |
options | 沙盒客户端需要创建时选项。 | 常用于 Docker 镜像、提供商超时及类似的客户端专用设置。 |
concurrencyLimits 控制可并行执行的沙盒物化工作量。当大型清单或本地目录复制需要更严格的资源控制时,请使用 manifestEntries 和 localDirFiles。
物化控制有意设计为每次运行单独配置。请将其放在 sandbox 运行选项附近,这样同一个 SandboxAgent 就能对大型本地目录复制使用保守限制,并对小型清单使用更宽松的限制。
当清单包含许多相互独立的条目(如文件、目录、仓库和挂载)时,请使用 concurrencyLimits.manifestEntries。当 localDir() 条目包含大量文件,并且需要限制本地复制压力时,请使用 concurrencyLimits.localDirFiles。
归档安全限制
Section titled “归档安全限制”使用 archiveLimits 限制工作区恢复和重新连接期间的归档输入字节数、解压字节数和成员数量。传入空对象会启用默认限制:1 GiB 归档输入、4 GiB 解压内容和 100,000 个成员。将单个字段设置为 null 可仅禁用该项限制。省略 archiveLimits 或将整个选项设置为 null,则会完全禁用归档限制。
完整示例:编码任务
Section titled “完整示例:编码任务”以下编码风格的示例非常适合作为默认起点:
import { run } from '@openai/agents';import { Capabilities, Manifest, SandboxAgent, localDir, skills,} from '@openai/agents/sandbox';import { UnixLocalSandboxClient, localDirLazySkillSource,} from '@openai/agents/sandbox/local';import { dirname, join } from 'node:path';import { fileURLToPath } from 'node:url';
const exampleDir = dirname(fileURLToPath(import.meta.url));const hostRepoDir = join(exampleDir, 'repo');const hostSkillsDir = join(exampleDir, 'skills');
const manifest = new Manifest({ entries: { repo: localDir({ src: hostRepoDir }), },});
const agent = new SandboxAgent({ name: 'Sandbox engineer', model: 'gpt-5.6-sol', instructions: 'Read `repo/task.md` before editing files. Load the `$invoice-total-fixer` skill before changing code. Stay grounded in the repository, preserve existing behavior, and mention the exact verification command you ran. If you edit files with apply_patch, paths are relative to the sandbox workspace root.', defaultManifest: manifest, capabilities: [ ...Capabilities.default(), skills({ lazyFrom: localDirLazySkillSource({ src: hostSkillsDir, }), }), ],});
const result = await run( agent, 'Open `repo/task.md`, fix the issue, run the targeted test, and summarize the change.', { sandbox: { client: new UnixLocalSandboxClient(), }, },);
console.log(result.finalOutput);请从上面的完整示例开始。很多情况下,同一个 SandboxAgent 可以保持不变,只需更改沙盒客户端、沙盒会话来源或工作区来源。
沙盒客户端切换
Section titled “沙盒客户端切换”保持智能体定义不变,仅更改运行配置。需要容器隔离或镜像一致性时使用 Docker;需要由提供商管理执行时使用托管提供商。有关示例和提供商选项,请参阅沙盒客户端。
保持智能体定义不变,只使用 sandbox: { client, manifest } 替换全新会话的清单。当同一智能体角色需要针对不同仓库、资料包或任务集合运行,同时不希望重新构建智能体时,请使用此模式。
沙盒会话注入
Section titled “沙盒会话注入”需要显式控制生命周期、运行后检查或复制输出时,请注入实时沙盒会话。为该次运行使用 sandbox: { session },并在应用程序代码中关闭会话。
会话状态恢复
Section titled “会话状态恢复”如果已经在 RunState 外部序列化沙盒状态,可以使用 sandbox: { client, sessionState } 让运行器根据该状态重新连接。当沙盒状态存储在您自己的存储或作业系统中,并且希望 Runner 直接从中恢复时,请使用此模式。
使用 sandbox: { client, snapshot },通过已保存的文件和产物为新沙盒提供初始数据。当全新运行应从已保存的工作区内容开始,而非仅从 agent.defaultManifest 开始时,请使用此模式。
从 Git 加载技能
Section titled “从 Git 加载技能”使用 skills({ from: gitRepo(...) }) 将本地技能来源替换为由仓库支持的来源。当技能集合有自己的发布周期,或应在多个沙盒之间共享时,请使用此模式。
工具智能体既可以拥有自己的沙盒边界,也可以复用父运行中的实时沙盒。复用适合快速的只读探索智能体:它可以检查父智能体正在使用的同一工作区,而无需承担创建、恢复或快照另一个沙盒的开销。
当工具智能体确实需要隔离时,请通过 sandboxAgent.asTool(...) 为其提供独立的 runConfig。如果工具智能体应自由修改内容、运行不受信任的命令,或使用不同后端或镜像,请使用独立沙盒。
本地工具与 MCP 的组合
Section titled “本地工具与 MCP 的组合”保留沙盒工作区,同时继续在同一智能体上使用常规工具。沙盒能力可以与 tools、mcpServers、交接、模型设置和输出配置共存。
如果后续沙盒智能体运行应从之前的运行中学习,请使用 memory() 能力。记忆与 SDK 的对话式 Session 记忆不同:它会将经验提炼为沙盒工作区内的文件,后续运行便可读取这些文件。
有关设置、读取和生成行为、多轮对话及布局隔离,请参阅智能体记忆。
明确单智能体模式后,下一个设计问题便是沙盒边界在更大系统中的位置。
沙盒智能体仍可与 SDK 的其他部分组合:
- 交接:将文档密集型工作从非沙盒接收智能体交接给沙盒审查智能体。
- Agents as tools:将多个沙盒智能体公开为工具,通常通过在每次
asTool(...)调用中传入沙盒运行配置,让每个工具获得自己的沙盒边界。 - MCP 和常规函数工具:沙盒能力可以与
mcpServers和常规工具共存。 - 运行智能体:沙盒运行仍使用常规的
run()和RunnerAPI。
使用交接时,仍只有一个顶层运行和一个顶层轮次循环。活动智能体会发生变化,但运行不会变成嵌套运行。
使用 asTool(...) 时,两者的关系有所不同。外层编排器使用一个外层轮次决定调用工具,而该工具调用会为沙盒智能体启动一次嵌套运行。嵌套运行拥有自己的轮次循环、maxTurns、审批,通常也有自己的沙盒运行配置。从外层编排器的角度来看,所有这些工作仍封装在一次工具调用之后,因此嵌套轮次不会增加外层运行的轮次计数器。