你们的Agent写代码吗?Agent-Sandbox开源首发

开源地址:

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-sandboxAIO 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等,方便与治理。

特性:

  1. Ai使用友好,可以直接让Agent控制Sandbox的全生命周期,而不一定得提前创建好,在给Agent去使用,Agent按需创建和回收;
  2. 生态开放,部署的Sandbox运行环境可以与社区的兼容,列如可以直接拉起前面提到的AIO Sandbox、Code Server或Playwright等,方便大家利用现有的资源,当然,可以自定义运行环境;
  3. 企业生产可用,当然,考虑前面提到的痛点,基于K8S开发,支持规模化使用,根据需要,可以大量创建Sandbox,相互之间隔离使用;
  4. 轻量化,就一个组件,没有采用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~