跳转到内容

WebXSkill — 给 Web agent 的可执行 skill 是参数化代码 + URL 图索引

是什么

WebXSkill 是一套专给 Web agent 的 skill 学习方法:把成功完成网页任务的轨迹抽成 executable skill = 参数化代码 + 步骤级自然语言注释;用 URL 作 key 建图索引,遇到新页面直接查图找最相关的 skill。日常类比:以前 web agent 像盲人走迷宫——每个网页都从头摸;WebXSkill 把已经走通的路画成地图,每条路标着”从这里点哪个按钮、填哪个表单”,下次再走从地图上查。

旧 Web agent 路线(react / WebVoyager 起步)通常是:每次任务都让 LLM 现场看 DOM、思考、生成 click。问题:(a)相同网站反复推理同样的操作浪费 token;(b)DOM 解析容易跑偏,特别是动态内容;(c)跨任务没有积累——昨天学会用 amazon.com 搜索的能力今天不能直接用。

WebXSkill 三件:(1)skill 表示——每条 skill 是 def task(params): ... 形式的可执行 python,含步骤级自然语言注释;(2)URL 图索引——skill 按 URL 域和 path pattern 建图,新任务匹配相似 URL 拿候选 skill;(3)参数化——skill 不是固定路径,而是接受 (query, filters) 这种参数,运行时填具体值。论文报告 WebArena +9.8、WebVoyager +12.9。

为什么重要

不理解 WebXSkill,下面这些事都没法解释:

  • 为什么 2026 年 Web agent 主流路线开始统一走”积累式”——纯 reactive 已摸到天花板
  • 为什么 URL 是天然的 skill key 但之前没人显式用——它比 DOM hash 稳定多
  • 为什么”参数化代码 + 自然语言注释”两层表示比单代码或单注释好——LLM 改写靠注释、执行靠代码
  • 为什么 WebArena / WebVoyager 这类 benchmark 上提升空间还在 10pp 量级——skill 复用是大坑

核心要点

WebXSkill 的关键拆成 三步

  1. 可执行 skill 表示:每条 skill 长这样:

    def search_and_book(site: str, query: str, date: str):
    # 步骤 1:导航到搜索页
    goto(f"https://{site}/search")
    # 步骤 2:填查询框
    fill('input[name="q"]', query)
    # 步骤 3:选日期
    click(f'date-picker[data-day="{date}"]')
    # 步骤 4:点搜索
    click('button[type=submit]')

    代码可直接调 Playwright 跑,注释让 LLM 在出错时改写。

  2. URL 图索引:每条 skill 关联一组 URL pattern(如 *.amazon.com/s?*)。建一张图:node = URL pattern,edge = skill。新任务进来取目标 URL,查图最近邻拿 top-K 候选 skill。比向量检索 skill 描述准——URL 是用户意图的强信号。

  3. 参数化运行:skill 不是录制脚本,是有参数的函数。LLM 填参数:从任务描述 “在 amazon 搜 noise-canceling headphones 价格 < 200” 抽出 query="noise-canceling headphones"max_price=200,调用对应 skill。

三步咬合:可执行让 skill 直接 run、URL 索引让查询准、参数化让一条 skill 复用多次。这种结构在 web 场景特别合适,因为 URL 已经把”我要去哪”这件事编码得很清楚。

实践案例

案例 1:URL 图比向量检索准

任务:“在 amazon 搜耳机”。

  • 向量检索看任务描述 “搜耳机” 命中 5 条 skill:amazon-search、ebay-search、taobao-search、google-search、bing-search——分不出来。
  • URL 图索引看目标 URL “amazon.com” 直接定位到 amazon 域下的 skill,pattern *.amazon.com/s 的命中只有 amazon-search 一条。

URL 是结构化信号,匹配比文本检索准且省 LLM 调用。

案例 2:参数化让一条 skill 当多条用

skill search_and_filter(site, query, filter)

  • 任务 A:“amazon 搜 lamp 排序按 price-asc” → search_and_filter("amazon.com", "lamp", "price-asc")
  • 任务 B:“amazon 搜 chair 筛 4-stars-up” → search_and_filter("amazon.com", "chair", "rating>=4")
  • 任务 C:“ebay 搜 watch” → search_and_filter("ebay.com", "watch", None)

