编辑此页 / 查看本页的源代码
Browser-Use RPA with Learning Capability¶
能操作电脑,并且越做越熟练的 Agent
项目概述¶
本项目实现了一个具有学习能力的浏览器自动化Agent。该Agent能够:
- 学习阶段:通过多模态大模型(GPT-4o, Claude, Gemini等)完成新任务,并捕获成功的操作流程
- 应用阶段:识别相似任务,直接回放已学习的工作流,无需再次调用大模型
- 持续改进:记录执行指标,不断优化知识库
架构设计¶
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. LearningAgent (agent.py)¶
- 封装browser-use的Agent类
- 拦截并记录每个操作步骤
- 提取稳定的XPath选择器
- 管理学习和回放模式
2. Workflow (workflow.py)¶
- 定义工作流数据结构
- 支持参数化(如不同的收件人、主题等)
- 记录元素选择器和操作参数
3. KnowledgeBase (knowledge_base.py)¶
- 持久化存储工作流
- 意图匹配算法
- 性能指标跟踪
4. WorkflowReplayer (replay.py)¶
- 使用Playwright直接控制浏览器
- 智能等待元素加载
- 错误恢复机制
安装¶
# 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与参数解析本身无需上述依赖即可查看。
验收标准测试¶
1. 首次任务执行(学习阶段)¶
运行 demo_email.py,观察第一阶段:
- Agent通过"观察-思考-行动"循环完成任务
- 每步操作都需要调用大模型
- 成功后自动保存工作流到知识库
- 显示执行时间和步骤数
示例输出:
📚 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
2. 重复任务执行(应用阶段)¶
继续观察第二阶段:
- Agent识别相似任务,匹配已学习的工作流
- 直接回放操作步骤,无需调用大模型
- 自动填充新的参数(收件人、主题等)
- 执行速度显著提升
示例输出:
🚀 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
技术特点¶
1. 稳定的元素定位¶
- XPath优先:捕获元素的完整XPath路径,对页面结构变化有较好的鲁棒性
- 多重回退:XPath失败时尝试CSS选择器、属性选择器等
- 智能等待:使用
wait_for(state='visible')确保元素加载完成
2. 工作流捕获机制¶
# 从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'),
...
}
)
3. 意图匹配算法¶
- 关键词匹配
- 动词识别(send, write, check等)
- 成功率加权
- 置信度评分
性能对比¶
| 指标 | 学习阶段 | 回放阶段 | 提升 |
|---|---|---|---|
| 执行时间 | 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
# }
清空知识库:
限制和注意事项¶
- 动态内容:对于高度动态的页面,XPath可能会变化
- 认证状态:不会保存登录状态,每次都从头开始
- 复杂交互:暂不支持拖拽、右键菜单等复杂操作
- 多标签页:回放模式简化了标签页处理
扩展建议¶
- 更智能的参数提取:使用NLP模型提取任务参数
- 工作流组合:将多个小工作流组合成复杂任务
- 错误恢复:增强回放失败时的恢复策略
- 分布式知识库:支持团队共享学习成果
贡献¶
欢迎提交Issue和Pull Request来改进本项目。
许可¶
本项目基于browser-use开发,遵循其开源许可协议。