Crawl4AI 提取策略:JSON CSS、LLM 和 余弦相似度

56
0
0
2024-11-11

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())