agentic_huge_data_base / wiki
页面 Open WebUI · 19.2 知识库管理·DeepWiki 中文全文译文

19.2 · 知识库管理(Knowledge Base Management)

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

项目Open WebUI 章节19.2 状态全文译文 模块工具、记忆与模型调用、界面与交互、系统架构、检索、召回与知识系统
源码线索
  • backend/open_webui/routers/files.py
  • backend/open_webui/routers/knowledge.py
  • scripts/prepare-pyodide.js
  • src/lib/apis/files/index.ts
  • src/lib/components/ImportModal.svelte
  • src/lib/components/admin/Functions/FunctionEditor.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase/Files.svelte
  • src/lib/components/workspace/Prompts/PromptEditor.svelte
  • src/lib/components/workspace/Skills/SkillEditor.svelte
模块标签
  • 工具、记忆与模型调用
  • 界面与交互
  • 系统架构
  • 检索、召回与知识系统
  • 接口与服务契约

中文译文

知识库管理(中文译文)

原始 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.py
  • backend/open_webui/routers/knowledge.py
  • scripts/prepare-pyodide.js
  • src/lib/apis/files/index.ts
  • src/lib/components/ImportModal.svelte
  • src/lib/components/admin/Functions/FunctionEditor.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase.svelte
  • src/lib/components/workspace/Knowledge/KnowledgeBase/Files.svelte
  • src/lib/components/workspace/Prompts/PromptEditor.svelte
  • src/lib/components/workspace/Skills/SkillEditor.svelte
  • src/lib/components/workspace/Tools/ToolkitEditor.svelte
  • static/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-82src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:188-262src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:264-320backend/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-320backend/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-103backend/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-155backend/open_webui/routers/knowledge.py:134-141backend/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-41src/lib/components/workspace/Knowledge/KnowledgeBase.svelte:21-36src/lib/components/workspace/Prompts/PromptEditor.svelte:16-28src/lib/components/workspace/Tools/ToolkitEditor.svelte:8-17