大语言模型提供方集成(中文译文)
原始 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.pybackend/open_webui/routers/openai.pybackend/open_webui/utils/embeddings.pybackend/open_webui/utils/misc.pybackend/open_webui/utils/payload.pybackend/open_webui/utils/response.pysrc/lib/apis/ollama/index.tssrc/lib/apis/openai/index.tssrc/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-78,backend/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-230,backend/open_webui/routers/openai.py:321-340,backend/open_webui/utils/embeddings.py:24-41,src/lib/components/chat/Settings/Connections.svelte:102-127
---
提供商配置
Open WebUI 通过灵活的配置系统支持多个 LLM 提供商。每个提供商可以同时配置多个端点,并指定特定的认证类型。
配置状态管理
应用将提供商配置存储在后台状态中,可通过设置 UI 进行更新。
| 配置键 | 类型 | 描述 |
|---|---|---|
ENABLE_OLLAMA_API | bool | 启用/禁用 Ollama 集成 |
OLLAMA_BASE_URLS | list[str] | Ollama 服务器 URL 列表 |
ENABLE_OPENAI_API | bool | 启用/禁用兼容 OpenAI 的 API |
OPENAI_API_BASE_URLS | list[str] | 兼容 OpenAI 的 API URL 列表 |
OPENAI_API_CONFIGS | dict | 每个 URL 的配置(auth_type、headers) |
来源:src/lib/apis/openai/index.ts:35-40,src/lib/apis/ollama/index.ts:65-69,src/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-189none:无需认证。backend/open_webui/routers/openai.py:190-191session:转发用户会话 cookie。backend/open_webui/routers/openai.py:192-194system_oauth:使用 Open WebUI 的内部 OAuth 管理器获取令牌。backend/open_webui/routers/openai.py:195-210azure_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函数将temperature和max_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-197,backend/open_webui/routers/openai.py:137-155
---
响应标准化
为确保前端能够统一处理来自不同提供商的响应,后端标准化了使用统计和消息格式。
- 使用统计标准化:
normalize_usage函数将提供商特定的字段(如 Ollama 的prompt_eval_count或 OpenAI 的prompt_tokens)映射到标准的input_tokens、output_tokens和total_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