一条参数化 skill 顶 N 条录制脚本,库不爆炸。

案例 3:执行错了改注释不改代码

skill 执行:DOM 选择器 input[name="q"] 失败——网站改版了,搜索框现在是 input[id="search-query"]

  • LLM 看注释 ”// 步骤 2:填查询框” 知道意图
  • 看实际 DOM 找新选择器
  • 改 fill 那一行,但保留步骤注释和函数签名
  • skill 库更新,下次直接用新版

注释是”意图层”,代码是”实现层”——意图稳定,实现可换。

踩过的坑

  1. URL pattern 写法:太严(精确路径)匹配率低,太宽(仅域名)易拿错 skill。论文用 path 前缀 + query string 模板做平衡。
  2. 参数化深度有 trade-off:参数太多 skill 复用强但 LLM 填参数易出错;参数太少 skill 多但易出现”近似 skill 重复”。
  3. DOM 选择器易脆:网站改版会让大批 skill 失效。论文用注释做兜底——选择器挂了可改写、但 skill 整体存活。
  4. 登录 / cookies / captcha 会破 skill 复用:某些 skill 的执行依赖登录态,跨 session 重放就挂。论文给 skill 标 “stateful: true” 做隔离。

这个例子也说明:skill 库的稳定性不只是数量问题,更是表示方式的问题——双层表示比单层表示有更长的寿命。

适用 vs 不适用场景

适用

  • 反复访问的网站(电商 / 社交 / 工具站)——URL pattern 收敛
  • 任务可参数化(搜索 / 填表 / 提交)——结构化输入空间
  • 有 Playwright/Selenium 等可执行后端
  • 网站不频繁 redesign——选择器寿命够长

不适用

  • 一次性任务(去陌生站只去一次)——建 skill 不划算
  • 高度动态内容(SPA 频繁改 DOM)——selectors 失效率高
  • 反爬强的网站(Cloudflare / captcha)——skill 跑不起来
  • 任务高度自由文本(不能参数化)

历史小故事(可跳过)

  • 2017:Selenium IDE 让人录制网页操作生成可重放脚本——“web skill” 雏形,但全人写
  • 2022:WebGPT / WebShop 第一波 LLM web agent,all-in 看 DOM 现场推理
  • 2023:MindAct / WebVoyager benchmark 出来,agent 复用 skill 的需求显现
  • 2024 上半年:CodeAct 系列把”代码作为 action”推到主流,给 skill 表示提供模板
  • 2025:URL-based 索引在 RAG 工程界开始流行,但用在 agent skill 上较少
  • 2026 年初:WebXSkill 把代码 skill + URL 索引 + 参数化合在一起——是 web agent skill 路线的整合工作
  • 同期mind-skill / skill-as-pseudocode / effiskill 各做通用 skill 工作

WebXSkill 的特殊之处是把”web 这种结构化环境”的特点用足——URL 这种 key 别的领域没有。

学到什么

  1. 可执行代码 > 自然语言描述:能 run 的 skill 直接用,描述还要 LLM 二次解读
  2. URL 是 web 上的天然 skill key:跨任务稳定且有结构
  3. 参数化降低库膨胀:一条参数化 skill 顶 N 条录制脚本
  4. 意图和实现两层表示:注释 + 代码缺一不可,注释帮重写、代码帮执行
  5. stateful skill 要隔离:登录态 / cookies 跨 session 破坏复用
  6. URL 图索引可推广:API 调用、数据库访问等也有”endpoint 是 key”的天然结构

延伸阅读

关联

反向链接

  • effiskill —— EffiSkill — 把代码效率优化经验抽成两层 skill 库
  • mind-skill —— MIND-Skill — 用归纳和演绎双 agent 抽 skill 并保证质量
  • mmskills-multimodal —— MMSkills — 把视觉 agent 的”操作经验”做成多模态卡片
  • react —— React UI 组件库
  • skill-as-pseudocode —— Skill-as-Pseudocode — 把 agent 笔记本写成可校验的伪代码
  • skill-pro-nonparametric-ppo —— Skill-Pro — 不动权重学可复用 skill 的非参数 PPO
  • skill-sd-self-distillation —— Skill-SD — 用 agent 自己抽出的 skill 当 dynamic teacher 自蒸馏
  • voyager —— Voyager — LLM 终身学习智能体