源文件:chapter8/browser-use-rpa/README.md Browser-Use RPA with Learning Capability 能操作电脑,并且越做越熟练的 Agent 项目概述 本项目实现了一个具有学习能力的浏览器自动化Agent。该Agent能够: 学习阶段:通过多模态大模型(GPT-4o, Claude, Gemini等)完成新任务,并捕获成功的操作流程 应用阶段:识别相似任务,直接回放已学习的工作流,无需再次调用大模型 持续改进:记录执行指标,不断优化知识库 架构设计 核心组件 LearningAgent (agent.
源文件:chapter8/browser-use-rpa/README.md
能操作电脑,并且越做越熟练的 Agent
本项目实现了一个具有学习能力的浏览器自动化Agent。该Agent能够:
browser-use-rpa/ ├── browser-use/ # Browser-use 核心库(未修改) ├── learning_agent/ # 学习Agent封装层 │ ├── agent.py # 主Agent类,封装browser-use │ ├── workflow.py # 工作流数据结构 │ ├── knowledge_base.py # 知识库管理 │ └── replay.py # 工作流回放器 ├── demo_weather.py # 天气查询演示 ├── demo_email.py # 邮件发送演示 └── knowledge_base/ # 存储学习到的工作流
# 1. 安装依赖 pip install -r requirements.txt # 2. 安装Playwright浏览器 playwright install chromium # 3. 配置环境变量 cp env.example .env # 编辑.env文件,添加你的API密钥
from learning_agent import LearningAgent from llm_factory import make_llm # 包装层 LLM 工厂:OpenAI 直连,缺 Key 时 OpenRouter 兜底 # 创建学习Agent agent = LearningAgent( task="发送邮件给test@example.com,主题是'测试',内容是'这是一封测试邮件'", llm=make_llm(), # 默认 gpt-5.6-luna;无 OPENAI_API_KEY 时走 OpenRouter 兜底 knowledge_base_path="./knowledge_base", headless=False # 显示浏览器界面 ) # 执行任务 result = agent.run_sync(max_steps=20) print(f"任务完成: {'成功' if result['success'] else '失败'}") print(f"执行时间: {result['execution_time']:.2f}秒") print(f"是否使用已学习的工作流: {result['replay_used']}")
demo_email.py 是本实验的主入口,演示「学习一次工作流 → 用不同参数高速回放」这一核心思想。
它提供了完整的中文命令行接口,运行 python demo_email.py --help 可查看所有参数:
# 运行完整的「学习 → 回放」对比演示(默认行为,会打开浏览器) python demo_email.py # 快速冒烟测试:只跑一次简单任务,不做学习/回放对比 python demo_email.py --quick # 无界面模式 + 使用 Gemini 模型 python demo_email.py --model gemini-2.0-flash-exp --headless # 自定义两个阶段的任务,并把指标对比写入 JSON 文件 python demo_email.py \ --task '给 a@b.com 发主题为"报告"的邮件' \ --replay-task '给 c@d.com 发主题为"周报"的邮件' \ --output results.json # 天气查询演示(另一个更轻量的例子) python demo_weather.py
命令行参数说明(demo_email.py):
| 参数 | 说明 | 默认值 |
|---|---|---|
--task |
学习阶段的任务描述 | 向 test@example.com 发送测试邮件 |
--replay-task |
回放阶段的任务描述(参数不同、流程相同) | 向 another@example.com 发送邮件 |
--model |
大模型;gpt-* 走 OpenAI(缺 Key 时 OpenRouter 兜底),gemini-* 走 Google |
gpt-5.6-luna |
--headless |
以无界面模式运行浏览器 | 显示窗口 |
--knowledge-base |
工作流知识库存储目录 | ./email_knowledge |
--max-steps |
学习阶段最大操作步数 | 20 |
--output |
把学习/回放指标与知识库统计写入 JSON 文件 | 不写出 |
--quick |
快速冒烟测试模式 | 关闭 |
预期结果: 第一次运行时,Agent 处于学习阶段,会通过多模态大模型逐步探索并录制「发送邮件」工作流,
耗时较长且产生多次 LLM 调用;随后回放阶段用新的收件人/主题参数复用同一工作流,几乎不再调用大模型,
耗时显著下降。演示结束会打印两个阶段的耗时、LLM 调用次数与知识库统计;若指定了 --output,
上述对比会以结构化 JSON 保存,便于复盘“学习一次、复用多次”带来的成本收益。
注意:完整运行需要有效的模型 API Key(见
.env)以及本地可用的浏览器(playwright install chromium)。--help与参数解析本身无需上述依赖即可查看。
运行 demo_email.py,观察第一阶段:
示例输出:
📚 PHASE 1: LEARNING - First Email Task Task: Send email to test@example.com 🚀 Starting learning phase... ✅ Learning phase completed! - Success: ✓ - Execution time: 35.2 seconds - LLM calls made: 12 - Workflow captured: Yes
继续观察第二阶段:
示例输出:
🚀 PHASE 2: REPLAY - Second Email Task Task: Send email to another@example.com 🔄 Starting replay phase... ✅ Replay phase completed! - Success: ✓ - Execution time: 8.5 seconds - Workflow reused: Yes 🎯 Performance Improvements: - Speed: 4.1x faster - LLM calls saved: 12 - Time saved: 26.7 seconds
wait_for(state='visible')确保元素加载完成# 从browser-use的内部状态提取元素信息 element = selector_map[index] workflow_step = WorkflowStep( action_type=ActionType.CLICK, xpath=element.xpath, element_attributes={ 'id': element.attributes.get('id'), 'class': element.attributes.get('class'), ... } )
| 指标 | 学习阶段 | 回放阶段 | 提升 |
|---|---|---|---|
| 执行时间 | 30-40秒 | 5-10秒 | 3-5倍 |
| LLM调用次数 | 10-15次 | 0次 | 100% |
| 成功率 | 85% | 95%+ | 10%+ |
查看知识库统计:
from learning_agent import KnowledgeBase kb = KnowledgeBase("./knowledge_base") stats = kb.get_statistics() print(stats) # { # 'total_workflows': 5, # 'total_executions': 23, # 'success_rate': '91.3%', # 'total_model_calls_saved': 156 # }
清空知识库:
kb.clear_all() # 谨慎使用
欢迎提交Issue和Pull Request来改进本项目。
本项目基于browser-use开发,遵循其开源许可协议。