AI 与大模型 · 第 4 期

让 Agent 写代码,又不让它爆炸

AST 解析安全网 · AST sandboxing

让 AI 写代码又不让它炸——靠的是语法树这道安全网。AST 解析在执行前扫描代码,拦截危险调用/导入/属性访问。比正则准(懂语法不是猜字符串)、比容器轻(不用起容器)、可定制(白名单你想允许的)。
⏱ 约 11 分钟 🎯 让 Agent 执行代码、怕它闯祸的工程师 📦 源:smolagents §6

01一个反共识:正则拦不住,容器太重

拦危险代码的两种常见做法都有问题:

AST 解析是中间路线:把代码 parse 成语法树,遍历每个节点,检查 Import/Call/Attribute 是不是在白名单里。懂语法所以绕不过,不起容器所以快。smolagents 的 CodeAgent 就靠这个让 Agent 写代码又不爆炸。

正则懂字符串,AST 懂语法。
灏天文库 · AI 与大模型 P.11

02AST 沙箱演示:选代码看拦截

选一段代码,点"扫描 AST",看沙箱拦截哪些、放行哪些。

🌳 AST 沙箱演示
选代码 → 扫描 AST → 看拦截/放行。

03白名单:你想允许的,才允许

AST 沙箱的核心是白名单,不是黑名单。默认所有 import/call 都拦,只放行你显式允许的:

白名单要按你的场景配:数据分析 Agent 放 pandas+numpy,不放网络;爬虫 Agent 放 requests,不放文件写入。最小白名单 = 最大安全,每多放一个模块就多一个攻击面。

默认全拦,
放行的是例外。
灏天文库 · AI 与大模型 P.12

04带走这套清单

✅ AST 沙箱 6 条可执行规则

  1. 用 AST 不用正则:正则只懂字符串,AST 懂语法,绕不过。
  2. 白名单不用黑名单:默认全拦,只放行显式允许的模块/函数。
  3. 拦逃逸入口:__import__、__builtins__、__class__ 一律拦。
  4. 按场景配白名单:数据分析放 pandas,爬虫放 requests,最小化。
  5. AST + 资源限制双保险:AST 拦危险调用,再加 CPU/内存/时间限制防死循环。
  6. 定期审白名单:每月看哪些放行的实际没用过,收回权限。
最小白名单,
等于最大安全。
灏天文库 · AI 与大模型 P.13