SearXNG:将网络搜索功能赋予模型 本地
SearXNG(采用 AGPL-3.0 许可证的自由软件,不跟踪用户,也不为用户建立画像)是一个自托管的元搜索引擎:它将您的查询转发给其他搜索引擎,并合并结果,无需 API 密钥,也没有账单。对于本地模型,打通整个流程的关键是将“json”添加到 settings.yml 的格式列表中(默认仅有“html”),然后将这份 JSON 输出接入您的聊天界面或智能体。
一个开源模型完全不会了解本周的任何内容,其回答中也不会有任何提示:它会像背乘法表一样,毫无保留地谈论上个月的情况。若允许其进行网络搜索,这一问题便可得到解决。SearXNG 是一个自托管的元搜索引擎,无需 API 密钥、无需按请求收费、无需注册账户——这使其成为本地部署中的一块可靠组件,用户无需将每个问题发送给第三方。
#为何本地模型需要网络访问
模型的知识截止于其训练日期,它无法确定这一边界的具体位置。有两种解决方案:在提示(prompt)中自行提供事实,或在回答时赋予模型自行获取事实的能力。检索是第二种方案的通用形式,当问题变化时,其可扩展性最强。
最直接的方案是使用商业搜索API:需注册账号、获取密钥,并按请求计费。SearXNG提供了自主部署的替代方案。您自行托管实例,所有请求均从本地发出,无需注册账号,除非您主动选择,否则不会记录任何日志。对于数据必须保留在本地的场景而言,将每个问题通过服务接口发送给第三方,显然并非一个合理的终止点。
该项目本身明确定位为一个元搜索引擎,用户不会被追踪或画像,且采用 AGPL-3.0 开源许可证。这是一项强 copyleft 许可证:若对软件进行修改后重新分发,包括作为在线服务提供,必须以相同条款重新发布源代码。对于个人或团队内部使用,此条款不会触发:它仅适用于向第三方分发修改版本,而不适用于在自家或企业环境中运行实例。
#SearXNG 能做什么:没有什么魔法
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
SearXNG 不会爬取网页,也不拥有任何索引。它是一个中间层:您的查询会发送到一组可配置的现有搜索引擎,返回的结果经过去重和重新排序后,汇总成一份列表提供给您。被查询的搜索引擎看到的是实例的 IP 地址,而不是您的 IP 地址。
这种中介角色也解释了项目自身强调的隐私承诺:实例不会跟踪用户,也不会为用户建立画像。没有账户,没有广告跟踪 Cookie,也没有与身份关联的搜索历史——这使 SearXNG 与商业搜索引擎形成鲜明区别,后者的商业模式恰恰依赖于长期记录搜索查询和点击行为来建立用户画像。
- 质量取决于上游内容
- 禁用会引入噪音的引擎以适应您的具体使用场景:这比任何提示词优化都能更有效地提升模型响应质量,因为模型无法弥补已污染的初始上下文。
- 自动化看起来像滥用
- 一个人每分钟发起几次搜索,而智能体在循环运行时会发起数十次。上游搜索引擎会要求验证码验证或实施临时封锁,您看到的则是空的搜索结果。
对上游搜索引擎的这种强依赖,是所有元搜索引擎的核心权衡:SearXNG 的表现不可能优于其聚合的内容,也会受到上游搜索引擎故障和变更的影响。某个搜索引擎一旦突然改变 HTML 标记结构,就会导致 SearXNG 中对应的模块失效,直到维护者将其更新。这也解释了为什么一个长期未更新的实例中,某些搜索引擎会悄然停止返回结果,却没有明确的错误提示。
#L'installer
- 01部署容器官方镜像发布在 Docker Hub (searxng/searxng) 和 GHCR (ghcr.io/searxng/searxng),均由项目自身维护。在单机环境中,镜像加上一个 Valkey 缓存服务(Redis 的开源分支)就足以启动运行。
- 02仅允许本地网络访问向互联网开放的实例会在几天内被发现,并被当作免费中继使用,导致上游搜索引擎封禁它的访问。因此,应让实例仅绑定到本地网络,或在访问入口设置身份验证。
- 03从调用该服务的机器上进行验证不要从您的浏览器中验证。一个容器调用另一个容器时,需要使用从 Docker 内部可访问的地址,而不是 localhost。
#大家普遍忽略的设置
新安装的 SearXNG 默认仅提供 HTML 内容:对人类来说完美,对程序而言完全无用。官方文档确认,settings.yml 文件中的 search.formats 配置项默认值仅为 'html',而 csv、json 和 rss 格式是可选的;需手动添加 json 并重启服务。这是连接 SearXNG 到聊天界面时绝大多数‘无法正常工作’问题的唯一原因。
#连接至您的模型
| 环境 | SearXNG 的角色 |
|---|---|
| 本地聊天网页界面 | 集成搜索服务提供方:填写实例的 URL 后,回答就会附带来源列表 |
| 智能体框架 | 智能体可调用的搜索工具 |
| 文档检索链 | 用于时事问题的检索步骤,与您的文档索引配合使用 |
| 自动化工具 | 只需向 JSON 端点发起一次 HTTP 调用 |
流程始终相同:搜索返回内容片段和网址,您的代码或界面从中选取几个,再将它们插入提示词,然后模型才回答提出的问题。模型不会浏览网页:它只读取提供给它的内容。因此,这里内容片段的质量和上下文窗口的大小,比模型规模更重要。
#真正影响运行效果的设置
新安装的实例默认启用大量引擎,看似提供了丰富选择,却会降低质量:噪声更多、重复内容更多,而且为了等这一批中最慢的引擎返回结果,延迟也更高。第一项真正的改进从来不是调整模型的提示词,而是调整已启用的引擎列表,并检查这些引擎是否确实适合目标用途。
- 关闭无关的引擎
- 例如,以技术文档为主的使用场景不需要那些默认启用的图像或购物搜索引擎。每减少一个引擎,就少一个噪声来源,也少一条日常需要处理的上游请求。
- 启用缓存
- 共享的 Valkey 数据库可以避免智能体在循环中重复提出同一问题时,每次调用都重新执行相同的搜索,从而既缩短响应时间,又节省上游搜索引擎宝贵的配额。
- 设定返回结果的数量限额
- 模型实际只会读取三个结果,却要求返回十个,会白白占用大量上下文并增加延迟,毫无实际收益。返回结果的数量应与提示词后续实际使用的数量一致,不多也不少。
- 启动时监控日志
- 最近更新为使用 Valkey 的实例,如果主机名仍指向原来的缓存服务,可能会静默失败。查看一下容器日志,就能避免到别处寻找实际出在这里的问题。
#需预先考虑的限制
- 搜索引擎的配额
- 搜索结果为空,几乎总是意味着上游拦截,而不是 SearXNG 本身的配置错误。减少启用的搜索引擎,更多地利用 Valkey 缓存,尤其不要让智能体在没有任何频率限制的情况下循环搜索。
- 短文本片段
- 要获取深入的内容,需要抓取并清洗链接指向的网页:这是专用提取工具的工作,而不是搜索引擎的工作;搜索引擎只是转发已经在上游汇总好的结果。
- 没有智能排序
- SearXNG 只是合并搜索结果,并不理解您的问题。模糊的查询会返回模糊的上下文,模型会认真地加以总结,却始终不会指出提问本身表述不当。
- 维护工作由您负责
- 上游搜索引擎会修改页面,模块必须随之调整。一个实例若一年不更新,运行效果就会在不知不觉中变差。
- 迁移到 Valkey 涉及的是旧实例
- 一年多以前部署的实例,可能仍然指向旧的缓存服务。请检查限流器配置的主机名:如果它与当前实际启动的容器不匹配,反机器人保护就会悄无声息地失效,而无法正常阻止滥用。
#FAQ
SearXNG 免费吗?+
为什么我的实例返回 HTML 而不是 JSON?+
是否可以使用公共实例替代自建实例?+
需要 GPU 吗?+
为什么结果会在一段时间后变为空白?+
这能让我的模型保持最新吗?+
SearXNG的AGPL-3.0许可证对我有什么影响?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。