agentic_huge_data_base / wiki
页面 Open WebUI · 13.5 Pipeline 与 Function 系统·DeepWiki 中文全文译文

13.5 · Pipeline 与 Function 系统(Pipeline and Function System)

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

项目Open WebUI 章节13.5 状态全文译文 模块工具、记忆与模型调用、接口与服务契约、界面与交互、频道、笔记与协作
源码线索
  • backend/open_webui/functions.py
  • backend/open_webui/migrations/versions/c1d2e3f4a5b6_add_shared_chat_table.py
  • backend/open_webui/models/functions.py
  • backend/open_webui/models/shared_chats.py
  • backend/open_webui/models/tags.py
  • backend/open_webui/routers/functions.py
  • backend/open_webui/routers/terminals.py
  • backend/open_webui/utils/access_control/__init__.py
  • backend/open_webui/utils/access_control/files.py
  • backend/open_webui/utils/chat.py
模块标签
  • 工具、记忆与模型调用
  • 接口与服务契约
  • 界面与交互
  • 频道、笔记与协作
  • 认证、权限与安全

中文译文

管线与 Function 系统(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/13.5-pipeline-and-function-system
翻译时间:2026-06-09T16:11:18.128Z
翻译模型:deepseek-chat
原文字符数:10822
项目:Open WebUI (open-webui)

---

管道与函数系统

相关源文件

以下文件为本 Wiki 页面的生成提供了上下文:

  • backend/open_webui/functions.py
  • backend/open_webui/migrations/versions/c1d2e3f4a5b6_add_shared_chat_table.py
  • backend/open_webui/models/functions.py
  • backend/open_webui/models/shared_chats.py
  • backend/open_webui/models/tags.py
  • backend/open_webui/routers/functions.py
  • backend/open_webui/routers/terminals.py
  • backend/open_webui/utils/access_control/__init__.py
  • backend/open_webui/utils/access_control/files.py
  • backend/open_webui/utils/chat.py
  • backend/open_webui/utils/filter.py
  • backend/open_webui/utils/models.py
  • backend/open_webui/utils/plugin.py
  • src/lib/components/admin/Functions.svelte
  • src/lib/components/chat/FileNav/PortList.svelte
  • src/lib/components/chat/FileNav/PortPreview.svelte
  • src/lib/components/chat/XTerminal.svelte
  • src/lib/components/workspace/Knowledge.svelte
  • src/lib/components/workspace/Models.svelte
  • src/lib/components/workspace/Prompts.svelte
  • src/lib/components/workspace/Tools.svelte

Open WebUI 中的管道与函数系统提供了一个模块化框架,用于扩展平台能力。它支持自定义模型实现(Manifold/Pipe)、请求/响应转换(Inlet/Outlet 过滤器)以及高级工具执行。该系统允许开发者将任意逻辑——从外部 API 调用到复杂的内容过滤——直接集成到聊天生命周期中。

系统架构

该系统基于插件架构构建,Python 模块在 FastAPI 后端中被加载和执行。这些模块可以是"函数"(存储在数据库中并在本地执行)或"管道"(托管在独立的管道服务器上)。

核心组件与代码实体

图表:管道与函数系统实体

graph TD
    subgraph "自然语言空间"
        User["用户/开发者"]
        CustomLogic["自定义逻辑/扩展"]
    end

    subgraph "代码实体空间(后端)"
        FunctionsModel["Functions (backend/open_webui/models/functions.py)"]
        PluginUtil["插件加载器 (backend/open_webui/utils/plugin.py)"]
        FilterUtil["过滤器处理器 (backend/open_webui/utils/filter.py)"]
        FunctionsRouter["Functions 路由 (backend/open_webui/routers/functions.py)"]
        ChatUtil["聊天工具 (backend/open_webui/utils/chat.py)"]
    end

    subgraph "外部空间"
        PipeServer["管道服务器(外部 Python 进程)"]
    end

    User -->|创建/管理| FunctionsModel
    FunctionsModel -->|由...加载| PluginUtil
    ChatUtil -->|调用| FilterUtil
    FilterUtil -->|执行| PluginUtil
    FunctionsRouter -->|管理| FunctionsModel
    ChatUtil -->|使用| FunctionsRouter
    FunctionsRouter -->|代理到| PipeServer

来源:backend/open_webui/utils/chat.py:34-51backend/open_webui/utils/plugin.py:11-20backend/open_webui/models/functions.py:21-37backend/open_webui/routers/functions.py:10-31

函数类型

函数根据其在系统中的角色进行分类。它们定义在 Function 数据库模型中,并通过 FunctionsTable 类动态加载。

类型代码标识符用途实现点
过滤器filter拦截请求(Inlet)和响应(Outlet)。process_filter_functions backend/open_webui/utils/filter.py:66-134
动作action为消息添加用于特定任务的 UI 按钮。get_functions_by_type('action') backend/open_webui/models/functions.py:230
管道pipe定义自定义模型或模型提供商。generate_function_chat_completion backend/open_webui/functions.py:153-191

来源:backend/open_webui/utils/chat.py:34-37backend/open_webui/utils/models.py:133-138backend/open_webui/functions.py:77-150backend/open_webui/models/functions.py:110-126

过滤器管道(Inlet 和 Outlet)

过滤器是中间件处理的主要机制。它们包裹了标准的 LLM 请求/响应周期。

执行流程

当通过 generate_chat_completion backend/open_webui/utils/chat.py:158 请求聊天补全时,系统遵循严格的顺序:

  1. Inlet 过滤器: 在请求发送到 LLM 提供商之前,由 process_filter_functions backend/open_webui/utils/filter.py:66filter_type='inlet' 执行。
  2. LLM 处理: 请求被转发到 OpenAI、Ollama 或自定义 Pipe。
  3. Outlet 过滤器: 在 LLM 返回响应之后、到达用户之前,由 process_filter_functions backend/open_webui/utils/filter.py:66filter_type='outlet' 执行。

图表:过滤器中间件序列

sequenceDiagram
    participant U as "用户(前端)"
    participant M as "generate_chat_completion (backend/open_webui/utils/chat.py)"
    participant F as "process_filter_functions (backend/open_webui/utils/filter.py)"
    participant L as "LLM 提供商 (OpenAI/Ollama/Pipe)"

    U->>M: "发送消息"
    M->>F: "process_filter_functions (inlet)"
    Note over F: "执行所有活跃的 Filter.inlet() 方法"
    F-->>M: "修改后的负载"
    M->>L: "生成响应"
    L-->>M: "原始响应"
    M->>F: "process_filter_functions (outlet)"
    Note over F: "执行所有活跃的 Filter.outlet() 方法"
    F-->>M: "修改后的响应"
    M-->>U: "最终消息"

来源:backend/open_webui/utils/chat.py:158-164backend/open_webui/utils/chat.py:34-37backend/open_webui/utils/filter.py:66-134

过滤器实现

过滤器函数必须实现一个名为 Filter 的类,并包含 inlet 和/或 outlet 方法。这些方法接收请求 body__user__ 对象。

系统使用 get_sorted_filter_ids backend/open_webui/utils/filter.py:21-61 根据函数 Valves 中定义的 priority 值确定执行顺序。

# backend/open_webui/utils/filter.py 逻辑
async def process_filter_functions(request, filter_functions, filter_type, form_data, extra_params):
    for function in filter_functions:
        # ... 加载模块并检查处理程序(inlet/outlet)的逻辑
        handler = getattr(function_module, filter_type, None)
        # ... 使用检查过的签名参数执行处理程序
        form_data = await handler(**params)
    return form_data, {}

来源:backend/open_webui/utils/filter.py:21-31backend/open_webui/utils/filter.py:66-134

Manifold 和 Pipe 系统

Manifold 系统允许开发者创建自定义模型提供商。这用于集成原生不支持的模型,或创建包装其他逻辑的"虚拟"模型。

关键函数
  • get_function_models:通过检查 pipepipes 属性,发现函数中定义的模型。backend/open_webui/functions.py:77-150
  • generate_function_chat_completion:将聊天请求路由到函数的自定义 pipe 方法,处理标准和流式响应。backend/open_webui/functions.py:153-191
模型发现

通过 Manifold 系统创建的模型与 Ollama 和 OpenAI 模型一起在 get_all_models backend/open_webui/utils/models.py:80-131 中聚合。函数可以定义一个包含 pipes 属性的 Pipe 类,该属性可以是子管道列表,也可以是返回此类列表的可调用对象。

来源:backend/open_webui/utils/models.py:73-77backend/open_webui/utils/models.py:176-192backend/open_webui/functions.py:77-150

工作区集成

前端在"工作区"部分提供了管理这些实体的界面。

  • 函数管理:src/lib/components/admin/Functions.svelte src/lib/components/admin/Functions.svelte:1-44 处理。允许管理员创建、删除和切换过滤器与动作的全局状态。
  • 模型配置: src/lib/components/workspace/Models.svelte src/lib/components/workspace/Models.svelte:1-52 管理模型设置,包括将特定的 filterIdsactionIds 与自定义模型关联。
  • 工具管理: src/lib/components/workspace/Tools.svelte src/lib/components/workspace/Tools.svelte:1-40 允许用户管理函数可以利用的工具包。

来源:src/lib/components/admin/Functions.svelte:10-20src/lib/components/workspace/Models.svelte:16-23src/lib/components/workspace/Tools.svelte:12-20

安全与访问控制

  • 管理员控制: 函数可以设置为 is_global,应用于所有用户,或进行限制。backend/open_webui/models/functions.py:32
  • 绕过: 可以通过 BYPASS_MODEL_ACCESS_CONTROL 等环境变量绕过模型访问控制。backend/open_webui/env.py:33
  • Valves: 函数使用"Valves"系统进行配置。resolve_valves_schema_options backend/open_webui/utils/plugin.py:23-144 函数允许在 UI 中提供动态选项(例如通过函数调用填充的下拉列表)。

图表:Valves 模式解析

graph TD
    A[函数模块] --> B{Valves 类定义};
    B --> C[Pydantic BaseModel];
    C --> D{带有 json_schema_extra 的字段};
    D --> E{input.options: 列表或方法名};

    E -- "列表" --> F[直接用作选项];
    E -- "方法名(字符串)" --> G{在 Valves 类上调用方法};
    G -- "接受 __user__ 参数" --> H[传递用户数据];
    G --> I[返回选项列表];

    I --> J[模式中解析后的选项];
    F --> J;

    J --> K["前端 UI(例如 ValvesModal.svelte)"];

来源:backend/open_webui/utils/plugin.py:23-144backend/open_webui/models/functions.py:30-32backend/open_webui/utils/models.py:25-34