扩展默认代理并编写自定义函数调用

基本函数注册

函数可以是 同步 (sync)异步 (async),但要保持其 专注且单一用途

示例:注册基本函数

  1. from browser_use import Controller, ActionResult
  2. # 初始化 Controller
  3. controller = Controller()
  4. @controller.action('Ask user for information')
  5. def ask_human(question: str) -> str:
  6. answer = input(f'\n{question}\nInput: ')
  7. return ActionResult(extracted_content=answer)

默认 Controller 已经实现了与浏览器交互所需的基本功能。

  1. # 传递 Controller 给 Agent
  2. agent = Agent(
  3. task=task,
  4. llm=llm,
  5. controller=controller
  6. )

⚠️ 注意

  • 函数名称和描述要简短清晰,因为 Agent 仅根据名称和描述决定调用哪个函数。
  • 函数的输出是字符串化的,并传递给 Agent

基于浏览器的函数

如果函数需要访问 浏览器实例,只需在参数中添加 browser

  1. from browser_use import Browser, Controller, ActionResult
  2. controller = Controller()
  3. @controller.action('Open website')
  4. async def open_website(url: str, browser: Browser):
  5. page = browser.get_current_page()
  6. await page.goto(url)
  7. return ActionResult(extracted_content='Website opened')

使用 Pydantic 定义结构化参数

对于复杂的操作,可以使用 Pydantic 定义参数模型:

  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from browser_use import Controller, ActionResult, Browser
  4. controller = Controller()
  5. # 定义 Pydantic 模型
  6. class JobDetails(BaseModel):
  7. title: str
  8. company: str
  9. job_link: str
  10. salary: Optional[str] = None # 可选字段
  11. @controller.action(
  12. 'Save job details which you found on page',
  13. param_model=JobDetails
  14. )
  15. async def save_job(params: JobDetails, browser: Browser):
  16. print(f"Saving job: {params.title} at {params.company}")
  17. # 访问浏览器
  18. page = browser.get_current_page()
  19. await page.goto(params.job_link)

多个代理共享自定义操作

同一个 controller 可以被多个 Agent 共享。

  1. controller = Controller()
  2. # ... 先注册所需的自定义操作到 Controller
  3. agent = Agent(
  4. task="Go to website X and find the latest news",
  5. llm=llm,
  6. controller=controller
  7. )
  8. await agent.run()
  9. agent2 = Agent(
  10. task="Go to website Y and find the latest news",
  11. llm=llm,
  12. controller=controller
  13. )
  14. await agent2.run()

Controller 无状态 (stateless),可以用来管理多个操作,并支持多个代理 (agents)。


排除某些函数

如果不希望某些操作被 Agent 调用,可以在 Controller 中排除它们:

  1. controller = Controller(exclude_actions=['open_tab', 'search_google'])

更多示例

如文件上传、通知等示例,请访问: 🔗 examples/custom-functions