跳转至

Browser-Use RPA with Learning Capability

能操作电脑,并且越做越熟练的 Agent

项目概述

本项目实现了一个具有学习能力的浏览器自动化Agent。该Agent能够:

  1. 学习阶段:通过多模态大模型(GPT-4o, Claude, Gemini等)完成新任务,并捕获成功的操作流程
  2. 应用阶段:识别相似任务,直接回放已学习的工作流,无需再次调用大模型
  3. 持续改进:记录执行指标,不断优化知识库

架构设计

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
# }

清空知识库:

kb.clear_all()  # 谨慎使用

限制和注意事项

  1. 动态内容:对于高度动态的页面,XPath可能会变化
  2. 认证状态:不会保存登录状态,每次都从头开始
  3. 复杂交互:暂不支持拖拽、右键菜单等复杂操作
  4. 多标签页:回放模式简化了标签页处理

扩展建议

  1. 更智能的参数提取:使用NLP模型提取任务参数
  2. 工作流组合:将多个小工作流组合成复杂任务
  3. 错误恢复:增强回放失败时的恢复策略
  4. 分布式知识库:支持团队共享学习成果

贡献

欢迎提交Issue和Pull Request来改进本项目。

许可

本项目基于browser-use开发,遵循其开源许可协议。