agentic_huge_data_base / wiki
页面 Open WebUI · 6 后端处理管线·DeepWiki 中文全文译文

6 · 后端处理管线(Backend Processing Pipeline)

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

项目Open WebUI 章节6 状态全文译文 模块工具、记忆与模型调用、接口与服务契约、系统架构、检索、召回与知识系统
源码线索
  • backend/open_webui/config.py
  • backend/open_webui/env.py
  • backend/open_webui/main.py
  • backend/open_webui/routers/auths.py
  • backend/open_webui/tools/builtin.py
  • backend/open_webui/utils/auth.py
  • backend/open_webui/utils/middleware.py
  • backend/open_webui/utils/oauth.py
  • backend/open_webui/utils/tools.py
  • src/lib/components/workspace/Models/BuiltinTools.svelte
模块标签
  • 工具、记忆与模型调用
  • 接口与服务契约
  • 系统架构
  • 检索、召回与知识系统
  • 界面与交互

中文译文

后端处理管线(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/6-backend-processing-pipeline
翻译时间:2026-06-09T16:08:41.834Z
翻译模型:deepseek-chat
原文字符数:9540
项目:Open WebUI (open-webui)

---

后端处理流水线

相关源文件

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

  • backend/open_webui/config.py
  • backend/open_webui/env.py
  • backend/open_webui/main.py
  • backend/open_webui/routers/auths.py
  • backend/open_webui/tools/builtin.py
  • backend/open_webui/utils/auth.py
  • backend/open_webui/utils/middleware.py
  • backend/open_webui/utils/oauth.py
  • backend/open_webui/utils/tools.py
  • src/lib/components/workspace/Models/BuiltinTools.svelte

目的与范围

本文档记录了处理 AI 聊天请求的后端中间件和请求处理流水线,涵盖从初始接收到响应流式传输的完整流程。该流水线协调工具执行、RAG 上下文注入、过滤器处理和响应格式化。

---

请求流程概览

后端处理流水线通过多阶段中间件流水线将用户聊天请求转换为 AI 响应。请求通过 FastAPI 路由器进入,经过过滤器和预处理,按需执行工具,集成 RAG 上下文,并将响应流式传输回客户端。

高层请求流程
graph TD
    Client["客户端请求"]
    Router["FastAPI 路由器<br/>(routers/openai.py, routers/ollama.py)"]
    ChatGen["generate_chat_completion<br/>(utils/chat.py)"]
    Middleware["中间件流水线<br/>(utils/middleware.py)"]
    InletFilter["入口过滤器<br/>(utils/filter.py)"]
    RAG["RAG 处理<br/>(apply_source_context_to_messages)"]
    ToolExec["工具执行<br/>(get_tools, execute tools)"]
    Provider["AI 提供商<br/>(OpenAI/Ollama API)"]
    OutletFilter["出口过滤器"]
    Response["流式响应"]

    Client --> Router
    Router --> ChatGen
    ChatGen --> Middleware
    Middleware --> InletFilter
    InletFilter --> RAG
    RAG --> ToolExec
    ToolExec --> Provider
    Provider --> OutletFilter
    OutletFilter --> Response
    Response --> Client

    ToolExec -.->|"工具调用需要<br/>多次迭代"| Provider

来源: backend/open_webui/utils/middleware.py:1-141, backend/open_webui/utils/chat.py:78-78

---

核心中间件组件

中间件流水线主要在 utils/middleware.py 中实现,负责编排整个请求处理流程。主要入口点是路由器的聊天补全端点,该端点将工作委托给 generate_chat_completion

中间件入口点
入口点位置用途
/v1/chat/completionsrouters/openai.pyOpenAI 兼容的聊天端点
/api/chatrouters/ollama.pyOllama 兼容的聊天端点
generate_chat_completionutils/chat.py主要中间件编排器

来源: backend/open_webui/utils/chat.py:78-78, backend/open_webui/main.py:82-83

---

请求预处理流水线

在到达 AI 提供商之前,请求会经过多个预处理阶段,这些阶段应用转换、注入上下文并执行过滤器。

预处理阶段
graph LR
    Request["原始请求"]
    ModelSelect["模型选择<br/>(Models.get_model_by_id)"]
    InletPipe["流水线入口过滤器<br/>(process_pipeline_inlet_filter)"]
    InletFunc["函数过滤器<br/>(process_filter_functions)"]
    SysPrompt["系统提示应用<br/>(apply_system_prompt_to_body)"]
    VarSub["变量替换<br/>(prompt_template)"]
    Params["模型参数应用<br/>(apply_model_params_to_body)"]

    Request --> ModelSelect
    ModelSelect --> InletPipe
    InletPipe --> InletFunc
    InletFunc --> SysPrompt
    SysPrompt --> VarSub
    VarSub --> Params
关键预处理函数
函数位置用途
apply_system_prompt_to_bodyutils/middleware.py:115将系统提示注入消息
process_filter_functionsutils/filter.py:112按优先级顺序应用过滤器函数
process_pipeline_inlet_filterutils/middleware.py:56处理自定义流水线的入口过滤器

来源: backend/open_webui/utils/middleware.py:115, backend/open_webui/utils/filter.py:110-113

---

工具执行流水线

中间件实现了一个复杂的工具调用系统,支持原生函数调用、工具重试和结果处理。工具被发现、验证、执行,其结果被注入回对话中。

工具发现与加载
graph TD
    ToolRequest["来自请求的工具 ID"]
    GetTools["get_tools<br/>(utils/tools.py)"]
    BuiltinTools["get_builtin_tools<br/>(utils/tools.py)"]
    LoadLocal["加载本地工具<br/>(utils/plugin.py)"]
    LoadServer["加载工具服务器规范<br/>(utils/plugin.py)"]
    ToolDict["tools_dict<br/>{name: {callable, spec, metadata}}"]

    ToolRequest --> GetTools
    GetTools --> LoadLocal
    GetTools --> LoadServer
    GetTools --> BuiltinTools
    LoadLocal --> ToolDict
    LoadServer --> ToolDict
    BuiltinTools --> ToolDict

来源: backend/open_webui/utils/tools.py:164-210, backend/open_webui/utils/middleware.py:48, backend/open_webui/utils/plugin.py:109

工具执行流程

中间件通过一个重试循环执行工具,该循环处理流式响应、工具调用和错误恢复。

sequenceDiagram
    participant MW as 中间件
    participant Provider as AI 提供商
    participant ToolExec as 工具执行器

    MW->>Provider: 发送带工具的请求
    Provider-->>MW: 带 tool_calls 的响应

    loop 对于每个 tool_call
        MW->>ToolExec: 执行工具(name, params)
        ToolExec-->>MW: 格式化结果
        MW->>MW: 构建工具消息
    end

    MW->>MW: 检查重试次数<br/>(最大: CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES)

    alt 需要更多工具调用
        MW->>Provider: 发送带工具结果的请求
    else 最终响应
        MW-->>MW: 返回给客户端
    end

来源: backend/open_webui/utils/middleware.py:132, backend/open_webui/env.py:132

---

响应流式传输架构

中间件处理增量更新,并在流式传输过程中识别特定标签(用于推理和代码执行),以正确分类输出部分。

推理与内容标签

系统使用 DEFAULT_REASONING_TAGS 来识别模型输出中的思考过程。

标签类型标签
推理<think>, <thinking>, <reason>, <thought>, `<begin_of_thought>`
解决方案`<begin_of_solution>, <end_of_solution>`
代码解释器<code_interpreter>, </code_interpreter>

来源: backend/open_webui/utils/middleware.py:153-165

---

RAG 上下文注入

当启用 RAG 时,中间件会查询知识库,并使用 retrieval/utils.py 中的工具函数将相关上下文注入到消息列表中。

RAG 处理流程
graph LR
    UserMsg["用户消息"]
    Query["查询知识库<br/>(query_memory/query_knowledge_bases)"]
    Extract["提取来源<br/>(get_sources_from_items)"]
    Inject["注入到消息中<br/>(rag_template)"]

    UserMsg --> Query
    Query --> Extract
    Extract --> Inject

来源: backend/open_webui/retrieval/utils.py:74-74, backend/open_webui/utils/middleware.py:74, backend/open_webui/utils/task.py:81-81

---

工具结果处理

工具结果需要针对不同的返回类型进行特殊处理。系统将这些格式规范化,为 LLM 提供一致的接口。

结果类型处理方式
JSON 对象_split_tool_calls 展开来自模型的拼接 JSON 参数
引用get_citation_source_from_tool_result 解析结果以供显示
MCP 内容通过 MCPClient 集成处理

来源: backend/open_webui/utils/middleware.py:172-218, backend/open_webui/utils/middleware.py:221-223, backend/open_webui/utils/middleware.py:117

---

配置参考

关键环境变量和 PersistentConfig 设置控制中间件行为。

变量默认值用途
CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES30最大工具调用迭代次数
CHAT_RESPONSE_STREAM_DELTA_CHUNK_SIZE1流式传输的块大小
ENABLE_CHAT_RESPONSE_BASE64_IMAGE_URL_CONVERSIONFalse将 base64 图片转换为 URL
RAG_SYSTEM_CONTEXTFalse将 RAG 上下文作为系统消息还是用户消息注入
ENABLE_RESPONSES_API_STATEFULFalse启用响应对象的有状态跟踪

来源: backend/open_webui/env.py:130-141, backend/open_webui/config.py:214-231