知识库管理(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/19.2-knowledge-base-management
翻译时间:2026-06-09T16:12:30.008Z
翻译模型:deepseek-chat
原文字符数:8355
项目:Open WebUI (open-webui)
---
知识库管理
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
backend/open_webui/routers/files.pybackend/open_webui/routers/knowledge.pyscripts/prepare-pyodide.jssrc/lib/apis/files/index.tssrc/lib/components/ImportModal.sveltesrc/lib/components/admin/Functions/FunctionEditor.sveltesrc/lib/components/workspace/Knowledge/KnowledgeBase.sveltesrc/lib/components/workspace/Knowledge/KnowledgeBase/Files.sveltesrc/lib/components/workspace/Prompts/PromptEditor.sveltesrc/lib/components/workspace/Skills/SkillEditor.sveltesrc/lib/components/workspace/Tools/ToolkitEditor.sveltestatic/pyodide/pyodide-lock.json
Open WebUI 中的知识库管理提供了一个集中式系统,用于组织、处理和保护用于检索增强生成(RAG)的文档集合。它允许用户创建文件、网页内容和文本数据的逻辑分组,这些分组可以附加到模型上,以提供特定领域的上下文。
知识库架构
知识库系统构建于多层架构之上,包括前端 Svelte 组件、FastAPI 后端路由以及跨越关系型数据库(SQL)和向量数据库的持久化层。
系统数据流:内容摄取
当用户向知识库添加内容时,数据会流经多个处理和元数据嵌入阶段。
"知识摄取管道"
graph TD
User["用户界面"] -->|上传/链接| FE["KnowledgeBase.svelte"]
FE -->|POST /files/| FR["files.py:upload_file"]
FE -->|POST /retrieval/process/web| RR["retrieval.py:process_web"]
FR -->|存储文件| Storage["存储提供者"]
RR -->|抓取内容| Extraction["内容提取"]
FE -->|POST /knowledge/{id}/files/add| KR["knowledge.py:add_file_to_knowledge"]
KR -->|更新数据库| DB[("SQL 数据库: Knowledges 表")]
KR -->|触发任务| VectorDB["ASYNC_VECTOR_DB_CLIENT"]
subgraph "元数据嵌入"
KR -->|embed_knowledge_base_metadata| EF["request.app.state.EMBEDDING_FUNCTION"]
EF -->|Upsert| VectorDB
end
来源:backend/open_webui/routers/knowledge.py:59-82、src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:188-262、src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:264-320、backend/open_webui/routers/files.py:177-197
核心组件与工作流
1. 知识库创建与元数据
用户通过 KnowledgeBase.svelte 组件创建知识库。每个知识库包含名称、描述和唯一标识符。创建时,系统会为知识库元数据(名称和描述)生成嵌入向量,以便对集合本身进行语义发现。
- 关键函数:
embed_knowledge_base_metadata生成知识库用途的向量表示,并将其存储在向量数据库的knowledge-bases集合中。backend/open_webui/routers/knowledge.py:59-82 - 存储:文件与知识库之间的逻辑关系通过
Knowledges模型存储在 SQL 数据库中。backend/open_webui/routers/knowledge.py:14-20
2. 文件与内容管理
KnowledgeBase.svelte 组件是管理特定集合内内容的主要编排器。它支持三种主要的摄取路径:
| 方法 | 实现 | 描述 |
|---|---|---|
| 文件上传 | uploadFileHandler | 通过 uploadFile API 将本地文件上传到后端存储,并在 Files 表中注册。src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:264-320、backend/open_webui/routers/files.py:177-197 |
| 网页抓取 | uploadWeb | 通过 processWeb 处理 URL,提取内容,并通过 createFileFromText 创建虚拟文本文件。src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:188-262 |
| 文本片段 | createFileFromText | 使用 blobToFile 将 UI 中的原始文本输入转换为 .txt 文件 blob 以供处理。src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:180-186 |
3. 集合组织
文件通过 addFileToKnowledgeById API 与知识库关联。后端路由 knowledge.py 管理这些关联,并提供在特定知识库内的搜索能力。
- 搜索与过滤:
search_knowledge_files端点支持对属于特定集合的文件进行分页、过滤搜索。backend/open_webui/routers/knowledge.py:215-235 - 文件状态跟踪:前端跟踪上传和处理状态。如果文件处于 'uploading' 状态,则显示
Spinner;否则,Open file按钮链接到内容端点。src/lib/components/workspace/Knowledge/KnowledgeBase/Files.svelte:37-53
访问控制与安全
知识库使用"访问授权"实现细粒度的基于角色的访问控制(RBAC)系统。这允许所有者与特定用户或组共享集合,并设置不同的权限级别。
权限级别
- 读取:允许用户查看知识库并在聊天中使用。
- 写入:允许用户添加/删除文件以及修改元数据。
backend/open_webui/routers/knowledge.py:101-103、backend/open_webui/routers/knowledge.py:134-141
"访问控制逻辑"
graph LR
User["用户请求"] --> Auth["get_verified_user"]
Auth --> CheckAdmin{"是否为管理员?"}
CheckAdmin -->|是| Bypass["BYPASS_ADMIN_ACCESS_CONTROL"]
CheckAdmin -->|否| AG["AccessGrants.get_accessible_resource_ids"]
AG --> DB_Lookup[("SQL 数据库: access_grants")]
DB_Lookup --> Filter["过滤: resource_type='knowledge'"]
Filter --> Result["可写入/可读取的 ID 列表"]
来源:backend/open_webui/routers/knowledge.py:121-155、backend/open_webui/routers/knowledge.py:134-141、backend/open_webui/config.py:51-51
工作区集成
知识库已集成到更广泛的工作区生态系统中,包括模型、工具和提示词。
1. 模型附加
知识库可以附加到模型定义中。当使用模型时,系统会检查模型元数据中附加的知识库 ID。模型本身会根据用户访问权限进行过滤。backend/open_webui/routers/knowledge.py:38-38
2. 知识库搜索
后端为知识库及其内部文件提供了专用的搜索端点,支持通过 PAGE_ITEM_COUNT 进行分页。
- 知识库搜索:
search_knowledge_bases处理查询和视图选项。backend/open_webui/routers/knowledge.py:159-212 - 文件搜索:
search_knowledge_files支持在集合中查找特定文档。backend/open_webui/routers/knowledge.py:215-235
"工作区实体关系"
graph TD
Knowledge["知识库 (Knowledges)"] ---|附加到| Model["模型 (Models)"]
Knowledge ---|访问控制由| AG["AccessGrants"]
Model ---|使用| Tool["工具 (Tools)"]
Prompt["提示词 (Prompts)"] ---|使用| Knowledge
subgraph "工作区实体"
K_DB[("SQL: knowledge")]
M_DB[("SQL: models")]
T_DB[("SQL: tools")]
P_DB[("SQL: prompts")]
end
来源:backend/open_webui/routers/knowledge.py:14-41、src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:21-36、src/lib/components/workspace/Prompts/PromptEditor.svelte:16-28、src/lib/components/workspace/Tools/ToolkitEditor.svelte:8-17