OpenWebUI(2)源码学习-后端retrieval检索模块
目录
- 1. retrieval主要功能说明
- 2. 🔍 整体架构概览
- 3. 📁 目录结构解析
- 3.1 `loaders/`
- 3.2. `models/`
- 3.3. `vector/`
- 3.3.1 `dbs/`
- 3.4. `web/`
- 3.5. `utils.py`
- 4.💡 主要功能模块详解
- ✅ 1. **信息检索**
- ✅ 2. **文档加载**
- ✅ 3. **向量数据库**
- ✅ 4. **重排序(Reranking)**
- 5.🧩 应用场景
- 6.⚙️ 配置与部署建议
- 7.📦 总结
1. retrieval主要功能说明
是一个检索模块目录,主要负责实现信息检索、向量存储与搜索、网络爬取和重排序(Reranking)等功能。这个模块为 AI对话系统提供外部知识支持,帮助模型从文档、网页、数据库中获取相关信息。
2. 🔍 整体架构概览
retrieval/
├── loaders/ # 数据加载器(PDF/URL/External API)
├── models/ # 检索模型(Rerank / ColBERT)
├── vector/ # 向量数据库操作
│ ├── dbs/ # 具体向量数据库实现
│ ├── factory.py # 向量数据库工厂类
│ └── main.py # 统一向量检索接口
├── web/ # 网络搜索模块
│ ├── testdata/ # 测试用的搜索响应示例
│ ├── bing.py # Bing 搜索引擎集成
│ ├── brave.py # Brave 搜索引擎集成
│ └── ... # 更多搜索引擎支持
└── utils.py # 通用工具函数
3. 📁 目录结构解析
D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval
是一个检索模块目录,主要负责实现信息检索、向量存储与搜索、网络爬取和重排序(Reranking)等功能。这个模块为 AI 对话系统提供外部知识支持,帮助模型从文档、网页、数据库中获取相关信息。
3.1 loaders/
- 功能:用于加载各种来源的数据,并将其转换为可被模型使用的格式。
- 文件说明:
- datalab_marker.py
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\datalab_marker.py)
:处理 Datalab 格式的数据。 - [external_document.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\external_document.py)
:从外部源(如 PDF、Word 等)加载文档内容。 - [external_web.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\external_web.py)
:从 Web URL 加载网页内容。 - [main.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\main.py)
:统一入口,注册并管理所有 loader 类型。 - [mistral.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\mistral.py)
:Mistral 模型相关数据加载器。 - [tavily.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\tavily.py)
:Tavily 搜索 API 的数据加载器。 - [youtube.py]
(file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\loaders\youtube.py)
:从 YouTube 视频中提取文本内容。
- datalab_marker.py
3.2. models/
- 功能:定义和封装各种检索模型,包括本地模型和外部服务接口。
- 文件说明:
- [base_reranker.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\models\base_reranker.py):定义 Reranker 基类,供具体模型继承。
- [colbert.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\models\colbert.py):ColBERT 模型的实现,用于语义级重排序。
- [external.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\models\external.py):调用外部检索模型(如 OpenAI、HuggingFace 等)的通用适配器。
3.3. vector/
- 功能:向量数据库的集成与操作,用于高效地进行语义相似性检索。
- 子目录说明:
3.3.1 dbs/
-
支持多种向量数据库后端:
- [chroma.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\chroma.py):Chroma 向量数据库客户端。
- [elasticsearch.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\elasticsearch.py):Elasticsearch + Vector 插件支持。
- [milvus.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\milvus.py):Milvus 向量数据库客户端。
- [opensearch.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\opensearch.py):OpenSearch 向量数据库支持。
- [pgvector.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\pgvector.py):PostgreSQL + pgvector 扩展的支持。
- [pinecone.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\pinecone.py):Pinecone 向量数据库客户端。
- [qdrant.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\qdrant.py):Qdrant 向量数据库客户端。
- [qdrant_multitenancy.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\qdrant_multitenancy.py):多租户场景下的 Qdrant 支持。
-
其他核心文件:
- [factory.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\factory.py):工厂模式创建向量数据库实例。
- [main.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\main.py):统一接口,处理向量插入、查询等逻辑。
- [type.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\type.py):定义向量数据库的通用接口类型(如
VectorDB
)。
3.4. web/
-
功能:Web 数据检索模块,整合多个搜索引擎 API 实现联网搜索能力。
-
子目录说明:
testdata/
:测试用的搜索结果 JSON 文件,用于调试和模拟不同搜索引擎返回。- 各搜索引擎实现:
- [bing.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\bing.py)
- [bocha.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\bocha.py)
- [brave.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\brave.py)
- [duckduckgo.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\duckduckgo.py)
- [exa.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\exa.py)
- [firecrawl.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\firecrawl.py)
- [google_pse.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\google_pse.py)
- [jina_search.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\jina_search.py)
- [kagi.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\kagi.py)
- [mojeek.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\mojeek.py)
- [perplexity.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\perplexity.py)
- [searchapi.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\searchapi.py)
- [searxng.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\searxng.py)
- [serpapi.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\serpapi.py)
- [serper.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\serper.py)
- [serply.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\serply.py)
- [serpstack.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\serpstack.py)
- [sougou.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\sougou.py)
- [tavily.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\tavily.py)
- [yacy.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\yacy.py)
-
核心文件:
- [main.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\main.py):统一入口,协调各个搜索引擎,返回统一格式的搜索结果。
- [utils.py](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\web\utils.py):工具函数,例如提取网页正文、过滤无效链接等。
3.5. utils.py
- 功能:通用辅助函数。
- 主要用途:
- 清洗和预处理检索到的内容。
- 处理分页、去重、缓存等通用逻辑。
- 提供日志记录、错误处理、性能优化等支持。
4.💡 主要功能模块详解
✅ 1. 信息检索
- 通过
web/
中的搜索引擎模块,可以实时获取互联网上的最新信息。 - 支持多个搜索引擎,方便切换或组合使用(如 Google + Bing 双引擎搜索)。
- 示例调用方式:
from retrieval.web.bing import BingSearch search = BingSearch(api_key="your_api_key") results = search.run("AI大模型发展现状", max_results=5)
✅ 2. 文档加载
- 通过
loaders/
模块将 PDF、网页、API 返回的原始数据转换为标准文本。 - 支持异步加载和批处理,适用于大规模数据导入。
- 示例调用方式:
from retrieval.loaders.external_web import ExternalWebLoader loader = ExternalWebLoader(url="https://example.com/document.html") content = loader.load() # 获取网页正文
✅ 3. 向量数据库
- 使用
vector/
模块将文档切片并嵌入为向量,存储在向量数据库中。 - 支持多种向量数据库后端,便于根据部署环境选择合适的向量存储方案。
- 示例调用方式:
from retrieval.vector.factory import VectorDBFactory db = VectorDBFactory.create_db("chroma", collection_name="ai_docs") db.add_texts(["深度学习基础知识", "Transformer 架构详解"]) results = db.similarity_search("什么是注意力机制?")
✅ 4. 重排序(Reranking)
- 利用
models/
中的模型对初步检索结果进行二次排序,提升匹配精度。 - 支持本地模型和远程模型调用。
- 示例调用方式:
-
本地模型(如 ColBERT):
from retrieval.models.colbert import ColbertReranker reranker = ColbertReranker(model_path="colbert-base") ranked_results = reranker.rerank(queries, candidates)
-
外部模型(如 HuggingFace Inference API):
from retrieval.models.external import ExternalReranker reranker = ExternalReranker(endpoint="https://api.example.com/rerank") ranked_results = reranker.rerank(queries, candidates)
-
5.🧩 应用场景
场景 | 使用模块 | 说明 |
---|---|---|
文档问答 | loaders/ , vector/ | 将 PDF 或网页内容向量化后进行语义检索 |
联网搜索 | web/ | 调用搜索引擎获取实时信息 |
个性化推荐 | models/ | 使用 Reranker 提升搜索结果的相关性 |
知识库构建 | vector/ , loaders/ | 将企业内部资料导入向量数据库 |
AI插件扩展 | web/ , models/ | 结合外部模型和搜索引擎增强 AI 回答能力 |
6.⚙️ 配置与部署建议
- 搜索引擎 API Key:需配置
BING_API_KEY
、[GOOGLE_PSE_API_KEY](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\config.py#L2330-L2334) 等环境变量。 - 向量数据库连接:可在配置文件中指定
VECTOR_DB_TYPE
(如 [chroma](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\chroma.py#L0-L0), [qdrant](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\qdrant.py#L0-L0), [pinecone](file://D:\GiteeDownloadProject\AIStudyProject\open-webui\backend\open_webui\retrieval\vector\dbs\pinecone.py#L0-L0))及对应连接参数。 - 模型路径:若使用本地模型(如 ColBERT),需确保模型文件已下载至指定路径。
7.📦 总结
模块 | 功能 | 推荐用途 |
---|---|---|
loaders/ | 文档加载 | PDF、网页、API 内容抽取 |
web/ | 网络搜索 | 实时信息检索 |
vector/ | 向量数据库 | 本地语义检索、知识库构建 |
models/ | 检索模型 | 重排序、语义匹配 |
utils.py | 工具函数 | 日志、缓存、文本处理 |
该目录构成了一个完整的信息检索与语义理解生态系统,是 AI 对话系统获取外部知识的关键组件。