你是否还在繁琐地手动复制数据、填写重复的表单,或者在浩瀚的网页中进行漫无目的的搜索?想象一下,如果你能简单地告诉AI你的需求,它就能自动浏览网页、提取信息,甚至执行各种任务,这将是多么高效便捷!这就是AI浏览器代理(Browser Agent)的强大之处,它由诸如Google Gemini等大语言模型(LLM)驱动,让你能够通过自然语言指令自动化复杂的网络交互。

本文将深入探讨AI浏览器代理(Browser Agent)的核心概念,并通过使用browser-use Python库的实际演示,手把手地指导你搭建自己的智能代理。

什么是AI浏览器代理(Browser Agent)?

简单来说,AI浏览器代理(Browser Agent)是一个将强大大语言模型(LLM)的智能与浏览器的交互能力相结合的系统。你可以把它想象成赋予大语言模型(LLM)“眼睛”和“手”,让它能够导航和理解互联网。

一个AI浏览器代理(Browser Agent)可以:

  • 导航到指定的URL。
  • 理解网页的语义内容,而不仅仅是原始HTML。
  • 与页面元素交互,例如点击按钮或填写表单(虽然我们的示例将侧重于阅读和总结)。
  • 根据你的自然语言指令提取特定的信息。

在这个架构中,大语言模型(LLM)充当代理的“大脑”,解释你的任务并做出决策,指导浏览器如何交互以实现期望的结果。

为什么需要AI浏览器代理(Browser Agent)?

虽然传统的网页抓取工具仍然有其用途,但AI浏览器代理(Browser Agent)提供了显著的优势,尤其是在处理动态和复杂的现代网站时:

  1. 处理动态和复杂的网站: 传统的抓取工具在网站结构发生变化,或者严重依赖JavaScript进行内容渲染时,通常会失效。而AI浏览器代理(Browser Agent),凭借其大语言模型(LLM)的能力,能够理解上下文和内容,而不仅仅是HTML结构,从而适应这些变化。例如,一个电商网站的商品价格可能会通过JavaScript动态加载,传统的抓取工具可能无法直接获取,但AI浏览器代理(Browser Agent)可以执行JavaScript,等待内容加载完成后再进行提取。

  2. 自然语言指令: 你无需编写复杂的代码来定位特定的HTML元素(这些元素可能会频繁更改),只需用简单的自然语言描述你想要的结果。例如,你可以说“查找排名前五的MLOps学习资源”,或者“获取Hacker News的最新帖子”。这大大降低了使用的门槛,让非程序员也能轻松地利用AI浏览器代理(Browser Agent)进行数据提取和自动化。

  3. 自动化繁琐的任务: 从价格比较和信息监控,到数据聚合以生成报告,或从各种来源总结文章,AI浏览器代理(Browser Agent)可以自动化各种重复且耗时的基于Web的工作流程。想象一下,你需要每天监控多个竞争对手网站的价格变化,并生成报告,手动完成这项工作非常耗时,但AI浏览器代理(Browser Agent)可以定时访问这些网站,提取价格数据,并自动生成报告。

  4. 结构化数据提取: 正如我们将在演示中展示的那样,你可以定义特定的输出格式,代理将相应地提取和构建信息。这对于将数据无缝地馈送到数据库、分析工具或其他应用程序非常强大。例如,你可以要求AI浏览器代理(Browser Agent)从新闻网站提取文章标题、作者、发布日期和正文,并以JSON格式输出,方便后续的数据处理和分析。

演示:使用browser-use和Gemini自动化Web任务

让我们开始实践,看看如何使用browser-use Python库和Google的Gemini模型来执行自动化的Web任务。

设置

首先,确保你已设置Python环境。我们将从创建一个虚拟环境并安装必要的库开始:

python -m venv browser_agent_env
source browser_agent_env/bin/activate  # 在Windows上使用 `browser_agent_env\Scripts\activate`
pip install browser-use langchain_google_genai python-dotenv

你还需要一个Google AI API密钥。你可以从Google AI Studio网站获取。为了安全处理,将此密钥存储在项目目录中的.env文件中:

