实际上手跑这类“能自动操作电脑和浏览器”的工具之前,我先试过好几个方案:有的是纯网页自动化脚本,能跑但不够智能;有的是纯对话 Agent,能聊但“动不了手”。WorkBuddy 这类工具把两者结合了起来:用户用自然语言下达任务,模型负责把任务拆成具体步骤,工具层负责真正打开浏览器、点击按钮、填写表单、读取页面结果,并在每步执行后把观察结果反馈给模型,直到完成整个任务。
这篇文章会围绕“跑通”这件事展开:先讲清 WorkBuddy 的运作原理,再准备环境、安装依赖、启动服务,然后跑一个“打开浏览器完成搜索并返回结果”的最小示例,接着解释插件、Skill、自定义指令的作用,最后给出部署后最常见的故障排错和生产化建议。内容偏工程落地,适合刚接触 Agent、想做浏览器自动化、或者准备把这类工具接入自己工作流的开发者阅读。
1. WorkBuddy 是什么:从“聊天助手”到“能动手的 Agent”
1.1 它解决的真实问题
传统 AI 助手最大的限制是“只能给建议,不能执行”。例如让它帮你查一个页面上的数据,它能回复一段查询思路,却不能真的打开浏览器、进入页面、填入关键词、读取结果后把答案整理好交给你。
WorkBuddy 要解决的就是这个问题:把自然语言任务变成真实的电脑或浏览器操作。它的定位类似于一个“数字员工”,在明确的授权范围内,按照模型生成的计划去操作页面和桌面应用,并且每一步都能留下记录。这意味着你不仅能看到最终结果,还能回看它每一步做了什么,哪一步卡住了,哪一步执行结果不符合预期。
这在信息录入、页面巡检、数据整理、跨站信息核对这类重复性网页操作场景里非常实用。过去需要手动点几十次浏览器才能完成的工作,现在可以封装成一段指令。
1.2 一条指令背后发生了什么
一次完整任务处理链路可以拆成五步:
- 用户输入自然语言任务,例如“打开百度,搜索 WorkBuddy,返回第一条结果标题”。
- 模型把任务拆解成一系列工具调用,每个工具调用代表一个浏览器操作。
- 执行器连接浏览器,执行工具调用,比如
navigate、fill、press、extract_text。 - 浏览器返回操作结果,例如页面跳转后的 URL、页面元素文本、截图或错误信息。
- 模型观察结果,决定是继续下一步,还是终止任务并把结论返回给用户。
这五步会循环执行,直到任务完成或达到步数上限。设计成循环而不是一次生成全部步骤,是因为页面是动态的,第一步操作可能引发跳转、弹窗、动态加载,后续动作必须根据实际页面状态来调整。
1.3 为什么浏览器自动化是 Agent 最容易落地的一环
在所有“让 AI 操作电脑”的路线中,浏览器自动化相对最容易落地。原因是浏览器本身就是跨平台的图形界面容器,页面内容有 DOM 结构,元素可以通过选择器定位;Web 自动化技术也相当成熟,Playwright、Selenium 这类方案已经解决了大部分跨浏览器、等待元素、截图、网络请求拦截等问题。模型只需输出结构化的工具调用,执行器就能把这些调用翻译成浏览器指令。
相比之下,纯操作系统级自动化要对坐标、窗口层级、应用控件做更多适配,不同软件之间的控件模型差异很大。浏览器作为统一入口,天然拥有更高的可编程性和可观测性。
不过浏览器自动化并不是万能的。它依然会遇到验证码、登录态、动态渲染、反爬限制等常见问题。这一点在后续排错部分会详细展开。
2. 跑通前先把环境对齐:硬件、运行环境与浏览器选择
2.1 学习环境的最低要求
在实际项目中,环境不一致是“跑不起来”的第一大原因。建议先按下面这张表检查一遍,比直接安装依赖更节约时间。
| 项目 | 学习环境建议 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11、macOS、主流 Linux 发行版 | 三种系统都能跑,但依赖安装命令不同 |
| 内存 | 8GB 起步,推荐 16GB | 浏览器 + 模型服务同时运行时内存占用较大 |
| 运行环境 | Python 3.10+ 或 Node.js 18+ | 以项目源码要求为准,不要盲目装最高版本 |
| 浏览器 | Chrome、Edge 或 Chromium | 建议使用项目默认支持的浏览器 |
| 模型服务 | OpenAI 兼容 API 或本地 Ollama 模型 | 先选一个,跑通后再调整 |
| Git | 建议 2.30+ | 用于克隆代码和切换版本 |
在确认版本时不要只看“能执行”,要看项目依赖声明。Python 版本不匹配时,很多 C 扩展依赖会编译失败;Node 版本不匹配时,原生模块也可能出现加载错误。
2.2 浏览器准备:Chrome/Chromium 与浏览器管理策略
本地跑通时,最简单的方式是安装本项目默认支持的浏览器。如果项目基于 Playwright,也可以直接安装 Chromium:
npx playwright install chromium这条命令会下载一个独立于系统浏览器的 Chromium,适合做自动化测试。它不会影响你日常使用的 Chrome,两个浏览器的用户配置相互独立。
另一点要注意的是系统浏览器是否被企业策略托管。如果 Chrome 地址栏出现“您的浏览器由贵单位管理”的提示,说明浏览器配置受组策略或企业策略控制,自动化脚本连接调试端口、安装扩展、写入参数时很容易被策略拦截。遇到这种情况,不要尝试绕过管理限制,正确做法是:
- 打开
chrome://management查看管理状态。 - 打开
chrome://policy查看生效策略。 - 与单位管理员确认是否能提供一台不受组策略约束的测试浏览器,或者在独立的开发机、虚拟机、容器里安装未托管浏览器。
自动化场景建议使用独立浏览器配置目录,避免和日常浏览器共用user-data-dir,否则会因为配置锁冲突导致启动失败。
2.3 模型服务怎么接:API Key 还是本地模型
WorkBuddy 的决策引擎通常不限制具体模型,只要模型支持工具调用,就能接入。常见的接入方式有两种。
第一种是云端 API。以 OpenAI 兼容接口为例,通常需要配置三个环境变量:
export OPENAI_API_KEY="你的 key" export OPENAI_BASE_URL="https://api.example.com/v1" export OPENAI_MODEL_NAME="gpt-4o-mini"云端 API 的优势是上手快、推理能力强、无需本地 GPU,缺点是每次任务都会消耗 token,费用需要控制。
第二种是本地模型。例如通过 Ollama 拉取一个支持工具调用的模型:
ollama pull qwen2.5:7b然后在配置文件中把模型地址指向本地服务:
model: provider: ollama base_url: http://localhost:11434/v1 name: qwen2.5:7b本地模型的优势是数据不出内网,适合处理敏感信息;缺点是模型能力参差不齐,工具调用格式可能不稳定,复杂任务成功率低于云端大模型。
从学习路径来看,推荐先用云端 API 把整条链路跑通,确认问题不在模型层,再切换到本地模型做隐私场景验证。这样做可以避免一开始把“模型效果差”和“自动化链路有问题”混在一起排查。
3. 本地部署与启动:从源码把 WorkBuddy 跑起来
3.1 拿到代码并创建隔离环境
在动手安装之前,先把项目代码放到一个固定目录,并创建独立的 Python 虚拟环境。这样做的好处是:项目依赖不会影响系统全局环境,卸载时直接删除虚拟环境目录即可。
git clone <workbuddy 仓库地址> cd workbuddy python -m venv .venv source .venv/bin/activate在 Windows PowerShell 中,激活命令不同:
.venv\Scripts\Activate.ps1激活成功后,命令行提示符前面会出现.venv标记,说明当前已经进入虚拟环境。
不要把依赖直接装进系统 Python。真实项目里因为依赖版本冲突导致自动化脚本跑不起来的案例非常多,虚拟环境是第一道防护。
3.2 安装依赖与启动服务
进入虚拟环境后,安装依赖:
pip install -r requirements.txt如果项目提供自动安装脚本,也可以直接执行:
bash install.shLinux 系统下,浏览器自动化还依赖一批系统动态库。常见缺失包括libnss3、libatk、libatk-bridge、libcups、libxkbcommon等。缺少时浏览器进程会启动失败或白屏。可以通过项目文档中的系统依赖安装命令解决。
安装完成后,启动入口通常是 CLI 命令或 Python 模块。不同版本差异较大,参考官方 README 执行即可,常见形式如下:
workbuddy serve如果项目没有提供全局命令,可以使用模块方式启动:
python -m workbuddy.cli启动时会加载.env配置,初始化浏览器上下文,连接模型服务。如果日志中出现类似browser context created、model service connected的信息,说明服务已经进入就绪状态。
不要一看到没有报错就认为启动成功,还要看服务是否真的能接收任务。最简单的验证方式是查看项目是否提供 health 检查接口或doctor自查命令。如果提供,先跑一次:
workbuddy doctor这条命令通常会检查环境变量、浏览器路径、模型连接等关键项,并给出缺失项清单。
3.3 验证启动是否成功
启动成功可以从四个层面验证:
- 日志层面:没有 Python traceback,服务进程保持存活。
- 进程层面:
ps -ef | grep workbuddy能看到相关进程。 - 端口层面:如果启动了 Web 服务,检查端口是否监听成功。
- 功能层面:提交一个最小任务,确认它能进入执行循环。
在 Linux 无图形界面的服务器上,如果项目需要显示浏览器窗口,还要配置虚拟显示器:
xvfb-run -a workbuddy serve无头模式如果配置不对,浏览器可能在启动后立即退出,日志里会留下缺少显示设备的报错。
3.4 常见启动错误的判断
下面这张表列出启动阶段最容易遇到的几类问题:
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
ModuleNotFoundError | 依赖未安装或版本不匹配 | 检查虚拟环境是否激活 | 重新安装 requirements.txt |
| 端口被占用 | 上次服务未正常退出 | lsof -i:服务端口 | 关闭旧进程或修改端口配置 |
| 浏览器启动后立即退出 | 缺少系统动态库 | 查看进程退出码和日志 | 安装系统依赖 |
| 模型接口返回 401 | API Key 配置错误 | 检查.env文件 | 确认 key 和服务地址 |
| 请求限流 | 并发任务过多或预算不足 | 查看模型调用日志 | 降低并发或更换配额更高的 key |
这些错误大多和环境相关,不是 WorkBuddy 本身的问题。排查时先看日志定位层级,再决定改配置还是改代码,不要一上来就把整个流程重写。
4. 第一个自动化任务:让 WorkBuddy 打开浏览器完成搜索
4.1 用自然语言描述任务
环境跑通后,先运行一个最小示例:打开百度搜索“WorkBuddy”,读取第一条结果标题。这个任务足够简单,又覆盖了“打开页面、输入内容、点击搜索、读取结果”四类核心操作。
命令行方式可以这样提交:
workbuddy run "打开百度首页,在搜索框中输入 WorkBuddy,按回车,读取搜索结果第一条的标题,并用一句话返回"在自动化循环里,模型会把这个自然语言任务逐步翻译成浏览器操作。这个过程不需要预先编写具体的浏览器脚本,这正是 WorkBuddy 和传统 RPA 脚本最大的区别。
如果是 Web 界面版本,一般在输入框里粘贴同样的任务文本即可发起。
4.2 查看执行过程中发生了什么
任务执行时,日志会显示模型每一步的决策。参考日志如下:
[agent] 收到任务:打开百度搜索 WorkBuddy,返回第一条结果标题 [model] tool_use: browser.navigate url="https://www.baidu.com" [browser] 页面加载完成,标题:百度一下,你就知道 [model] tool_use: browser.fill selector="#kw" text="WorkBuddy" [browser] 输入完成 [model] tool_use: browser.press selector="#kw" key="Enter" [browser] 搜索完成,页面跳转到结果页 [model] tool_use: browser.extract_text selector="#content_left" [browser] 提取到文本:WorkBuddy - 智能浏览器自动化助手(示例) [result] 搜索结果第一条是关于 WorkBuddy 的智能浏览器自动化助手。从日志可以看出,模型的每一步工具调用都是结构化的,执行器只负责把这些调用映射到浏览器动作上。这个“计划 + 执行 + 观察”的循环,是 Agent 类产品的核心。
日志里常见的工具调用类型包括:
| 工具名 | 作用 | 常见参数 |
|---|---|---|
browser.navigate | 打开指定 URL | url |
browser.fill | 填写输入框 | selector、text |
browser.click | 点击页面元素 | selector |
browser.press | 模拟键盘按键 | selector、key |
browser.extract_text | 提取页面文本 | selector |
browser.screenshot | 截图 | path、full_page |
这些工具名在不同版本里可能略有差异,但职责大同小异。实际使用时以日志输出为准。
4.3 预期输出与验证点
任务正常结束时,会返回一个结果对象,包含最终答案和执行统计,参考格式如下:
{ "task": "打开百度搜索 WorkBuddy,返回第一条结果标题", "status": "success", "answer": "搜索结果第一条是 WorkBuddy 智能浏览器自动化助手。", "steps": 5, "duration_seconds": 12.3, "trace": [ {"tool": "browser.navigate", "args": {"url": "https://www.baidu.com"}}, {"tool": "browser.fill", "args": {"selector": "#kw", "text": "WorkBuddy"}} ] }这里要关注的验证点有四个:
status是否为success,而不是failed或blocked。steps是否在预期范围内,如果步骤过多可能是模型在做无效尝试。answer是否来自页面真实内容,而不是模型凭空生成。trace是否完整记录每一步调用。
如果第一步就报错,建议关掉 headless 模式,让浏览器窗口可见,直接观察页面状态。很多时候页面加载出的不是预期元素,而是验证码或空白页。
4.4 从 CLI 到 Python API 的扩展
CLI 适合验证功能,真正要集成到项目里时,通常用 Python API 更灵活。示例如下:
import asyncio from workbuddy import WorkBuddy, TaskConfig async def main(): agent = WorkBuddy() config = TaskConfig( task="打开百度,搜索 WorkBuddy,返回第一条结果标题", max_steps=10, headless=False, save_trace=True, ) result = await agent.run(config) print(result.answer) await agent.shutdown() if __name__ == "__main__": asyncio.run(main())这段代码把任务和运行配置分开:task是自然语言指令,max_steps限制单次任务的最大工具调用数,headless控制是否显示浏览器窗口,save_trace决定是否保存执行轨迹。
建议从第一条自动化任务开始就打开save_trace。后续排查“模型为什么这么选”“页面为什么会跳到这里”时,执行轨迹是最直接的证据。
5. 插件、Skill 与自定义指令:控制 WorkBuddy 行为的三种方式
5.1 三者分别解决什么问题
跑通基础示例后,很多人会问:同一个任务每次都要重复描述吗?做复杂任务时能不能拆分步骤?怎么防止模型乱点页面?这三个问题的答案分别是 Skill、插件和自定义指令。
| 名称 | 解决什么问题 | 使用场景 | 特点 |
|---|---|---|---|
| 插件 | 扩展能力边界 | 需要访问本地文件、调用外部 API、操作非浏览器对象时 | 底层能力扩展,往往需要写代码 |
| Skill | 复用任务流程 | 把“搜索并总结”“定时巡检”这类流程封装为模板 | 面向任务的组合,可被多次调用 |
| 自定义指令 | 约束模型行为 | 限制访问域名、规定步骤风格、禁止支付操作 | 属于系统提示词和规则层 |
简单理解:插件决定“能做什么”,Skill 决定“怎么做”,自定义指令决定“能做什么之外,绝不能做什么”。
使用时不要混用。能力扩展交给插件,任务编排交给 Skill,行为边界交给自定义指令。
5.2 自定义指令示例
下面是一个自定义指令的 YAML 示例,用于约束模型执行浏览器任务时的行为:
name: safe_browser_review description: 安全执行浏览器信息和内容提取任务 system_prompt: | 你是浏览器自动化助手,任务是把自然语言指令翻译成浏览器工具调用。 执行规则: 1. 每一步执行前先确认当前页面 URL 和页面状态。 2. 找不到目标元素时,不要连续盲目点击,最多重试两次。 3. 遇到登录页、支付页面、验证码页面时,立即停止并报告情况。 4. 可以提取页面文本,但不要修改账号密码类配置。 5. 单次任务最多调用 15 次工具。 rules: - 禁止访问任务指定域名之外的链接 - 禁止点击任何购买、支付、授权按钮 - 禁止操作本地文件和系统命令 - 遇到不确定步骤时,以“需要人工确认”结束任务这里的system_prompt是模型行为的基本约束,rules是可以被硬编码校验的规则,例如项目里可以增加域名白名单检查,一旦发现模型生成的 URL 不在白名单内,直接拦截。
需要注意,自定义指令并不能完全阻止模型犯错,它只是提高正确行为的概率。真正可靠的安全边界要靠执行层的拦截逻辑实现。
5.3 关键参数与安全边界
运行任务时,有四个参数需要重点理解:
| 参数 | 含义 | 常见错误表现 |
|---|---|---|
max_steps | 单次任务最大工具调用次数 | 设置过少导致复杂任务被截断,设置过多导致无效循环 |
headless | 是否无头运行 | 某些站点对 headless 浏览器有检测,可能返回验证码 |
grant | 允许使用的工具权限 | 权限过大会增加误操作风险 |
timeout | 单次浏览器操作超时时间 | 页面加载慢时误报失败 |
安全边界方面,建议遵循最小权限原则。例如只允许浏览器操作,就不要同时授权桌面文件操作;只允许访问任务相关域名,就不要授予全局网络请求权限。生产环境还要使用独立的浏览器用户数据目录,不要把一个长期登录的会话直接交给 Agent,因为你无法完全预测模型每一步会怎么执行。
6. 常见问题排查:部署成功但浏览器动不起来
6.1 先从日志定位,不要一上来就改代码
部署服务后最常见的问题是:服务能启动,浏览器没动作,或者模型执行到一半就中断。此时最忌讳的做法是反复重装依赖、更换模型。排查顺序应该固定为:
- 看最新日志有没有 traceback。
- 看模型工具调用是否已经生成。
- 看浏览器执行阶段是否收到调用。
- 看页面返回结果是否符合预期。
- 看哪一层最先出现异常。
日志里常见的几个关键位置:
| 日志关键词 | 说明 |
|---|---|
tool_use | 模型已经生成工具调用,问题可能在执行层 |
browser.navigate | 浏览器正准备打开页面 |
element not found | 页面元素定位失败 |
context destroyed | 浏览器上下文被销毁,进程可能异常退出 |
rate limit | 模型接口触发限流 |
定位到层之后,再进入具体问题排查。
6.2 浏览器没打开或无法连接
现象:任务启动后日志显示模型已经决定打开页面,但浏览器窗口没有出现,或服务直接报“无法连接浏览器”。
可能原因:
- 项目没有找到指定路径的 Chrome 可执行文件。
- 浏览器调试端口被占用,或者
user-data-dir指向了一个已经被启动的目录。 - 在 Linux 服务器上运行,但没有显示设备,又没有启用 headless 模式。
- 系统浏览器被企业策略托管,自动化脚本无法连接调试端口。
检查方式:
# 查看服务日志中的浏览器路径 # 确认端口的占用情况 lsof -i:9222处理建议:
# 指定项目可识别的浏览器路径,示例: export CHROME_PATH="/usr/bin/google-chrome" # Linux 无桌面环境时,使用虚拟显示器 xvfb-run -a workbuddy serve不要同时让两个自动化实例操作同一个浏览器数据目录。浏览器配置锁机制会导致第二个实例启动失败,这在写定时任务时尤其常见。
6.3 页面元素识别失败
现象:浏览器成功打开,但模型多次尝试点击或填写都没有效果,日志出现element not found或timeout。
常见原因:
- 页面是动态加载,元素出现需要时间。
- 目标内容在 iframe 内,主页面选择器找不到。
- 页面懒加载,滚动后才出现目标元素。
- 模型生成的选择器本身不稳定。
处理建议:
- 在任务指令里明确“等待页面加载完成后再操作”。
- 使用文本内容定位替代脆弱的 class 选择器。
- 对 iframe 内元素,先切换到对应 frame 再操作。
以下面这类 Playwright 风格的等待代码为例,说明思路:
# 示例:等待元素出现后再填写 await page.wait_for_selector("#kw", timeout=10000) await page.fill("#kw", "WorkBuddy")实际项目中,页面元素识别失败不一定是代码问题,可能是页面改版、A/B 测试、登录态变化。排查时要先打开浏览器截图,看页面真实结构。
6.4 中文输入和键盘事件异常
现象:页面能打开,但输入中文时出现乱码,或部分字符没有输入进去。
原因通常是自动化工具逐字模拟键盘事件时,中文输入法干扰了按键序列,或者是输入速度过快导致页面控件没有及时响应。
处理建议:
- 优先使用直接注入值的
fill方式,而不是逐字模拟键盘。 - 输入完成后等待页面控件状态更新,再执行下一步。
- 使用独立浏览器配置目录,避免系统输入法状态干扰。
如果输入后页面没有反应,先手动在浏览器里测试同一个页面,确认是否是页面本身的输入限制。
6.5 受企业策略管理的浏览器限制
现象:浏览器能打开,但自动化脚本连接失败,或者浏览器启动参数没有生效,地址栏出现“您的浏览器由贵单位管理”。
原因:浏览器被企业组策略或 MDM 策略管理,Chrome 的--remote-debugging-port等参数可能被策略覆盖,扩展程序也可能被禁用。
检查方式:在受影响的浏览器中打开chrome://policy,查看是否存在覆盖自动化配置的策略。
处理建议:向管理员申请独立测试浏览器,或在开发机、容器中安装不受托管策略管理的 Chromium。不要尝试绕过单位策略限制,生产环境的自动化浏览器应当是一个专门构建、专供自动化使用的独立环境。
另外,如果页面渲染成白屏或黑屏,可以尝试关闭硬件加速,强制使用软件渲染。这通常与 GPU 驱动兼容性有关,不一定是页面代码问题。
7. 从学习环境到生产环境:别把个人演示脚本直接拿来跑任务
7.1 学习、开发、生产的差异对照
本地能跑通,只说明链路是通的;进入生产环境后,很多因素会变。下面这张表可以帮你判断自己处在哪个阶段:
| 维度 | 学习环境 | 开发联调环境 | 生产环境 |
|---|---|---|---|
| 目标 | 理解流程 | 验证功能 | 稳定完成任务 |
| 浏览器 | 本机浏览器 | 测试专用浏览器 | 容器化隔离浏览器 |
| 模型 | 任意可用模型 | 固定模型版本 | 锁定版本并做回退预案 |
| 数据 | 测试数据 | 脱敏数据 | 真实数据但需要最小权限 |
| 日志 | 控制台输出 | 文件日志 | 结构化日志 + 监控告警 |
| 失败处理 | 手动重试 | 重试 + 断点 | 重试 + 审批 + 回滚 |
生产环境不是把“演示脚本”加一个定时任务就完成的,它需要一套完整的基础设施。
7.2 生产化至少要考虑的 6 件事
第一,容器化与无头运行。把 WorkBuddy、浏览器和依赖打包成镜像,配合虚拟显示器或无头模式运行,保证每次执行环境一致。
第二,浏览器会话隔离。每次任务使用独立的浏览器用户数据目录,任务结束后清理临时文件,避免下一个任务受上次会话残留影响。
第三,模型调用限流与预算。Agent 任务由多步模型调用组成,一个复杂任务可能消耗大量 token。要设置单任务次数上限和每日预算,避免失控。
第四,日志与可审计。记录每一次工具调用、页面跳转、模型选择以及最终结果,至少保留一段时间。没有完整日志,无法复盘失败任务。
第五,审批与人工确认。对高风险操作,比如支付、登录、数据删除、发送消息,在执行前插入人工确认节点,而不是让模型自己决定。
第六,回滚与重试。任务失败时要有重试策略,但不能无限重试。建议区分可重试错误(页面超时)和不可重试错误(权限不足、任务描述有歧义)。
7.3 发布前检查清单
下面一份清单可以直接复用在任务上线前:
- 是否使用独立的自动化浏览器环境,而不是个人日常浏览器。
- 是否明确配置了
max_steps、timeout和权限范围。 - 是否限制了模型可访问的域名白名单。
- 是否拦截支付、删除、授权类高风险操作。
- 是否开启完整执行轨迹和截图日志。
- 是否设置模型费用上限。
- 是否定义了失败重试次数和人工审批节点。
- 是否在草稿环境用真实页面数据跑过至少三次通过。
- 是否确认定时任务调度器和执行环境的时间一致。
- 是否准备好任务版本回滚方案。
这份清单同样适用于个人项目,因为很多问题不是上线后冒出来的,而是本地跑通时就没有考虑过。
8. 最佳实践与进阶方向
8.1 让自动化流程稳定的日常习惯
第一,任务要拆小。把“帮我处理本周所有报表”拆成“打开报表页、筛选本周、提取数据、发送汇总”等可以单独验证的子任务,定位问题时才知道问题在哪个环节。
第二,选择稳定的定位方式。优先使用页面元素的可读文本、固定 id,而不是频繁变化的 class 名或坐标位置。网页改版后,自定义指令和 Skill 的维护成本会很现实。
第三,设计幂等操作。每次开始任务前,先判断页面是否已经处于目标状态,避免重复点击导致的重复提交。
第四,默认保存截图。任务执行到关键步骤时截图,失败时自动保存最后一帧页面状态,排查效率会明显提高。
第五,控制模型的自由度。模型在实际执行时可能做出意想不到的页面操作,所以步数上限、域名白名单、高风险操作拦截都必须落实,不能只靠提示词约束。
8.2 从浏览器操作走向桌面操作
WorkBuddy 这一类工具的最终能力边界不只是浏览器。浏览器自动化之所以先落地,是因为 DOM、选择器、浏览器协议已经提供了统一的操作接口;跨到桌面应用后,界面可能是原生控件、自绘控件、WebView 混合结构,定位和状态观察都困难得多。
如果你需要操作桌面应用,要注意协议和权限边界:
| 场景 | 可用方案 | 注意点 |
|---|---|---|
| 网页表单 | DOM 选择器 + 浏览器协议 | 动态渲染和 iframe |
| 原生桌面应用 | 操作系统级可访问性接口 | 不同系统能力差异大 |
| 自绘界面应用 | 图像识别 + 坐标模拟 | 成功率依赖屏幕分辨率和窗口状态 |
建议先巩固浏览器自动化的稳定性,再逐步扩展。桌面操作的成功率、可迁移性、维护成本都明显低于浏览器自动化,适合作为小范围专项能力而不是默认路径。
8.3 给新手的练习路径
如果刚接触这类工具,可以按下面顺序练习:
- 搜索并返回结果:覆盖打开页面、输入、点击、读取文本。
- 登录一个测试站点并完成表单填写:理解登录态、Cookie、等待策略。
- 跨页面提取数据并写入本地文件:理解页面跳转和数据整理。
- 做一个简单的自动化巡检任务:理解定时执行和异常捕获。
- 在任务中加入人工确认步骤:理解生产环境的审批边界。
每完成一步,都要把执行日志保存下来,然后回答三个问题:任务为什么成功、失败时卡在哪一层、页面返回的结果是否可靠。能解释清楚这三个问题,才算真正跑通了 WorkBuddy,而不是仅仅跑通了一次演示。
跑通 WorkBuddy 只是起点。它能替你打开浏览器、填写表单、读取页面,但真正决定它能不能在生产环境稳定工作的,还是任务边界、日志审计、权限控制和失败回收这些工程问题。下一步值得尝试的方向,是把日常重复的浏览器操作封装成 Skill,再给它配上完整的约束规则和安全审批,让它在受控环境里完成更多有价值的工作。