用 n8n + Gemini + SearXNG 简易复刻一个免费的 Deep Research

用 n8n + Gemini + SearXNG 简易复刻一个免费的 Deep Research

Deep Research 类 AI 产品虽好,但价格昂贵,尤其是在自己复刻的时候,往往比直接买 ChatGPT 和 Gemini 的会员还贵。

因为它的原理并不复杂,但你真正开始复刻的时候会发现,比起大模型的 Token 成本,搜索 API 的成本更高。

以 SerpAPI 为例,它按搜索次数收费,每 5,000 次搜索高达 75 美元一个月。Google 官方的搜索 API 则按返回的结果数收费,每 1000 次高达 35 美元。

那,我们能不能找个免费的搜索方案来实现 Deep Research 的搭建呢?其实是有的,不仅如此,我们甚至可以不局限在一个搜索引擎里。那就是使用开源的 SearXNG 作为搜索 API。

你可以先下载这个 Workflow,导入你的 n8n 后照着教程理解:

(7.5 KB)

在这篇教程中,你将学会如何将 Workflow 作为 AI Agent 的工具使用。这意味着,你可以在 n8n 中让 AI 调用那些既没有标准节点、也没有 MCP 的服务。

SearXNG 是一个免费、开源的元搜索引擎——用人话解释,就是搜索引擎代理。它会在真正的搜索引擎和用户之间做一个中间层,代理用户进行搜索。

简单来说,它的主要功能是:

  1. 整合搜索结果: 它不像 Google 或 Bing 那样自己建立索引,而是将用户的搜索请求发送给多个不同的搜索引擎(如 Google, Bing, DuckDuckGo, Qwant 等)和其他信息源(如维基百科、Reddit 等)。
  2. 保护隐私: 这是 SearXNG 的核心目标。它不会跟踪用户、不记录搜索历史、不收集个人信息。它通过作为用户和各个搜索引擎之间的代理来隐藏用户的 IP 地址,从而实现更匿名的搜索。
  3. 避免个性化和过滤气泡: 由于不跟踪用户,它提供的搜索结果通常不会受到用户历史行为的影响,有助于用户获得更广泛和多样化的信息。

在 n8n 的 1.89 版本中,加入了 SearXNG 作为一个标准节点,这意味着我们可以使用 SearXNG 作为一个搜索 API,在 n8n 中构建带有搜索功能的 AI Agent。

SearXNG 的部署比 n8n 还简单,它几乎是一个可以拉取镜像后直接运行的项目。

尤其是在作为 n8n 节点使用时,我们甚至不需要使用它的 Web UI。

你如果会用 Docker,只需要直接拉取镜像,然后运行就行。只有两个地方需要设置:

如果你还是不会,可以参考这个只有 1:40 秒的 B 站教程。

你需要将 SearXNG 部署在和 n8n 同样的机器上,否则需要额外的配置公网的 API 访问,这不安全。

SearXNG 部署完成之后,我们要进行一些配置才能让它在 n8n 里被使用。

在 SearXNG 的 WebUI 中修改配置,不会覆盖全局配置,意味着只对你浏览器的进程生效。所以,这部分的配置我们必须在 SearXNG 的配置文件中修改。

SearXNG 的配置文件有空敏感性,如果你在里面使用了 tab 而不是空格进行缩进,配置将不会生效。具体表现为,修改配置文件后保存,重启 SearXNG 配置文件被恢复为默认配置。在修改配置时,需特别注意与原始配置保持格式一致。

进入到宿主机的是 这个目录,打开 文件。

里面有几个点需要我们修改:

搜索 ,在默认的 html 下面加入 json,如下图:

默认情况下 SearXNG 打开了对 Google、Wikipedia 和 Gogoduck 等国外搜索引擎的支持。如果你想打开百度搜索,你需要在配置文件里搜索 。然后将 修改为 。如下图:

同理,你可以查阅配置文件里其他的搜索引擎的这个设置,关掉那些你不想要的以提升检索速度。

如果你的 SearXNG 处在一个不能访问 Google 的网络环境,你可能需要设置一下。SearXNG 不读取 Docker 的代理环境变量,需要在配置文件里修改。搜索 ,按照如下图配置即可:

至此,你的 SearXNG 就可以作为一个好用的搜索 API 来用了。

值得注意的是,SearXNG 的 WebUI 是默认打开的,并且允许外网访问。如果你不希望别人使用你的 SearXNG,我建议你在 Docker 将端口映射改为 。这样确保只有本机的 n8n 可以调用 SearXNG,代价是你自己也访问不到 SearXNG 的 WebUI 了。

DeepResarch 想要做好有非常多的工程化细节,但我们只做原理复刻的话,就会变得非常简单。整体而言,它的 Workflow 长这样:

