OpenWebU-RAG 文档功能配置
OpenWebU-RAG 文档功能配置
Prorise3.4. RAG 文档功能配置
RAG(检索增强生成)是 Open WebUI 的核心功能之一,允许用户基于自己的文档进行问答。本节将从上到下逐一解析 Admin Panel → Settings → Documents 页面的每个配置项,帮助你根据实际场景做出最优选择。
配置入口:管理员面板 → 设置 → Documents
内容提取引擎(Content Extraction Engine)
内容提取引擎决定了 Open WebUI 如何从上传的文件中提取文本。通过环境变量 CONTENT_EXTRACTION_ENGINE 选择,共支持 8 种引擎。
引擎横向对比
| 引擎 | 部署方式 | 费用 | 支持格式 | OCR 能力 | 表格/公式 | 适用场景 |
|---|---|---|---|---|---|---|
| 默认(Default) | 本地,零依赖 | 免费 | PDF、TXT、CSV、DOCX、代码文件 | ❌ 不支持 | ❌ 弱 | 简单文档,纯文本 PDF |
| Apache Tika | 需部署 Java 服务 | 免费(开源) | 1400+ 种格式 | ❌ 弱 | ❌ 弱 | 格式种类多的企业环境 |
| Docling(IBM) | 需部署服务或用 API | 免费(开源) | PDF、DOCX、PPTX、HTML | ✅ 支持 | ✅ 优秀 | 复杂排版、表格、公式 |
| Datalab Marker | 云 API 或自部署 | ~$6/千页(高精度) | PDF、图片 | ✅ LLM 增强 OCR | ✅ 优秀 | 复杂排版 PDF,可自部署 |
| Mistral OCR | 云 API | $1-2/千页 | PDF、图片 | ✅ 99%+ 准确率 | ✅ 优秀 | 扫描件、多语言(25+ 语言) |
| Document Intelligence | Azure 云服务 | ~$10/千页 | PDF、图片、表单 | ✅ 支持 | ✅ 支持 | Azure 生态企业用户 |
| MinerU | 自部署或云 API | 免费(开源) | PDF、图片 | ✅ 支持 | ✅ 最佳 | 学术论文、金融报告、公式密集 |
| External | 自定义 HTTP 服务 | 取决于实现 | 自定义 | 取决于实现 | 取决于实现 | 对接私有解析服务 |
各引擎详细说明
使用 Python 原生加载器(PyPDFLoader、Docx2txtLoader、CSVLoader、TextLoader),零依赖开箱即用。但不支持 OCR,无法处理扫描件,对复杂表格和公式无能为力。
适合:纯文本 PDF 和简单文档,快速上手无需任何额外配置。
老牌 Java 文档解析框架,格式覆盖最广(1400+),但对 PDF 排版理解较弱,不擅长表格结构保留和公式识别。适合已有 Tika 基础设施的组织。
1 | environment: |
Python 原生,对 PDF 排版理解好,表格提取准确,支持公式,输出干净的 Markdown/JSON。在多个评测中与 MinerU 并列 top 2。
1 | environment: |
基于开源 Marker 和 Surya 模型,LLM 增强 OCR。其 Chandra OCR 模型在 olmOCR benchmark 上得分 83.1%,超过 GPT-4o。支持云 API 和自部署两种方式。
1 | environment: |
号称 99%+ 准确率,支持表格/公式/图表转表格/签名检测,覆盖 25+ 语言。性价比高($1/千页起),但只能通过 API 调用,无法自部署。
1 | environment: |
微软企业级服务,预置发票/收据/身份证等模型,支持自定义模型训练。价格较高但有企业合规保障。
1 | environment: |
基于 PDF-Extract-Kit 微调模型,在复杂文档(学术论文、教材、金融报告)上表现最佳,表格/公式/图片提取精度高。推荐 GPU 环境运行。
1 | environment: |
万能逃生舱,指向任意 HTTP 服务,适合对接企业内部的私有文档解析服务。
1 | environment: |
引擎选择建议
| 场景 | 推荐引擎 | 理由 |
|---|---|---|
| 简单文档、快速上手 | 默认 | 零配置,开箱即用 |
| 扫描件、多语言文档 | Mistral OCR | 性价比最高,准确率高 |
| 学术论文、公式密集 | MinerU 或 Docling | 表格/公式提取精度最佳 |
| 企业 Azure 环境 | Document Intelligence | 合规保障,预置模型丰富 |
| 想自部署 + 高精度 | Datalab Marker 或 MinerU | 开源可控,精度优秀 |
| 格式种类极多 | Apache Tika | 1400+ 格式覆盖 |
PDF 提取图片(PDF Extract Images)
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| PDF Extract Images | PDF_EXTRACT_IMAGES | false | 是否从 PDF 中提取嵌入的图片 |
启用后会增加处理时间和存储空间,仅在文档中的图片内容对问答有价值时开启。
PDF 加载模式
Open WebUI 提供两种 PDF 处理模式,决定了文档在进入切分器之前的预处理方式:
| 模式 | 行为 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| Page(页模式) | 每页作为独立文档单元,保留页边界 | 检索时能精确定位到具体页码 | 跨页内容会被截断 | PPT 转 PDF、每页独立主题 |
| Single Document(单文档模式) | 整个 PDF 合并为一个文本块,再统一切分 | 跨页内容不会丢失,语义连贯 | 失去页码定位能力 | 论文、书籍、报告等连续叙述型文档 |
最佳实践:大多数 RAG 场景推荐 Single Document 模式,因为语义连贯性比页码定位更重要。如果文档每页内容相对独立(如幻灯片),则用 Page 模式。
文本切分(Text Splitting)
文本切分决定了文档被拆分成多大的片段(chunk)存入向量数据库。切分质量直接影响检索精度。
切分器类型
| 切分器 | 计量方式 | 特点 | 适用场景 |
|---|---|---|---|
| 默认(Character) | 按字符数 | 使用递归分隔符(\n\n → \n → 空格 → 字符)逐级切分,简单高效,无依赖 | 英文文档、通用场景 |
| Token | 按 token 数 | 按模型 tokenizer 计算,切分大小与模型上下文窗口精确对齐 | 中文文档(1 个汉字 ≈ 2-3 个 token)、需要精确控制 token 用量 |
核心参数
| 配置项 | 环境变量 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|---|
| Chunk Size | CHUNK_SIZE | 1500 | 1000-2000 | 每个 chunk 的最大大小。太小丢失上下文,太大降低检索精度 |
| Chunk Overlap | CHUNK_OVERLAP | 100 | Chunk Size 的 5%-15% | 相邻 chunk 的重叠量,保证边界处语义连贯 |
参数调优指南:
- Chunk Size 太小(<500):上下文不完整,模型难以理解片段含义
- Chunk Size 太大(>2000):包含过多无关信息,检索精度下降
- Chunk Overlap 太小:重要信息可能被切断在两个 chunk 之间
- Chunk Overlap 太大:存储冗余增加,检索效率降低
Markdown 标题文本分割器
| 配置项 | 默认值 | 说明 |
|---|---|---|
| Markdown Header Text Splitter | 关闭 | 按 Markdown 标题(H1-H6)进行结构化预切分 |
| Chunk Min Size Target | — | 合并过小片段的阈值,建议设为 Chunk Size 的 50% |
启用后,文档会先按 Markdown 标题进行结构化预切分,然后再交给标准切分器处理。好处:
- 保留文档的逻辑结构,每个 chunk 属于明确的章节
- 避免跨章节切分导致语义混乱
- 配合 Chunk Min Size Target 参数,可以将过小的片段向前合并(单向合并算法,不跨文档),官方测试显示阈值设为 1000(chunk size 2000 时)可减少 90%+ 的碎片 chunk
最佳实践:如果文档是 Markdown 格式,或提取引擎输出 Markdown(Docling、MinerU、Marker 都输出 Markdown),强烈建议开启此选项。
嵌入模型(Embedding Model)
嵌入模型将文本转换为向量表示,是 RAG 检索的基础。模型质量直接决定检索准确性。
引擎横向对比
| 引擎 | 配置值 | 费用 | 延迟 | 隐私 | 推荐模型 |
|---|---|---|---|---|---|
| SentenceTransformers(默认) | "" | 免费,本地运行 | 中等(取决于硬件) | 完全本地 | all-MiniLM-L6-v2(轻量)、BAAI/bge-m3(多语言) |
| Ollama | ollama | 免费,本地运行 | 快(已有 Ollama 实例) | 完全本地 | nomic-embed-text(推荐首选)、mxbai-embed-large |
| OpenAI | openai | 按 token 计费 | 低(云端) | 数据发送到云端 | text-embedding-3-small(性价比)、text-embedding-3-large(高精度) |
| Azure OpenAI | azure | 按 token 计费 | 低(云端) | Azure 合规保障 | 同 OpenAI 模型,通过 Azure 部署 |
各引擎详细说明
使用 Python sentence-transformers 库在本地运行,模型自动从 HuggingFace 下载缓存。零成本、完全隐私,但首次加载模型较慢,且占用服务器内存/显存。默认模型 all-MiniLM-L6-v2 较轻量但精度一般。
⚠️ 网络提示:如果服务器无法访问 huggingface.co,启动时会出现 SSL 重连错误,RAG 功能将不可用。可添加镜像站环境变量解决:
1 | environment: |
如果你已经在用 Ollama 跑 LLM,这是最方便的选择。nomic-embed-text 是社区最推荐的模型:8192 token 上下文、完全开源、在 MTEB 和 LoCo 基准上表现优异。
先下载模型:
1 | ollama pull nomic-embed-text |
然后配置环境变量:
1 | environment: |
支持任何 OpenAI 兼容端点(包括第三方)。text-embedding-3-small(1536 维)性价比高,text-embedding-3-large(3072 维)精度更好。缺点是有 API 费用、网络延迟、数据隐私风险。
1 | environment: |
本质上是 OpenAI 模型通过 Azure 托管,适合有 Azure 合规要求的企业。
1 | environment: |
嵌入模型选择建议
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 本地优先、已有 Ollama | Ollama + nomic-embed-text | 最佳平衡,免费、快速、质量好 |
| 资源受限、轻量部署 | SentenceTransformers + all-MiniLM-L6-v2 | 零依赖,内存占用小 |
| 中文文档为主 | Ollama + bge-m3 或 SentenceTransformers + BAAI/bge-m3 | 多语言支持优秀 |
| 追求精度且不介意费用 | OpenAI + text-embedding-3-large | 精度最高 |
| 企业合规要求 | Azure OpenAI | 合规保障 |
其他嵌入参数
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| Embedding Batch Size | RAG_EMBEDDING_BATCH_SIZE | 100 | 批量嵌入大小,显存不足时调小 |
⚠️ 重要:更换嵌入模型后,所有已有文档必须重新嵌入(re-embed),因为不同模型的向量空间不兼容。确定模型后不要轻易更换。
检索与排序(Retrieval & Ranking)
检索参数决定了从向量数据库中召回多少结果、如何过滤和排序。这是影响 RAG 最终效果的关键环节。
核心检索参数
| 配置项 | 环境变量 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|---|
| Top K | TOP_K | 5 | 5-10 | 返回的最相关 chunk 数量。太少可能遗漏信息,太多会稀释上下文 |
| Relevance Threshold | RELEVANCE_THRESHOLD | 0.0 | 0.2-0.5 | 最低相关性分数阈值,低于此分数的 chunk 被过滤。设为 0 表示不过滤 |
参数调优指南:
- Top K 太少(❤️):可能遗漏重要信息,回答不完整
- Top K 太多(>10):包含过多噪音,模型可能被无关内容干扰
- Relevance Threshold 太低(0):不过滤,噪音多
- Relevance Threshold 太高(>0.7):过滤过严,可能丢失有用信息
混合搜索(Hybrid Search)
| 配置项 | 环境变量 | 默认值 | 推荐 | 说明 |
|---|---|---|---|---|
| Hybrid Search | ENABLE_RAG_HYBRID_SEARCH | false | 开启 | 结合向量搜索 + BM25 关键词匹配 |
混合搜索使用 EnsembleRetriever,同时执行:
- 向量搜索:基于语义相似度,擅长理解同义词和语义关联
- BM25 关键词匹配:基于词频统计,擅长精确匹配专有名词、代码、ID 等
两者互补,显著提升召回率,推荐开启。
重排序(Reranking)
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| Reranking Model | RAG_RERANKING_MODEL | — | 使用 CrossEncoder/ColBERT 对检索结果重排序 |
| Top K Reranker | TOP_K_RERANKER | — | 重排序后保留的结果数 |
重排序的工作流程:
- 先通过向量搜索(+ BM25)召回较多候选结果
- 再用 CrossEncoder 模型对每个候选结果与查询进行精细打分
- 按新分数重新排序,保留 Top K Reranker 个最相关结果
推荐配合 Hybrid Search 使用,这是提升 RAG 质量最有效的组合。
检索策略建议
| 文档规模 | 推荐配置 |
|---|---|
| 小文档集(<100 个文档) | Top K=5,不需要混合搜索和重排序 |
| 中等文档集(100-1000) | Top K=5-8,开启 Hybrid Search |
| 大文档集(>1000) | Top K=8-10,开启 Hybrid Search + Reranking,Relevance Threshold=0.2+ |
高级设置
RAG 模板与上下文
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| RAG Template | RAG_TEMPLATE | 内置模板 | 自定义 RAG 提示词模板,控制检索内容如何注入到 LLM prompt |
| RAG System Context | RAG_SYSTEM_CONTEXT | false | 设为 true 将 RAG 上下文放入 system message 而非 user message |
RAG System Context 的作用:将检索到的文档内容放入 system message,而非 user message。好处是在多轮对话中可以优化 KV cache 复用(因为 system message 不变),推荐 Ollama/llama.cpp 用户开启。
异步与性能
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| Async Embedding | ENABLE_ASYNC_EMBEDDING | false | 后台线程池处理嵌入,上传大量文档时建议开启 |
文件与工具
| 配置项 | 默认值 | 说明 |
|---|---|---|
| File Context | 启用 | 控制是否对附件执行 RAG 并预注入内容 |
| Builtin Tools | 启用 | 给模型提供 query_knowledge_bases、search_chats 等函数调用工具 |
网页加载
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| Web Loader SSL Verification | ENABLE_WEB_LOADER_SSL_VERIFICATION | true | 网页加载时是否验证 SSL 证书 |
| Google Drive Integration | GOOGLE_DRIVE_API_KEY 等 | — | Google Drive 文件直接导入 |
向量数据库(Vector Database)
向量数据库用于存储文档的向量表示,是 RAG 检索的底层存储。
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| Vector DB | VECTOR_DB | chromadb | 向量数据库类型 |
| Vector DB URL | VECTOR_DB_URL | — | 外部向量数据库连接地址 |
支持的向量数据库
| 数据库 | 部署方式 | 适用场景 | 特点 |
|---|---|---|---|
| ChromaDB | 内置,无需额外配置 | 个人使用、小团队 | 默认选择,开箱即用 |
| Qdrant | 需部署独立服务 | 大规模部署 | 高性能,支持过滤 |
| Milvus | 需部署独立服务 | 企业环境 | 分布式,支持十亿级向量 |
| Weaviate | 需部署独立服务 | 需要混合搜索 | 内置向量+关键词搜索 |
| OpenSearch | 需部署独立服务 | 已有 OpenSearch 集群 | Elasticsearch 开源替代 |
| PGVector | PostgreSQL 扩展 | 已有 PostgreSQL 环境 | 复用现有数据库 |
| Pinecone | 云端托管 | 云端部署,免运维 | 全托管,按用量计费 |
| S3 Vector | AWS S3 | AWS 生态 | 低成本存储 |
内置数据库,无需任何额外配置,开箱即用。适合个人和小团队。
1 | environment: |
1 | environment: |
1 | environment: |
1 | environment: |
对于大多数用户,ChromaDB 已经足够使用,无需额外配置。
整体最佳实践总结
根据以上所有配置项的分析,以下是推荐的最佳实践组合:
| 配置项 | 推荐值 | 理由 |
|---|---|---|
| 提取引擎 | 根据文档类型选择(见引擎选择建议表) | 复杂 PDF 用 Docling/MinerU/Mistral OCR,简单文档用默认 |
| PDF 加载模式 | Single Document | 语义连贯性优先 |
| 文本切分器 | 中文用 Token,英文用 Character | 中文字符数 ≠ token 数 |
| Chunk Size | 1000-2000 | 平衡上下文完整性和检索精度 |
| Chunk Overlap | Chunk Size 的 10% | 保证边界语义连贯 |
| Markdown 标题切分 | 开启(如果文档是 Markdown) | 保留文档结构,减少碎片 |
| 嵌入模型 | 本地:Ollama + nomic-embed-text | 免费、快速、质量好 |
| Hybrid Search | 开启 | 向量 + 关键词互补,显著提升召回率 |
| Reranking | 配合 Hybrid Search 开启 | 提升精度最有效的组合 |
| Top K | 5-10 | 平衡召回和噪音 |
| Relevance Threshold | 0.2-0.5 | 过滤低质量结果 |
| RAG System Context | true(Ollama 用户) | 优化多轮对话 KV cache |
| 向量数据库 | ChromaDB(默认) | 小团队足够,零配置 |
💡 核心原则:先确定嵌入模型(确定后不要轻易更换),再开启 Hybrid Search + Reranking,最后根据文档类型选择提取引擎。这三步是提升 RAG 质量投入产出比最高的操作。



