开源项目第163期:wigolo — 零 API Key、零费用的本地优先 Agent 网络搜索工具,对比 Tavily/Exa/Firecrawl

📅 2026/7/19 17:11:40
开源项目第163期:wigolo — 零 API Key、零费用的本地优先 Agent 网络搜索工具,对比 Tavily/Exa/Firecrawl
引言“The go-to web for your AI coding agent — local-first search, fetch, crawl research over MCP. No API keys, no cloud, $0/query.”这是「每日一个开源项目」系列的第 163 篇。今天的项目是wigolo—— 一个专为 AI agent 设计的本地优先 Web 情报工具通过 MCP 提供搜索、抓取、爬取、研究等能力零 API Key零查询费用。给 AI agent 配「搜索工具」是一个看似简单实则分层很深的问题。Tavily、Exa、Firecrawl 这些云端服务已经很成熟但它们都有一个共同特征按查询计费、数据出境、需要注册账号。wigolo 的切入点是搜索引擎的 raw data 是公开的排序和提取的算法是可以本地跑的为什么 agent 的每一次搜索都要付费、都要走云端1,218 颗 Star创建于 2026 年 4 月公开测试阶段。你会学到什么wigolo 的 10 个工具及其设计逻辑「字节级来源定位」和「可解释评分」是什么为什么重要本地优先架构哪些组件本地跑哪些需要选择性接入云端与 Tavily、Exa、Firecrawl 的横向对比各自的差异化定位什么场景适合用 wigolo什么场景云端工具更合适前提知识使用过 Claude Code 或任意 AI agent了解 MCPModel Context Protocol的基本概念对 AI agent 的工具调用机制有基本认知项目背景概述wigolo 是一个 Node.js 进程以 MCP server 形式暴露 10 个 Web 相关工具让 AI agent 通过标准 MCP 协议调用搜索、抓取、爬取、提取等功能。核心设计原则本地优先缓存、向量索引、嵌入模型、重排序模型都跑在本地~/.wigolo/零强制 API Key搜索、抓取、爬取、提取、缓存、相似查找六个核心工具不需要任何 API Key显式失败Bot 拦截、失效引擎、陈旧缓存都会在结果里明确标注不会伪装成空结果项目信息作者: KnockOutEZ主语言: TypeScript许可证: AGPL-3.0状态: Public Beta官网: knockoutez.github.io/wigolo项目数据⭐ GitHub Stars:1,218 Forks: 83 许可证: AGPL-3.0 创建时间: 2026-04-12快速安装# 一条命令完成初始化下载浏览器引擎和本地模型写入 MCP 配置npx wigolo init--agentsclaude-code# 或多个 agent 同时配置npx wigolo init--agentsclaude-code,cursor,codex# 检查所有组件健康状态npx wigolo doctor需要 Node ≥ 20约 1.5 GB 磁盘空间浏览器引擎 本地 ML 模型。安装后所有核心工具立即可用无需任何 API Key。如果需要research和agent工具的「综合答案」输出而不是原始数据接入一个免费的 Gemini key 是最大的质量提升exportWIGOLO_LLM_PROVIDERgeminiexportGEMINI_API_KEYaistudio.google.com 上的免费 key也可以用 Ollama 本地模型完全不出境WIGOLO_LLM_PROVIDERollama。10 个工具详解核心检索工具search— 多引擎并行搜索18 个直连引擎适配器不走中间代理 APIrank fusion 合并多引擎结果 ML 重排序传入 query 数组可并行发出多个查询一次 MCP 调用扇出多个搜索每个结果附带可解释评分semanticlexicalengine_consensus三路得分fetch— 分级路由页面抓取纯 HTTP 请求 ↓失败或检测到 SPA 标志 无头浏览器处理 JS 渲染 ↓遭遇 Bot 挑战 挑战清除流程 ↓清除失败 标注 blocked_by_challenge不伪装成内容学习每个域名的「需要哪一级抓取」不重复踩坑。crawl— 多页爬取支持 BFS、DFS、sitemap 模式或仅建立站点地图map-only。遵守 robots.txt有 per-domain rate limit内置模板去重。extract— 结构化提取从页面提取表格、JSON-LD、metadata、品牌资产、命名 schemaArticle / Recipe / Product / …或传入自定义 JSON Schema 提取任意结构。记忆与发现工具cache— 本地语义缓存所有访问过的页面自动缓存。支持关键词查询和语义相似查询离线可用。还提供缓存统计、清空、变更检测。find_similar— 相似内容发现找与某 URL 或概念相似的页面三路融合关键词 语义 实时 Web。研究与自治工具research— 深度研究分解问题 → 并行发出子查询 → 抓取来源 → 合成带引用的报告或生成结构化摘要由宿主 LLM 自行撰写。agent— 自治 gather 循环自主规划 → 搜索 → 抓取 → 提取 → 综合支持时间预算和可选输出 JSON Schema。监控工具diffwatch— 页面变更检测查看某 URL 自上次访问以来发生了什么变化设置定期监控将变更推送到 webhook。核心特性深度解析字节级来源定位Byte-Pinned Provenance这是 wigolo 在所有对比工具中独有的特性。每个搜索结果不只返回摘要还附带{excerpt:Logical replication is a method of replicating data objects…,citation_id:src-1,source_span:{start:1042,end:1305},evidence_score:{final:0.86,semantic:0.91,lexical:0.78,engine_consensus:3}}source_span精确到字节偏移量 —— agent 引用这段内容时可以明确追溯到原文的哪个位置不是「大概在这篇文章里」。evidence_score是可解释的三路分数语义相关度 词汇匹配度 多少引擎也返回了这个结果engine_consensus。弱结果被 wigolo 自身的评分器标记为 junk 并在结果里显示不是悄悄过滤掉。为什么重要AI agent 在构建 RAG 或回答需要引用来源的问题时字节级定位让引用可以真正可验证而不是模糊的「参考了某篇文章」。本地优先架构AI agent任意 MCP 客户端 / REST / SDK ↓ wigolo 进程单 Node 进程 │ ├── 搜索层 │ 18 个引擎直连适配器 │ rank fusion ML 重排序本地模型 │ ├── 抓取层 │ 分级路由HTTP → 无头浏览器 → 挑战清除 │ per-domain 学习 缓存复用 │ ├── 本地存储~/.wigolo/ │ 关键词索引 向量索引本地嵌入模型 │ 浏览器引擎 ML 模型 │ └── 可选接入虚线 LLM API仅用于 research/agent 综合答案 聚合器后端扩展搜索宽度legacy 模式哪些组件是本地的✅ 搜索引擎直连适配器✅ ML 重排序模型✅ 向量嵌入模型all-MiniLM-L6-v2等✅ 无头浏览器引擎✅ 本地缓存SQLite 向量索引哪些是可选云端 LLM 合成research/agent输出综合答案时 聚合器后端扩宽搜索漏斗可选横向对比wigolo vs Tavily / Exa / Firecrawl这是本文的重点部分。wigolo 在 README 里有一张对比表但缺少对各工具定位和使用场景的深度说明。功能矩阵能力wigoloTavilyExaFirecrawl多引擎 Web 搜索✅✅✅✅页面抓取与结构化提取✅✅✅✅全站爬取✅✅—✅字节级来源定位✅———可解释评分分解✅———持久本地缓存支持离线再查询✅———查询数据留在本机✅———需要 API Key / 账号无必须必须必须查询费用$0按量计费按量计费按量计费各工具的实际定位Tavily— 专门为 AI agent 设计的搜索 API目前是「RAG agent 搜索」场景里最常被集成的付费服务。优势是产品成熟、LangChain/LlamaIndex 等框架原生支持、搜索质量经过专门优化劣势是按查询计费agent 频繁调用时成本会快速累积。Exa— 定位为「语义 Web 搜索」擅长理解查询的含义而不只是关键词匹配。有一个显著特点官方文档页面、技术内容的检索质量很高README 的基准测试里提到 Exa 能完整渲染官方文档的对比矩阵。同样需要注册 按量计费。Firecrawl— 专注于网页爬取和结构化提取而不是搜索。主要优势是处理复杂 JS 渲染页面、大规模爬取任务、结构化数据提取的能力。适合「给定一批 URL批量提取结构化内容」的场景而不是「给定问题搜索相关内容」。wigolo— 试图把上述三种能力合并到一个本地工具里同时消除 API Key 和费用。核心差异化字节级来源定位、可解释评分、本地缓存支持离线再查询、$0 查询成本。使用场景推荐选 wigolo 的场景开发过程中频繁做技术文档查询无需付费限制需要来源可追溯性字节级定位 → agent 引用可核验隐私要求高不希望查询内容传出本机agent 查询量大云端 API 成本是问题需要结合本地缓存做「记忆型」研究任务选 Tavily 的场景需要开箱即用的生产级质量不想维护本地依赖已在 LangChain/LlamaIndex 生态需要框架原生集成查询量可控按量付费可接受选 Exa 的场景主要查询技术文档、学术内容对语义相关性要求高需要高质量的官方文档检索文档页面渲染能力强选 Firecrawl 的场景批量爬取特定网站提取结构化内容非搜索场景大规模网页内容处理管道一个诚实的限制wigolo 的 README 里提到了一点数据中心 IP 在 IP 信誉评分上不如家庭网络某些有反爬措施的网站在云服务器上运行时清除率会低于本地。自托管场景需要注意这一点README 里提供了可选代理方案。其他接入方式wigolo 不只是 Claude Code 插件支持多种调用方式REST APIwigolo serve# 启动在 127.0.0.1:3333curl-sXPOST http://127.0.0.1:3333/v1/search\-HContent-Type: application/json\-d{query:local-first software,max_results:5}跨越 loopback 的连接强制要求 bearer tokenfail-closed 设计。TypeScript / Python SDKfromwigoloimportlocal_clientwithlocal_client()asclient:resclient.search(querylocal-first web search,max_results5)forrinres[results]:print(r[title],r[url])SDK 自动复用已运行的 daemon或在需要时启动一个调用结束后按需关闭。框架集成框架包名提供的接口LangChainwigolo-langchain每个工具作为BaseTool RAG 用的BaseRetrieverCrewAIwigolo-crewaiwigolo_tools()直接传给 crewLlamaIndexwigolo-llamaindexBaseReader把页面加载为 documentsVercel AI SDKwigolo-vercel-ai-sdkgenerateText/streamText的 tool factory参考资源官方链接GitHub: KnockOutEZ/wigolo官网: knockoutez.github.io/wigolonpm: wigolo文档: docs/README.md总结wigolo 的核心主张是agent 的 Web 访问层不应该是一个持续计费的云端 API 黑盒。搜索引擎的原始数据是公开的重排序和提取算法可以本地跑查询历史可以缓存到本地语义索引里 —— 这些事情加在一起就是一个零费用、数据留本地、可离线复用的 Web 情报层。两个设计决策值得单独记字节级来源定位在所有对比工具里独有。agent 引用搜索结果时source_span给出字节偏移量引用可以真正追溯到原文位置。对于需要「来源可验证」的研究类任务这个特性直接减少了一层「AI 可能在编造引用位置」的不确定性。显式失败而非沉默Bot 拦截标注为blocked_by_challenge失效引擎上报弱结果被评分器标记为 junk 并显示在结果里。这种「始终告诉你它站在什么地基上」的设计在 agent 场景里比「假装成功」要可靠得多。如果你的 Claude Code 日常工作里有大量文档查询、技术信息搜索或者正在构建需要 Web 搜索的 agent pipelinewigolo 的npx wigolo init --agentsclaude-code是目前成本最低的接入方式 —— 字面意义上的零成本。探索 PrimeSkills —— 精选 AI agent 和技能工具每一个都经过真实工作流验证。没有炒作只有真正好用的工具。访问我的个人主页获取更多见解和有趣的产品。