
NOAA执行LLM生成代码安全吗必读的5条沙箱防护与最小权限原则【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-AgentsNOAANVIDIA Object Oriented Agents是一个让 LLM 在 Python REPL 中编写并执行代码的智能体框架。执行 LLM 生成代码安全吗答案是只有把AST 校验 操作系统级沙箱 最小权限原则三层防线都用对才安全。这篇文章用 5 条可落地的防护原则带你快速建立 NOAA 沙箱安全认知。 先搞懂NOOA 为什么需要沙箱NOOA 的核心玩法是 CodeAct模型不返回 JSON 工具调用而是直接写 Python 代码并在运行时执行代码可以访问智能体的self、导入模块、调用工具方法。这带来了强大的灵活性但也意味着——生成代码应当被当作不可信代码对待即使提示词是你写的、模型再强也是如此。NOAA 官方文档在 docs/concepts/safety.md 中开宗明义真正的遏制边界在 Python 进程之外。下面 5 条原则就是围绕这句话展开的。原则一AST 校验是护栏不是围墙NOOA 在每次执行生成代码前会用 src/nooa/runtime/code_validator.py 做统一的 AST 静态校验拦截常见的自伤操作错误码拦截内容E001exec、eval、__import__等危险内建函数E002 / E003受限模块导入、from ... import *通配导入E004递归自调用防止生成代码反复调用当前方法E005SystemExit、os.abort()等进程终止行为E101–E104__class__、__subclasses__等反射类逃生门E303 / E310死循环while True无退出、卡死事件循环的阻塞调用这套机制的价值在于减少意外事故、保护异步事件循环但源码注释里写得非常直白静态检查 Python 是打地鼠式的——open()依然能读写任意文件importlib依然能从路径加载模块。记住这句话deny-list 防的是手滑防不了越狱。所以不要把校验器当成安全边界。原则二OS 级沙箱才是真正的遏制边界既然进程内拦截靠不住NOOA 提供了真正的隔离层src/nooa/runtime/sandbox/ 目录下的 Linux 内核级沙箱后端execution_backendsandbox。它的四条护栏全部映射到不可逆的内核机制子进程 fork 后自我施加之后任何代码都无法解除⏱超时硬杀父进程直接 kill 超时单元格内存/CPU 限额RLIMIT_AS/RLIMIT_CPUsoft hard无法上调文件系统Landlock 默认拒绝策略只放行 Python 运行所需系统路径和一个可写 workspace网络seccomp-BPF 直接封掉socket(AF_INET)默认无网络。docs/concepts/safety.md 的建议是无论框架内建了什么都应把执行生成代码的智能体放进与数据敏感度匹配的隔离环境——容器、虚拟机或专用沙箱并严格限制挂载文件、网络、凭据与运行时长。原则三最小权限——只暴露任务真正需要的能力面这是 NOAA 最Pythonic的安全设计能力即可见的 Python 方法。生成代码只能调用模型可见的 API所以给多少权限就暴露多少方法✅ 暴露lookup_customer(customer_id)这样的窄封装而不是整个数据库连接对象✅ 文件系统类工具从任务目录启动有状态工具按实例隔离✅ 用hidden/_前缀隐藏管理、删除、凭据管理这类危险操作❌ 不要把裸客户端、存储管理器、无限制 API 挂到self上。官方文档 docs/concepts/tools-and-visibility.md 的总结很精炼暴露最小可用面——每个可见名字都有注意力成本也都会被生成代码调用。窄封装同时是能力接口、输入校验点和干净的错误边界。原则四把密钥挡在模型可见状态之外密钥、内部客户端绝不能出现在智能体的公开 API 里。NOOA 提供了hidden机制api_key: Annotated[str, hidden] hidden def _authorized_request(self, path: str) - dict: return self._client.get(path, tokenself.api_key)效果模型看不到字段文档渲染中直接消失只留一个做单一授权操作的公开方法。但要清醒hidden影响的是模型可见性不是访问控制——生成代码理论上仍可能猜测私有属性名。真正的权限约束来自最小权限凭据只读 token、scoped service account和上面说的进程级隔离。原则五不可信数据走数据通道效果验证交给确定性代码最后两条防线都关于信任边界数据与指令分离用户消息、文档、工具输出永远作为方法参数传入不要拼接进 docstring 提示词里。检索到的文本和 MCP 响应同样是不可信数据——走工具调用到达不等于是系统指令。模型说成功 ≠ 真的成功让确定性 Python 验证外部效果跑测试、查库、校验返回值 schema再决定是否接受结果。配套的资源边界超时、最大轮次、重试预算、输出保留上限、显式取消与清理也应在模型提示词之外配置——提示词可以解释策略但执行不了策略。✅ 上线前 8 问安全自检清单整理自 docs/concepts/safety.md建议直接贴进团队 checklist生成代码跑在 OS 级沙箱里吗智能体只拿到了任务所需的文件、网络和凭据吗密钥和管理 API 已隐藏或根本不存在吗有状态工具按任务实例隔离了吗不可信输入是作为数据传入的而不是拼进提示词外部操作有确定性代码复核吗Runner 能超时、取消、清理子进程吗持久化 trace 可供事后审查吗NOOA 默认对每次 LLM 调用与代码执行全量追踪总结NOAA 的安全模型可以浓缩成一句话框架内的 AST 校验code_validator.py负责防意外OS 级沙箱sandbox/guards.py负责防恶意最小权限的 API 设计safety.md负责把爆炸半径压到最小。三层各司其职缺一不可——这才是执行 LLM 生成代码安全吗这个问题的完整答案。【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考