ARTICLE DETAIL

资讯详情

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

Haystack WebSearch 组件详解:用 SerperDevWebSearch 与 SearchApiWebSearch 为 LLM 应用接入实时联网检索

Haystack WebSearch 组件详解:用 SerperDevWebSearch 与 SearchApiWebSearch 为 LLM 应用接入实时联网检索 Haystack WebSearch 组件详解用 SerperDevWebSearch 与 SearchApiWebSearch 为 LLM 应用接入实时联网检索【免费下载链接】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/haystackHaystack 的websearch组件族为 RAG、Agent 与对话系统提供了搜索网页 → 抽取链接 → 获取正文 → 生成回答的完整链路入口。本文以 version-2.19 的 API 参考文档为核心系统讲解SerperDevWebSearch基于 Serper与SearchApiWebSearch基于 SearchApi两个联网搜索组件的初始化参数、run接口、域名过滤、序列化机制与 Pipeline 集成方式并结合仓库源码与版本演进说明给出可直接运行的实战示例。WebSearch 组件概览把实时信息注入 LLM 应用大语言模型的训练数据存在截止时间无法回答今天的热点事件或需要实时验证的查询。Haystack 的 WebSearch 组件正是为此设计的给定一个查询字符串组件调用外部搜索引擎 API返回相关文档列表内容为搜索结果的页面摘要 snippets和链接列表URL 字符串供下游组件进一步抓取正文或直接用于构建提示词。在 version-2.19 中haystack.components.websearch模块下包含两个组件见 WebSearch 组件索引组件后端搜索引擎默认环境变量SerperDevWebSearchSerperGoogle 搜索 APISERPERDEV_API_KEYSearchApiWebSearchSearchApi默认 Google可切换引擎SEARCHAPI_API_KEY两个组件的接口高度一致初始化时传入 API Key 与检索参数运行时接收query字符串输出documentslist[Document]与linkslist[str]。它们在 Pipeline 中的典型位置是LinkContentFetcher之前用于把摘要级的结果扩展为完整网页正文也可以直接接在 Converters 之前。由于返回的是搜索摘要而非整页内容若需要全文检索应当串联LinkContentFetcher组件继续抓取页面。SerperDevWebSearch基于 Serper 的网页搜索组件SerperDevWebSearch使用 Serper 服务在网络上检索与查询相关的文档。Serper 返回的搜索结果中包含页面标题下方的摘要文本snippet组件会将每个结果封装为Document同时单独返回所有结果的 URL。初始化参数根据 version-2.19 API 参考websearch_api.md构造函数签名为def __init__(api_key: Secret Secret.from_env_var(SERPERDEV_API_KEY), top_k: Optional[int] 10, allowed_domains: Optional[list[str]] None, search_params: Optional[dict[str, Any]] None, *, exclude_subdomains: bool False)各参数含义如下api_keySecretSerper API 密钥。默认从环境变量SERPERDEV_API_KEY读取也可以在初始化时通过Secret.from_token(your-api-key)显式传入。使用Secret类型可以避免密钥以明文形式出现在序列化后的 YAML/JSON 中。top_kint默认 10返回的文档数量上限。allowed_domainslist[str]默认None将搜索结果限定在指定域名内。例如[example.com]。exclude_subdomainsbool默认False仅限关键字参数配合allowed_domains使用。为True时只返回精确匹配allowed_domains中域名的结果子域名如blog.example.com、shop.example.com会被过滤为False时子域名结果也会被包含。默认False以保持向后兼容见 serperdev-add-exclude-subdomains-param release note。search_paramsdict[str, Any]默认None透传给 Serper API 的附加参数。例如设置num: 20可以提高搜索引擎内部返回的结果数量上限。独立使用示例from haystack.components.websearch import SerperDevWebSearch from haystack.utils import Secret websearch SerperDevWebSearch(top_k10, api_keySecret.from_token(test-api-key)) results websearch.run(queryWho is the boyfriend of Olivia Wilde?) assert results[documents] assert results[links]带域名过滤的用法排除子域名# Example with domain filtering - exclude subdomains websearch_filtered SerperDevWebSearch( top_k10, allowed_domains[example.com], exclude_subdomainsTrue, # Only results from example.com, not blog.example.com api_keySecret.from_token(test-api-key) ) results_filtered websearch_filtered.run(querysearch query)run 方法与返回结构component.output_types(documentslist[Document], linkslist[str]) def run(query: str) - dict[str, Union[list[Document], list[str]]]run接收唯一的必填参数query搜索查询字符串返回一个包含两个键的字典documents搜索引擎返回的文档列表每个Document的内容来自搜索结果摘要snippetlinks搜索引擎返回的链接字符串列表。序列化to_dict / from_dictdef to_dict() - dict[str, Any] classmethod def from_dict(cls, data: dict[str, Any]) - SerperDevWebSearchto_dict将组件序列化为字典可用于 Pipeline 的 YAML/JSON 导出from_dict从字典反序列化重建组件实例。密钥以Secret形式保存序列化时引用环境变量名而非明文密钥从而保证配置文件可以安全地提交到版本库。错误处理run可能抛出的异常SerperDevError查询 SerperDev API 过程中发生错误TimeoutError请求 SerperDev API 超时。SearchApiWebSearch基于 SearchApi 的多引擎搜索组件SearchApiWebSearch使用 SearchApi 服务检索网络文档接口与SerperDevWebSearch基本对称可视为后者的直接替代方案详见 searchapiwebsearch.mdx。初始化参数def __init__(api_key: Secret Secret.from_env_var(SEARCHAPI_API_KEY), top_k: Optional[int] 10, allowed_domains: Optional[list[str]] None, search_params: Optional[dict[str, Any]] None)api_keySecretSearchApi API 密钥默认从环境变量SEARCHAPI_API_KEY读取。top_kint默认 10返回的文档数量上限。allowed_domainslist[str]默认None限定搜索的域名列表。search_paramsdict[str, Any]默认None透传给 SearchApi API 的附加参数。例如设置num: 100可提高搜索引擎返回的结果数量上限。引擎切换SearchApi 默认使用 Google 作为搜索引擎用户可以在search_params中设置engine参数切换为其他引擎如 Bing、Brave 等 SearchApi 支持的引擎。独立使用示例from haystack.components.websearch import SearchApiWebSearch from haystack.utils import Secret websearch SearchApiWebSearch(top_k10, api_keySecret.from_token(test-api-key)) results websearch.run(queryWho is the boyfriend of Olivia Wilde?) assert results[documents] assert results[links]run 方法与返回结构component.output_types(documentslist[Document], linkslist[str]) def run(query: str) - dict[str, Union[list[Document], list[str]]]与SerperDevWebSearch.run一致接收query返回documents搜索结果文档列表与links链接列表。可能的异常TimeoutError请求 SearchApi API 超时SearchApiError查询 SearchApi API 时发生错误。序列化to_dict / from_dictSearchApiWebSearch同样实现了to_dict/from_dict对to_dict输出序列化字典from_dict类方法从字典恢复组件实例用于 Pipeline 的持久化与反序列化。在 RAG Pipeline 中组合使用Web Search → 全文抓取 → 生成单独调用搜索组件只能拿到摘要级信息。完整的联网 RAG 流水线通常由四段组成WebSearch 组件检索 URL →LinkContentFetcher抓取页面 →HTMLToDocument转换正文 → 提示词构建器 LLM 生成回答。version-2.19 官方文档serperdevwebsearch.mdx给出的完整示例from haystack import Pipeline from haystack.utils import Secret from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder from haystack.components.fetchers import LinkContentFetcher from haystack.components.converters import HTMLToDocument from haystack.components.generators.chat import OpenAIChatGenerator from haystack.components.websearch import SerperDevWebSearch from haystack.dataclasses import ChatMessage from haystack.utils import Secret web_search SerperDevWebSearch(api_keySecret.from_token(your-api-key), top_k2) link_content LinkContentFetcher() html_converter HTMLToDocument() prompt_template [ ChatMessage.from_system(You are a helpful assistant.), ChatMessage.from_user( Given the information below:\n {% for document in documents %}{{ document.content }}{% endfor %}\n Answer question: {{ query }}.\nAnswer:, ), ] prompt_builder ChatPromptBuilder( templateprompt_template, required_variables{query, documents}, ) llm OpenAIChatGenerator( api_keySecret.from_token(your-api-key), modelgpt-3.5-turbo, ) pipe Pipeline() pipe.add_component(search, web_search) pipe.add_component(fetcher, link_content) pipe.add_component(converter, html_converter) pipe.add_component(prompt_builder, prompt_builder) pipe.add_component(llm, llm) pipe.connect(search.links, fetcher.urls) pipe.connect(fetcher.streams, converter.sources) pipe.connect(converter.documents, prompt_builder.documents) pipe.connect(prompt_builder.messages, llm.messages) query What is the most famous landmark in Berlin? pipe.run(data{search: {query: query}, prompt_builder: {query: query}})数据流的关键连接一目了然search.links → fetcher.urls把搜索结果中的 URL 交给LinkContentFetcher抓取网页fetcher.streams → converter.sources抓取到的字节流交给HTMLToDocument解析为文本converter.documents → prompt_builder.documents转换后的文档注入提示词模板prompt_builder.messages → llm.messages构建好的消息交给聊天生成器产出最终答案。将上述示例中的组件替换为SearchApiWebSearch导入语句改为from haystack.components.websearch import SearchApiWebSearch即可得到完全等价的 SearchApi 版本流水线两种后端可以在不同 Pipeline 中互为备选。底层实现与调用链虽然 version-2.19 的这两个组件实现在后续版本中被移出核心库见下文版本演进但它们在代码库中的调用方式仍可从当前仓库中交叉印证在 component_tool.py 中SerperDevWebSearch与SearchApiWebSearch被用作component组件从组件自动生成 Tool工具的典型示例说明这类搜索组件常被包装为 Agent 可调用的工具在 test_run.py 的功能测试中同样引用了这两个组件用于验证 Pipeline 运行机制。从实现结构看两个组件都遵循 Haystack 的标准组件协议用component.output_types(...)声明输出类型run方法内部调用对应搜索引擎的 REST API将 JSON 响应解析为Document与链接列表并对异常网络错误、超时做统一封装后抛出。版本演进与迁移提示需要特别说明的是SerperDevWebSearch与SearchApiWebSearch在后续版本中经历了核心库 → 独立集成包的演进理解这一点有助于避免在新旧版本之间踩坑version-2.19 及之前两个组件位于核心库haystack.components.websearch即本文 API 参考所对应的导入路径后续版本两个组件被弃用并从核心库移除迁移到独立的集成包。根据仓库中的 release noteremove-serperdev-websearch-7c7f3caa702bfb03.yaml、remove-searchapi-websearch-238622d2b7667236.yaml迁移方式为pip install serperdev-haystack # SerperDevWebSearch pip install searchapi-haystack # SearchApiWebSearch导入路径相应变为# 迁移前version-2.19 from haystack.components.websearch import SerperDevWebSearch from haystack.components.websearch import SearchApiWebSearch # 迁移后集成包 from haystack_integrations.components.websearch.serperdev import SerperDevWebSearch from haystack_integrations.components.websearch.searchapi import SearchApiWebSearch此外这两个组件后来还新增了异步方法run_async见 add-run_async-websearch release note签名与run一致适合在异步 Pipeline 或高并发场景下使用。当前仓库主线的 WebSearch 组件索引 中二者已与 Brave、DDGS、Tavily 等更多搜索后端并列说明 Haystack 的联网检索能力仍在持续扩展。小结SerperDevWebSearch与SearchApiWebSearch是 Haystack 中接口统一、可直接互换的两个联网检索组件初始化参数覆盖 API 密钥、返回条数、域名白名单与引擎级透传参数run方法统一输出documents与links两者都支持to_dict/from_dict序列化以嵌入 Pipeline 配置。把它们放在LinkContentFetcher之前即可搭建搜索 → 抓取 → 转换 → 生成的实时 RAG 流水线若部署新版本请记得改用serperdev-haystack/searchapi-haystack集成包的导入路径。【免费下载链接】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),仅供参考
返回列表