Skip to main content
沙盒功能目前处于私密预览阶段。随着我们的迭代,API 和功能可能会发生变化。注册等待列表以获取访问权限。
LangSmith SDK 提供了一个用于创建和交互沙盒的编程接口。

安装

Python 的 [sandbox] 额外依赖会安装 websockets,这支持实时流式传输和 timeout=0。如果没有它,run() 会自动回退到 HTTP。对于 TypeScript,请安装可选的 ws 包以支持 WebSocket 流式传输:

创建并运行沙盒

每个沙盒都从一个快照启动——一个由 Docker 镜像支持的文件系统镜像。选择一个现有快照或创建一个新快照(完整的构建/捕获/CRUD 流程请参见快照);以下每个示例都使用你已有的 snapshot_id / snapshotId

运行命令

每次 run() 调用都会返回一个包含 stdoutstderrexit_codesuccessExecutionResult

流式输出

对于长时间运行的命令,可以使用回调或 CommandHandle 实时流式输出。

使用回调进行流式传输

使用 CommandHandle 进行流式传输

设置 wait=False 以获取 CommandHandle,从而完全控制输出流。

发送标准输入和终止命令

终止正在运行的命令:

重新连接到正在运行的命令

如果客户端断开连接,可以使用命令 ID 重新连接:

文件操作

在沙盒中读写文件:

命令生命周期和 TTL

沙盒守护进程通过两种超时机制管理命令会话的生命周期:
  • 会话 TTL(已完成的命令):命令完成后,其会话会在内存中保留一段 TTL 时间。在此窗口期内,你可以重新连接以检索输出。TTL 过期后,会话将被清理。
  • 空闲超时(正在运行的命令):没有连接客户端的正在运行的命令将在空闲超时后被终止(默认:5 分钟)。每次客户端连接时,空闲计时器都会重置。设置为 -1 表示没有空闲超时。

组合生命周期选项

设置 kill_on_disconnect=True(Python)或 killOnDisconnect: true(TypeScript)可以在最后一个客户端断开连接时立即终止命令,而不是等待空闲超时。

服务 URL(Python)

通过经过身份验证的 URL 访问在沙盒内运行的 HTTP 服务。你可以在浏览器中打开它,从代码中调用它,或与队友共享它。
更多详情,包括用例、REST API 访问和完整的 FastAPI 示例,请参见服务 URL

TCP 隧道(Python)

像访问本地服务一样访问沙盒内运行的任何 TCP 服务。隧道会打开一个本地 TCP 端口,并通过 WebSocket 将连接转发到沙盒内的目标端口。
隧道适用于任何 TCP 服务(Redis、HTTP 服务器等),并且你可以同时打开多个隧道:

异步支持(Python)

Python SDK 提供了完整的异步客户端:

跟踪沙盒活动

通过 run()env 参数传递 LangSmith 跟踪环境变量,以发送从沙盒内运行的代码中产生的跟踪信息。在进程退出前调用 flush() 以确保所有跟踪信息都被发送。
在沙盒内部,任何经过 LangSmith 插桩的代码(@traceable、LangChain、LangGraph)都会自动从注入的环境变量中获取跟踪配置。
务必在沙盒进程退出前调用 flush() —— Python 中使用 langsmith.Client().flush(),TypeScript 中使用 await new Client().flush()。否则,跟踪信息可能会丢失,因为容器在命令完成时会被销毁。

错误处理

两个 SDK 都提供了类型化的异常用于特定错误处理:
更多详情,请参阅 GitHub 上的沙盒 SDK 参考文档:PythonTypeScript