在这个故事中,我有一个快速教程,展示如何使用Browser-use、LightRAG和本地LLM创建一个强大的聊天机器人,能够抓取您选择的任何网站。此外,您可以就数据提问,它会给您相应的回答。
免责声明:本文仅供教育用途。我们不鼓励任何人抓取网站,尤其是那些可能有反对此类行为条款和条件的网站。
现有的RAG系统存在重大限制,包括依赖于平面数据表示和缺乏上下文感知,这导致答案碎片化并且无法捕捉复杂的相互依赖关系。
为了解决这些挑战,我们提出了LightRAG和Browser-Use
Browser-Use是一个开源的网页自动化库,支持与任何语言模型(LLM)进行交互。
通过一个简单的界面,用户可以启用LLM与网站交互并执行任务,如数据抓取和信息查询。
LightRAG将图结构集成到文本索引和检索过程中。这个创新框架采用了两级检索系统,以增强从低级和高级知识发现中的综合信息检索。
所以,让我给你一个实时聊天机器人的快速演示,来展示我的意思。
我想抓取一个网站,所以我问了代理两个问题。我的第一个问题是,“去亚马逊找一台带有16GB VRAM和RTX 3080或RTX 4090显卡的最便宜的笔记本电脑。”
结果令人惊叹!浏览器使用大型语言模型来提取数据,自动定位互动元素。如果你仔细观察,你会发现代理在找不到元素或LLM出错时会自我纠正。它还使用视觉模型截屏并提取信息。
对于我的第二个问题,我让代理“去google.com找到关于监督LLM的文章,然后提取关于监督微调的一切。”如果你想了解更多关于微调的信息,我在上一个视频中已经详细解释和研究过了。
数据加载后,我们实现LightRAG,让LLM能够同时处理多个元素——实体、关系和描述。它测试LLM的理解能力,并分割任务以减少压力,但可能会增加令牌使用量。
模型的源代码预先指定了实体类型,这可能不适应新的领域,类似于在传统知识图中定义模式的挑战。
在更高层次上,关键词指导相关信息的回忆,但回忆质量取决于这些关键词。最终,这个过程提高了最终答案的质量。
如果你喜欢这个话题并想支持我:
在这个视频中,我将解释什么是LightRAG,LightRAG过程如何工作,LightRAG和GraphRAG的区别,Browser-Use是什么及其功能,以及如何一起实现所有这些技术
免责声明:本文仅供教育用途。我们不鼓励任何人抓取网站,尤其是那些可能有反对此类行为条款和条件的网站。
LightRAG是一种快速高效的信息检索和生成系统,旨在解决传统RAG系统的问题。典型的RAG系统旨在将LLM与外部知识链接,以生成对用户问题更准确的答案。
然而,传统系统受限于平面数据表示并缺乏上下文。LightRAG通过将图结构引入数据索引和搜索中来克服这些限制,并提供高效且具有上下文的信息。
LightRAG首先应用基于图的数据结构,在信息检索过程中预处理外部数据库中的实体及其关系。
这个过程包括多个步骤:
通过这些步骤,LightRAG不仅提取具有特定语义的实体,还加深了对抽象概念的理解,使系统在面对复杂问题时能够执行更准确的信息检索和生成。
LightRAG从文档中提取实体(人物、地点、概念等)及其之间的关系,用于构建知识图谱。
例如,从句子“Andrew Yan正在谷歌大脑团队研究人工智能”中,我们提取以下信息:
这样创建的知识图谱可以高效地表示复杂的信息关系。图1左侧对应这个过程。
LightRAG搜索分为两个阶段:低级和高级,如图1中心部分所示。
这种两层次的方法允许平衡的信息检索,同时捕捉具体事实和整体情况。
LightRAG在效率、检索能力和处理复杂查询方面优于GraphRAG。它使用双层检索系统,将令牌使用量减少到不到100个,只需一次API调用,而GraphRAG需要610,000个令牌和多次调用。
LightRAG提供更多样化的响应,有效捕捉具体和广泛主题,并擅长处理复杂查询,而GraphRAG适应性较差且成本较高。LightRAG更高效、灵活,更适合动态数据环境。
Browser-use是一个开源网页自动化库,允许大型语言模型(LLMs)执行诸如检查航班、搜索信息、总结热门帖子等任务。
它自动检测可点击元素,处理cookie提示和弹出窗口,并允许在多个标签页之间切换。它还可以填写表单、提取网页信息、截屏并读取图像内容。
该工具通过分析当前页面内容来确定下一步操作——点击、输入文本还是翻页,从而做出智能决策。此外,它具有记忆功能,可以回忆之前访问过的页面和收集的信息。它支持与LangChain兼容的模型,包括GPT-4、Claude 3.5和LLama。
在我们深入应用程序之前,我们将创建一个理想环境以使代码正常工作。为此,我们需要安装所需的Python库。首先,我们将安装支持模型的库。为此,我们将执行pip install requirements。由于演示使用OpenAI大型模型,因此您必须先设置OpenAI API密钥。
pip install -r requirements.txt
安装完成后,我们导入browser_use、langchain_openai 和 lightrag库。
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
然后,我们使用Controller管理并保持浏览器状态跨多个代理一致性。它允许代理共享浏览会话,保持cookie、会话和标签页的一致性。
# 保持浏览器状态跨代理一致性
controller = Controller()
让我们初始化代理以通过Google搜索“LoRA LLM”并提取有关LoRA的信息,然后我们使用chatOpenai模型来处理和分析内容,该模型连接到controller
以保持浏览器状态的一致性。
# 初始化浏览器代理
agent = 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)
此外,我们还可以初始化另一个代理,但这取决于您希望在代码中包含多少个代理。他们可以执行不同任务,但您需要管理每个代理执行不同任务
agent = 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,但您可以自由设置任何数字。在每一步中,代理执行一个动作,该动作代表代理计划接下来的操作,并包含步骤输出,包括任务是否完成以及提取的数据。如果任务完成,则提取内容保存到名为text.txt
的文件中,并终止进程。
async def main():
max_steps = 20
# 一步一步运行代理
for i in range(max_steps):
print(f'\n Step {i+1}')
action, result = await agent.step()
print('Action:', action)
print('Result:', result)
if result.done:
print('\n✅ Task completed successfully!')
print('Extracted content:', result.extracted_content)
# 保存提取内容到文本文件
with open('text.txt', 'w') as file:
file.write(result.extracted_content)
print("Extracted content has been saved to text.txt")
break
asyncio.run(main())
现在我们定义工作目录,并检查当前工作目录中是否存在名为dickens
的目录。如果不存在,则程序创建它。这确保目录可用于存储文件或其他资源。
WORKING_DIR = "./dickens"
if not os.path.exists(WORKING_DIR):
os.mkdir(WORKING_DIR)
主要步骤是配置具有必要参数的LightRAG实例。我们初始化工作目录(./dickens)并使用轻量级GPT-4o模型(gpt_4o_mini_complete)作为默认语言模型。这种设置对于增强检索任务效率高,并且如果需要,可以灵活地使用更强大的模型(gpt_4o_complete)。
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=gpt_4o_mini_complete # 使用gpt_4o_mini_complete LLM模型
# llm_model_func=gpt_4o_complete # 可选地使用更强大的模型
)
我们读取指定路径中的text.txt
内容,并使用rag.insert()
将其插入到RAG系统中
with open("C:/Users/mrtar/Desktop/lightrag/text.txt") as f:
rag.insert(f.read())
我们针对查询“What is Supervised Fine-Tuning”在RAG系统中执行朴素搜索。在朴素搜索模式下,系统查找直接包含查询关键字的文档或条目,而不考虑这些术语周围的任何关系或上下文。这对于不需要复杂推理的简单查询非常有用。它将返回基于关键字匹配的结果。
# 执行朴素搜索
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="naive")))
此外,我们针对查询“What is Supervised Fine-Tuning?”执行本地搜索。在本地搜索模式下,系统检索关于查询及其直接邻居(直接相关实体)的信息。这将提供额外上下文,重点关注与“Supervised Fine-Tuning”直接相关的紧密关系。本地搜索比朴素搜索更详细,当你需要更多关于直接连接或关系的信息时很有价值
# 执行本地搜索
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="local")))
现在,我们针对查询“What is Supervised Fine-Tuning?”进行全局搜索。在全局搜索模式下,系统考虑整个知识图谱,不仅查找直接关系,还查找更广泛范围内间接关系。它不仅检查与“Supervised Fine-Tuning”直接相关的信息,还检查所有可能关联。这提供全面概述,非常适合需要广泛上下文或全球关系视角的查询
# 执行全局搜索
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="global")))
最后,我们针对查询“What is Supervised Fine-Tuning?”执行混合搜索。混合搜索模式结合了本地搜索和全局搜索的优点。它基于直接关系(如本地搜索)检索信息,但也考虑间接或全球关系(如全局搜索)。这提供了平衡且全面上下文,非常适合大多数场景,特别是在需要理解整体及具体上下文时
# 执行混合搜索
print(rag.query("what is Supervised Fine-Tuning", param=QueryParam(mode="hybrid")))
不仅仅是技术进步,LightRAG 和 Browser-Use 可以从根本上改变我们与信息互动方式。他们提供更准确全面搜索能力,对复杂问题给出精确回答,以及始终反映最新知识响应。如果这些目标实现,他们可能会彻底改变教育、研究和商业领域。LightRAG 和 Browser-Use 代表着开创性技术,将开启下一代信息搜索与生成。我非常期待未来的发展!