资讯详情

CUAWright Skill Factory 示例全解:从「最早直飞航班」技能看可复用、可验证的代码级 Web Agent 技能

📅 2026/10/10 2:45:27 | 华诺云谱 👁 阅读
CUAWright Skill Factory 示例全解:从「最早直飞航班」技能看可复用、可验证的代码级 Web Agent 技能
人工智能AI Agent浏览器控制代码智能体【免费下载链接】CUAWrightA simple SWE style browserdesktop agent framework that achieves SOTA results on long horizon web tasks.项目地址https://gitcode.com/gh_mirrors/web/CUAWright点击查看免费下载导读本文以 extensions/skill-factory/src/cuawright/webwright/skill_factory/examples/README.md 为主线完整剖析 CUAWrightWebWrightSkill Factory 自带示例库的结构、已入库技能、三种运行方式与整体重建流程。读完后你将能独立运行一个无模型、约 40 秒出结果的浏览器技能skill.py能用route让智能体借用旧技能解决近似新任务能用build把三段真实轨迹蒸馏成带五个参数的可执行技能并理解meta.json、replays.json、flights.skill.yaml这些构件之间的生成关系。1. 示例库全景一个零手写的完整闭环示例目录examples/不是一个零散的演示集合而是 Skill Factory 完整工作流的快照——库中每一份产物都是learn命令的逐字输出verbatim output没有任何手工编写的部分。其目录结构如下examples/ ├── flights.skill.yaml # 已入库技能的规格来源 —— 用 build 重建即可复现整条链路 ├── trajectories/ # 三段真实求解轨迹SEA→JFK / SFO→BOS / LAX→ORD │ ├── sea_jfk/ ├── sfo_bos/ └── lax_ord/ # 各含 task.json / final_script.py / agent_response.json ├── solve_with_library.sh # 求解包装器技能提示 答案输出指令 ├── learned_library/ # 已入库产物skill.py meta.json replays.json │ └── what_is_the_earliest_nonstop_flight_from_2c8dab1/ ├── tasks.example.json # 手动模式填好的任务列表模块 README 第 6 步 └── batch.example.json # 手动模式填好的清单模块 README 第 2 步从目录布局就能读出 Skill Factory 的设计哲学flights.skill.yaml是母体规格三条轨迹、验证模式、蒸馏参数都写在这里build读到它就能把整个流程重跑一遍trajectories/是原材料即使你从未运行过 WebWright也可以用learn直接把这些现成轨迹蒸馏成技能learned_library/是最终产物一份可独立运行、已被严格验证的程序化技能这正是技能是程序而非提示词这一核心理念的实体化。模块 READMEsrc/cuawright/webwright/skill_factory/README.md在示例一节中明确标出了这三个文件的对应关系examples/README.md负责讲解已入库技能与示例输入本文即围绕它展开。2. 已入库技能五参数、三重验证的「最早直飞航班」示例库的核心产物是 learned_library/ 下编号为2c8dab1的技能目录它由三段从零开始的 Google Flights 求解SEA→JFK、SFO→BOS、LAX→ORD分别耗时 59、25、40 个智能体步骤经learn --verify strict分组蒸馏而成三段轨迹对齐后相同部分沉淀为程序骨架差异部分被提升为五个参数。2.1 元数据即技能档案meta.jsonmeta.json 记录了该技能的完整档案{ template: What is the earliest nonstop flight from {{origin_city}} ({{origin_code}}) to {{destination_city}} ({{destination_code}}) on {{date}} (one-way)? Return the answer as a list: [flight_number, airline, departure_time], e.g. [\AS 336\, \Alaska\, \6:00 AM\]., provenance: update-refined, site: www.google.com, summary: Refined from 3 gate-passed solves; parameterized primitives., signature: { params: [origin_city, origin_code, destination_city, destination_code, date], call: python skill.py taskspec.json }, output_schema: { type: array, items: { type: string } }, n_solves: 3, revisions: 1, verified: true, grade: executable }几个关键字段的含义字段含义template任务模板{{...}}即被提升出的参数槽位回答格式一并固化signature.params五个参数起飞机场城市、机场三字码到达机场城市、机场三字码以及日期signature.call程序化调用方式python skill.py taskspec.json回放与程序化调用都走这条路径output_schema输出必须是一个字符串数组长度为 3元素全为字符串n_solves/revisions3 次求解、1 次修订update-refined表示在后续求解中原地进化过verified: true/grade: executable已通过双重门禁且回放验证可达可执行级别而 replays.json 则记录了技能必须复现的三条标准答案LAX→ORD 的[UA 729, United, 12:10 AM]、SEA→JFK 的[AS26, Alaska, 7:00 AM]、SFO→BOS 的[B6 434, JetBlue, 6:00 AM]——这就是--verify strict在回放时逐条核对的金标准。2.2 为什么选航班时刻表作为示例任务示例刻意选择最早直飞航班而非机票价格是因为航班时刻表是一个稳定、与客户端无关、页面直白陈述的事实今天的答案、明天的答案、换一台机器跑答案都一样这恰好是--verify strict与独立复用有意义的前提——如果答案是随时波动的价格严格回放必然失败示例 README 明确对比同一页面上的票价fare会同时让三种严格验证全部失效。因此技能在未见过的航线 SEA→DEN 上独立运行仅需10 个固定步骤 / 约 40 秒 / 全程无模型参与并且一个与模型无关的独立探针independent model-free probe验证了页面结论一致。更详细的实测数据复用比从零求解更省、更稳记录在模块 README 的对比表格中。3. 运行方式一独立运行技能无 API Key约 40 秒技能本身就是一个普通 CLI 程序两种等价调用方式# 方式一五个参数以 --flags 传入人类友好 python learned_library/what_is_the_earliest_nonstop_flight_from_2c8dab1/skill.py \ --origin-city Seattle --origin-code SEA --destination-city Denver --destination-code DEN --date 2026-08-26 # 方式二位置参数传 taskspec.json回放与程序化调用 python skill.py taskspec.json # taskspec {params: {origin_city: ..., ...}}从 skill.py 源码可以看到文件头部的_skillfactory_cli()是 Skill Factory 自动注入的CLI 入口垫片entry shim它保证两种调用方式的结果完全一致单参数且不以-开头时视为taskspec.json路径直接放行回放路径必须保持原样否则把--flags组装成一份临时taskspec.json再交给主程序。注释明确写着auto-added by skill_factory; do not edit。运行时会打印它执行的十个固定步骤open Google Flights homepage → set trip to one-way → set route airports → set departure date → search → apply nonstop filter → sort → parse choose earliest → open earliest row → extract flight number以及截图保存位置。这些步骤编码在技能程序里而不是由模型现场选择——这正是技能即程序与技能即提示词的本质区别。运行目录位于$WORKSPACE_DIR下保存完整轨迹包括runs/run_XXX/screenshots/与skill_log.txt。需要注意的边界模块 README 中的提醒同样适用strict回放只能证明技能在原始环境中复现了训练结果。由于它用 Playwright 操作真实站点OS 差异或站点改版仍可能破坏它——例如在 Linux 上学习的ControlA清空输入框技巧在 macOS 上可能失效。回放验证不等于跨平台泛化。当独立执行失败时route仍可以在adapt模式下把技能交给智能体作为先验知识新求解可以再喂回learn把新环境支持并入技能。4. 运行方式二route让智能体借用技能当新任务与技能几乎匹配、但无法直接执行时例如现有技能找的是最早出发而新任务要找最短时长的直飞route会检索库、评估适配度、做出run/adapt/skip三选一的决策然后执行该决策python -m cuawright.webwright.skill_factory route \ --task What is the nonstop flight with the shortest flight duration from Seattle (SEA) to Denver (DEN) on 2026-08-26 (one-way)? Return the answer as a list: [flight_number, airline, duration]. \ --library ./learned_library \ --start-url https://www.google.com/flights -c your_model.yaml三种决策的含义run技能可直接执行——无需模型直接运行技能程序adapt技能作为**先验prior**交给智能体智能体复用其导航/操作核心只改动最后一步skip没有可用技能从零求解。若独立运行失败route会自动回退到智能体模式。去掉--start-url则只打印决策、不执行任何动作方便你在花钱跑模型之前先检查匹配结果。该示例任务最短时长是现有技能最早出发无法原样运行的因此route会判定为adapt并用智能体适配。模块 README 给出了gpt-5.4下五轮复用与五轮从零求解的对照数据平均步骤 26.0 → 21.8最坏情况 39 → 29最终尝试次数 5.8 → 4.6正确率均 100%技能独立运行则固定 10 步。复用之所以更省、波动更小是因为智能体起步于一份已调试好的工作流而不是重新勘探站点。5. 运行方式三手动模式与现成清单在基准测试、登录态站点或不希望 LLM 猜测模板的场景下Skill Factory 还提供手动模式由你自己声明模板、参数与准入条件gate甚至可以把评测器的判定直接作为门禁接入。模块级文档 docs/skill_factory/manual.md 有完整说明而示例目录提供了两份已填好的输入样例tasks.example.json一个填好的任务列表对应模块 README 第 6 步每条含id、task、params与gold标准答案例如commits_a询问 Jane Doe 在 2023-01-05 提交了几次gold: [1]batch.example.json一个填好的清单对应第 2 步声明template、每条runs的dir、admit是否准入、params、verdict、site与output_schema示例中甚至保留了admit: false的运行——展示了不合格求解被门禁挡在库外的真实形态。6. 重建整条链路buildflights.skill.yamlflights.skill.yaml 是示例库的母规格——learned_library/正是由它产出重跑即可复现整个循环python -m cuawright.webwright.skill_factory build flights.skill.yaml --library ./library --jobs 36.1 规格文件逐段解读task: What is the earliest nonstop flight from {origin} to {destination} on {date} (one-way)? Return the answer as a list, [flight_number, airline, departure_time], e.g. [AS 336, Alaska, 6:00 AM]. start_url: https://www.google.com/flights instances: - {origin: Seattle (SEA), destination: New York (JFK), date: 2026-08-15} - {origin: San Francisco (SFO), destination: Boston (BOS), date: 2026-08-15} - {origin: Los Angeles (LAX), destination: Chicago (ORD), date: 2026-08-15} build: verify: strict draws: 2 # 独立蒸馏尝试次数——一次尝试可能产出脆弱的技能 verify_rounds: 2 # 单次尝试内的修复轮数——把失败反馈给它再试 on_fail: reference # reference 回放失败时保留可读的先前版本 | reject 要么可执行、要么什么都不留各字段的实战含义instances三个求解实例。文件头注释特别说明date故意钉死在 2026-08-15以保证可复现——但这也意味着它会过期日期过去后 Google Flights 无法再展示求解必然失败。把日期移到任意近期未来日期即可重新生效实测 Google Flights 仍会列出约 11 个月后的直飞航班所以远期日期能换来接近一年的有效期。verify: strict因为时刻表静止不动蒸馏出的技能必须逐字复现记录的答案若答案是价格这类波动数据则应改用verify: shape只校验输出结构。draws与verify_rounds蒸馏本身是随机的——模块 README 实测约 40% 的尝试首次即通过验证所以默认 2 次独立尝试、每次尝试内 2 轮修复。失败的蒸馏重试成本远低于重新求解build会把轨迹保留在build_outputs/。on_fail: reference默认策略——回放失败时把未验证候选保留为可读先验供adapt模式使用--on-fail reject则实行可执行或什么也不留的严格策略。build会先展示计划任务再逐实例求解--dry-run只打印计划无需 API Key、不打开浏览器--jobs N控制并行求解数建议 3–5 以避免站点限流。6.2 已有效果从learn到已入库技能即使不重新求解示例目录还提供了三段真实轨迹trajectories/让你可以直接体验蒸馏环节cd extensions/skill-factory/src/cuawright/webwright/skill_factory/examples python -m cuawright.webwright.skill_factory learn trajectories --library ./library --verify offlearn每段轨迹只读三个文件task.json任务文本与 start_url模板由此推断、final_script.py智能体写出的可运行脚本即蒸馏对齐的原材料、agent_response.json答案回放验证的基准。原始运行目录约 12 MB、几乎全是截图这些都不参与蒸馏求解机器提示词里的绝对库路径已被清洗。三段轨迹 → 一个模板 → 五个提升参数 → 一个技能约 100 秒、仅需一次 API Key分组与蒸馏是模型调用--verify off从不打开浏览器因此不受日期过期影响、也不可能被拒绝产出标注为grade: unverified——它与reference是两种不同状态reference意味着回放运行过且失败了而这里什么都没运行所以只能叫unverified想看完整验证--verify strict默认则需 ~5–13 分钟、每个实例各开一次浏览器且首次尝试可能被拒绝——这是门禁在正常工作重跑即可。轨迹钉死在 2026-08-15航司一旦改期或日期过期回放就得不到原答案、技能即被拒绝--verify shape也救不了第二种情况技能崩溃根本写不出非空答案。7. 配套设施与参考文档7.1 求解包装器 solve_with_library.shsolve_with_library.sh 展示了带库求解的标准做法用with_skill_hint把技能提示skill hint与答案输出指令answer-output instruction拼进任务文本再交给 WebWright CLI./solve_with_library.sh task text START_URL /abs/path/to/library [webwright args...]其内部逻辑先拼出SPECAdditionally, write the final answer into $WORKSPACE_DIR/agent_response.json as {retrieved_data: the answer, as a JSON list}.再调用cuawright.webwright.skill_factory.with_skill_hint(task spec, task..., library...)生成带提示的完整 prompt最后exec python -m cuawright.webwright.run.cli main -t $PROMPT --start-url $URL。从 trajectories/sea_jfk/task.json 可见真实轨迹的任务文本中也嵌入了对cuawright.webwright.tools.skill_use的一次性查询指令返回{verdict, skill_id, source_path, how_to_reuse}并区分use复制脚本、填参数/adapt复用核心、只改最后一步/skip从零求解。7.2 自定义模型网关需要让浏览器智能体使用与蒸馏不同的模型时可复制 model_gateway.example.yaml设置model_name与openai_endpoint再以-c base.yaml -c $HOME/my_gateway.yaml传给build或route注意-c会替换默认配置务必带上base.yaml。其中openai_endpoint必须是**完整请求 URL含/responses路径**而非 base URL大脚本需要max_output_tokens: 16000慢网关需要request_timeout_seconds: 600。7.3 安装与更多文档Skill Factory 是 CUAWright 的可选伴生包基础 wheel 不含它、正常浏览器/桌面运行也不依赖它pip install -e .[skill-factory] -e extensions/skill-factory cuawright-skill-factory --help继续深入可阅读模块 README整体架构、Quick Start、蒸馏注意事项、结果数据与限制手动模式手册自行声明模板、参数与准入条件基准测试 / 登录站点场景参考文档验证与分级、全部 CLI 标志与环境变量、组件地图与后端轨迹说明三段轨迹何时过期、unverified与reference的语义区别。结语示例目录把 Skill Factory 的整个生命周期压缩成了一棵可读的目录树flights.skill.yaml是规格母本trajectories/是蒸馏原料learned_library/是可独立运行、已被严格验证的最终技能两份*.example.json则是手动模式的现成输入。你可以先无成本地跑skill.py感受无模型技能10 步 / 约 40 秒再让route演示智能体如何借旧技能解新任务最后用build把整条链路原样重建。这一整套示例本身就是技能是程序、程序可验证、验证过就能进化这一理念的最佳注脚。赞分享人工智能AI Agent浏览器控制代码智能体【免费下载链接】CUAWrightA simple SWE style browserdesktop agent framework that achieves SOTA results on long horizon web tasks.项目地址https://gitcode.com/gh_mirrors/web/CUAWright点击查看免费下载相关推荐随身携带的编程神器零配置移动开发环境终极解决方案随身携带的编程神器零配置移动开发环境终极解决方案 你知道吗想象一下这样的场景当你坐在咖啡馆里突然灵感迸发想要写代码却发现电脑上没有安装开发工具。或者当人工智能AI Agent浏览器控制代码智能体从工作代码到可复用技能Skills 仓库 web-technique-to-skill 的 Web 技法萃取全流程从工作代码到可复用技能Skills 仓库 web technique to skill 的 Web 技法萃取全流程 本文以 Skills 仓库中 web teadk-go Skill 实战指南以 Weather 技能为例编写可复用的 Agent 技能adk go Skill 实战指南以 Weather 技能为例编写可复用的 Agent 技能 本篇文章以 examples/skills/skills/wea人工智能大模型AI AgentAgent 框架多智能体工具调用MCP ClientsAgent 记忆上一篇使用 AWS SDK for Kotlin 操作 AWS GlueCrawler、Data Catalog 与 ETL Job 实战指南下一篇Audio8 ASR Infinite 无限长转写原理Rolling KV Cache 如何让内存与延迟保持恒定创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