关于 alibabacloud-agentbay-aio-skills
alibabacloud-agentbay-aio-skills 是一项技能,可通过 AgentBay 在远程沙箱中运行用户代码,而非在本地执行。它支持 Python、JavaScript、R 和 Java,并提供结构化结果及文件处理规范。
主要功能
- 01在远程沙箱执行代码
- 02支持 Python、JavaScript、R、Java
- 03运行内联代码或文件
- 04返回结构化 JSON 结果
- 05校验生成文件的操作指引
适用场景
- 01避免在本地运行用户脚本
- 02以 JSON 格式获取执行结果
- 03保存并验证沙箱生成的图像
- 04在 matplotlib 输出中呈现中日韩文字
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-agentbay-aio-skills安装后在 Claude Code 中输入/alibabacloud-agentbay-aio-skills确认已加载。
附带文件scripts/run_code.py
详细介绍
AgentBay AIO 技能
工作原理
此技能通过 AgentBay SDK 在远程沙箱中(而非本地)运行用户代码。入口脚本 scripts/run_code.py 会自动处理沙箱创建、代码执行和结果解析。
# Basic execution
python scripts/run_code.py --code "<user_code>" --language python
# Execute from file
python scripts/run_code.py --code-file /path/to/file.py --language python
# Structured JSON output (use this when writing results to files)
python scripts/run_code.py --code "<user_code>" --language python --json
支持的语言:python、javascript、r、java(不区分大小写)。超时时间:最多 60 秒(--timeout-s)。
前置条件
| 依赖项 | 版本 | 用途 |
|---|---|---|
| Python | >= 3.8 | 运行时 |
| wuying-agentbay-sdk | >= 1.0.0 | 用于在沙箱中执行代码的 AgentBay SDK |
设置
此脚本要求在本地安装 wuying-agentbay-sdk。首次使用前请先安装:
pip install wuying-agentbay-sdk
这是此技能自身所需的依赖项,安装它不存在安全风险。如果 run_code.py 因 ModuleNotFoundError: No module named 'agentbay' 而失败,请安装 SDK 后重试。
使用的网络域名:agentbay.aliyuncs.com(API 端点)、agentbay.console.aliyun.com(控制台)、mirrors.aliyun.com(PyPI 镜像)。
API 密钥配置
直接运行脚本,无需提示配置 API 密钥。仅当脚本明确报告“Missing API key”时,才引导用户进行配置:
- 在 AgentBay Console 申请
- 保存到配置文件:
~/.config/agentbay/api_key(macOS/Linux)或%USERPROFILE%\.config\agentbay\api_key(Windows)
执行规则
重要:所有用户代码都必须通过 scripts/run_code.py 运行,绝不可直接在本地终端执行代码(例如 python -c、node -e、timeout ... python)。即使 run_code.py 首次运行失败,也必须遵守此规则。
- 如果
run_code.py因临时错误而失败,请重试一次,然后再报告失败。 - 如果
run_code.py因“Missing API key”或ModuleNotFoundError而失败,请引导用户解决问题(参见“设置”/“API 密钥配置”),然后重试;不要改为在本地执行。 - 绝不要将本地运行用户代码作为备用方案。应报告错误。
不要安装 wuying-agentbay-sdk 以外的软件包,也不要创建虚拟环境。沙箱有自己的软件包环境,Agent 不应尝试从外部修改该环境。
输出处理
标准输出:退出代码为 0 表示成功,结果在标准输出中。非零表示失败,错误在标准错误中。
结构化输出(--json):返回 { success, result, logs: { stdout, stderr }, error_message }。
将结果写入文件:使用 --json 模式,并仅提取 result 字段写入目标文件。这样可避免 SDK 元数据(例如会话标识符或内部请求 ID)意外写入输出文件,因为原始的非 JSON 输出可能会将 SDK 日志行与实际结果混在一起。
报告结果:直接引用脚本的原始输出。不要推断、缩写或重新计算数值;如果输出很长,请明确指出省略了哪些部分,但引用的数值必须保持原样。
文件下载验证
将沙箱中生成的文件(例如图表图像)保存到本地环境时:
- 使用
--json模式,并通过 Python(json模块)提取 base64 内容;不要使用 shell 工具(grep/sed/awk)提取 base64 字符串,因为这些工具会截断长字符串。 - 使用以下命令解码:
python -c "import base64,json,sys; d=json.load(sys.stdin); open('out.png','wb').write(base64.b64decode(d['result']))" < output.json - 验证保存的文件:大小大于 0 字节;对于图像(PNG/JPEG),检查文件魔数(
89 50 4E 47/FF D8 FF)。 - 图表图像的文件大小应大于 5 KB。小于 5 KB 的文件几乎可以确定数据已被截断;请重新提取并解码。
如果验证失败,请重试下载。文件损坏时不要报告成功。
中文/CJK 字符渲染
脚本(run_code.py)会自动处理 matplotlib 代码的 CJK 字体配置——它会检测用户代码中的中日韩字符,并在执行前注入字体安装和配置代码。无需手动设置字体。
当用户的代码包含中文字符且使用 matplotlib/plt 时,Agent 应在首次执行时(而非作为重试)主动将以下字体安装代码块添加到 --code 参数中,因为沙盒可能缺少 CJK 字体,而脚本的自动检测虽然可以提供保障,但显式安装更可靠:
import subprocess
subprocess.run(['apt-get', 'update', '-qq'], capture_output=True)
subprocess.run(['apt-get', 'install', '-y', '-qq', 'fonts-wqy-microhei'], capture_output=True)
import matplotlib
import matplotlib.font_manager as fm
fm.fontManager.addfont('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc')
fm.fontManager = fm.FontManager()
matplotlib.rcParams['font.family'] = 'WenQuanYi Micro Hei'
matplotlib.rcParams['axes.unicode_minus'] = False
这种主动处理方式可以避免一种无法检测的故障:生成的图像中,中文字符被渲染为空白方框(豆腐块)。由于豆腐块只会在图像中视觉呈现,且不会在 stdout 中产生基于文本的警告,因此基于重试的处理方式无法可靠地检测到这个问题。
信息安全
请勿在对话回复中输出内部环境变量名称、API Key 值或 SDK 调试详情。执行脚本时,请使用 --json 模式,并且只向用户显示 result 和 error_message 字段。原始 SDK 输出可能包含不应向用户公开或写入输出文件的内部字段(会话标识符、请求 ID、访问凭据)。