Browser-Use + LightRAG Agent:利用 LLM 实现高效网页数据抓取
在人工智能应用开发中,如何让大语言模型(LLM)更准确地获取外部信息并理解复杂关系是一个核心挑战。传统的检索增强生成(RAG)系统往往依赖扁平化的文本索引,缺乏对实体间深层关系的理解,导致回答碎片化。为了解决这一问题,结合 Browser-Use(浏览器自动化库)与 LightRAG(轻量级图检索生成系统)提供了一种高效的解决方案。
现有 RAG 系统的局限性
现有的 RAG 系统存在显著的局限性,主要包括:
- 扁平数据表示:传统系统通常将文档切分为片段,丢失了上下文关联。
- 缺乏上下文意识:难以捕捉复杂的相互依赖关系,导致答案碎片化。
- 检索效率低:在处理大规模知识库时,召回率和准确率往往难以平衡。
解决方案:LightRAG 与 Browser-Use
什么是 Browser-Use?
Browser-Use 是一个开源的网页自动化库,允许大型语言模型(LLMs)执行诸如检查航班、搜索信息、总结热门帖子等任务。它通过简单的接口,使用户可以使 LLM 与网站交互并执行数据抓取和信息查询等任务。
主要特性包括:
- 自动元素检测:自动识别可点击元素,处理 Cookie 提示和弹出窗口。
- 多标签页管理:支持在多个标签页之间切换,填写表单,提取网页信息。
- 视觉能力:支持截取屏幕截图并读取图像内容,辅助决策。
- 记忆功能:能够回忆之前访问的页面和收集的信息,支持与 LangChain 兼容的模型。
什么是 LightRAG?
LightRAG 是一个快速高效的信息检索和生成系统,旨在解决传统 RAG 系统的问题。它将图结构纳入数据索引和搜索,以克服限制,并提供高效且具有上下文的信息。
工作原理
LightRAG 首先应用基于图的数据结构,在信息检索过程中对外部数据库中的实体及其关系进行预处理。该过程包括多个步骤:
- 实体和关系的提取:从文档中提取人、地点、概念等实体及其关系。
- 检索键值对的生成:构建用于快速检索的索引。
- 信息的去重:优化存储,减少冗余。
通过这些步骤,LightRAG 不仅提取具有特定语义的实体,还加深了对抽象概念的理解,使系统在面对复杂问题时能够进行更准确的信息检索和生成。
双阶段搜索范式
LightRAG 搜索分为两个阶段:
- 低级搜索:寻找具体的实体或关系,例如特定的名称或概念。
- 高级搜索:寻找更抽象的主题或对象,例如广泛的主题。
这种双层次的方法允许平衡的信息检索,既捕捉具体事实,又展现更大的全局视野。
对比 GraphRAG
LightRAG 在效率、检索和处理复杂查询方面优于 GraphRAG。它使用双层检索系统,将令牌使用量大幅减少,仅需少量 API 调用,而传统 GraphRAG 可能需要大量令牌和多次调用。LightRAG 提供了更多样化的响应,有效捕捉特定和广泛的主题,并在复杂查询中表现出色。
代码实现指南
环境准备
在开始编码之前,我们需要创建一个理想的环境以便代码能够正常工作。首先,安装所需的 Python 库。
pip install browser-use langchain-openai lightrag python-dotenv
由于演示使用了 OpenAI 大模型,您必须首先设置 OpenAI API 密钥。建议将密钥存储在 .env 文件中。
初始化代理与控制器
我们将导入必要的模块,并使用 Controller 来管理和保持多个代理之间的浏览器状态。它允许代理共享浏览会话,保持 Cookie、会话和标签页的一致性。
from browser_use import Agent, Controller
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
import os
from lightrag.lightrag import LightRAG, QueryParam
from lightrag.llm import gpt_4o_mini_complete
import asyncio
load_dotenv()
controller = Controller()
定义任务代理
我们初始化代理,以通过在 Google 中搜索特定关键词来查找和提取信息。然后,我们使用 ChatOpenAI 模型来处理和分析与 controller 连接的内容。
agent1 = Agent(
task="Go to google.com and find the article about Lora llm and extract everything about Lora",
llm=ChatOpenAI(model="gpt-4o", timeout=25, stop=None),
controller=controller
)
agent2 = Agent(
task="Go to google.com and find the article Supervised llm and extract everything about Supervised Fine-Tuning",
llm=ChatOpenAI(model="gpt-4o", timeout=25, stop=None),
controller=controller
)
异步执行任务
我们定义一个异步函数以实现任务的并发执行。我们将代理的最大步骤限制设置为 20,但可以根据需要调整。在每一步中,代理执行一个动作,结果包含该步骤的输出。如果任务完成,提取的内容将保存到文件中。
async def main():
max_steps = 20
for i in range(max_steps):
print(f'\n📍 步骤 {i+1}')
action, result = await agent1.step()
print('动作:', action)
print('结果:', result)
if result.done:
print('\n✅ 任务成功完成!')
print('提取的内容:', result.extracted_content)
with open('text.txt', 'w', encoding='utf-8') as file:
file.write(result.extracted_content)
print("提取的内容已保存到 text.txt")
break
if __name__ == "__main__":
asyncio.run(main())
配置 LightRAG 实例
主要步骤是使用必要的参数配置 LightRAG 实例。我们使用工作目录和轻量级 GPT-4o 模型作为默认语言模型进行初始化。
WORKING_DIR = "./dickens"
if not os.path.exists(WORKING_DIR):
os.mkdir(WORKING_DIR)
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=gpt_4o_mini_complete
)
数据插入与检索
我们从指定路径读取 text.txt 的内容,并使用 rag.insert() 将其插入 RAG 系统。
with open("text.txt", "r", encoding="utf-8") as f:
rag.insert(f.read())
接下来,我们可以对查询执行不同类型的搜索:
- 简单搜索 (Naive):查找直接包含查询关键字的文档,不考虑关系。
- 局部搜索 (Local):检索与查询及其直接邻居相关的信息。
- 全局搜索 (Global):考虑整个知识图谱,查看更广泛的间接关系。
- 混合搜索 (Hybrid):结合局部和全局搜索的优点。
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="naive")))
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="local")))
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="global")))
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="hybrid")))
最佳实践与安全考量
性能优化
- 缓存机制:对于频繁访问的网站,建议启用浏览器缓存以减少重复请求。
- 模型选择:根据任务复杂度选择合适的 LLM 模型。轻量级任务可使用小模型,复杂推理需使用大模型。
- 并发控制:在批量抓取时,注意控制并发数量,避免触发目标网站的反爬机制。
伦理与合规
- 遵守 robots.txt:在抓取任何网站前,请检查其
robots.txt 文件,确保未禁止爬虫访问。
- 尊重版权:仅将抓取的数据用于教育或研究目的,避免侵犯知识产权。
- 频率限制:合理设置请求间隔,避免对目标服务器造成过大压力。
结论
不仅仅是技术进步,LightRAG 和 Browser-Use 潜在地可以从根本上改变我们与信息的互动方式。它们提供更准确和全面的搜索能力、对复杂问题的精确回答,以及始终反映最新知识的响应。该方案结合了浏览器自动化的灵活性与图检索的深度理解能力,适用于教育、研究和商业等多个领域。未来,随着多模态能力的进一步增强,此类 AI 代理将在信息获取与分析方面发挥更大作用。