> ## Documentation Index
> Fetch the complete documentation index at: https://blog.pig4cloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 私有大模型联网搜索：基于 SearXNG 的实现方案

<img src="https://minio.pigx.vip/oss/202504/1744557526.png" alt="1744557526" />

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

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

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

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

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

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

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

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

```bash theme={null}
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。

<img src="https://minio.pigx.vip/oss/202504/1744556228.png" alt="1744556228" />

## 大模型联网搜索集成方案

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

### LangChain4j + SearXNG 集成方案

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

#### 添加依赖

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

```xml theme={null}
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-community-web-search-engine-searxng</artifactId>
    <version>1.0.0-beta2</version>
</dependency>
```

#### 基础搜索实现

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

#### 大模型 RAG 模式集成

```xml theme={null}
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-easy-rag</artifactId>
    <version>1.0.0-beta2</version>
</dependency>
```

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

```java theme={null}
// 创建模型客户端（可替换为其他大模型 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 等可能存在访问限制的引擎

2. **中文搜索引擎支持**：SearXNG 支持多种中文搜索引擎，包括：

| 搜索引擎           | 快捷键    | 标识        |
| -------------- | ------ | --------- |
| 360search (ZH) | !360so | 360search |
| baidu (ZH)     | !bd    | baidu     |
| quark (ZH)     | !qk    | quark     |
| sogou (ZH)     | !sogou | sogou     |
