文档中心>云函数>AI 应用>Agent 执行引擎>代码沙箱应用(内测中)

代码沙箱应用(内测中)

最近更新时间:2025-11-26 11:08:51

我的收藏
本文介绍如何在 Agent 执行引擎部署代码沙箱应用,提供安全、隔离的代码执行环境,支持 Python、R、JavaScript、TypeScript、Java、Bash 等多种编程语言,适用于数据处理、科学计算、图表生成、Vibe Coding 等安全代码运行场景。
说明:
该功能处于内测阶段,如需使用,请提交 内测申请
该功能目前仅支持在香港地域使用。

前置依赖

快速上手

创建代码沙箱

1. 登录 Serverless 控制台,单击左侧导航栏的 Agent
2. Serverless AI 运行时页面上的沙箱工具区域,单击创建应用,进入应用创建流程。

3. 基础配置版块,填写以下配置:
应用类型:选择代码执行沙箱。
应用名称:应用的唯一标识,不可重复,创建后不可修改。命名规范:只能包含字母、数字、下划线、连字符,以字母开头,以数字或字母结尾,2~60个字符。
地域:选择资源归属于某个地域。

4. 网络配置版块,配置函数网络访问权限:
公网访问:默认未启用,如果需要访问公网资源,则需要启用。
私有网络:启用后,应用可以访问同一个私有网络下的资源。

5. 日志配置版块:默认启用日志投递,可将函数运行日志实时投递到指定位置。详情请参见 日志投递配置

6. 隔离、并发配置版块:配置实例安全隔离单实例并发模式

实例安全隔离
如果启用,保证一个沙箱独占一个实例,沙箱销毁时,实例也销毁。
如果不启用,多个沙箱可能共享一个实例。
配置基于会话单实例并发模式,该配置主要用于标记客户端请求以哪种方式携带沙箱 ID、配置沙箱生命周期、底层实例支持的沙箱并发数和请求,其中本应用中“会话”的配置对应的是“沙箱”的配置。具体配置项说明如下:
配置项
说明
示例
会话 Key 来源
标记客户端请求以哪种方式携带沙箱 ID,系统根据此标记来决定要调度到某个沙箱上。可选项:Http Header、Cookie、Query String,三选一。不同选项支持场景说明如下:
Http Header
通过 HTTP 请求头传递客户端会话标识,后台确保相同标识的请求被路由到同一个沙箱。适用于 WebSocket 协议、gRPC 协议、HTTP 协议。支持客户端自定义沙箱 ID,也支持服务端生成。
Cookie
将携带相同 Cookie 信息的请求路由到同一个沙箱。支持客户端生成沙箱 ID,也支持服务端生成。
Query String
将携带相同 Query String 信息的请求路由到同一个沙箱,需要客户端生成沙箱 ID。
Http Header
会话 Key 名称
Key 用途及命名规则
用途:沙箱的唯一标识名称。
命名要求:必须以字母开头;非首字母可包含数字、字母、下划线(_)、中划线(-);长度限制5-40 个字符(含边界值)。
Key 对应 Value(沙箱 ID )生成逻辑及字符要求:
生成逻辑:
来源为 Http Header、Cookie:支持客户端在首次调用时自主生成 Value;若客户端未生成,系统将自动生成。
来源为 QueryString:首次 Value 需由客户端生成。
字符要求:含数字、字母、下划线(_)、中划线(-)长度限制128个字节。
x-sandbox-id
会话最长生命周期
从沙箱创建、使用到最终销毁的全过程,单位秒。超过生命周期后,服务端将自动销毁沙箱。最长可设置7天,默认21600秒。
21600秒
会话最长空闲时间
用户在一段时间内没有进行任何操作,导致沙箱进入空闲状态,单位秒。最长不得超过会话最长生命周期,默认1800秒。超过最长空闲(Idle)时间后,服务端将按照“会话空闲超时处理策略”处理沙箱。
1800秒
会话空闲超时处理策略
如果您开启了“实例安全隔离”,会话空闲超时处理策略可选自动销毁或者自动暂停。
如果您没有开启“实例安全隔离”,会话空闲超时处理策略默认自动销毁。
自动销毁
单实例最大并发会话数
单实例在同一时间内支持的最大沙箱数,默认值为20,最大支持100。
20
单实例最大并发请求数
单实例在同一时间内支持的最大请求数,默认为10,最大支持100。
10
7. 单击提交,启动应用的部署。
8. 应用部署完成后,单击应用名称,进入应用详情页面,可以获得访问地址。



使用代码沙箱执行代码

您可以参考以下示例执行代码,请将{$url}替换成沙箱应用访问地址。
Curl
Python
curl --location '{$url}/execute' \\
--header 'Content-Type: application/json' \\
--data '{
"code": "print(\\"hello world!\\")",
"language":"python"
}'
输出结果:
{"type": "number_of_executions", "execution_count": 1}
{"type": "stdout", "text": "hello world!\\n", "timestamp": "2025-11-10T08:34:56.997882+00:00"}
{"type": "end_of_execution"}
import requests
import uuid

def execute_code(base_url: str,sandbox_id: str,code: str, language: str = "python"):
payload = {
"code": code,
"language": language
}
headers = {
"Content-Type": "application/json",
"x-sandbox-id": sandbox_id
}

print("🚀 开始执行代码")
response = requests.post(
f"{base_url}/execute",
json=payload,
headers=headers,
stream=False
)
print(f"📄 执行结果:{response.text}")

def main():
sandbox_id = str(uuid.uuid4())
base_url = "{$url}"
print(f"🌐 沙箱地址:{base_url}, 沙箱ID: {sandbox_id}")

# 示例代码
exampl_code = "print('hello world!')"
execute_code(base_url,sandbox_id,exampl_code,"python")
print("✅ 代码执行完成")

if __name__ == "__main__":
main()
执行上述Python文件,输出结果:
🌐 沙箱地址:https://******.ap-chongqing.tencentscf.com, 沙箱ID: 94834fbf-2926-463a-8da2-f283e4843640
🚀 开始执行代码
📄 执行结果:{"type": "number_of_executions", "execution_count": 3}
{"type": "stdout", "text": "hello world!\\n", "timestamp": "2025-11-10T08:38:00.875663+00:00"}
{"type": "end_of_execution"}

✅ 代码执行完成