Webwright CLI与配置系统详解:-c标志YAML配置叠加技巧完整指南
【免费下载链接】WebwrightA simple SWE style browser agent framework that achieves SOTA results on long horizon web tasks.项目地址: https://gitcode.com/gh_mirrors/web/Webwright
Webwright 是一个轻量级 SWE 风格浏览器智能体框架,让编码模型通过终端驱动浏览器完成长程 Web 任务。本文详解 Webwright CLI 命令行入口与 YAML 配置系统,重点讲解如何用可重复的-c标志叠加多份配置文件、内联覆盖参数,以及官方内置配置的推荐组合方式,帮助新手一次配好模型、浏览器与输出目录。
Webwright CLI 是什么:约 150 行的极简入口
Webwright 把"智能体 + 浏览器 + 模型"三件事全部收敛到一个命令行入口 src/webwright/run/cli.py 中。它的理念是:终端是智能体唯一需要的东西——模型在终端里写 Playwright 脚本、执行、看截图、修 bug,最终交付一个可重复运行的 Python 脚本。
整个流程只需要一条命令:
python -m webwright.run.cli \ -c base.yaml -c model_openai.yaml \ -t "Search for flights from SEA to JFK on 2026-08-15 to 2026-08-20" \ --start-url https://www.google.com/flights \ --task-id demo_openai \ -o outputs/default每次运行都会在输出目录生成轨迹(trajectory.json)、截图和调试产物,方便事后复盘。运行完成后,你可以用内置的轨迹查看器对比不同智能体框架在同一个任务上的执行轨迹与 token 消耗:
一键安装:3 步准备好 Webwright CLI
步骤 1:获取代码并安装
git clone https://gitcode.com/gh_mirrors/web/Webwright cd Webwright pip install -e . playwright install chromium步骤 2:设置 API Key 环境变量
根据你选择的模型后端设置对应密钥:
| 后端 | 配置文件 | 需要的环境变量 |
|---|---|---|
| OpenAI | model_openai.yaml | OPENAI_API_KEY |
| Anthropic | model_claude.yaml | ANTHROPIC_API_KEY |
| OpenRouter | model_openrouter.yaml | OPENROUTER_API_KEY |
步骤 3:运行第一个任务
使用上面的 Quick Start 命令即可。注意image_qa与self_reflection两个内置工具默认复用你配置的主模型,所以 Claude 运行不需要额外提供 OpenAI 密钥。
-c 标志与常用参数:完整速查表
Webwright CLI 的参数设计非常克制,核心就 5 个:
| 标志 | 说明 |
|---|---|
-c | 配置文件,可重复使用,按顺序叠加 |
-t | 自然语言任务描述 |
--start-url | 起始页面地址 |
--task-id | 输出子文件夹命名 |
-o | 输出根目录 |
--debug | 以有头模式启动浏览器,打开开发者工具,退出时保持窗口打开 |
关键细节:如果你完全不传-c,CLI 会回退到默认组合base.yaml + model_openai.yaml(定义在 cli.py 中的DEFAULT_CONFIGS)。这解释了为什么新手第一条命令就能跑起来。
另外,--debug不只是"打开浏览器窗口"——它会额外向合并配置里注入 headless=false、devtools=true、slow_mo_ms=250 等一组调试开关,非常适合排查选择器问题。
YAML 配置叠加:-c 标志的核心机制
Webwright 配置系统的精髓是分层叠加(stacking):-c可以写多次,每份 YAML 都会被完整解析后按顺序递归合并。合并逻辑实现在 src/webwright/utils/serialize.py 的recursive_merge函数中,规则简单直观:
- 深度合并:同名的字典节点逐键递归合并,而不是整体覆盖
- 后者胜出:后出现的
-c文件覆盖先出现文件的同名字段 - UNSET 哨兵:被标记为 UNSET 的值跳过,不会把前一层的有效值清空
一个典型叠加顺序(从左到右、优先级递增):
-c base.yaml ← 基础配置:模型超时、提示词模板、智能体循环 -c local_browser.yaml ← 变体配置:改用常驻本地浏览器 -c model_openai.yaml ← 模型修饰器:指定 openai 后端与模型名官方内置的 7 份 YAML 配置
全部位于 src/webwright/config/ 目录:
| 配置文件 | 角色 | 典型用途 |
|---|---|---|
| base.yaml | 基础层 | 所有共享设置:提示词模板、步骤上限 100、输出目录等 |
| model_openai.yaml | 模型修饰器 | 指定 GPT 系模型与 OpenAI 端点 |
| model_claude.yaml | 模型修饰器 | 指定 Claude 模型与 Anthropic 端点 |
| model_openrouter.yaml | 模型修饰器 | 通过 OpenRouter 路由到任意模型 |
| local_browser.yaml | 运行模式变体 | 驱动实时本地浏览器会话,无需工作区工件 |
| persistent_browser.yaml | 运行模式变体 | 每个步骤复用同一常驻 Chromium 子进程 |
| task_showcase.yaml | 交付物变体 | 额外产出 task.json + report.json 供仪表盘渲染 |
| crafted_cli.yaml | 交付物变体 | 最终脚本必须是带 argparse 参数的可复用 CLI 工具 |
推荐组合示例:
# 生成可复用 CLI 工具(叠加 crafted_cli.yaml) python -m webwright.run.cli \ -c base.yaml -c model_openai.yaml -c crafted_cli.yaml \ -t "Search a red 2018-2023 Toyota Corolla on CarMax" \ --task-id my_cli_task -o outputs/default # 生成 Task Showcase 仪表盘数据(叠加 task_showcase.yaml) python -m webwright.run.cli \ -c base.yaml -c model_openai.yaml -c task_showcase.yaml \ -t "<可重复的 Web 任务>" \ --task-id my_repeatable_task -o outputs/default💡 注意:
report.json只有在叠加了-c task_showcase.yaml时才会生成;仅用 base.yaml 运行只会产出 trajectory.json 与调试产物。
进阶技巧:key=value 内联覆盖,不用写文件
除了传文件路径,-c还支持key=value格式直接内联覆盖单个配置项,值会被按.拆分成嵌套结构:
python -m webwright.run.cli \ -c base.yaml -c model_openai.yaml \ -c "agent.step_limit=60" \ -c "environment.command_timeout_seconds=300" \ -t "Your task" -o outputs/default这是临时调整超参数最省事的方式:不用新建 YAML 文件,一行命令即可完成覆盖,且优先级最高。
配置快照:每次运行自动归档
Webwright 对"可复现性"很较真。每次运行时,src/webwright/config/init.py 中的snapshot_config_specs会把你传入的所有配置原样复制到输出目录的config_snapshot/下,并生成两份元数据:
config_spec_manifest.json:记录每层配置的来源与解析路径merged_config.yaml:最终合并后的完整配置
这意味着几个月后重跑或排查问题时,你能精确还原当时的每一层叠加效果。对做评测的用户来说,这是判断"某次高分/低分到底跑在哪份配置上"的可靠依据——下图就是 Webwright 在 Online-Mind2Web 基准上以 100 步预算取得的结果,这类评测正是依赖配置快照来保证可复现的:
常见问题速答
Q:-c 的顺序有影响吗?有。按书写顺序依次递归合并,后面的文件覆盖前面的同名字段,所以把最具体的变体放在最后。
Q:能用自己的 YAML 文件吗?可以。-c优先按相对/绝对路径解析文件,找不到时才回退到内置配置目录,因此你可以完全自定义配置,只需保证顶层键属于model/environment/agent/run四个命名空间即可。
Q:忘记 --debug 看不到浏览器窗口?加--debug即以有头模式启动本地 Playwright,同时自动开启 devtools、放慢到 250ms 并让浏览器在退出时保持打开。
Q:任务失败后去哪找线索?查看输出目录下的 trajectory.json、final_runs/run_<id>/final_script_log.txt和 screenshots 文件夹,配合config_snapshot/可完整还原运行现场。
【免费下载链接】WebwrightA simple SWE style browser agent framework that achieves SOTA results on long horizon web tasks.项目地址: https://gitcode.com/gh_mirrors/web/Webwright
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考