Deep Agents 03:生产化、Sandbox、权限与上线验收
1、本篇任务:让 Deep Agent 在隔离环境中分析代码
只读研究 Agent 风险有限;编码 Agent 需要读写文件、安装依赖和执行测试。本课不讲如何让模型写更漂亮的代码,只讲执行环境、权限、恢复和上线验收。
2、先做威胁模型
资产包括源代码、用户文件、云凭证、生产网络和发布权限;攻击入口包括用户消息、仓库内容、网页、依赖包、MCP 返回和命令输出。
Prompt injection 不是靠一句 system prompt 解决。真正控制来自工具 allowlist、文件权限、网络隔离、服务端鉴权、审批和审计。
3、何时需要 Sandbox
只读写虚拟文件选择普通 backend;需要运行代码、测试、构建或安装依赖才使用 sandbox。一个安全 sandbox:非 root;只挂载当前任务;输入只读、输出单独目录;CPU/内存/磁盘/进程数/时间有上限;默认无网络;不挂 Docker socket、SSH key 或云主密钥;任务后按 TTL 销毁。
API → 任务队列 → Agent worker
→ 创建 thread-scoped sandbox
→ 执行受控任务
→ 扫描 artifacts
→ 保存结果并销毁 sandbox
4、不要暴露任意 shell 字符串
优先使用结构化命令:
const RunCommand = z.object({
program: z.enum(["python", "node", "pytest", "npm"]),
args: z.array(z.string()).max(20),
cwd: z.string().regex(/^\/workspace\/(src|out)(\/.*)?$/),
timeoutMs: z.number().int().min(100).max(120_000),
});
服务端用 argv、shell=false 执行,并进一步限制 npm script、环境变量和网络。用户或模型给出的 curl | sh、重定向、命令替换都不应穿过 schema。
5、权限按角色和路径声明
主管可以读 /workspace、写最终报告;researcher 只能写自己的子目录;reviewer 只读;memory 默认只读,只有专门提议流程可写;发布、付款、发信等外部副作用不属于 sandbox 工具,必须调用有鉴权和 HITL 的领域服务。
子 Agent 的权限配置应替换或缩小父权限,不能因为继承方便而让只读审阅员获得 execute。
6、长任务的恢复与取消
checkpoint 保存计划和状态,sandbox ID 保存在线程 metadata。恢复时检查 sandbox 是否仍存在;不存在则从已保存 artifact 和安全节点重建。取消 run 后停止派发新 todo/子任务,终止可中断命令,保留审计与已有 artifact,最终进入 cancelled。
有副作用工具继续使用 action ID 幂等。checkpoint 只能恢复图,不能自动撤销真实世界动作。
7、生产观测与预算
关联 request、thread、subagent、sandbox、tool 和 artifact ID;记录模型/token、命令耗时、退出码、资源峰值、网络拒绝与权限错误。限制每用户并发任务、任务时长、子 Agent 数、文件配额和模型费用。
日志和 artifact 经过密钥/PII 扫描;trace 不保存完整私有代码,或采用严格项目权限与采样策略。
8、上线验收
恶意仓库文件要求上传密钥时无网络调用;/etc/passwd、.ssh 和符号链接逃逸被拒绝;fork bomb 和超大下载被资源限制终止;用户 A 无法读取 B 的 sandbox/artifact;断线后安全恢复;重复审批不重复发布;sandbox 销毁后宿主与其他任务不受影响。
如果产品只是固定 RAG 或少量工具,回到更简单的 LangChain/LangGraph。只有开放式长任务真正需要文件、规划和子 Agent 时,Deep Agents 的复杂度才有回报。
下一阶段使用 LangSmith 追踪、评测和发布这些系统。
如果您觉得这篇文章有帮助,请点个赞吧~
评论
请登录后发表评论
去登录