GOOGLE_API_KEY="YOUR_API_KEY_HERE"

演示1:简单任务——总结资源

我们的第一个任务很简单:我们希望代理找到排名前5的MLOps在线学习资源并进行总结,并引用来源。

创建一个Python文件(例如,simpletask.py)并添加以下代码:

from langchain_google_genai import ChatGoogleGenerativeAI
from browser_use import Agent
import asyncio
from dotenv import load_dotenv

# 从.env文件加载API密钥
load_dotenv()

async def main():
    print("Initializing Agent for MLOps resources...")
    # 用自然语言定义任务
    task = "Get me a list of top 5 MLOps learning resources and summarize the content with citation to the source"

    # 使用任务和LLM(Gemini 1.5 Flash效率很高)初始化代理
    agent = Agent(
        task=task,
        llm=ChatGoogleGenerativeAI(model="gemini-1.5-flash"),
    )

    print("Running Agent...")
    # 代理将执行Web搜索、导航页面和提取信息
    await agent.run()
    print("Agent finished.")

if __name__ == '__main__':
    asyncio.run(main())

代码解释:

  • 我们导入ChatGoogleGenerativeAI以使用Google的Gemini模型,从browser-use导入Agentasyncio用于异步操作,以及load_dotenv用于管理环境变量。
  • load_dotenv()加载我们的GOOGLE_API_KEY
  • 我们用自然语言清晰地定义我们的任务。
  • 创建一个Agent实例,将我们的任务和ChatGoogleGenerativeAI(使用gemini-1.5-flash)的一个实例作为参数传入。
  • await agent.run()启动代理的Web浏览和信息提取过程。代理会将其操作和思维过程打印到控制台。

要运行此程序,请执行:

python simpletask.py

你将在控制台中观察到代理的步骤,包括其搜索、页面导航,以及最终的MLOps资源摘要列表和引文。在这个简单的示例中,AI浏览器代理(Browser Agent)成功地完成了信息的搜索、提取和总结,展示了其在知识获取方面的潜力。

演示2:结构化输出——Hacker News帖子

现在,让我们通过要求特定的结构化输出格式来增强代理的功能。我们将从Hacker News的“Show HN”部分提取前5个帖子。

创建另一个Python文件(例如,structuredOutput.py):

from pydantic import BaseModel, Field
from langchain_google_genai import ChatGoogleGenerativeAI
from browser_use import Agent, Controller
import asyncio
from dotenv import load_dotenv

load_dotenv()

# 使用Pydantic模型定义所需的输出格式
class Post(BaseModel):
    post_title: str = Field(description="The title of the Show HN post")
    post_url: str = Field(description="The main URL of the post")
    num_comments: int = Field(description="The number of comments on the post")
    hours_since_post: int = Field(description="How many hours ago the post was made")

class Posts(BaseModel):
    posts: list[Post]

# 创建一个Controller来强制输出模型
controller = Controller(output_model=Posts)

async def main():
    task = 'Go to Hacker News Show HN section and give me the first 5 posts listed.'
    model = ChatGoogleGenerativeAI(model="gemini-1.5-flash")

    # 初始化Agent,传递controller以获得结构化输出
    agent = Agent(task=task, llm=model, controller=controller)

    print("Running Agent for Hacker News posts...")
    history = await agent.run()  # 获取包含最终结果的历史记录对象
    print("Agent finished. Processing results...")
    result = history.final_result()  # 检索最终的结构化JSON结果

    if result:
        try:
            # 使用我们的Pydantic模型验证和解析JSON结果
            parsed: Posts = Posts.model_validate_json(result)
            print("\n--- Extracted Hacker News Posts ---")
            for post in parsed.posts:
                print('\n--------------------------------')
                print(f'Title:          {post.post_title}')
                print(f'URL:            {post.post_url}')
                print(f'Comments:       {post.num_comments}')
                print(f'Hours Ago:      {post.hours_since_post}')
            print('--------------------------------')
        except Exception as e:
            print(f"Error parsing result: {e}")
            print(f"Raw result: {result}")  # 打印原始结果进行调试
    else:
        print('No result found.')