可以看到,我们实际上只是在标准的 AI Agent 工作流(一个聊天触发器、一个记忆节点、一个 AI Agent 节点和一个 AI 模型)上连接了三个工具,分别是 internet_search、pdf_read 和 web_browser。

我们一步一步来解释这三个工具如何配置。

直接在 AI Agent 的 Tool 槽位上点击加号,选择 SearXNG 节点。

在弹出的节点配置中,我们选择新建一个 SearXNG 凭据(Credential)。然后,将我们刚才配置的 SearXNG 的地址填写进n8n 工作流 教程去:

这里要填写的地址,是你的 SearXNG 的本地地址。至于什么是本地地址,你需要参阅这个说明:

至此,我们的搜索工具配置完毕。

但是,我们会发现 SearXNG API 返回的搜索结果,而非结果页内容。也就是它给的其实是某个关键词搜索后 Google 列表的那个页面——标题、网页地址、一小段摘要。

我们为了让 AI 能真正从搜索结果中提取有用信息,必须让 AI 实际读取搜索结果页面才行。这就导致了我们需要配置另外两个工具,一个用来读网页,一个用来读 PDF。

我们当然可以直接把 HTTP Request 节点作为一个工具接到 AI Agent 上,但那样就意味着 AI 在研读网页的时候,会把整个网页的完整 HTML 都放进上下文里。一方面影响 AI 的阅读能力,另一方面会大幅的增加 Tokens 消耗。

为了减少 AI 的阅读负担,我们希望能够将一个网页先转换成 Markdown 再喂给 AI。

然而,在 AI Agent 节点上,我们只能单独使用一个节点作为工具,怎么办呢?

我们可以单独建一个用于读取并转换网页的 Workflow,再把这个 Workflow 作为工具连接在 AI Agent 上。

首先,我们创建一个新的 Workflow,随便取个名字,然后配置上如下节点:

它的触发器是“When Executed by Another Workflow”,这个触发器专门用于编排子 Workflow。它允许你设置这个 Workflow 需要从父 Workflow 索要哪些参数。比如在这里,我们实际上只需要一个参数,那就是 URL,也就是想要阅读哪个网页。我们就这样设置:

接下来,我们添加一个 HTTP Request 用于获取网页,设置如下:

获取完的网页,我们需要用一个 Markdown 节点去剥离它的所有 HTML 代码只保留大部分能直接看的肉眼内容,配置如下:

这样,我们一个用于将指定 URL 转换为 Markdown 的子 Workflow 就做好了。

此时,我们回到我们的父 Workflow,在 AI Agent 的 Tools 槽位上增加一个 Call n8n Workflow Tool:

Source 选择 Database,Workflow 选择我们刚才做的子 Workflow(网页阅读器):

这个时候,我们会发现刚刚被我们定义的参数已经显示在了下面(URL),然后我们勾选 AI 自动填写。

再为这个工具写一个 Description,告诉 AI 这是个什么工具,怎么用。

配置就大功告成了。

如法炮制,我们建立一个子 Workflow,设置三个节点。主要功能是将指定 URL 的 PDF 下载下来,解析成平文本。

回到主 Workflow,添加子 Workflow 作为工具,配置好说明。

这样,AI 对于搜索结果中的 PDF 也就可以自动处理了。

由于 Deep Research 一般一次对话会涉及数十次的反复调用,这其实是 AI 自己在和自己对话。我们为了防止它在执行任务过程中,原始的记忆被丢弃,我们需要将记忆模块的内容窗口长度调大一点,比如这里我们调到 20:

Deep Research 和一般的聊天不同,它需要 AI 有计划的使用工具,并规划下一步行动。所以我们实际上需要一个 ReAct 框架的 Prompt。这里我让 AI 生成了一份,你可以直接复制粘贴进你的 AI Agent 节点中:


这个不用说了,关键的关键是要用一个支持超长上下文的模型,如果你用 DeepSeek 肯定是不太行的,因为读不了几个网页它的上下文就满了。

我这里测试用的是 GPT-4o,如果你想做到彻底免费可以用 Gemini 2.5 Flash。

但怎么说呢,Deep Resarch 因为涉及到反复的自我调用,所以每日 1000 次的免费调用其实根本就不太够。

这个 Workflow 的局限性是国内的网站反爬虫都做的太好了,这导致 n8n 几乎访问所有大型商业平台(如知乎、微信公众号)都是被直接屏蔽的:

改进的思路是你可以用 Jina.AI 这种专业的爬虫 API 去替代网页读取的那个工具。

其实我并不是很推荐大家自建 Deep Research,但这个过程可以用于学习如何将那些网上不存在的工具通过 n8n 连入 AI Agent。看到这里大家想必也理解了,简答来说就是:先把工具本身做成一个 Workflow,然后再把 Workflow 连接到 Agent 即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/248373.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午4:36
下一篇 2026年3月15日 下午4:37


相关推荐

关注全栈程序员社区公众号