首页/新闻资讯/正文详情

PaddleNLP pipelines 搜索引擎模块深度指南:WebSearch 与 SerpAPI/SerperDev/SearchApi 多 Provider 实战

发布时间:2026/9/27 9:45:15 来源:云帆数科 栏目:资讯中心
PaddleNLP pipelines 搜索引擎模块深度指南:WebSearch 与 SerpAPI/SerperDev/SearchApi 多 Provider 实战
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读在 RAG检索增强生成与实时信息问答场景中如何把外部搜索引擎的能力无缝接入本地 Pipeline是决定系统时效性与召回质量的关键一环。PaddleNLP 的 pipelines 子项目位于 slm/pipelines在pipelines.nodes.search_engine模块中提供了统一、可插拔的搜索抽象层SearchEngine抽象基类、SerpAPI/SerperDev/SearchApi三大在线搜索 Provider以及面向整条 Pipeline 的WebSearch节点。本文围绕 search_engine.md 指向的源码完整讲解该模块的设计骨架、参数体系、调用链路与排名打分机制并给出可直接落地的接入示例帮助你用最短代码为检索、问答 Pipeline 注入实时 Web 搜索能力。模块全景抽象、Provider 与节点的三层结构search_engine模块位于slm/pipelines/pipelines/nodes/search_engine/共五个文件base.py定义抽象基类SearchEngine与统一的search()/score_results()接口providers.py实现三个具体 Provider——SerpAPI、SerperDev、SearchApiweb.py实现 Pipeline 节点WebSearch屏蔽 Provider 差异utils.py提供排名打分工具函数calculate_ranking_scoresinit.py对外导出SearchEngine与WebSearch。这三层结构对应三种使用方式继承抽象类自定义 Provider、直接实例化具体 Provider、或通过WebSearch节点挂入 Pipeline。抽象层的存在让上层节点如 WebRetriever完全不感知底层调用的是哪家搜索服务。SearchEngine 抽象基类统一接口与打分契约base.py 中SearchEngine继承自ABC定义了所有 Provider 必须实现的两类能力search()核心检索入口abstractmethod def search(self, query: str, **kwargs) - List[Document]: Search the search engine for the given query and return the results. :param query: The query to search for. :param kwargs: Additional parameters to pass to the search engine, such as top_k. :return: List of search results as documents. 要点query为必填检索词**kwargs用于透传 Provider 级附加参数如top_k、语言限定lr/hl等返回值统一为List[Document]即 pipelines 标准文档对象可直接进入下游节点如 Ranker、Reader、LLM 生成。score_results()结果归一化打分def score_results( self, results: List[Document], has_answer_box: Optional[bool] False, boost_factor: Optional[int] 5 ) - List[Document]: scores calculate_ranking_scores(results, boost_first_factorboost_factor if has_answer_box else None) for doc, score in zip(results, scores): doc.score doc.meta[score] score return results根据结果在列表中的排名位置分配分数并保证所有分数之和为 1若搜索引擎返回了 answer box答案卡片则对第一名结果乘以boost_factor默认 5进行加权让直接答案更突出分数会同时写入doc.score与doc.meta[score]供下游 Ranker 排序或 WebRetriever 记录search.score使用参见 retriever/web.py。排名打分算法的实现细节打分逻辑在 utils.py 的calculate_ranking_scores中def calculate_ranking_scores(list_items: List[Any], boost_first_factor: Optional[int] None) - List[float]: n len(list_items) scores [0.0] * n # 按排名位置线性降权 for i, _ in enumerate(list_items): scores[i] (n - i) / ((n * (n 1)) / 2) # 对第一名应用 boost 因子 if boost_first_factor is not None and n 0: scores[0] * boost_first_factor # 归一化使总分为 1 total_score sum(scores) normalized_scores [score / total_score for score in scores] return normalized_scores其数学本质是第 i 名从 0 开始的原始权重为(n-i)/(n*(n1)/2)即按名次等差递减的调和权重天然满足各权重之和为 1开启boost_first_factor后第一名权重先乘以因子、再整体归一化从而在不破坏总分为 1契约的前提下放大头部答案。三大内置 Provider参数、请求与结果解析providers.py 中三个 Provider 都继承SearchEngine构造签名保持一致def __init__( self, api_key: str, # API 密钥 top_k: Optional[int] 10, # 返回结果条数默认 10 engine: Optional[str] google, # 底层搜索引擎如 google/bing/baidu 等 search_engine_kwargs: Optional[Dict[str, Any]] None, # 透传的附加查询参数 ):SerpAPI多引擎聚合服务用途聚合 Google、Bing、Yahoo、Yandex、Amazon 等多家搜索引擎的 REST API请求GET https://serpapi.com/search30 秒超时参数包含sourcepython、serp_api_key、q与透传参数可指定engine如google、bing、baidu、duckduckgo附加参数示例lrlang_en可限定英文检索结果解析依次抽取answer_box答案卡片、organic_results自然结果经field_map{snippet: content}把摘要映射为文档正文、people_also_search_for相关搜索、related_questions相关问题四者拼接后按top_k截断若响应状态码非 200抛出带响应体详情的异常便于排查。SerperDevGoogle 专用轻量接口用途仅面向 Google 搜索的轻量 API请求POST https://google.serper.dev/search30 秒超时通过请求头X-API-KEY携带密钥Content-Type: application/json附加参数示例hlen设置结果语言为英文结果解析解析answerBox、organic、peopleAlsoSearchFor、relatedSearches、peopleAlsoAsk五类内容其中relatedSearches仅保留 query 文本作为contenttop_k同样通过从 kwargs 弹出top_k来控制未传时使用构造时的默认值。SearchApi实时多源搜索用途提供 Google、Google Scholar、YouTube、YouTube Transcripts 等实时搜索能力请求GET https://www.searchapi.io/api/v1/search90 秒超时最长请求头携带Authorization: Bearer api_key与X-SearchApi-Source: PaddleNLP附加参数示例locationNew York,United States可将搜索本地化结果解析比前两者更丰富额外处理knowledge_graph知识图谱使用 description 作为正文、website 作为链接、answer_box含population_graph人口图等特殊类型、organic_results、related_questions仅当link与content均非空时才生成答案类 Document保证进入 Pipeline 的结果具备可用性。三个 Provider 的最终产物一致documents[:top_k]截断后调用score_results打分返回。选用建议需要多引擎对比时选SerpAPI仅需 Google 且追求低延迟时选SerperDev需要 Scholar/YouTube 等多源检索时选SearchApi。WebSearch 节点把搜索能力挂入 Pipelineweb.py 中的WebSearch继承BaseComponent是搜索能力进入 Pipeline 的统一入口outgoing_edges 1单输出边。构造参数与 Provider 动态装配def __init__( self, api_key: str, top_k: Optional[int] 10, search_engine_provider: Union[str, SearchEngine] SerpAPI, engine: Optional[str] google, search_engine_kwargs: Optional[Dict[str, Any]] None, ):search_engine_provider支持两种传法字符串节点内部用pydoc.locate依次在pipelines.nodes.search_engine.providers.name与search_engine_provider两个路径中定位 Provider 类参考 web.py若找不到则抛出ValueError并校验其为SearchEngine子类SearchEngine 实例直接复用外部已构造好的 Provider 对象便于复用连接、密钥管理与自定义 Provider。其余参数原样透传给 Provider 构造函数。run()单查询入口def run(self, queryNone, file_pathsNone, labelsNone, documentsNone, metaNone) - Tuple[Dict, str]: if not query: raise ValueError(WebSearch run requires the query parameter) return {documents: self.search_engine.search(query)}, output_1为与其他节点保持一致的run签名其余入参file_paths、documents等被忽略仅使用query返回值结构为{documents: List[Document]}与边名output_1可直接与下游节点如 PromptBuilder / LLM相连。run_batch()批量查询入口def run_batch(self, queriesNone, ...): if isinstance(queries, str): queries [queries] elif not isinstance(queries, list): raise ValueError(WebSearch run_batch requires the queries parameter to be Union[str, List[str]]) for query in queries: results.append(self.search_engine.search(query)) return {documents: results}, output_1接受单个字符串或字符串列表逐条调用底层 Provider 的search()输出为List[List[Document]]。实战接入三步在 Pipeline 中使用 WebSearch步骤一准备 API 密钥从对应服务商后台申请api_keySerpAPI / Serper.dev / SearchApi 三选一建议通过环境变量注入避免硬编码。步骤二实例化节点from pipelines.nodes.search_engine import WebSearch # 方式 A字符串指定 Provider默认 SerpAPI web_search WebSearch( api_keyyour_serpapi_key, top_k10, search_engine_providerSerpAPI, # 也可传 SerperDev / SearchApi / 自定义类路径 enginegoogle, # 底层搜索引擎 search_engine_kwargs{lr: lang_en}, # 限定英文结果 ) # 方式 B直接传入 SearchEngine 实例 from pipelines.nodes.search_engine.providers import SerperDev web_search WebSearch( api_keyyour_serper_key, search_engine_providerSerperDev(api_keyyour_serper_key, top_k5, enginegoogle), )步骤三单查与批量调用# 单查询 result web_search.run(queryPaddleNLP 最新发布) documents result[documents] # List[Document] for doc in documents: print(doc.content) # 摘要正文 print(doc.meta.get(score)) # 排名得分归一化 # 批量查询 batch web_search.run_batch(queries[PaddleNLP 介绍, ERNIE 模型]) docs_list batch[documents] # List[List[Document]]返回的每个Document通过Document.from_dict构造meta[link]保存原始 URL、meta[score]保存归一化排名分数可直接喂给下游重排或生成节点。向上游延伸WebSearch 与 WebRetriever 的协作search_engine模块不仅独立可用还是 Web 检索管线的底座。节点 WebRetriever 在构造时内部创建WebSearch实例提供三种工作模式snippets直接返回搜索摘要片段不抓取页面raw_documents对命中 URL 发起 HTTP 抓取、用 boilerpy3 的ArticleExtractor剥离 HTML 后返回正文preprocessed_documents在原始正文基础上再用PreProcessor切分段落默认模式。from pipelines.nodes.retriever import WebRetriever retriever WebRetriever( api_keyyour_serpapi_key, search_engine_providerSerpAPI, enginegoogle, top_search_results10, # 传给 WebSearch 的 top_k top_k5, # 最终返回文档数默认 5 modepreprocessed_documents, ) docs retriever.retrieve(queryPaddleNLP pipelines 用法)实现细节对应 retriever/web.py先调用self.web_search.run(queryquery)拿到搜索结果再从中提取meta[link]构造 URL 列表使用ThreadPoolExecutor并发抓取页面线程数取min(len(links), cpu_count())抓取失败时回退为原始 snippet 文档保证召回不中断支持通过cache_document_store将检索结果缓存到 DocumentStore缓存默认有效期 24 小时cache_time86400命中缓存时跳过实时搜索显著降低 API 调用成本与延迟。从源码结构看这一搜索 Provider → WebSearch 节点 → WebRetriever 检索器的分层设计让同一套搜索抽象同时服务于轻量 snippets 召回与重量级全文抓取两种场景。注意事项与限制三个内置 Provider 均依赖requests访问外部服务运行环境需具备外网访问能力响应非 200 时抛出异常建议在 Pipeline 外层捕获兜底top_k默认 10但 WebRetriever 的top_k默认 5两者含义不同前者是搜索引擎返回的原始结果数后者是最终交给 Pipeline 的文档数搜索 API 为付费商业服务密钥、配额与限流策略以各服务商当前官方文档为准自定义 Provider 时只需继承SearchEngine并实现search()返回List[Document]即可被WebSearch以字符串类路径方式动态装配web.py 中的pydoc.locate机制同时可复用基类的score_results()获得统一打分。小结pipelines.nodes.search_engine用抽象基类 多 Provider 统一节点的紧凑设计把外部搜索服务封装成了 Pipeline 内的一等公民SearchEngine定义接口与归一化打分契约SerpAPI/SerperDev/SearchApi负责适配不同厂商 API 的差异WebSearch与WebRetriever则分别面向片段召回与全文抓取两类场景。无论是构建实时问答、带时效性的 RAG 应用还是为检索系统补充多源召回这套模块都能以最小代码量快速接入且可通过继承机制平滑扩展新的搜索服务商。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐终极指南Serper与SerpAPI搜索引擎集成深度对比终极指南Serper与SerpAPI搜索引擎集成深度对比 你是否在构建AI应用时为选择合适的搜索引擎API而烦恼还在纠结Serper和SerpAPI哪个更AI AgentAPI网关后端开发工具使用 WasmEdge C API 与 WASM Threads 提案多线程并行渲染 Mandelbrot 集使用 WasmEdge C API 与 WASM Threads 提案多线程并行渲染 Mandelbrot 集 Mandelbrot 集渲染是典型的计算密集型任人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPArchiveBox Snapshot 搜索查询引擎深度解析archivebox.search.query 模块 API 全指南ArchiveBox Snapshot 搜索查询引擎深度解析archivebox.search.query 模块 API 全指南 本文围绕 ArchiveBo后端数据工程上一篇shadcn/ui Vite Monorepo 模板实战在 packages/ui 中集中管理组件并用 Turborepo 驱动开发下一篇终极音乐解锁指南5种方法解决主流音乐平台加密格式限制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Java 对象比较方式:equals、Comparable 与 Comparator
Java 对象比较方式:equals、Comparable 与 Comparator

