如何在 Composio 远程沙箱中运行 Python 批量处理并通过 /mnt/files 挂载交换文件

发布时间:2026/9/12 6:20:28
如何在 Composio 远程沙箱中运行 Python 批量处理并通过 /mnt/files 挂载交换文件 如何在 Composio 远程沙箱中运行 Python 批量处理并通过 /mnt/files 挂载交换文件【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composioComposio 的远程沙箱remote sandbox是一个持久化的 Python 环境agent 通过COMPOSIO_REMOTE_WORKBENCH元工具在其中执行 Python 代码沙箱自带对 Composio 工具的编程访问和一组辅助函数。当任务涉及批量处理、数据转换或多步逻辑而单次工具调用装不下时就用它。本文的操作路径是创建一个开启沙箱的 session把输入文件上传到持久挂载点/mnt/files/在沙箱里分步运行 Python 处理最后把结果文件下载回本地。前置条件一个 Composio 项目 API key以及 Python SDKcomposio若要通过sandbox.sandbox_size选择更大算力档位需要composio≥0.12.1旧版本会静默丢弃该参数一个本地输入文件下文示例用./sales.csv文档出处远程沙箱、配置 session、Remote Workbench 元工具。创建一个开启沙箱的 session按 配置 session 的说明session 默认就包含沙箱会提供COMPOSIO_REMOTE_WORKBENCH和COMPOSIO_REMOTE_BASH_TOOL两个元工具所以普通创建即可session composio.sessions.create(user_iduser_123)只有明确不需要代码执行时才传sandbox{enable: False}被禁用的 session 直接调用沙箱会收到 400 错误。sandbox是推荐的配置键名旧的workbench键仍是受支持的别名。批量任务如果涉及大 DataFrame 或内存量较大的中间结果可以在创建 session 时指定更大的算力档位默认standard为 1 vCPU / 1 GB RAM可选medium2 vCPU / 2 GB、large4 vCPU / 4 GB、xlarge8 vCPU / 8 GBsession composio.sessions.create( user_iduser_123, sandbox{ sandbox_size: large, }, )注意两点一是改sandbox_size会重建沙箱内存状态变量、import会丢失但/mnt/files/挂载会保留二是沙箱目前不计费但文档声明后续会按档位和运行时长计费。把输入文件上传到 /mnt/files/沙箱有一个持久文件挂载点/mnt/files/代码读写这里且挂载在沙箱重启后仍然存在。用session.experimental.files在应用和挂载之间搬文件。该 API 位于experimental命名空间下文档明确提示其接口面可能在后续版本变化。uploaded session.experimental.files.upload(./sales.csv) print(uploaded.sandbox_mount_prefix, uploaded.mount_relative_path) # /mnt/files sales.csv文档示例输出为前缀/mnt/files、相对路径sales.csv即沙箱内代码在/mnt/files/sales.csv读到这个文件。挂载提供四个方法批量场景常用前三个方法作用upload(input, options?)从本地路径、URL、File或 buffer 上传返回RemoteFilelist(options?)列出挂载点path下的文件支持cursorlimit分页download(path, options?)从挂载点取回文件返回RemoteFiledelete(path, options?)删除挂载点上的文件或目录RemoteFile携带文件字节和一个带签名的downloadUrl可用text()/buffer()读取或save(path)写盘。它的expiresAt是下载链接的过期时间不是文件本身的 TTL——挂载点上的文件没有你设置的有效期。所有文件都落在 session 默认的files挂载上mountId参数用于按 ID 指定挂载点但目前没有创建自定义挂载的 SDK 调用实际操作中只用files。在沙箱中分步执行 Python 批量处理COMPOSIO_REMOTE_WORKBENCH接收一段code_to_execute必填的 Python 代码字符串沙箱是持久 Jupyter notebook变量、import、文件和内存状态在多次调用之间保留。执行时有一条硬性约束每个 cell 有 3 分钟180 秒的执行上限。因此批量处理要拆成多个小步骤中间结果落盘到/mnt/files/作为检查点超时可从最后完成的步骤恢复。执行时还需要遵守文档给出的编码规则顶层 cell 不能写returnJupyter 只允许在函数内最终值用output或print(output)收尾所有辅助函数run_composio_tool、invoke_llm、upload_local_file等都已预加载不要重新 import 或声明且统一返回(result, error)元组先检查error再用result不要在沙箱内用run_composio_tool调COMPOSIO_*元工具它只用于应用工具。沙箱预装了pandas、numpy、matplotlib、Pillow、PyTorch、reportlab用到其他受支持但尚未安装的包时沙箱会自动安装。下面是一次典型的两段式批量处理。第一段读取上传的输入、做清洗并保存检查点import pandas as pd df pd.read_csv(/mnt/files/sales.csv) df[revenue] df[qty] * df[price] df.to_csv(/mnt/files/sales_clean.csv, indexFalse) print(rows:, len(df))第二段从检查点继续生成汇总报告并写入挂载点。若单步耗时接近 3 分钟上限把数据拆成更小的批次分到多个 cell 里跑import pandas as pd df pd.read_csv(/mnt/files/sales_clean.csv) summary df.groupby(category)[revenue].sum().reset_index() summary.to_csv(/mnt/files/report.csv, indexFalse) print(summary.shape)如果是批量调用 Composio 工具例如对 100 封邮件逐个打标签文档给出的模式是用ThreadPoolExecutor并行调用run_composio_tool把并发数调到 3 分钟内能完成import concurrent.futures MAX_CONCURRENCY 10 # 按任务量调整 def process_one(item): result, error run_composio_tool(GMAIL_SEND_EMAIL, item) if error: return {status: failed, error: error} return {status: ok, data: result} with concurrent.futures.ThreadPoolExecutor(max_workersMAX_CONCURRENCY) as ex: results list(ex.map(process_one, items))items必须从文件或工具响应里加载、循环构造不要在代码里硬编码数据。文档还建议用current_step如FETCHING_EMAILS和current_step_metric格式done/total units例如10/100 emails参数标记当前进度便于跨 cell 保持对齐。结果过长时返回值会被截断并给出文件路径元工具响应里的results_file_path/stdout_file_path指向完整内容沙箱侧的大产物落在/mnt/files/.composio/output该目录同样是持久挂载。若最终产物是沙箱文件文档要求用upload_local_file生成可下载链接不要把原始 workbench 文件路径暴露给用户。把结果文件下载回本地沙箱写出/mnt/files/report.csv后从应用侧取回report session.experimental.files.download(/mnt/files/report.csv) report.save(./report.csv)取回前也可以先用list()确认文件已落盘entries session.experimental.files.list(path/mnt/files)能列出report.csv且download(...).save(...)成功写入本地即表示本次「上传输入 → 沙箱批量处理 → 下载结果」的闭环完成。注意RemoteFile的expiresAt只是下载链接的过期时间要长期保留及时save到磁盘。限制与常见排查点单 cell 3 分钟上限超时后内存中未落盘的结果会丢。解法就是文档的主模式——把工作拆成多个 cell每步把中间结果写入/mnt/files/下次调用从检查点恢复。换档位或沙箱重启改sandbox_size在下次访问时重建沙箱in-memory 状态清空/mnt/files/不受影响。所以检查点要写挂载点不要只留在变量里。experimental命名空间session.experimental.files的接口面可能在未来版本变化升级 SDK 后核对这四个方法是否仍在。沙箱被禁用若 session 建时传了sandbox{enable: False}沙箱调用返回 400这是配置行为而非故障。字段名不匹配沙箱会对 agent 生成代码中的常见笔误做纠偏例如把result[apiKey]解析为实际字段api_key但不能依赖它替代正确的 schema 检查不确定run_composio_tool的返回结构时先在沙箱外发一个简单请求或用invoke_llm查看。如果你想在自有的环境里跑同样的工具调用Composio 只保留鉴权和发现可以看 Local sandbox。【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考