firecrawl Turn entire websites into LLM-ready markdown 项目地址: https://gitcode.com/gh_mirrors/fi/firecrawl
本文将详细介绍如何利用Firecrawl网络爬取工具、Llama 3大语言模型以及LangChain框架,构建一个能够与网站内容对话的智能问答系统。这个系统可以自动抓取目标网站的所有内容,建立知识库,并基于用户提问提供精准回答。
在开始之前,让我们先了解下这个项目中用到的核心技术组件:
首先需要安装必要的Python依赖包:
pip install --upgrade --quiet langchain langchain-community groq faiss-cpu ollama firecrawl-py
建议使用Python 3.8或更高版本,并创建一个干净的虚拟环境来管理依赖。
使用Firecrawl抓取网站内容是构建知识库的第一步。Firecrawl提供了与LangChain无缝集成的文档加载器:
from langchain_community.document_loaders import FireCrawlLoader
url = "https://firecrawl.dev"
loader = FireCrawlLoader(
api_key="fc-YOUR_API_KEY", # 替换为你的实际API密钥
url=url,
mode="crawl" # 设置为爬取模式,将抓取所有可访问的子页面
)
docs = loader.load()
关键参数说明:
mode="crawl"
:表示不仅抓取指定URL,还会递归抓取该网站下的所有链接max_pages
参数限制抓取页面数量抓取到的网页内容需要经过处理才能被大语言模型有效利用。我们采用以下步骤:
from langchain_community.embeddings import OllamaEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
# 文本分割配置
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 每个文本块约1000个字符
chunk_overlap=200 # 块间重叠200个字符,保持上下文连贯
)
splits = text_splitter.split_documents(docs)
# 构建向量存储
vectorstore = FAISS.from_documents(
documents=splits,
embedding=OllamaEmbeddings() # 使用Ollama提供的嵌入模型
)
文本分割策略的选择对问答质量有很大影响。较大的块可以保留更多上下文,但可能包含无关信息;较小的块更精确,但可能丢失重要上下文。200字符的重叠可以确保关键信息不会在分割边界丢失。
当用户提出问题时,系统需要:
# 相似性搜索获取相关文档
question = "Firecrawl是什么?"
docs = vectorstore.similarity_search(query=question)
# 使用Groq的Llama 3生成回答
from groq import Groq
client = Groq(api_key="YOUR_GROQ_API_KEY")
completion = client.chat.completions.create(
model="llama3-8b-8192",
messages=[
{
"role": "user",
"content": f"你是一个友好的助手。你的工作是基于下面提供的文档回答用户问题:\n文档内容:\n\n{docs}\n\n问题: {question}"
}
],
temperature=1, # 控制回答的创造性
max_tokens=1024, # 限制回答长度
top_p=1,
stream=False,
stop=None,
)
print(completion.choices[0].message)
内容抓取不完整:
回答质量不高:
性能问题:
这个技术方案不仅适用于网站问答,还可以应用于:
本文详细介绍了基于Firecrawl和Llama 3构建网站问答机器人的完整流程。通过结合网络爬取、文本向量化和大语言模型技术,我们能够创建理解网站内容的智能对话系统。这种方案具有高度可定制性,读者可以根据具体需求调整各个环节的参数和实现方式。
firecrawl Turn entire websites into LLM-ready markdown 项目地址: https://gitcode.com/gh_mirrors/fi/firecrawl