agentic_huge_data_base / wiki
页面 Open WebUI · 7 RAG 与知识系统·DeepWiki 中文全文译文

7 · RAG 与知识系统(RAG and Knowledge System)

多模型对话工作台与知识应用入口 · 本章是 Open WebUI DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目Open WebUI 章节7 状态全文译文 模块检索、召回与知识系统、系统架构、接口与服务契约、界面与交互
源码线索
  • backend/open_webui/models/memories.py
  • backend/open_webui/retrieval/loaders/datalab_marker.py
  • backend/open_webui/retrieval/loaders/main.py
  • backend/open_webui/retrieval/loaders/mineru.py
  • backend/open_webui/retrieval/loaders/paddleocr_vl.py
  • backend/open_webui/retrieval/utils.py
  • backend/open_webui/retrieval/web/firecrawl.py
  • backend/open_webui/retrieval/web/utils.py
  • backend/open_webui/routers/memories.py
  • backend/open_webui/routers/retrieval.py
模块标签
  • 检索、召回与知识系统
  • 系统架构
  • 接口与服务契约
  • 界面与交互
  • 工具、记忆与模型调用

中文译文

RAG 与知识系统(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/7-rag-and-knowledge-system
翻译时间:2026-06-09T16:09:09.858Z
翻译模型:deepseek-chat
原文字符数:10040
项目:Open WebUI (open-webui)

---

RAG 与知识系统

相关源文件

以下文件被用作生成此 wiki 页面的上下文:

  • .github/workflows/integration-test.disabled
  • backend/open_webui/models/memories.py
  • backend/open_webui/retrieval/loaders/datalab_marker.py
  • backend/open_webui/retrieval/loaders/main.py
  • backend/open_webui/retrieval/loaders/mineru.py
  • backend/open_webui/retrieval/loaders/paddleocr_vl.py
  • backend/open_webui/retrieval/utils.py
  • backend/open_webui/retrieval/web/firecrawl.py
  • backend/open_webui/retrieval/web/utils.py
  • backend/open_webui/routers/memories.py
  • backend/open_webui/routers/retrieval.py
  • backend/open_webui/storage/provider.py
  • backend/open_webui/test/apps/webui/storage/test_provider.py
  • backend/requirements-min.txt
  • backend/requirements.txt
  • docker-compose.playwright.yaml
  • pyproject.toml
  • src/lib/apis/retrieval/index.ts
  • src/lib/components/admin/Settings/Documents.svelte
  • src/lib/components/admin/Settings/WebSearch.svelte
  • uv.lock

检索增强生成(RAG)与知识系统通过提取内容、生成嵌入向量、将向量存储在数据库中,以及检索相关上下文供 AI 响应使用,实现了对文档集合的语义搜索。该系统将非结构化数据(PDF、Office 文档、网页)与 LLM 的上下文窗口连接起来。

关于聊天界面的文件处理详情,请参见消息输入系统。关于实时网络搜索能力,请参见网络搜索集成

系统架构概览

RAG 系统由 retrieval 路由器编排,并利用多种专门的加载器和向量数据库客户端。

graph TB
    subgraph "前端空间"
        DocumentsUI["Documents.svelte<br/>(管理设置)"]
        WebSearchUI["WebSearch.svelte<br/>(搜索配置)"]
    end

    subgraph "代码实体空间:API 与编排"
        RetrievalRouter["routers/retrieval.py<br/>APIRouter"]
        KnowledgeRouter["routers/knowledge.py<br/>APIRouter"]
    end

    subgraph "代码实体空间:数据摄取"
        Loader["loaders/main.py<br/>Loader 类"]
        TikaLoader["TikaLoader"]
        DoclingLoader["DoclingLoader"]
        MarkerLoader["DatalabMarkerLoader"]
        MinerULoader["MinerULoader"]
        MistralLoader["MistralLoader"]
    end

    subgraph "代码实体空间:向量存储"
        VDB_Factory["vector/factory.py<br/>VECTOR_DB_CLIENT"]
        ChromaProxy["ChromaClient"]
        MilvusProxy["MilvusClient"]
        QdrantProxy["QdrantClient"]
        PgvectorProxy["PgvectorClient"]
    end

    DocumentsUI -- "updateRAGConfig" --> RetrievalRouter
    RetrievalRouter -- "process_file" --> Loader
    Loader -- "引擎选择" --> TikaLoader
    Loader -- "引擎选择" --> DoclingLoader
    Loader -- "引擎选择" --> MarkerLoader
    Loader -- "引擎选择" --> MinerULoader
    Loader -- "引擎选择" --> MistralLoader

    TikaLoader -- "提取" --> VDB_Factory
    DoclingLoader -- "提取" --> VDB_Factory
    MarkerLoader -- "提取" --> VDB_Factory
    MinerULoader -- "提取" --> VDB_Factory
    MistralLoader -- "提取" --> VDB_Factory

    VDB_Factory --> ChromaProxy
    VDB_Factory --> MilvusProxy
    VDB_Factory --> QdrantProxy
    VDB_Factory --> PgvectorProxy

来源: backend/open_webui/routers/retrieval.py:24-49backend/open_webui/retrieval/loaders/main.py:231-235src/lib/components/admin/Settings/Documents.svelte:17-21

文档摄取管道

摄取管道管理文档从原始字节到可搜索向量的完整生命周期。这包括识别文件类型、选择专门的加载器,以及可选地利用外部 OCR 或解析服务。Loader 类(位于 backend/open_webui/retrieval/loaders/main.py:231-235)充当调度器,根据配置的引擎和文件类型选择合适的加载器。存储通过 StorageProvider 实现进行抽象,包括 Local、S3、GCS 和 Azure backend/open_webui/storage/provider.py:40-56

详情请参见文档摄取管道

内容提取引擎

Open WebUI 支持多种提取技术。引擎通过 CONTENT_EXTRACTION_ENGINE 设置进行全局配置,可通过管理设置 UI 更新 src/lib/components/admin/Settings/Documents.svelte:144-196

引擎实现类文件路径
TikaTikaLoaderbackend/open_webui/retrieval/loaders/main.py:138-177
DoclingDoclingLoaderbackend/open_webui/retrieval/loaders/main.py:179-229
Datalab MarkerDatalabMarkerLoaderbackend/open_webui/retrieval/loaders/datalab_marker.py:13
MinerUMinerULoaderbackend/open_webui/retrieval/loaders/mineru.py:14
Mistral OCRMistralLoaderbackend/open_webui/retrieval/loaders/mistral.py:23
PaddleOCR-VLPaddleOCRVLLoaderbackend/open_webui/retrieval/loaders/paddleocr_vl.py:14

详情请参见内容提取引擎

来源: backend/open_webui/retrieval/loaders/main.py:231-260src/lib/components/admin/Settings/Documents.svelte:144-203

文本分割与分块

提取的文本被分割成可管理的片段,以确保相关性并适配模型上下文窗口。系统针对不同的内容结构使用了 RecursiveCharacterTextSplitterTokenTextSplitterMarkdownHeaderTextSplitter backend/open_webui/routers/retrieval.py:32-36。系统支持针对代码、Markdown 和纯文本的特定分割策略。

详情请参见文本分割与分块

来源: backend/open_webui/routers/retrieval.py:32-36backend/requirements.txt:55

嵌入向量生成

系统使用可配置的嵌入引擎将文本块转换为数值向量。这可以通过 SentenceTransformer 在本地执行,也可以通过 OpenAI、Ollama 或 Azure 等 API 远程执行。get_ef 函数 backend/open_webui/routers/retrieval.py:139-160 负责根据配置的引擎和模型初始化嵌入函数。

graph LR
    subgraph "嵌入逻辑"
        GetEF["get_ef()<br/>retrieval.py:139"]
    end

    subgraph "提供者"
        LocalST["SentenceTransformer<br/>(本地)"]
        OllamaAPI["Ollama API"]
        OpenAIAPI["OpenAI API"]
        AzureOpenAIAPI["Azure OpenAI API"]
    end

    GetEF --> LocalST
    GetEF --> OllamaAPI
    GetEF --> OpenAIAPI
    GetEF --> AzureOpenAIAPI

详情请参见嵌入向量生成

来源: backend/open_webui/routers/retrieval.py:139-160src/lib/components/admin/Settings/Documents.svelte:113-136

向量数据库集成

Open WebUI 提供了一个统一接口 VECTOR_DB_CLIENT,抽象了各种向量数据库的复杂性。这使得系统能够支持 ChromaDB(默认)、Milvus、Qdrant、Weaviate、pgvector、Pinecone、OpenSearch 和 Elasticsearch。客户端工厂定义在 backend/open_webui/retrieval/vector/factory.py backend/open_webui/retrieval/vector/factory.py:47-48 中,并支持同步和异步操作。

详情请参见向量数据库集成

来源: backend/open_webui/routers/retrieval.py:47-48backend/requirements.txt:58-61backend/requirements.txt:128-132

检索与重排序

检索采用混合方法。它将向量相似度搜索与基于关键词的 BM25 匹配(使用 rank-bm25 backend/requirements.txt:94)相结合。为了进一步提高精度,可以使用 SentenceTransformer 交叉编码器或外部重排序器(如 ColBERT)对顶部结果应用交叉编码器重排序阶段 backend/open_webui/routers/retrieval.py:162-206

混合搜索数据流
  1. 向量搜索:使用 VECTOR_DB_CLIENT 基于语义距离获取候选结果。
  2. BM25 搜索:使用 BM25Retriever 基于精确关键词匹配获取候选结果。
  3. 集成:使用 EnsembleRetriever 合并结果 backend/open_webui/retrieval/utils.py:15-18
  4. 重排序get_rf 函数初始化交叉编码器以对输出重新评分 backend/open_webui/routers/retrieval.py:162-206

详情请参见检索与重排序

来源: backend/open_webui/routers/retrieval.py:162-206backend/open_webui/retrieval/utils.py:15-20backend/requirements.txt:94

网络搜索与 URL 加载

系统通过多个提供者(Brave、Google PSE、SearXNG 等)集成了网络搜索能力 src/lib/components/admin/Settings/WebSearch.svelte:16-42。内容使用专门的加载器获取,例如用于动态网站的 PlaywrightURLLoader 或用于结构化网页抓取的 Firecrawl backend/open_webui/retrieval/web/utils.py:27-43

来源: src/lib/components/admin/Settings/WebSearch.svelte:16-43backend/open_webui/retrieval/web/utils.py:27-49