L06 练习
练习 1:设计实验验证「CodeAct vs 工具调用」的能力边界(设计实验类)
本课定性说了"代码比工具强"。设计实验量化:
-
构造 5 个任务(难度递增): - 简单:算一个表达式的值(工具和代码都能做) - 中等:对 10 条数据排序去重(工具要专门定义,代码一次搞定) - 难:分组统计 + 可视化(工具做不动) - 更难:多步数据处理管道(过滤→分组→排序→格式化) - 极难:递归计算(如斐波那契)
-
对比: - 工具调用方式:只给
calculate(expr)一个工具,看哪些任务做不了 - CodeAct 方式:给沙箱,看哪些任务能做 -
预期:简单任务两者都能,复杂任务只有 CodeAct 能。
验收:输出能力对比表,标出每个任务"工具能/不能""CodeAct能/不能"。诚实标注:工具调用如果给够工具(分组工具、统计工具、可视化工具...)也能做,但每个新需求要加工具——这就是 CodeAct 的优势。
练习 2:升级沙箱到容器级
本课用进程级沙箱。升级到 Docker 容器级:
- 写一个 Dockerfile,只含 Python + 安全标准库。
- sandbox_exec 改为
docker run --rm --network=none --memory=256m --cpus=0.5执行。 - 对比进程级 vs 容器级:安全性、延迟、资源限制。
验收:容器级沙箱能执行代码且网络完全隔离(--network=none)。诚实标注:容器级延迟更高(启动容器约 1-2 秒),适合非实时场景。
需要 Docker 环境。没有 Docker 时标注"未实测",给出实现方案。
练习 3:实现代码执行结果的缓存
同一个代码可能被多次执行(不同任务生成了相同代码)。实现:
- 代码 hash → 执行结果的缓存(dict 或 sqlite)。
- 相同代码直接返回缓存结果,不重复执行。
- 思考:什么时候缓存安全?(纯函数无副作用时;有 print/IO 时不安全)
验收:重复执行相同代码时命中缓存(执行次数不增加)。标注:只缓存纯计算代码,有 IO 副作用的不缓存。