agentic_huge_data_base / wiki
页面 Open WebUI · 13 大语言模型提供方集成·DeepWiki 中文全文译文

13 · 大语言模型提供方集成(LLM Provider Integration)

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

项目Open WebUI 章节13 状态全文译文 模块工具、记忆与模型调用、认证、权限与安全、接口与服务契约、系统架构
源码线索
  • backend/open_webui/routers/ollama.py
  • backend/open_webui/routers/openai.py
  • backend/open_webui/utils/embeddings.py
  • backend/open_webui/utils/misc.py
  • backend/open_webui/utils/payload.py
  • backend/open_webui/utils/response.py
  • src/lib/apis/ollama/index.ts
  • src/lib/apis/openai/index.ts
  • src/lib/components/chat/Settings/Connections.svelte
模块标签
  • 工具、记忆与模型调用
  • 认证、权限与安全
  • 接口与服务契约
  • 系统架构
  • 界面与交互

中文译文

大语言模型提供方集成(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/13-llm-provider-integration
翻译时间:2026-06-09T16:10:58.777Z
翻译模型:deepseek-chat
原文字符数:10479
项目:Open WebUI (open-webui)

---

大语言模型提供方集成

相关源文件

以下文件用于生成此 wiki 页面:

  • backend/open_webui/routers/ollama.py
  • backend/open_webui/routers/openai.py
  • backend/open_webui/utils/embeddings.py
  • backend/open_webui/utils/misc.py
  • backend/open_webui/utils/payload.py
  • backend/open_webui/utils/response.py
  • src/lib/apis/ollama/index.ts
  • src/lib/apis/openai/index.ts
  • src/lib/components/chat/Settings/Connections.svelte

目的与范围

本文档描述 Open WebUI 如何与大型语言模型(LLM)提供商集成,包括 Ollama、OpenAI、Azure OpenAI、Anthropic、Google GenAI 以及其他兼容 OpenAI 的 API。内容涵盖代理架构、配置管理、模型聚合、认证机制和请求路由。

详细技术实现请参见以下子页面:

  • 模型聚合与发现 — 解释模型发现系统,该系统从多个提供商聚合模型,并支持缓存和访问控制。
  • Ollama 集成 — 记录 Ollama 特有的集成,包括负载转换、模型管理和本地部署。
  • OpenAI 集成 — 解释 OpenAI API 集成,包括 Azure OpenAI、Anthropic、Google GenAI、响应流式处理和函数调用。
  • 模型配置与访问 — 记录模型配置选项、参数覆盖、能力标志和访问控制机制。
  • 管道与函数系统 — 解释支持自定义模型实现、入口/出口过滤器和中间件处理的管道/函数系统。

来源backend/open_webui/routers/ollama.py:1-78backend/open_webui/routers/openai.py:1-68

---

架构概述

Open WebUI 作为一个智能代理,位于前端应用与多个 LLM 提供商之间。系统支持多个并发提供商,每个提供商拥有独立的配置、认证和模型目录。

系统架构图
graph TB
    subgraph Frontend["前端 (SvelteKit)"]
        ChatUI["Chat.svelte"]
        ModelSelector["模型选择"]
        ConnectionUI["Connections.svelte"]
    end

    subgraph Backend["后端 (FastAPI)"]
        MainApp["main.py<br/>FastAPI 应用"]

        subgraph Routers["API 路由"]
            OllamaRouter["/ollama/*<br/>ollama.py"]
            OpenAIRouter["/openai/*<br/>openai.py"]
        end

        subgraph ModelMgmt["模型管理"]
            ModelsDB["Models (SQLAlchemy)<br/>models/models.py"]
            AccessGrants["AccessGrants<br/>models/access_grants.py"]
        end

        subgraph Utils["负载与响应工具"]
            PayloadHandler["apply_model_params_to_body<br/>utils/payload.py"]
            ResponseHandler["normalize_usage<br/>utils/response.py"]
            EmbedUtils["generate_embeddings<br/>utils/embeddings.py"]
        end
    end

    subgraph Providers["LLM 提供商"]
        Ollama["Ollama 服务器<br/>OLLAMA_BASE_URLS"]
        OpenAI["OpenAI API<br/>OPENAI_API_BASE_URLS"]
        Azure["Azure OpenAI"]
        Anthropic["Anthropic API"]
    end

    ChatUI --> ModelSelector
    ModelSelector --> MainApp
    ConnectionUI --> OpenAIRouter

    MainApp --> OllamaRouter
    MainApp --> OpenAIRouter

    OllamaRouter --> PayloadHandler
    OpenAIRouter --> PayloadHandler

    PayloadHandler --> Providers
    Providers --> ResponseHandler
    EmbedUtils --> OllamaRouter
    EmbedUtils --> OpenAIRouter

    ModelsDB --> MainApp
    AccessGrants --> OpenAIRouter

来源backend/open_webui/routers/ollama.py:217-230backend/open_webui/routers/openai.py:321-340backend/open_webui/utils/embeddings.py:24-41src/lib/components/chat/Settings/Connections.svelte:102-127

---

提供商配置

Open WebUI 通过灵活的配置系统支持多个 LLM 提供商。每个提供商可以同时配置多个端点,并指定特定的认证类型。

配置状态管理

应用将提供商配置存储在后台状态中,可通过设置 UI 进行更新。

配置键类型描述
ENABLE_OLLAMA_APIbool启用/禁用 Ollama 集成
OLLAMA_BASE_URLSlist[str]Ollama 服务器 URL 列表
ENABLE_OPENAI_APIbool启用/禁用兼容 OpenAI 的 API
OPENAI_API_BASE_URLSlist[str]兼容 OpenAI 的 API URL 列表
OPENAI_API_CONFIGSdict每个 URL 的配置(auth_type、headers)

来源src/lib/apis/openai/index.ts:35-40src/lib/apis/ollama/index.ts:65-69src/lib/components/chat/Settings/Connections.svelte:62-67

OpenAI 认证类型

OpenAI 路由通过 get_headers_and_cookies 支持多种认证方法:

  • bearer(默认):在 Authorization: Bearer <key> 头中使用 API 密钥。backend/open_webui/routers/openai.py:187-189
  • none:无需认证。backend/open_webui/routers/openai.py:190-191
  • session:转发用户会话 cookie。backend/open_webui/routers/openai.py:192-194
  • system_oauth:使用 Open WebUI 的内部 OAuth 管理器获取令牌。backend/open_webui/routers/openai.py:195-210
  • azure_ad / microsoft_entra_id:使用 Microsoft Entra ID 访问令牌访问 Azure OpenAI 服务。backend/open_webui/routers/openai.py:211-212

来源backend/open_webui/routers/openai.py:158-221

---

模型聚合与发现

系统将所有已启用提供商的模型聚合到一个统一目录中。这包括从 Ollama 获取标签和从兼容 OpenAI 的端点获取模型。

  • Ollama 发现:从 /api/tags 获取模型。src/lib/apis/ollama/index.ts:205-239
  • OpenAI 发现:从每个已配置 URL 的 /models 端点获取模型。src/lib/apis/openai/index.ts:238-266
  • 直接发现:如果配置了 CORS,前端可以直接查询提供商。src/lib/apis/openai/index.ts:211-236

详情请参见模型聚合与发现

---

代理架构与负载转换

Open WebUI 实现了一个代理架构,拦截请求以应用模型参数并处理提供商特定的逻辑。

负载转换逻辑
graph LR
    subgraph Input["请求输入"]
        Params["用户参数<br/>(temp、top_p 等)"]
        SysPrompt["系统提示"]
        Messages["聊天消息"]
    end

    subgraph Logic["backend/open_webui/utils/payload.py"]
        ApplySysPrompt["apply_system_prompt_to_body"]
        RemoveWebUIParams["remove_open_webui_params"]
        OpenAIMap["apply_model_params_to_body_openai"]
        OllamaMap["apply_model_params_to_body_ollama"]
    end

    subgraph Output["提供商负载"]
        OllamaOut["Ollama JSON<br/>(options: {...})"]
        OpenAIOut["OpenAI JSON<br/>(顶级键)"]
    end

    Messages --> ApplySysPrompt
    SysPrompt --> ApplySysPrompt
    ApplySysPrompt --> RemoveWebUIParams
    Params --> RemoveWebUIParams
    RemoveWebUIParams --> OpenAIMap
    RemoveWebUIParams --> OllamaMap
    OpenAIMap --> OpenAIOut
    OllamaMap --> OllamaOut
  • 系统提示应用apply_system_prompt_to_body 函数在请求体中注入或替换系统消息,支持模板变量。backend/open_webui/utils/payload.py:16-40
  • OpenAI 转换apply_model_params_to_body_openai 函数将 temperaturemax_tokens 等参数直接映射到 JSON 体的根级别。backend/open_webui/utils/payload.py:86-117
  • Ollama 转换apply_model_params_to_body_ollama 函数将参数移入 options 字典,并重命名某些键(例如 max_tokens 变为 num_predict)。backend/open_webui/utils/payload.py:120-197
  • 推理模型openai_reasoning_model_handler 函数处理 o1 模型的特定逻辑,例如将 max_tokens 转换为 max_completion_tokens 并调整角色。backend/open_webui/routers/openai.py:137-155

来源backend/open_webui/utils/payload.py:1-197backend/open_webui/routers/openai.py:137-155

---

响应标准化

为确保前端能够统一处理来自不同提供商的响应,后端标准化了使用统计和消息格式。

  • 使用统计标准化normalize_usage 函数将提供商特定的字段(如 Ollama 的 prompt_eval_count 或 OpenAI 的 prompt_tokens)映射到标准的 input_tokensoutput_tokenstotal_tokens 字段。backend/open_webui/utils/response.py:11-49
  • 格式转换:Ollama 响应通过 convert_response_ollama_to_openai(非流式)和 convert_streaming_response_ollama_to_openai(流式)转换为兼容 OpenAI 的格式。backend/open_webui/utils/response.py:116-172
  • 嵌入转换convert_embedding_response_ollama_to_openai 函数处理从 Ollama 的 /api/embed/api/embeddings 返回的嵌入响应到 OpenAI 格式的转换。backend/open_webui/utils/response.py:177-200

来源backend/open_webui/utils/response.py:11-200

---

管道与函数系统

管道系统支持高级集成,例如自定义模型实现和中间件过滤器。

  • 入口/出口过滤器:处理请求/响应体。
  • 自定义模型:自定义 Python 函数可以暴露为 LLM 模型。
  • 嵌入分发generate_embeddings 工具根据模型的所有权将请求分发到 Ollama 或 OpenAI 后端。backend/open_webui/utils/embeddings.py:24-88

详情请参见管道与函数系统

来源backend/open_webui/utils/embeddings.py:74-88