Crawl4AI 提取策略:JSON CSS、LLM 和 余弦相似度
Crawl4AI 提取策略:JSON CSS、LLM 和 余弦相似度
快速介绍
介绍用于结构化数据的 JSON CSS 提取策略、用于智能解析的 LLM 提取策略和用于聚类相似内容的余弦策略。演示如何使用 JSON CSS 从电子商务网站抓取产品详细信息。
以下是 LLM 提取策略视频的综合大纲,涵盖了关键细节和示例应用。
10.2 LLM 提取策略
1. LLM 提取策略介绍
LLM 提取策略利用语言模型来解释和提取复杂网页内容中的结构化数据。与传统的 CSS 选择器不同,这种策略使用自然语言指令和模式来指导提取,非常适合非结构化或多样化的内容。支持 OpenAI、Azure OpenAI、HuggingFace 和 Ollama 模型,使得与专有和开源提供商的灵活性成为可能。
2. LLM 提取策略的关键组成部分
提供商:指定 LLM 提供商(例如:OpenAI、HuggingFace、Azure)。
API 令牌:大多数提供商需要,除了 Ollama(本地 LLM 模型)。
指令:发送到模型的自定义提取指令,提供灵活的数据结构和提取方式。
模式:可选,定义要提取的数据的结构化字段,以组织成 JSON 格式。
提取类型:支持 "block" 用于简单的文本块或 "schema",当需要结构化输出格式时。
3. 基本提取示例:OpenAI 模型定价
目标:从 OpenAI 定价页面提取模型名称及其输入和输出费用。 模式定义:
模型名称:文本,用于模型识别。
输入费用:输入处理的令牌费用。
输出费用:输出生成的令牌费用。
示例代码:
python
async def extract_openai_pricing():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://openai.com/api/pricing/",
extraction_strategy=LLMExtractionStrategy(
provider="openai/gpt-4o",
api_token=os.getenv("OPENAI_API_KEY"),
schema=OpenAIModelFee.schema(),
extraction_type="schema",
instruction="从页面提取模型名称和输入输出令牌的费用。"
),
bypass_cache=True
)
print(result.extracted_content)
解释:
提取策略结合了模式和详细指令,以指导 LLM 捕获结构化数据。每个模型的名称、输入费用和输出费用都以 JSON 格式提取。
4. 知识图谱提取示例
目标:从文档中提取实体及其关系,用于知识图谱。 模式定义:
实体:具有描述的单个项目(例如:人、组织)。
关系:实体之间的连接,包括描述和关系类型。
示例代码:
python
async def extract_knowledge_graph():
extraction_strategy = LLMExtractionStrategy(
provider="azure/gpt-4o-mini",
api_token=os.getenv("AZURE_API_KEY"),
schema=KnowledgeGraph.schema(),
extraction_type="schema",
instruction="从内容中提取实体和关系以构建知识图谱。"
)
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://example.com/some-article",
extraction_strategy=extraction_strategy,
bypass_cache=True
)
print(result.extracted_content)
解释:
在此设置中,LLM 根据模式和指令提取实体及其关系。模式将结果组织为基于 JSON 的知识图谱格式。
5. LLM 提取中的关键设置
分块选项: 对于长页面,设置 chunk_token_threshold
来指定每节的最多令牌数。调整 overlap_rate
来控制块之间的重叠,有助于保持上下文一致性。
示例:
python
extraction_strategy = LLMExtractionStrategy(
provider="openai/gpt-4",
api_token=os.getenv("OPENAI_API_KEY"),
chunk_token_threshold=3000,
overlap_rate=0.2, # 块之间 20% 的重叠
instruction="提取关键见解和关系。"
)
此设置确保将较长的文本分割为可管理的块,并略有重叠,提高提取质量。
6. LLM 提取的灵活提供商选项
使用专有模型:OpenAI、Azure 和 HuggingFace 提供了强大的语言模型,通常适合复杂或详细的提取。 使用开源模型:Ollama 和其他开源模型可以本地部署,适合离线或成本效益高的提取。
示例调用:
python
await extract_structured_data_using_llm("huggingface/meta-llama/Meta-Llama-3.1-8B-Instruct", os.getenv("HUGGINGFACE_API_KEY"))
await extract_structured_data_using_llm("openai/gpt-4o", os.getenv("OPENAI_API_KEY"))
await extract_structured_data_using_llm("ollama/llama3.2")
7. LLM 提取设置的完整示例
运行 OpenAI 定价和知识图谱提取的代码,使用不同的提供商:
python
async def main():
await extract_openai_pricing()
await extract_knowledge_graph()
if __name__ == "__main__":
asyncio.run(main())