本页目录
L03 练习
练习 1:新增动作 select(n, value)(方法练习)
DSL 当前只有 5 招,没有下拉选择。真实网站有 <select> 下拉框(如选「每页显示 50 条」)。请:
- 在 DSL 里新增
select(n, value)动作:选中编号 n 的<select>元素,选值为 value 的<option>。 - 加正则、加白名单、加校验(value 必须是该 select 的合法 option)、加执行(Playwright 的
select_option)。 - 在 L00/L01 测试页里加一个含
<select>的页,跑通。
验收:select(2, "50") 能正确切换下拉框;非法 value(选项里没有的)被校验拒绝并给出结构化错误。
练习 2:量化「结构化错误回注」的收益(设计实验类)
本课主张「非法动作不崩,转结构化错误回注重试」。用实验量化它比「直接崩」好多少:
- 假设:有回注重试的 agent,任务成功率 > 无回注(崩了就失败)的 agent。
- 实验设计:
- 写一个 mock LLM:前 2 步故意输出非法动作(
click(99)),第 3 步才输出合法动作。 - 跑两个版本:A 遇非法动作直接 return 失败;B 遇非法动作回注重试(最多 3 次)。 - 对比:A 成功率(0%,第 1 步就崩)vs B 成功率(应 100%,第 3 步成功)。 - 预期:A 0%,B 100%——回注让 agent 从「一次幻觉全盘失败」变成「能自我纠正」。
验收:输出两版成功率对照表,B 显著高。诚实标注这是 mock LLM 演示(真实 LLM 会不会在第 3 步纠正取决于模型能力,但机制本身成立)。
提示:这其实就是 L04 最小 agent 循环的雏形——本练习提前用 mock 把「回注」的价值孤立出来验证。
练习 3:动作白名单的安全意义(理解类)
本课的 ACTION_WHITELIST 是固定 5 个动作。回答:
- 如果 LLM 输出
goto("https://evil.com"),当前 DSL 会怎么处理?(提示:parse 阶段就 None,校验返回格式错误) - 为什么不提供
goto(url)动作?这和 L07 安全主线的「域名 allowlist」是什么关系? - 对比自由代码行动空间(CodeAct 式,LLM 输出
page.goto("anywhere")直接执行):白名单拦住了什么?代价是什么?
验收:能说清「不提供 goto = 导航只能通过点击本页链接完成 = 跳转目标受当前页内容约束 = 比 goto(anything) 安全得多」。并指出代价是「不能直接访问已知 URL」(但 research-assistant 的 browse 是从搜索结果链接点进去的,不需要 goto)。
练习 4:思考题——DSL 会不会限制太死(取舍类)
5 个动作够不够?回答:
- 举一个 5 招 DSL 完成不了的浏览器任务(提示:拖拽 drag-drop、文件上传、hover 触发菜单)。
- 这些任务在 research-assistant 的「翻页取证」硬任务里会出现吗?
- 如果出现了,是该扩 DSL(加
drag/upload/hover)还是换路线(视觉坐标点击)?取舍是什么?
验收:能举出 DSL 力不能及的场景,但判断它们在硬任务里不常见(翻页取证就是 click/type/scroll);若真遇到,扩 DSL 比 走视觉路线便宜,但 hover/drag 这类鼠标轨迹操作视觉坐标更自然——这是 L05 视觉路线的存在理由之一。