学习如何配置代理

概述

Agent 类是 Browser Use 的核心组件,负责浏览器自动化。以下是初始化代理时可以使用的主要配置选项。

基本设置

  1. from browser_use import Agent
  2. from langchain_openai import ChatOpenAI
  3. agent = Agent(
  4. task="搜索关于人工智能的最新新闻",
  5. llm=ChatOpenAI(model="gpt-4o"),
  6. )

必需参数

  • task: 代理需要执行的指令
  • llm: 一个 LangChain 聊天模型实例。请参阅 LangChain 模型 以了解支持的模型。

代理行为

控制代理的操作方式:

  1. agent = Agent(
  2. task="你的任务",
  3. llm=llm,
  4. controller=custom_controller, # 用于自定义工具调用
  5. use_vision=True, # 启用视觉功能
  6. save_conversation_path="logs/conversation" # 保存聊天日志
  7. )

行为参数

  • controller: 代理可以调用的函数注册表。默认使用基础 Controller。有关详细信息,请参阅 自定义函数
  • use_vision: 启用/禁用视觉功能。默认为 True
    • 启用时,模型将处理来自网页的视觉信息
    • 禁用以减少成本或使用不支持视觉的模型
    • 对于 GPT-4o,每张图片的处理费用大约为 800-1000 个令牌(约 $0.002 USD),但这取决于定义的屏幕大小
  • save_conversation_path: 保存完整对话历史的路径。对于调试很有用。
  • system_prompt_class: 自定义系统提示类。有关自定义选项,请参阅 系统提示

建议启用视觉功能,以获得更好的网页交互理解,但可以禁用以减少成本或在使用不支持视觉的模型时。

(重用)浏览器配置

你可以配置代理如何与浏览器交互。有关更多 Browser 选项,请参阅 浏览器设置 文档。

重用现有浏览器

browser: 一个 Browser Use 浏览器实例。提供时,代理将重用该浏览器实例,并为每个 run() 自动创建新上下文。

  1. from browser_use import Agent, Browser
  2. from browser_use.browser.context import BrowserContext
  3. # 重用现有浏览器
  4. browser = Browser()
  5. agent = Agent(
  6. task=task1,
  7. llm=llm,
  8. browser=browser # 将重用浏览器实例
  9. )
  10. await agent.run()
  11. # 手动关闭浏览器
  12. await browser.close()

请记住:在此场景中,Browser 不会自动关闭。

重用现有浏览器上下文

browser_context: 一个 Playwright 浏览器上下文。适用于保持持久会话。有关详细信息,请参阅 持久浏览器

  1. from browser_use import Agent, Browser
  2. from playwright.async_api import BrowserContext
  3. # 使用特定浏览器上下文(推荐方法)
  4. async with await browser.new_context() as context:
  5. agent = Agent(
  6. task=task2,
  7. llm=llm,
  8. browser_context=context # 使用持久上下文
  9. )
  10. # 运行代理
  11. await agent.run()
  12. # 将上下文传递给下一个代理
  13. next_agent = Agent(
  14. task=task2,
  15. llm=llm,
  16. browser_context=context
  17. )
  18. ...
  19. await browser.close()

有关浏览器上下文的更多信息,请参阅 Playwright 文档

你可以为多个代理重用相同的上下文。如果什么都不做,浏览器将在 run() 完成后自动创建和关闭。

运行代理

代理通过异步 run() 方法执行:

  • max_steps(默认值:100
    代理执行期间可以采取的最大步骤数。此限制防止无限循环并有助于控制执行时间。

代理历史

该方法返回一个 AgentHistoryList 对象,包含完整的执行历史。这个历史记录对调试、分析和创建可复现的脚本非常有用。

  1. # 访问历史的示例
  2. history = await agent.run()
  3. # 访问一些有用的信息
  4. history.urls() # 访问过的 URL 列表
  5. history.screenshots() # 截图路径列表
  6. history.action_names() # 执行过的操作名称
  7. history.extracted_content() # 执行过程中提取的内容
  8. history.errors() # 发生的任何错误
  9. history.model_actions() # 所有操作及其参数

AgentHistoryList 提供了许多帮助方法来分析执行情况:

  • final_result(): 获取最终提取的内容
  • is_done(): 检查代理是否成功完成
  • has_errors(): 检查是否发生了错误
  • model_thoughts(): 获取代理的推理过程
  • action_results(): 获取所有操作的结果

有关完整的帮助方法和详细历史分析功能,请参阅 AgentHistoryList 源代码

无 LLM 执行初始操作

通过 这个示例,你可以在没有 LLM 的情况下运行初始操作。将操作作为字典指定,其中键是操作名称,值是操作参数。你可以在 Controller 源代码中找到所有操作。

  1. initial_actions = [
  2. {'open_tab': {'url': 'https://www.google.com'}},
  3. {'open_tab': {'url': 'https://en.wikipedia.org/wiki/Randomness'}},
  4. {'scroll_down': {'amount': 1000}},
  5. ]
  6. agent = Agent(
  7. task='页面上显示了哪些理论?',
  8. initial_actions=initial_actions,
  9. llm=llm,
  10. )

使用规划模型运行

你可以配置代理使用单独的规划模型进行高层任务规划:

  1. from langchain_openai import ChatOpenAI
  2. # 初始化模型
  3. llm = ChatOpenAI(model='gpt-4o')
  4. planner_llm = ChatOpenAI(model='o3-mini')
  5. agent = Agent(
  6. task="你的任务",
  7. llm=llm,
  8. planner_llm=planner_llm, # 用于规划的单独模型
  9. use_vision_for_planner=False, # 禁用规划模型的视觉功能
  10. planner_interval=4 # 每 4 步进行一次规划
  11. )

规划参数

  • planner_llm: 用于高层任务规划的 LangChain 聊天模型实例。可以使用比主要 LLM 更小/更便宜的模型。
  • use_vision_for_planner: 启用/禁用规划模型的视觉功能。默认为 True
  • planner_interval: 规划阶段之间的步骤数。默认为 1

使用单独的规划模型可以帮助:

  • 通过使用更小的模型进行高层规划来减少成本
  • 改进任务分解和战略思维
  • 更好地处理复杂的多步骤任务

规划模型是可选的。如果未指定,代理将不会使用规划模型。