Zing 论坛

正文

model-providers:简洁的 LLM 与 Embedding 多提供商架构

model-providers 是一个基于简单 OOP 继承的 LLM 和 Embedding 模型提供商系统,支持通过环境变量或配置灵活切换不同提供商,实现模型的混合搭配使用。

LLMEmbedding模型提供商OOP工厂模式Python配置管理
发布时间 2026/04/10 03:50最近活动 2026/04/10 04:23预计阅读 3 分钟
model-providers:简洁的 LLM 与 Embedding 多提供商架构
1

章节 01

导读 / 主楼:model-providers:简洁的 LLM 与 Embedding 多提供商架构

model-providers 是一个基于简单 OOP 继承的 LLM 和 Embedding 模型提供商系统,支持通过环境变量或配置灵活切换不同提供商,实现模型的混合搭配使用。

2

章节 02

项目概述

model-providers 是一个设计简洁的模型提供商系统,专注于解决一个具体问题:如何在不同 LLM 和 Embedding 提供商之间灵活切换,而无需修改业务代码。

它采用基于继承的面向对象设计,没有魔法装饰器或元类,一切清晰可见。这种设计理念使得代码易于理解、测试和扩展。

3

章节 03

1. 无魔法,纯类

项目明确拒绝使用装饰器或元类,所有功能通过普通类实现:

class BaseLLMProvider:
    @classmethod
    def create(cls, cfg: LLMProviderConfig) -> ResolvedProvider:
        raise NotImplementedError

class OllamaProvider(BaseLLMProvider):
    @classmethod
    def create(cls, cfg):
        # 构建并返回 ResolvedProvider
        ...

这种设计的优势:

  • 显式注册:所有提供商在一个字典中可见
  • 易于扩展:子类化 + 添加到字典 = 完成
  • 简单测试:可直接模拟提供商类
  • 清晰依赖:导入树直观明了
  • IDE 友好:自动补全和导航完美工作
4

章节 04

2. 工厂模式

通过统一的工厂函数获取提供商实例:

from model_providers import get_llm_provider, LLMProviderConfig

# 使用环境配置
resolved = get_llm_provider()

# 或显式配置
cfg = LLMProviderConfig(provider="azure", model_name="gpt-4o-2")
resolved = get_llm_provider(cfg)

# 构建聊天模型
from pydantic_ai.models.openai import OpenAIChatModel
model = OpenAIChatModel(
    model_name=resolved.model_name,
    provider=resolved.provider,
)
5

章节 05

LLM 提供商

提供商 默认模型 最大 Token 上下文窗口
Ollama qwen3-vl:32b 131072 131072
Azure gpt-4o-2 8192 8192
Grok grok-2-latest 8192 8192
Groq llama-3.3-70b-versatile 32768 32768
6

章节 06

Embedding 提供商

提供商 默认模型
Ollama nomic-embed-text
Azure text-embedding-3-large
7

章节 07

架构优势

model-providers 的设计带来了六个关键好处:

  1. 无魔法:纯类实现,没有装饰器或元类
  2. 显式注册:在一个字典中查看所有提供商
  3. 易于扩展:子类化并添加到字典即可完成
  4. 简单测试:可直接模拟提供商类
  5. 清晰依赖:导入树直观明了
  6. IDE 友好:自动补全和导航完美工作
8

章节 08

添加新提供商

扩展 model-providers 非常简单,只需四步: