大型语言模型 (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 支持多种搜索引擎配置,可以根据需求优化搜索策略:
- 精简搜索引擎列表:
- 启用必要的搜索引擎,禁用响应速度慢或不常用的引擎,可显著减少搜索时间
- 私有化部署时,建议优先使用国内搜索引擎,避免使用 Google、Bing 等可能存在访问限制的引擎
- 中文搜索引擎支持:SearXNG 支持多种中文搜索引擎,包括:
搜索引擎 | 快捷键 | 标识 |
---|
360search (ZH) | !360so | 360search |
baidu (ZH) | !bd | baidu |
quark (ZH) | !qk | quark |
sogou (ZH) | !sogou | sogou |