文章目录对象的比较1.覆写基类的 equals2.基于 Comparable 接口类的比较3.基于比较器比较三种方式的对比对象的比较 我们就拿这个来举例: public class Card{public String suit;public int rank;public Card(String suit,int rank) {this.suit suit;this.rank … · 2026/9/27 9:45:09

用手机监控AI编码代理:Agent of Empires Web仪表盘与PWA完整指南
用手机监控AI编码代理:Agent of Empires Web仪表盘与PWA完整指南

用手机监控AI编码代理:Agent of Empires Web仪表盘与PWA完整指南 【免费下载链接】agent-of-empires Manage multiple Claude Code, OpenCode agents from either TUI or Web for easy access on mobile. Also supports Mistral Vibe, Codex CLI, Gemini CLI, Pi.de… · 2026/9/27 9:45:03

Cortex AsyncAPI 自动扩缩容完全指南:从副本伸缩公式到实例与超量供应调优
Cortex AsyncAPI 自动扩缩容完全指南:从副本伸缩公式到实例与超量供应调优

后端云原生模型推理服务MLOps人工智能 【免费下载链接】cortex Production infrastructure for machine learning at scale 项目地址: https://gitcode.com/gh_mirrors/co/cortex 点击查看 免费下载 Cortex 会根据你的配置,以单个 AsyncAPI 为粒度自动扩… · 2026/9/27 9:44:50

Ajenti 2 安装指南:虚拟环境一键部署、手动安装与彻底卸载
Ajenti 2 安装指南:虚拟环境一键部署、手动安装与彻底卸载

后端运维 【免费下载链接】ajenti Ajenti Core and stock plugins 项目地址: https://gitcode.com/gh_mirrors/aj/ajenti 点击查看 免费下载 本篇指南基于 Ajenti 官方安装文档(docs/source/man/install.rst)编写,系统讲解在 Deb… · 2026/9/27 10:24:20

Woodpecker 接入 GitHub 完全指南:OAuth 应用配置、环境变量与驱动原理
Woodpecker 接入 GitHub 完全指南:OAuth 应用配置、环境变量与驱动原理

CI/CDDevOps 【免费下载链接】woodpecker Woodpecker is a simple, yet powerful CI/CD engine with great extensibility. 项目地址: https://gitcode.com/gh_mirrors/wo/woodpecker 点击查看 免费下载 Woodpecker CI 内置了对 GitHub 与 GitHub Enterprise 的官方… · 2026/9/27 10:24:20

图标库CDN集成:Font Awesome快速接入,3行代码让页面出现图标
图标库CDN集成:Font Awesome快速接入,3行代码让页面出现图标

图标库CDN集成:Font Awesome快速接入,3行代码让页面出现图标 【免费下载链接】Font-Awesome The iconic SVG, font, and CSS toolkit 项目地址: https://gitcode.com/GitHub_Trending/fo/Font-Awesome 本文教你用CDN快速接入Font Awesome图标库。… · 2026/9/27 10:24:14

开源硬件项目怎么找?别只刷GitHub,这四类真实渠道更高效
开源硬件项目怎么找?别只刷GitHub,这四类真实渠道更高效

1. 开源硬件不是“找代码”而是“找生态”:为什么90%的人搜不到真正可用的智能家居项目我第一次想给家里加个自定义温控面板时,花了整整三天在GitHub上翻项目。关键词打了十几种组合:“smart home hardware open source”“esp32 home automa… · 2026/9/27 10:24:01

烧录程序版本管理实战:防止芯片烧错固件的关键策略
烧录程序版本管理实战:防止芯片烧错固件的关键策略

烧录程序版本管理这件事,我做了十几年嵌入式,踩过的坑比很多新手写过的代码都多。程序写错了改一改就行,芯片烧错了版本,轻则功能不符重则整板报废,而且往往是在批量产线上出问题,一发现就是几百片返工。我… · 2026/9/27 10:23:55

KubeVela vNext 多租户设计解析:KEP-2.14 中的 TenantDefinition 与 Tenant 平台原语
KubeVela vNext 多租户设计解析:KEP-2.14 中的 TenantDefinition 与 Tenant 平台原语

云原生DevOps运维微服务 【免费下载链接】kubevela The Modern Application Platform. 项目地址: https://gitcode.com/gh_mirrors/ku/kubevela 点击查看 免费下载 KEP-2.14 是 KubeVela vNext Roadmap(design/vela-core/keps/README.md)中的… · 2026/9/27 10:23:49

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码