关联主问题:#251
类型
Browser Skill / API 契约与提示语义
现象
同一用户请求中,Agent 重复调用 Browser Skill 6 次,并在失败后猜测了不存在的 API:
tab.evaluate:实际 evaluate 位于 tab.playwright.evaluate
browser.tabs.query:实际 API 提供 browser.tabs.list
Skill 文档要求先调用 browser.documentation(),但本次会话没有执行。
根因分析
Browser Skill 中“Every user turn starts with fresh JavaScript bindings”和“in every turn invoke this Skill”的表述,与 runner 暴露给模型的内部 Turn 1..N 容易混淆。模型可能把每个内部 iteration 都当成新的用户 turn,于是重复激活 Skill。
同时,未知成员当前通常表现为普通 JavaScript is not a function,没有告诉模型:
- 哪一层对象支持该能力
- 可用的相近 API 是什么
- 是否应先查询 documentation
建议修复
- 明确区分 user message turn 与内部 agent iteration
- 每个用户请求只注入/激活一次 Browser Skill;后续 iteration 复用已建立上下文
- 将 documentation 调用纳入首次使用的可验证引导,而不是仅靠文字要求
- 对未知成员返回结构化契约错误,并列出少量相近的合法成员
- 在 Skill 示例中覆盖 evaluate、tabs.list、locator fill 的标准路径
验收标准
- 单个用户请求内 Browser Skill 最多激活一次
tab.evaluate / tabs.query 误用能得到明确的替代 API 提示
- 首次浏览器调用前可确认 API 契约已加载
- 回归会话中不再出现未文档 API 猜测
关联主问题:#251
类型
Browser Skill / API 契约与提示语义
现象
同一用户请求中,Agent 重复调用 Browser Skill 6 次,并在失败后猜测了不存在的 API:
tab.evaluate:实际 evaluate 位于tab.playwright.evaluatebrowser.tabs.query:实际 API 提供browser.tabs.listSkill 文档要求先调用
browser.documentation(),但本次会话没有执行。根因分析
Browser Skill 中“Every user turn starts with fresh JavaScript bindings”和“in every turn invoke this Skill”的表述,与 runner 暴露给模型的内部 Turn 1..N 容易混淆。模型可能把每个内部 iteration 都当成新的用户 turn,于是重复激活 Skill。
同时,未知成员当前通常表现为普通 JavaScript
is not a function,没有告诉模型:建议修复
验收标准
tab.evaluate/tabs.query误用能得到明确的替代 API 提示