ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Haystack Firecrawl 集成指南:FirecrawlCrawler 与 FirecrawlWebSearch 组件实战

Haystack Firecrawl 集成指南:FirecrawlCrawler 与 FirecrawlWebSearch 组件实战 Haystack Firecrawl 集成指南FirecrawlCrawler 与 FirecrawlWebSearch 组件实战【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystackFirecrawl 集成是 Haystack 生态中负责「网页数据摄入」与「联网检索」的两大组件集合FirecrawlCrawler从给定 URL 出发递归爬取整站内容并转为 HaystackDocumentFirecrawlWebSearch则一步完成「搜索 抓取 结构化」将结果直接喂给 LLM。本文以 Firecrawl 集成 API 参考文档 为主体结合仓库内的组件使用文档与源码完整讲解两个组件的参数语义、生命周期方法、独立运行与管线集成方式帮助你快速构建「文档站索引」「RAG 实时检索」等场景的数据链路。Firecrawl 集成概览Firecrawl 是一款面向 LLM 的网站爬取与搜索服务它爬取网页后返回结构化内容如 Markdown天然适合作为大模型的输入。Haystack 通过firecrawl-haystack集成包将其封装为两个标准组件组件模块路径核心能力FirecrawlCrawlerhaystack_integrations.components.fetchers.firecrawl从每个起始 URL 出发跟随链接发现子页面递归爬取至可配置上限将每个页面转为一个DocumentFirecrawlWebSearchhaystack_integrations.components.websearch.firecrawl封装 Firecrawl Search API一次调用完成「网页搜索 抓取 结构化」返回Document列表与链接列表在 Haystack 组件体系中两者分别归属于 Fetchers数据获取 与 WebSearch联网搜索 两个类别可通过 平台组件表 中注册的firecrawl标识快速定位。前者常出现在索引管线或查询管线的数据抓取步骤后者通常放在ChatPromptBuilder之前或直接置于索引管线的开端。安装与认证安装集成包pip install firecrawl-haystack使用 Firecrawl 服务需要 API Key。两个组件默认都从FIRECRAWL_API_KEY环境变量读取密钥也可以在初始化时通过Secret显式传入from haystack.utils import Secret from haystack_integrations.components.fetchers.firecrawl import FirecrawlCrawler crawler FirecrawlCrawler(api_keySecret.from_token(your-api-key))Secret对象同时支持Secret.from_env_var(FIRECRAWL_API_KEY)与Secret.from_token(...)两种构造方式前者便于在部署环境CI、容器、云端中统一注入密钥后者适合本地快速试验。FirecrawlCrawler整站递归爬取FirecrawlCrawler解决的问题与单页 Fetcher 不同它不只是抓取某个 URL而是以该 URL 为起点持续跟随页面中的链接、发现子页面直到达到limit上限。因此它非常适合摄入整个网站或整个文档站点而非单个页面。初始化参数__init__( api_key: Secret Secret.from_env_var(FIRECRAWL_API_KEY), params: dict[str, Any] | None None, ) - None参数类型默认值说明api_keySecretSecret.from_env_var(FIRECRAWL_API_KEY)Firecrawl API Keyparamsdict[str, Any] \| None{limit: 1, scrape_options: {formats: [markdown]}}爬取请求参数完整列表见 Firecrawl API 参考crawl endpointparams中两个最常用的键limit每个起始 URL 最多爬取的页面数。默认值为1。如果不设置 limitFirecrawl 可能爬取全部子页面并快速消耗积分额度这是官方文档明确提示的注意事项。scrape_options控制输出格式默认{formats: [markdown]}即返回适合 LLM 的 Markdown 文本。独立运行from haystack_integrations.components.fetchers.firecrawl import FirecrawlCrawler crawler FirecrawlCrawler( api_keySecret.from_env_var(FIRECRAWL_API_KEY), params{limit: 5}, ) crawler.warm_up() result crawler.run(urls[https://docs.haystack.deepset.ai/docs/intro]) documents result[documents]每个被爬取的页面都会成为一个独立的Document页面内容存放在content字段页面标题、URL、描述等元信息存放在meta字段对应 Document 数据类 中content: str | None与meta: dict[str, Any]的结构设计其中meta要求 JSON 可序列化。遍历结果时可直接读取for doc in documents: print(f{doc.meta.get(title)} - {doc.meta.get(url)})方法签名与返回值run(urls: list[str], params: dict[str, Any] | None None) - dict[str, Any]urls必填要爬取的 URL 列表。params可选本次运行的爬取参数覆盖。如果提供会整体替换初始化时的params而非合并——这一点与run_async一致使用时需注意保留limit等关键字段。返回字典仅含一个键documents即每个 URL 爬取结果对应的Document列表。组件同时提供异步对应方法方法签名作用run_asyncrun_async(urls, paramsNone) - dict[str, Any]异步爬取给定 URL 并返回Documentwarm_upwarm_up() - None预热同步 Firecrawl 客户端warm_up_asyncwarm_up_async() - None预热异步 Firecrawl 客户端其中run_async与run参数、返回结构完全一致便于在Pipeline.run_async场景下复用同一套调用逻辑warm_up/warm_up_async则用于提前建立客户端连接减少首次调用延迟。在索引管线中集成官方组件文档给出了一条完整的索引管线示例用FirecrawlCrawler爬取文档站经DocumentSplitter切分后写入InMemoryDocumentStorefrom haystack import Pipeline from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.components.preprocessors import DocumentSplitter from haystack.components.writers import DocumentWriter from haystack_integrations.components.fetchers.firecrawl import FirecrawlCrawler document_store InMemoryDocumentStore() crawler FirecrawlCrawler(params{limit: 10}) splitter DocumentSplitter(split_bysentence, split_length5) writer DocumentWriter(document_storedocument_store) indexing_pipeline Pipeline() indexing_pipeline.add_component(crawler, crawler) indexing_pipeline.add_component(splitter, splitter) indexing_pipeline.add_component(writer, writer) indexing_pipeline.connect(crawler.documents, splitter.documents) indexing_pipeline.connect(splitter.documents, writer.documents) indexing_pipeline.run( data{ crawler: { urls: [https://docs.haystack.deepset.ai/docs/intro], }, }, )这条链路清晰展示了FirecrawlCrawler在数据摄入中的定位它是管线的数据抓取步骤其documents输出作为下游预处理与存储环节的输入。将InMemoryDocumentStore替换为其他向量/混合文档存储即可把整站内容纳入 RAG 知识库。FirecrawlWebSearch搜索与抓取一步到位FirecrawlWebSearch封装的是 Firecrawl Search API遵循 Haystack 标准的 WebSearch 组件接口。给定查询词后它负责搜索网页、爬取结果页面并返回结构化文本——因为抓取和结构化已经在组件内部完成通常不需要再串联LinkContentFetcher之类的组件去读取网页正文这是它与纯「搜索链接型」组件的关键差异。初始化参数__init__( api_key: Secret Secret.from_env_var(FIRECRAWL_API_KEY), top_k: int | None 10, search_params: dict[str, Any] | None None, ) - None参数类型默认值说明api_keySecretSecret.from_env_var(FIRECRAWL_API_KEY)Firecrawl API Keytop_kint \| None10返回的最大文档数可被search_params中的limit覆盖search_paramsdict[str, Any] \| NoneNone透传给 Firecrawl Search API 的附加参数search_params支持的键包括tbs时间范围过滤、location地域限定、scrape_options抓取与输出格式如{formats: [markdown]}、sources限定内容来源、categories内容分类、timeout请求超时等完整清单以 Firecrawl Search API 参考为准。独立运行from haystack_integrations.components.websearch.firecrawl import FirecrawlWebSearch from haystack.utils import Secret websearch FirecrawlWebSearch( api_keySecret.from_env_var(FIRECRAWL_API_KEY), top_k5, search_params{scrape_options: {formats: [markdown]}}, ) result websearch.run(queryWhat is Haystack by deepset?) documents result[documents] links result[links]run(query: str, search_params: dict[str, Any] | None None) - dict[str, Any]的语义要点query必填搜索查询字符串。search_params可选本次运行的搜索参数覆盖若提供则整体替换初始化时的search_params。返回字典包含两个键documents搜索结果内容对应的Document列表与links结果 URL 字符串列表。documents可直接进入提示词构建环节links可用于引用溯源。run_async签名与返回结构与此完全一致warm_up/warm_up_async分别预热同步与异步客户端。在 RAG 管线中集成因为 Firecrawl 返回的是抓取后的真实页面文本可以把documents输出直接接入ChatPromptBuilder作为 LLM 上下文无需额外抓取环节。官方组件文档给出了完整的 RAG 示例from haystack import Pipeline from haystack.utils import Secret from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder from haystack.components.generators.chat import OpenAIChatGenerator from haystack_integrations.components.websearch.firecrawl import FirecrawlWebSearch from haystack.dataclasses import ChatMessage web_search FirecrawlWebSearch( api_keySecret.from_env_var(FIRECRAWL_API_KEY), top_k2, search_params{scrape_options: {formats: [markdown]}}, ) prompt_template [ ChatMessage.from_system(You are a helpful assistant.), ChatMessage.from_user( Given the information below:\n {% for document in documents %}{{ document.content }}\n{% endfor %}\n Answer the following question: {{ query }}.\nAnswer:, ), ] prompt_builder ChatPromptBuilder( templateprompt_template, required_variables{query, documents}, ) llm OpenAIChatGenerator( api_keySecret.from_env_var(OPENAI_API_KEY), modelgpt-5-nano, ) pipe Pipeline() pipe.add_component(search, web_search) pipe.add_component(prompt_builder, prompt_builder) pipe.add_component(llm, llm) pipe.connect(search.documents, prompt_builder.documents) pipe.connect(prompt_builder.prompt, llm.messages) query What is Haystack by deepset? result pipe.run(data{search: {query: query}, prompt_builder: {query: query}}) print(result[llm][replies][0].text)这条管线的数据流为search.documents→prompt_builder.documents搜索到的页面正文作为上下文→prompt_builder.prompt→llm.messages拼装后的提示词进入生成器。模板中的 Jinja 循环将多个Document的content逐一展开注入提示词配合required_variables{query, documents}保证运行时变量齐备。将OpenAIChatGenerator替换为任意兼容 Chat 接口的生成器即可在不改动其余部分的情况下切换模型供应商。参数语义与实战要点综合两个组件的 API 参考与组件文档以下几个细节最容易影响实际行为值得单独强调limit是成本控制的关键。FirecrawlCrawler的params默认limit1即每个起始 URL 只爬 1 页不设 limit 时 Firecrawl 可能爬取全部子页面、积分消耗极快。摄入整站前先估算站点规模再设置合理上限如官方示例中的3、5、10。运行期参数是「整体替换」而非「合并」。run(urls, params...)与run_async中传入的params若存在会完全覆盖初始化时的paramsFirecrawlWebSearch.run(query, search_params...)同理。需要同时保留多个配置项时应在每次调用中显式写全。top_k与search_params[limit]的优先级。FirecrawlWebSearch的top_k默认10但可以被search_params中的limit覆盖配置时二者只需设置其一避免语义冲突。输出格式统一为 Markdown。两个组件的默认输出格式都是{formats: [markdown]}该格式与Document.content的文本字段天然契合也便于直接拼接进提示词模板如需 HTML 或其他格式通过scrape_options调整。WebSearch 接口一致性。FirecrawlWebSearch遵循 Haystack 标准 WebSearch 组件接口documentslinks双输出这意味着它可以与BraveWebSearch、SerperDevWebSearch、TavilyWebSearch等组件见 WebSearch 总览在管线中互换便于做检索后端的多供应商切换。相关资源速查FirecrawlCrawler 组件文档安装、认证、独立运行与索引管线完整示例FirecrawlWebSearch 组件文档搜索用法与 RAG 管线完整示例Firecrawl 集成 API 参考两个组件的完整方法签名与参数说明当前版本对应 version-2.18 API 参考Fetchers 组件总览了解FirecrawlCrawler与LinkContentFetcher、TavilyFetcher等组件的定位差异WebSearch 组件总览对比各 WebSearch 组件的接口与能力Document 数据类源码content/meta字段结构理解爬取与搜索结果如何被表达为Document在实际项目中推荐的分工是需要把整个文档站或官网批量导入知识库时使用FirecrawlCrawler索引场景需要在问答时实时检索最新网页信息时使用FirecrawlWebSearch查询/生成场景。两者结合即可在 Haystack 中构建一条从「网页 → 结构化 Document → RAG 上下文」的完整数据链路。【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表