大型语言模型 (LLM) 虽然拥有丰富的参数知识,但面临知识时效性和专业领域覆盖有限的问题。为解决这些挑战,为大模型赋予联网搜索能力成为必要。然而,直接对接公共搜索引擎存在隐私泄露、内容审查、API 限制和成本高昂等问题。
自建私有搜索引擎解决方案具有以下优势:
- 数据隐私可控:搜索数据不被商业公司收集分析
- 避免内容审查:绕过搜索引擎针对特定内容的过滤限制
- 降低使用成本:避免高昂的商业搜索 API 费用
- 定制化搜索范围:可针对特定领域优化搜索结果
SearXNG:理想的私有搜索引擎基础
SearXNG 是一个开源的元搜索引擎,它聚合了多个搜索引擎的结果,同时保护用户的隐私。作为大模型联网搜索的基础设施,它具备以下优势:
- 元搜索机制:整合 Google、Bing、Baidu 等多家搜索引擎结果
- 高度可定制:支持自定义搜索范围和结果呈现
- 开源透明:完全开源代码,遵循 AGPL-3.0 许可证
- 轻量级部署:支持 Docker 快速部署,维护成本低
部署私有搜索引擎基础设施
Docker 是最便捷的部署方式,SearXNG 官方维护了完善的 Docker 镜像,支持多种架构。
1 2 3 4 5 6 7 8 9 10
| 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 项目中添加以下依赖:
1 2 3 4 5
| <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-web-search-engine-searxng</artifactId> <version>1.0.0-beta2</version> </dependency>
|
基础搜索实现
1 2 3 4 5 6 7
| WebSearchEngine searchEngine = SearXNGWebSearchEngine.builder() .baseUrl("http://127.0.0.1:8080") .build();
WebSearchResults searchResults = searchEngine.search("美国总统是谁?");
searchResults.toTextSegments().forEach(System.out::println);
|
大模型 RAG 模式集成
1 2 3 4 5
| <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-easy-rag</artifactId> <version>1.0.0-beta2</version> </dependency>
|
将搜索能力与大模型结合,实现检索增强生成 (RAG):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 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 |