wigolo搜索流水线深度剖析:18引擎并行扇出、RRF融合与ML重排

wigolo搜索流水线深度剖析:18引擎并行扇出、RRF融合与ML重排 wigolo搜索流水线深度剖析18引擎并行扇出、RRF融合与ML重排【免费下载链接】wigoloThe go-to web for your AI coding agent — local-first search, fetch, crawl research over MCP. No API keys, no cloud, $0/query. Public beta.项目地址: https://gitcode.com/GitHub_Trending/wi/wigolowigolo 是一个本地优先local-first的 AI 智能体搜索工具把「搜索、抓取、爬取、研究」打包成一条 MCP 流水线——无需 API Key、不依赖云端、每次查询$0。它的核心正是本文要逐层拆开的搜索流水线一条查询进来先做意图路由再并行扇出给 18 个搜索引擎用RRF 倒数排名融合成一份榜单最后交给本地 ML 交叉编码器重排精修。下面从意图路由讲到降级恢复波次帮你完整看懂这条流水线如何跑通为什么单引擎挂了也几乎不影响结果。一、为什么需要一条「本地优先」的搜索流水线传统做法是把搜索丢给某个云 API——按次计费、要 Key、结果不透明。wigolo 反其道而行它把最贵的部分排序、嵌入、浏览器引擎全部搬到你自己的硬件上运行因此没有按次成本要回收也就没有计量表meter。这条流水线最打动人的两个工程决策是贯穿全文的线索并行扇出一次查询同时打给 18 个引擎任何一个失败都「几乎不移动结果」。可解释打分每条结果都带透明的分数拆解agent 永远知道自己站在什么证据上。二、第一步意图路由把查询送进正确的垂直领域查询到达后第一件事不是搜索而是先判断它属于哪个垂直领域Vertical。wigolo 内置 6 条赛道general、news、code、docs、papers、images。路由逻辑在 intent-router.ts 里用几组正则快速判别出现arxiv / doi / paper / citation→ 论文赛道出现github / commit / stackoverflow / TypeError→ 代码赛道出现how to / tutorial / mdn / documentation→ 文档赛道判断完后对应赛道才决定这一波到底派出哪几个引擎。这正是「18 引擎」能精准命中的前提不是所有查询都去撞全部引擎而是按领域挑出最对路的那一队。三、并行扇出18 个引擎同时出发选定赛道后orchestrator.ts 会调用runEnginesParallel把查询并行打给队内每个引擎。以代码赛道为例verticals/code.ts 一次性派出引擎权重质量档角色GitHub Code1.2medium代码意图主力Stack Overflow1.0high高可信问答DuckDuckGo0.8medium通用网页广度MDN / crates.io0.3high次级信号弱时降权每个引擎都注册了权重weight与质量档high / medium / low它们会直接喂给后面的 RRF 融合。3.1 每个引擎都被「熔断器 重试」包了一层真正让扇出稳如老狗的是 engine-base.ts 里的wrapWithRetryAndBreaker重试单次调用失败会指数退避重试避免把限流的引擎打爆。熔断连续失败 3 次就跳闸进入冷却429 限流走短窗口最多 30s403 禁用走长窗口最多 180s。软截止soft deadline整波最多等3.5 秒某个慢引擎被「放弃在飞行中」绝不拖垮整体响应。3.2 去重跨引擎合并同一 URL各引擎回来的结果在 dedup.ts 里做归一化 去重同一 URL 只保留一份合并出「它被哪几个引擎命中」——这个多引擎共识数正是后面 RRF 融合的关键原料。四、RRF 融合把多份榜单合成一份这是流水线的灵魂。RRFReciprocal Rank Fusion倒数排名融合的规则极其简洁——对每条 URL把它在每个榜单里的排名取倒数再相加score(url) Σ weight / (k rank) 其中 k 60代码在 rrf.ts而生产级的加权版本写在 orchestrator.ts 的 scoreOutcomes。它的妙处在于不依赖各引擎的分数刻度——Bing 给 0.9、DDG 给 87量纲完全无所谓只看「排第几名」。多引擎共识自动加权——一个 URL 在 3 个榜单都靠前分就滚雪球式地高。鲁棒——任何一个引擎挂掉其余榜单照样能融合出合理结果。融合后还会叠一层多因子修正域名质量、词汇对齐度query 与标题/摘要的贴合度、时效性加成、次级引擎降权、稀有词命中等最终得到 一条可解释的 evidence_score形如base0.016, domain0.82, lex0.91, engines3。五、ML 重排用本地交叉编码器给结果精排RRF 出的是粗排真正的「精排」交给 rerank.ts。它默认走onnx模式加载 transformers-rerank-provider.ts模型Xenova/ms-marco-MiniLM-L-6-v2交叉编码器Transformers.js 驱动。做法把(query, 文档)成对喂给 tokenizer直接读 logits 作为重排分数——logit 越高越相关。完全本地模型缓存进 wigolo 数据目录不上云、不收费。重排后再串接三个确定性增强器共识加成多引擎命中的上浮、权威加成知名域名的上浮、时效加成带日期的新鲜结果上浮最后按分排序并套上相关性阈值过滤。提示模型是懒加载的。如果重排报「model not downloaded」跑一次wigolo warmup预热即可。六、降级恢复引擎池塌了怎么办这条流水线最「工程范」的地方是它为崩溃而设计。当主波次派出去的引擎里健康数量低于「派发出发数的一半」poolHealthFloor时说明引擎池在突发压力下塌方了恢复波次强制召回被「软禁用」的探针引擎如 Mojeek 刚跳闸的引擎在同一个突发窗口内把池子救回来而不是傻等完整冷却。饥饿回填某个垂直赛道融合后结果太少 3 条就用通用赛道的引擎池按结果粒度 RRF 合并进来补召回。赛道兜底非通用赛道整体降级时自动重试一次「general」赛道。所有降级都会在输出里如实上报engine_warnings、pool_degradedagent 永远知道答案站在多硬的证据上。七、上手体验三步跑通这条流水线整条流水线的入口是search工具。最省事的接入方式初始化本地引擎npx wigolo init下载浏览器引擎与本地模型跑一遍健康检查。接入你的 agent加--agents一条命令把常用编码 agent 接上。发起查询直接对 agent 说「用 wigolo 搜一下 …」它会自动扇出 → 融合 → 重排 → 返回带透明分数的结果。相关参考文档搜索工具说明、安装指南、配置参考。八、一句话总结wigolo 的搜索流水线 意图路由选赛道→18 引擎并行扇出带熔断器保护→RRF 倒数排名融合多榜单合成一份→本地 ML 交叉编码器重排精修 可解释打分→降级恢复波次为崩溃而设计。全程 $0/查询、结果可解释、任何单引擎失效都几乎不动摇最终榜单——这正是它作为「AI 编码智能体首选 web」的底气所在。【免费下载链接】wigoloThe go-to web for your AI coding agent — local-first search, fetch, crawl research over MCP. No API keys, no cloud, $0/query. Public beta.项目地址: https://gitcode.com/GitHub_Trending/wi/wigolo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考