大型语言模型 (LLM) 虽然拥有丰富的参数知识,但面临知识时效性和专业领域覆盖有限的问题。为解决这些挑战,为大模型赋予联网搜索能力成为必要。然而,直接对接公共搜索引擎存在隐私泄露、内容审查、API 限制和成本高昂等问题。

自建私有搜索引擎解决方案具有以下优势:

  • 数据隐私可控:搜索数据不被商业公司收集分析
  • 避免内容审查:绕过搜索引擎针对特定内容的过滤限制
  • 降低使用成本:避免高昂的商业搜索 API 费用
  • 定制化搜索范围:可针对特定领域优化搜索结果

SearXNG:理想的私有搜索引擎基础

SearXNG 是一个开源的元搜索引擎,它聚合了多个搜索引擎的结果,同时保护用户的隐私。作为大模型联网搜索的基础设施,它具备以下优势:

  • 元搜索机制:整合 Google、Bing、Baidu 等多家搜索引擎结果
  • 高度可定制:支持自定义搜索范围和结果呈现
  • 开源透明:完全开源代码,遵循 AGPL-3.0 许可证
  • 轻量级部署:支持 Docker 快速部署,维护成本低

部署私有搜索引擎基础设施

Docker 是最便捷的部署方式,SearXNG 官方维护了完善的 Docker 镜像,支持多种架构。

git clone git@github.com:pig-mesh/searxng-docker.git
cd searxng-docker

docker run \
    -d \
    -p 8080:8080 \
    -v "${PWD}/searxng:/etc/searxng" \
    -e "BASE_URL=http://0.0.0.0:8080/" \
    -e "INSTANCE_NAME=searxng" \
    registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/searxng:2025.2.20-28d1240fc

部署完成后,可以通过 http://localhost:8080 访问 SearXNG。

大模型联网搜索集成方案

私有搜索引擎部署完成后,我们需要将其与大模型进行集成,使 AI 能够利用实时的网络信息。以下介绍几种主流集成方案:

LangChain4j + SearXNG 集成方案

LangChain4j 提供了与 SearXNG 的原生集成支持,适合 Java 生态系统的应用开发。

添加依赖

在 Maven 项目中添加以下依赖:

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-community-web-search-engine-searxng</artifactId>
    <version>1.0.0-beta2</version>
</dependency>

基础搜索实现

WebSearchEngine searchEngine = SearXNGWebSearchEngine.builder()
        .baseUrl("http://127.0.0.1:8080")
        .build();
// 执行搜索
WebSearchResults searchResults = searchEngine.search("美国总统是谁?");
// 打印结果
searchResults.toTextSegments().forEach(System.out::println);

大模型 RAG 模式集成

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-easy-rag</artifactId>
    <version>1.0.0-beta2</version>
</dependency>

将搜索能力与大模型结合,实现检索增强生成 (RAG):

// 创建模型客户端(可替换为其他大模型 API)
OpenAiChatModel model = OpenAiChatModel.builder()
        .baseUrl("https://api.deepseek.com/v1")
        .modelName("deepseek-chat")
        .apiKey("sk-xxx")
        .build();

WebSearchEngine searchEngine = SearXNGWebSearchEngine.builder()
        .baseUrl("http://127.0.0.1:8080")
        .build();

// 创建网络搜索内容检索器
WebSearchContentRetriever contentRetriever = WebSearchContentRetriever.builder()
        .webSearchEngine(searchEngine)
        .maxResults(3)
        .build();

SearchEnabledAssistant assistant = AiServices.builder(SearchEnabledAssistant.class)
        .contentRetriever(contentRetriever)
        .chatLanguageModel(model)
        .build();


// 使用助手回答需要最新信息的问题
String answer = assistant.answer("美国总统是谁?");
System.out.println(answer);

高级优化

在实际应用中,可以进一步优化大模型联网搜索体验,SearXNG 支持多种搜索引擎配置,可以根据需求优化搜索策略:

  1. 精简搜索引擎列表
  • 启用必要的搜索引擎,禁用响应速度慢或不常用的引擎,可显著减少搜索时间
  • 私有化部署时,建议优先使用国内搜索引擎,避免使用 Google、Bing 等可能存在访问限制的引擎
  1. 中文搜索引擎支持:SearXNG 支持多种中文搜索引擎,包括:
搜索引擎快捷键标识
360search (ZH)!360so360search
baidu (ZH)!bdbaidu
quark (ZH)!qkquark
sogou (ZH)!sogousogou