if __name__ == '__main__':
    asyncio.run(main())

代码解释:

  • 我们从pydantic(一个数据验证库)导入BaseModelField,并从browser-use导入Controller
  • 我们定义了两个Pydantic模型:Post描述单个Hacker News帖子的结构(标题,URL,评论,时间),以及Posts作为Post对象的列表。Field的描述至关重要,因为它们指导大语言模型(LLM)提取每个字段的数据。
  • 创建一个Controller实例,其中output_model设置为我们的Posts Pydantic模型。此Controller负责强制执行输出格式。
  • 在初始化Agent时,我们现在包括controller参数。这指示代理根据我们的Posts模式格式化其最终输出。
  • await agent.run()之后,我们获取历史记录对象,并且history.final_result()以JSON字符串的形式提供提取的数据。
  • 我们使用Posts.model_validate_json(result)将此JSON字符串解析为我们的Pydantic对象,从而提供数据的强大且易于使用的结构化表示。

要运行此程序,请执行:

python structuredOutput.py

你将看到代理浏览Hacker News,然后在控制台中,提取的帖子将按照我们定义的PostPosts Pydantic模型整齐地格式化显示。这证明了结构化数据提取的强大功能。这个例子突出了AI浏览器代理(Browser Agent)在信息组织和数据管理方面的优势,尤其是在需要将数据集成到现有系统中的场景下。 假设你需要定期从多个在线论坛收集信息,并将这些信息存储到数据库中,以便进行分析。 使用结构化数据提取功能,你可以轻松地将来自不同论坛的信息转换成统一的格式,并将其导入到数据库中,从而大大简化了数据收集和处理流程。

大语言模型(LLM)的选择:Gemini 的优势

在上述示例中,我们使用了 Google 的 Gemini 1.5 Flash 模型。 选择合适的大语言模型(LLM)AI浏览器代理(Browser Agent)的性能至关重要。 Gemini 1.5 Flash 模型因其以下优点而成为一个不错的选择:

  • 强大的语言理解能力: Gemini 系列模型拥有强大的自然语言理解能力,能够准确地理解用户指令并有效地导航和理解网页内容。
  • 快速的响应速度: Gemini 1.5 Flash 模型在保证性能的前提下,优化了响应速度,能够快速地完成任务,提高效率。
  • 较低的成本: 相比于更大规模的 大语言模型(LLM), Gemini 1.5 Flash 模型的成本更低,适合在资源有限的情况下使用。
  • 支持长文本处理: Gemini 1.5 Flash 模型支持长文本处理,可以处理包含大量信息的网页,提取关键信息。

当然,在实际应用中, 大语言模型(LLM)的选择需要根据具体的任务需求和预算进行综合考虑。 其他可供选择的模型包括 OpenAI 的 GPT 系列模型、 Anthropic 的 Claude 模型等。

结论

AI浏览器代理(Browser Agent),由browser-use库和诸如Google的Gemini这样的大语言模型(LLM)提供支持,代表了Web自动化领域的重大飞跃。 它们使开发人员和用户能够使用自然语言与Internet进行交互,从而抽象出传统Web抓取和动态Web环境的复杂性。

从执行智能研究和数据收集到监视信息和自动化重复性任务,AI浏览器代理(Browser Agent)的应用范围非常广泛,并且在不断扩展。 通过将大语言模型(LLM)的会话智能与编程浏览器控制相结合,我们为与数字世界互动开辟了新的可能性领域。

你将使用AI浏览器代理(Browser Agent)自动化哪些Web任务?在下面的评论中分享你的想法!

如果你觉得这有帮助,请与你的网络分享,并考虑订阅以获取有关AI,自动化和前沿开发的更多内容。

有关更多信息,请浏览browser-use文档及其GitHub存储库:

我们的仓库:https://github.com/TensorNine/LLM-Browser-Automation

浏览器官方仓库:https://github.com/browser-use

有关可视化演练,请观看此视频教程:Browser Agents: Automate Your Web Tasks with AI!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注