
提升llm知识库:如何在几秒内将任何网站信息传递给模型
- Rifx.Online
- Web Development , Data Science , AI Applications
- 05 Mar, 2025
我们将看到 Crawl4AI 的强大功能
来源:Crawl4AI
嗨,让我问你这个——你有没有试过问一个语言模型(比如 GPT 或 Claude)一些非常小众或新的东西,结果得到一个完全空白或通用的回答?
没错,我经历过!
这里有一个例子:
截图由我提供
这就是因为这些模型是基于某个时间点停止的数据进行训练的,因此对之后发生的任何事情一无所知。
即使是那些可以搜索网络的模型,通常也会给出模糊的答案。
这就是 检索增强生成 (RAG) 拯救了局面。
这是一种 fancy 的说法,意味着你可以将外部来源的精选知识输入到你的语言模型中。通过让它成为一个专家,了解那些它本来不会知道的主题。
但这里有个问题:设置这个过程可能会感觉非常繁琐。
引入 Crawl4AI——一个改变游戏规则的工具。这是一个开源工具,让这个过程变得超级简单和极其快速。
在这个友好的指南中,我将带你了解:
- 为什么常规的大语言模型常常无法达到预期。
- Crawl4AI 如何像魔法一样工作。
- 真实示例和代码来抓取网站并设置 RAG。
- 如何为你的大语言模型构建一个智能知识系统。
让我们来理解一下!
为什么通用的大语言模型会失误
好吧,想象一下这个场景。
你问一个大语言模型:“CrewAI 更新 0.95.0 有什么新变化?”
你可能会得到这样的回答:
截图由我提供
这让人感到沮丧,对吧?
即使这是一个可以浏览网页的模型,答案也可能非常基础,因为我的知识截止于 2024 年 4 月,就像这样……
但是……如果我给大语言模型提供 CrewAI 的背景信息,那么答案可能会像这样:
截图由我提供
好多了,对吧?
这就是检索增强生成的魔力,你给大语言模型提供经过筛选的知识,以专业的方式回答问题。
那么,如何将网站转变为你大语言模型的真实来源呢?
这就是异步网页爬虫登场的地方。
Introducing Crawl4AI
Crawl4AI 就像一个用于网页抓取的瑞士军刀,但专门为使大语言模型更智能而构建。
它抓取网站内容,清理它,并以整洁的 markdown 格式提供给您。
最棒的部分?
它快速且易于使用。
为什么 Crawl4AI 很棒:
超级干净的 markdown:它将凌乱的 HTML 转换为可读的 markdown,完美适用于大语言模型。
闪电般的速度:快速处理网站而不占用系统资源。
简单的设置:您不需要成为编码高手即可开始使用。
可扩展:适用于小型网站或大型多页面文档。
智能过滤器:自动删除您不需要的广告和脚本等垃圾内容。
设置
安装 Crawl4AI 是多么简单:
pip install -U crawl4ai
crawl4ai-setup
python -m playwright install --with-deps chromium
就是这样!
你已经准备好开始了。
使用 Crawl4AI 抓取网站
抓取单个页面
想要从一个页面获取内容吗?
这就是如此简单:
import asyncio
from crawl4ai import *
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://docs.crewai.com/introduction")
print(result.markdown)
if __name__ == "__main__":
asyncio.run(main())
只需几秒钟,这就抓取了页面的 markdown 版本并打印出来。
简单易行!
扩展:多页面爬取
为什么顺序爬取很重要?
好的,抓取一个页面很酷,但如果你有一个包含大量页面的整个网站呢?
顺序爬取允许你使用同一个浏览器会话抓取多个URL,这样一切都会快得多。
示例:使用重用会话的顺序爬取
import asyncio
from typing import List
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator
async def crawl_sequential(urls: List[str]):
browser_config = BrowserConfig(
headless=True,
extra_args=["--disable-gpu", "--disable-dev-shm-usage", "--no-sandbox"],
)
crawl_config = CrawlerRunConfig(
markdown_generator=DefaultMarkdownGenerator()
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.start()
session_id = "session1"
for url in urls:
result = await crawler.arun(
url=url,
config=crawl_config,
session_id=session_id
)
if result.success:
print(f"爬取成功: {url}, Markdown 长度: {len(result.markdown_v2.raw_markdown)}")
else:
print(f"爬取失败: {url}, 错误: {result.error_message}")
urls = ["https://docs.crewai.com/introduction", "https://docs.crewai.com/installation"]
asyncio.run(crawl_sequential(urls))
进一步深入 (并行爬虫)
有一个庞大的站点吗?
并行爬虫让你可以通过加快速度同时抓取多个页面。
示例:并行爬取
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode
async def crawl_parallel(urls, max_concurrent=5):
async with AsyncWebCrawler() as crawler:
await crawler.start()
tasks = [
crawler.arun(url, config=CrawlerRunConfig(cache_mode=CacheMode.BYPASS))
for url in urls
]
results = await asyncio.gather(*tasks)
for result in results:
print("爬取成功!", result.markdown if result.success else result.error_message)
urls = ["https://docs.crewai.com/installation", (您可以放更多链接)]
asyncio.run(crawl_parallel(urls))
与检索增强生成集成
现在您已经获得了您的markdown内容,让我们将其连接到一个检索增强生成(RAG)系统。
以下是您如何为您的大语言模型创建知识库的方法。
第一步:将数据存储在向量数据库中
使用像 Supabase 或 PGVector 这样的数据库来存储您的爬取的 markdown 及其嵌入。
from supabase import create_client
supabase = create_client("your_supabase_url", "your_supabase_key")
def store_markdown(title, content, embedding):
response = supabase.table("site_pages").insert({
"title": title,
"content": content,
"embedding": embedding
}).execute()
print("Stored successfully!", response)
步骤 2:查询数据库
当用户提出问题时,它会为查询生成一个嵌入并在数据库中搜索相关内容。
def query_database(query):
embedding = generate_embedding(query)
results = supabase.rpc("match_site_pages", {"query_embedding": embedding, "match_count": 5}).execute()
return results.data
query = "What is CrewAI?"
data = query_database(query)
for item in data:
print("Relevant Content:", item["content"])
第3步:生成响应
将检索到的内容与大语言模型的响应结合,以获得动态和上下文感知的答案。
user_query = "How do I install CrewAI?"
data = query_database(user_query)
if data:
print("Answer:", data[0]["content"])
else:
print("Sorry, no relevant info found!")
结论
就这些!
使用 Crawl4AI 和 检索增强生成,您可以将任何网站转变为大语言模型的丰富动态知识库。
无论是用于 AI 驱动的聊天机器人还是您业务的专业工具,这种设置都能让您的大语言模型更智能、更可靠。