
开源地址:
Agent-Sandbox https://github.com/agent-sandbox/agent-sandbox
效果预演:

1,为什么需要Agent-Sandbox?
在我们的业务中,经常需要让Agent执行一些代码或者访问网站等,例如用户提供了一个excel文件,处理里面的一些数据,最终生成报告,或者用户提供了一个网站,让Agent访问网站,然后获取一些数据,最终生成报告。
这些都是很常见的场景,例如最近非常受关注的Manus,卖了很多钱的那个(羡慕啊~),它就是利用了各种工具来完成用户的复杂任务,你们知道的。
但问题来了,我们如何让Agent执行这些代码或者访问网站呢?
因此Manus把E2B带火了,E2B是一个非常强大的Sandbox工具,它可以帮助Agent执行代码或命令,但是E2B基本上是个商业的,不方便我们使用,之前我们的办法是部署一个Python的执行代码的服务,或着部署一个Playwright的服务,各自提供MCP或普通API,来满足需求,但是遇到的问题也是显而易见的,那就是无法实现多次访问的隔离,例如一个Agent访问了A网站,另一个Agent访问了B网站,就会相互干扰,性能也是问题,除非你部署很多实例,那也浪费。
这个问题你们是怎么解决的?
2,Agent-Sandbox
没有选择,只能自己搞了,上半年我们拉了几个兄弟,按照以上的痛点,开发了一个Agent-Sandbox,是的,名字就叫Agent-Sandbox,是不是很技术流,
目前已经在生产环境使用了,效果还不错,支持MCP和REST API,Agent可以在任何需要的时候创建一个Sandbox,然后执行代码,访问网站等,完事儿后自己删除Sandbox,非常方便。
不过最近也发现市面上出现很多关于Agent Sandbox的工具和讨论,开源的包括kubernetes-sigs/agent-sandbox 、 AIO Sandbox 等,说明大家也在解决这个问题,AIO Sandbox这个是火山的,只提供一个集成化的Sandbox环境,也就是一个Docker的Image,里面有各种工具,包括执行代码、浏览器、文件系统等,而kubernetes-sigs/agent-sandbox是个部署工具,可以部署各种Sandbox环境,例如他就支持部署AIO Sandbox,可以通过它拉起很多AIO Sandbox的实例,但功能还是太基础了,无法直接给Agent使用,安装也麻烦,要求的Kubernetes版本比较高,目前大家生产用的K8S的版本都比较滞后。
像我们这样开源的Sandbox还是没有看到,我们就决定把我们这个开源给大家,也许大家跟我们希望的一样,那就可以用得上了。
3,Agent-Sandbox有哪些特点?
目前实现了主要的功能,包括通过MCP或REST API来CRUD Sandbox,指定Sandbox的Image等,后续会支持更多场景的Sandbox运行环境,支持各种SDK,来满足编程场景的Sandbox控制,更多Sandbox的管理功能,包括TTL回收、无调用回收等,以及管理UI,可以看到在创建的全部Sandbox和相关操作,也可以通过这个UI来创建Sandbox等,方便与治理。

特性:
- Ai使用友好,可以直接让Agent控制Sandbox的全生命周期,而不一定得提前创建好,在给Agent去使用,Agent按需创建和回收;
- 生态开放,部署的Sandbox运行环境可以与社区的兼容,列如可以直接拉起前面提到的AIO Sandbox、Code Server或Playwright等,方便大家利用现有的资源,当然,可以自定义运行环境;
- 企业生产可用,当然,考虑前面提到的痛点,基于K8S开发,支持规模化使用,根据需要,可以大量创建Sandbox,相互之间隔离使用;
- 轻量化,就一个组件,没有采用K8S的CRD来开发,这个后续用户按照和升级都比较麻烦,用户得接受一种新的资源类型,我们采用RS+Label的方式,尽量依赖K8S现有的特性来快速实现。
4,如何使用Agent-Sandbox?
所以怎么使用呢,
部署Agent-Sandbox
要求 Kubernetes version 1.26 或以上,
在 https://github.com/agent-sandbox/agent-sandbox 下载 install.yaml 后,
bash
kubectl create namespace agent-sandbox
kubectl apply -nagent-sandbox -f install.yaml
里面会安装deployment、service等,之后你应该是需要配置一个ingress,如:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: agent-sandbox
namespace: agent-sandbox
spec:
ingressClassName: ingress-nginx
rules:
- host: agent-sandbox.your-host.com
http:
paths:
- backend:
service:
name: agent-sandbox
port:
number: 80
path: /(.*)
主要是 host 需要你给出,其他可以直接使用。正常情况访问 http://agent-sandbox.your-host.com/mcp 就可以给Agent用了,里面有对Sandbox的CURD等工具。
Agent用MCP Server的演示:
园子无法上传mp4,看GitHub Readme吧,https://github.com/agent-sandbox/agent-sandbox
通过API来管理Sandbox
Agent-Sandbox提供RESTful API来管理Sandbox,典型的工作流程包括创建Sandbox、访问Sandbox、删除Sandbox。
创建一个Sandbox
shell
curl --location '/api/v1/sandbox' \
--header 'Content-Type: application/json' \
--data '{"name":"sandbox-01"}'
默认会拉起AIO Sandbox,可以通过以下方式,指定国内镜像,
shell
curl --location '/api/v1/sandbox' \
--header 'Content-Type: application/json' \
--data '{"name":"sandbox-01","image":"enterprise-public-cn-beijing.cr.volces.com/vefaas-public/all-in-one-sandbox:latest"}'
访问Sandbox
/sandbox/{sandbox_name} 通过这个地址可以访问Sandbox,
例如刚才创建的 sandbox-01 访问地址是: /sandbox/sandbox-01.
访问后你应该会看到:

访问这个Sandbox的MCP地址是: http://agent-sandbox.your-host.com/sandbox/sandbox-01/mcp ,这种场景是先创建好Sandbox,然后让Agent去访问这个Sandbox。
删除Sandbox
删除API: /api/v1/sandbox/{sandbox_name} . 例如删除Sandbox sandbox-01 :
Shell
shell
curl --location --request DELETE '/api/v1/sandbox/sandbox-01'
结果:
json
{
"code": "0",
"data": "Sandbox sandbox-01 deleted successfully"
}
以上就是Agent-Sandbox的简单介绍和使用方法,更多内容请关注Agent-Sandbox项目,后续我们会持续更新更多功能和特性,包括提到的支持更多场景的Sandbox运行环境,支持各种SDK来满足编程场景的Sandbox控制,更多Sandbox的管理功能,包括TTL回收、无调用回收,并发弹性伸缩等,以及管理UI,可以看到和管理创建的全部Sandbox,也可以通过这个UI来创建和操作Sandbox,例如上传下载文件、查看日志、执行命令、查看状态等。
最后欢迎大家Star、Issue和PR~