LLM Provider:统一的多模型接入层

开源LLM API网关:统一多模型接入与密钥池管理 大语言模型应用开发中,模型本身已不再是稀缺资源,真正复杂的是对多模型、多Key、多团队场景下的接入管理。一个轻量级LLM API网关能够将OpenAI、Anthropic、Gemini、通义、DeepSeek等不同厂商的接口统一收敛为OpenAI兼容格式,通过模型路由、密钥池化、限流、缓存与审计等机制,解决密钥混乱、配额分散、单点故障等问题。网关采用中间件分层架构,支持SSE流式透传、自动故障转移和基于YAML的路由配置,可显著提升系统稳定性和开发效率,并降低API调用成本。适用于Agent应用、RAG知识 阅读详情

玄同 765

大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)

优快云 · 个人主页 | GitHub · Follow


关于作者

  • 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调
  • 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker
  • 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案

「让 AI 交互更智能,让技术落地更高效」
欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能!


LLM Provider:统一的多模型接入层

通过 Provider Registry + LiteLLM 的组合,nanobot 实现了统一的多模型接入层,支持 10+ LLM 提供者,添加新提供者仅需 2 步。

概述

nanobot 的 LLM Provider 系统采用"注册表 + LiteLLM"的设计模式,为 Agent 提供了统一的多模型接入能力。无论是 OpenRouter、Anthropic、OpenAI,还是本地部署的 vLLM,都可以通过相同的接口调用。本文将深入剖析 LLM Provider 系统的设计与实现。

问题背景

多模型接入的核心挑战

构建一个支持多模型的 AI Agent 需要解决以下问题:

挑战描述nanobot 的解决方案
API 差异不同提供者 API 格式不同LiteLLM 统一接口
认证方式API Key 格式和位置不同Provider Registry 自动配置
模型前缀LiteLLM 需要特定前缀自动添加/跳过前缀
网关检测如何识别网关类型Key 前缀 + URL 关键字
参数覆盖某些模型需要特殊参数model_overrides 机制

Provider 系统设计目标

Design Goals

Unified Interface

Easy Extension

Auto Detection

LiteLLM Integration

Standard Response

2 Steps to Add

Registry Pattern

Key Prefix

URL Keyword

核心架构

Provider Registry 设计

Provider Registry 是整个系统的核心,定义了所有提供者的元数据:

@dataclass(frozen=True)
class ProviderSpec:
    """One LLM provider's metadata."""
  
    # 身份标识
    name: str                       # 配置字段名,如 "dashscope"
    keywords: tuple[str, ...]       # 模型名关键字匹配(小写)
    env_key: str                    # LiteLLM 环境变量,如 "DASHSCOPE_API_KEY"
    display_name: str = ""          # 显示名称
  
    # 模型前缀
    litellm_prefix: str = ""        # "dashscope" → model 变成 "dashscope/{model}"
    skip_prefixes: tuple[str, ...] = ()  # 已有前缀时跳过
  
    # 额外环境变量
    env_extras: tuple[tuple[str, str], ...] = ()
  
    # 网关/本地检测
    is_gateway: bool = False        # 是否为网关(如 OpenRouter)
    is_local: bool = False          # 是否为本地部署
    detect_by_key_prefix: str = ""  # 通过 API Key 前缀检测
    detect_by_base_keyword: str = ""  # 通过 URL 关键字检测
    default_api_base: str = ""      # 默认 API Base URL
  
    # 网关行为
    strip_model_prefix: bool = False  # 重定向前是否剥离前缀
  
    # 模型参数覆盖
    model_overrides: tuple[tuple[str, dict[str, Any]], ...] = ()

支持的提供者

Auxiliary

Groq - Voice

Local Deployment

vLLM

Standard Providers

Anthropic

OpenAI

DeepSeek

Gemini

Zhipu AI

DashScope/Qwen

Moonshot/Kimi

MiniMax

Gateways - Route Any Model

OpenRouter

AiHubMix

提供者类型对比

类型特点示例
Gateway可路由任意模型,通过 Key/URL 检测OpenRouter、AiHubMix
Standard特定提供者,通过模型名匹配Anthropic、OpenAI、DeepSeek
Local本地部署,需配置 api_basevLLM、Ollama
Auxiliary辅助功能,非主要 LLMGroq(语音转录)

Provider Registry 详解

网关类型提供者

# OpenRouter: 全球网关,Key 以 "sk-or-" 开头
ProviderSpec(
    name="openrouter",
    keywords=("openrouter",),
    env_key="OPENROUTER_API_KEY",
    display_name="OpenRouter",
    litellm_prefix="openrouter",
    is_gateway=True,
    detect_by_key_prefix="sk-or-",
    detect_by_base_keyword="openrouter",
    default_api_base="https://openrouter.ai/api/v1",
)

# AiHubMix: OpenAI 兼容网关
ProviderSpec(
    name="aihubmix",
    keywords=("aihubmix",),
    env_key="OPENAI_API_KEY",
    display_name="AiHubMix",
    litellm_prefix="openai",
    is_gateway=True,
    detect_by_base_keyword="aihubmix",
    strip_model_prefix=True,  # 剥离 "anthropic/" 再重新添加
)

标准提供者

# Anthropic: LiteLLM 原生支持,无需前缀
ProviderSpec(
    name="anthropic",
    keywords=("anthropic", "claude"),
    env_key="ANTHROPIC_API_KEY",
    display_name="Anthropic",
    litellm_prefix="",  # 无需前缀
)

# DeepSeek: 需要 "deepseek/" 前缀
ProviderSpec(
    name="deepseek",
    keywords=("deepseek",),
    env_key="DEEPSEEK_API_KEY",
    display_name="DeepSeek",
    litellm_prefix="deepseek",
    skip_prefixes=("deepseek/",),  # 避免重复添加
)

# DashScope: Qwen 模型
ProviderSpec(
    name="dashscope",
    keywords=("qwen", "dashscope"),
    env_key="DASHSCOPE_API_KEY",
    display_name="DashScope",
    litellm_prefix="dashscope",
    skip_prefixes=("dashscope/", "openrouter/"),
)

带参数覆盖的提供者

# Moonshot: Kimi 模型,K2.5 强制 temperature >= 1.0
ProviderSpec(
    name="moonshot",
    keywords=("moonshot", "kimi"),
    env_key="MOONSHOT_API_KEY",
    display_name="Moonshot",
    litellm_prefix="moonshot",
    env_extras=(
        ("MOONSHOT_API_BASE", "{api_base}"),
    ),
    default_api_base="https://api.moonshot.ai/v1",
    model_overrides=(
        ("kimi-k2.5", {"temperature": 1.0}),
    ),
)

本地部署提供者

# vLLM: 本地 OpenAI 兼容服务器
ProviderSpec(
    name="vllm",
    keywords=("vllm",),
    env_key="HOSTED_VLLM_API_KEY",
    display_name="vLLM/Local",
    litellm_prefix="hosted_vllm",
    is_local=True,
    # api_base 必须由用户在配置中提供
)

LiteLLMProvider 实现

初始化流程

class LiteLLMProvider(LLMProvider):
    """LLM provider using LiteLLM for multi-provider support."""
  
    def __init__(
        self, 
        api_key: str | None = None, 
        api_base: str | None = None,
        default_model: str = "anthropic/claude-opus-4-5",
        extra_headers: dict[str, str] | None = None,
        provider_name: str | None = None,
    ):
        super().__init__(api_key, api_base)
        self.default_model = default_model
        self.extra_headers = extra_headers or {}
      
        # 检测网关/本地部署
        self._gateway = find_gateway(provider_name, api_key, api_base)
      
        # 配置环境变量
        if api_key:
            self._setup_env(api_key, api_base, default_model)
      
        # 禁用 LiteLLM 日志噪音
        litellm.suppress_debug_info = True
        litellm.drop_params = True

环境变量配置

def _setup_env(self, api_key: str, api_base: str | None, model: str) -> None:
    """Set environment variables based on detected provider."""
    spec = self._gateway or find_by_model(model)
    if not spec:
        return

    # 网关/本地覆盖现有环境变量
    if self._gateway:
        os.environ[spec.env_key] = api_key
    else:
        os.environ.setdefault(spec.env_key, api_key)

    # 解析 env_extras 占位符
    effective_base = api_base or spec.default_api_base
    for env_name, env_val in spec.env_extras:
        resolved = env_val.replace("{api_key}", api_key)
        resolved = resolved.replace("{api_base}", effective_base)
        os.environ.setdefault(env_name, resolved)

模型名解析

def _resolve_model(self, model: str) -> str:
    """Resolve model name by applying provider/gateway prefixes."""
    if self._gateway:
        # 网关模式:应用网关前缀
        prefix = self._gateway.litellm_prefix
        if self._gateway.strip_model_prefix:
            model = model.split("/")[-1]
        if prefix and not model.startswith(f"{prefix}/"):
            model = f"{prefix}/{model}"
        return model
  
    # 标准模式:自动添加提供者前缀
    spec = find_by_model(model)
    if spec and spec.litellm_prefix:
        if not any(model.startswith(s) for s in spec.skip_prefixes):
            model = f"{spec.litellm_prefix}/{model}"
  
    return model

参数覆盖

def _apply_model_overrides(self, model: str, kwargs: dict[str, Any]) -> None:
    """Apply model-specific parameter overrides from the registry."""
    model_lower = model.lower()
    spec = find_by_model(model)
    if spec:
        for pattern, overrides in spec.model_overrides:
            if pattern in model_lower:
                kwargs.update(overrides)
                return

Chat 调用

async def chat(
    self,
    messages: list[dict[str, Any]],
    tools: list[dict[str, Any]] | None = None,
    model: str | None = None,
    max_tokens: int = 4096,
    temperature: float = 0.7,
) -> LLMResponse:
    """Send a chat completion request via LiteLLM."""
    model = self._resolve_model(model or self.default_model)
  
    kwargs: dict[str, Any] = {
        "model": model,
        "messages": messages,
        "max_tokens": max_tokens,
        "temperature": temperature,
    }
  
    # 应用模型特定覆盖
    self._apply_model_overrides(model, kwargs)
  
    # 直接传递 api_key(比环境变量更可靠)
    if self.api_key:
        kwargs["api_key"] = self.api_key
  
    # 传递 api_base 用于自定义端点
    if self.api_base:
        kwargs["api_base"] = self.api_base
  
    # 传递额外头部(如 AiHubMix 的 APP-Code)
    if self.extra_headers:
        kwargs["extra_headers"] = self.extra_headers
  
    if tools:
        kwargs["tools"] = tools
        kwargs["tool_choice"] = "auto"
  
    try:
        response = await acompletion(**kwargs)
        return self._parse_response(response)
    except Exception as e:
        return LLMResponse(
            content=f"Error calling LLM: {str(e)}",
            finish_reason="error",
        )

查找辅助函数

按模型名查找

def find_by_model(model: str) -> ProviderSpec | None:
    """Match a standard provider by model-name keyword."""
    model_lower = model.lower()
    for spec in PROVIDERS:
        if spec.is_gateway or spec.is_local:
            continue
        if any(kw in model_lower for kw in spec.keywords):
            return spec
    return None

检测网关

def find_gateway(
    provider_name: str | None = None,
    api_key: str | None = None,
    api_base: str | None = None,
) -> ProviderSpec | None:
    """Detect gateway/local provider.
  
    Priority:
      1. provider_name - 配置键直接匹配
      2. api_key prefix - 如 "sk-or-" → OpenRouter
      3. api_base keyword - 如 URL 中含 "aihubmix"
    """
    # 1. 配置键直接匹配
    if provider_name:
        spec = find_by_name(provider_name)
        if spec and (spec.is_gateway or spec.is_local):
            return spec
  
    # 2. 自动检测
    for spec in PROVIDERS:
        if spec.detect_by_key_prefix and api_key and api_key.startswith(spec.detect_by_key_prefix):
            return spec
        if spec.detect_by_base_keyword and api_base and spec.detect_by_base_keyword in api_base:
            return spec
  
    return None

配置示例

OpenRouter(推荐)

{
  "providers": {
    "openrouter": {
      "apiKey": "sk-or-v1-xxx"
    }
  },
  "agents": {
    "defaults": {
      "model": "anthropic/claude-opus-4-5"
    }
  }
}

本地 vLLM

{
  "providers": {
    "vllm": {
      "apiKey": "dummy",
      "apiBase": "http://localhost:8000/v1"
    }
  },
  "agents": {
    "defaults": {
      "model": "meta-llama/Llama-3.1-8B-Instruct"
    }
  }
}

DeepSeek 直连

{
  "providers": {
    "deepseek": {
      "apiKey": "sk-xxx"
    }
  },
  "agents": {
    "defaults": {
      "model": "deepseek-chat"
    }
  }
}

添加新提供者

只需 2 步即可添加新的 LLM 提供者:

Step 1: 添加 ProviderSpec

在 nanobot/providers/registry.py 的 PROVIDERS 中添加:

ProviderSpec(
    name="myprovider",
    keywords=("myprovider", "mymodel"),
    env_key="MYPROVIDER_API_KEY",
    display_name="My Provider",
    litellm_prefix="myprovider",
    skip_prefixes=("myprovider/",),
)

Step 2: 添加配置字段

在 nanobot/config/schema.py 的 ProvidersConfig 中添加:

class ProvidersConfig(BaseModel):
    # ... 现有字段
    myprovider: ProviderConfig = ProviderConfig()

完成!环境变量、模型前缀、配置匹配、状态显示都会自动工作。

设计亮点

设计点实现优势
单一数据源Provider Registry所有元数据集中管理
自动检测Key 前缀 + URL 关键字无需手动指定网关类型
智能前缀litellm_prefix + skip_prefixes避免重复添加前缀
参数覆盖model_overrides处理模型特殊要求
占位符解析{api_key}, {api_base}灵活配置环境变量

总结

nanobot 的 LLM Provider 系统通过 Provider Registry + LiteLLM 的组合,实现了统一的多模型接入层:

特性实现
统一接口LiteLLM 封装所有提供者差异
自动配置Registry 自动设置环境变量和前缀
网关检测Key 前缀 + URL 关键字自动识别
易于扩展2 步添加新提供者
灵活覆盖支持模型级别的参数覆盖

这种设计使得 nanobot 能够无缝支持各种 LLM 提供者,从全球网关到本地部署,从商业 API 到开源模型。


any-llm:统一多模型API的轻量级LLM推理网关实践 在大型语言模型(LLM)应用开发中,API标准化是提升工程效率的关键。不同模型厂商的接口差异导致开发者需要编写大量适配代码,增加了系统复杂度和维护成本。其核心原理是通过网关模式实现前后端分离,应用层使用统一API,网关层负责协议转换和请求路由。这一设计的技术价值在于解耦业务逻辑与模型服务,提供中心化的流量管理、监控和治理能力。在应用场景上,它特别适用于多模型A/B测试、负载均衡和服务熔断等工程实践。本文聚焦于Mozilla开源的any-llm项目,它通过插件化架构支持vLLM、OpenAI等多种推理后端,帮 阅读详情

相关推荐

Rust LLM统一接口库llm/rllm:多模型集成与生产级AI应用开发指南

在构建AI应用时,开发者常面临为不同大语言模型(LLM)供应商编写重复适配代码的挑战。通过抽象层统一接口是提升工程效率的核心原理,它能将OpenAI、Anthropic、本地Ollama等异构服务的调用标准化。这种设计的技术价值在于实现供应商无关的编程模型,让开发者专注于提示工程、链式调用等上层逻辑。应用场景广泛覆盖A/B测试、成本优化和供应商容灾等需求。本文聚焦的`graniet/llm`及其封装`graniet/rllm`库,正是基于建造者模式(Builder Pattern)和统一Trait,为Rus

weixin_42524004的博客 627

多LLM Provider适配器模式:一套代码接入15+大模型

browser-use webui的LLM适配层设计体现了"约定优于配置统一的接口环境变量自动 fallback 机制预定义模型列表降低用户选择成本特殊模型(DeepSeek-R1)的透明化处理今天用DeepSeek(便宜高效)明天切GPT-4o(视觉任务)后天试本地模型(隐私合规)

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 342

Python自动化生成HyperMesh Tcl命令流:从几何建模到有限元分析

本文详细介绍了如何利用Python自动化生成HyperMesh的Tcl命令流,实现从几何建模到有限元分析的全流程二次开发。通过封装常用操作函数,工程师可以高效完成参数化建模、自动网格划分及求解器文件输出,显著提升CAE前处理效率与标准化水平。

weixin_29041767的博客 423

开源项目(MoneyPrinterTurbo)利用大模型,一键生成短视频

只需提供一个视频 主题 或 关键词 ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。

weixin_30111261的博客 5272

避坑指南:SAP STO订单里‘发货存储地点’栏位不显示?检查这个关键配置

本文深入解析SAP STO订单中‘发货存储地点’栏位缺失问题的根本原因及解决方案。通过激活库存地点间转储功能、维护库存地点主数据等关键配置步骤,帮助用户快速恢复业务操作。特别适用于MM模块实施顾问和SAP系统管理员处理UB STO相关技术问题。

weixin_30632089的博客 98

全志T113 Tina5.0开发:(零)源码下载&修改调试串口

本文章主要作为自己的笔记,如有错误欢迎指出$ repo start product-da-t113-tina-stable --all # 全部下载完成之后,创建分支运行过程可能会出现版本问题;rm -rf .repo //先删除试试( 我安装的是3.6版本)

u014428915的博客 1164

【动手学大模型2】Prompt 和 LLM API

最初时NLP研究者为下游任务设计出来的一种任务专属的输入模板,类似于一种任务(例如:分类,聚类等)会对应一种 Prompt。在 ChatGPT 推出并获得大量应用之后,Prompt 开始被推广为给大模型的所有输入。

weixin_50275076的博客 1137

PR工具timing report中setup time的计算过程

然后去pr工具里报告report_delay_calculation/reportDelayCalculation -from related_pin -to constraint_pin。这里constraint pin就是D pin (D0 D1 D2 D3),related pin就是 CK pin。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 455

[免费]本地搭建AI自动生成视频应用

x] 支持多种。

柒只猫~ 7342

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 762

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1436

使用 Amazon Bedrock 上的 Claude 3 与 Dify 集成,快速搭建生产级的生成式 AI 应用

关于 DifyDify 是一款开源的大语言模型( LLM )应用开发平台。它融合了后端即服务( Backend as Service )和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。它支持多种大型语言模型,如 Claude 3 、 OpenAI ,同时与多个模型供应商合作,确保开发者能根据需求选择最适合的模型。平台提供了强大的数据集管理功能,允许用户上传、管理文本和结构...

亚马逊云科技专栏 1473

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2697

ClawdBot快速上手:UI界面Model Providers配置图文详解

本文介绍了如何在星图GPU平台上自动化部署ClawdBot镜像,构建本地化AI助手环境。基于星图GPU,用户可一键拉起ClawdBot容器并配置vLLM等模型服务,典型应用于隐私敏感场景下的本地大语言模型对话与文件处理,无需依赖云端,兼顾安全、低延迟与高度可控性。

weixin_33256096的博客 299

【Unity优化篇】| Unity3D场景 常用优化策略,遮挡剔除、层消隐距离技术 和 LOD多层次细节

本篇文章来简单介绍一下 Unity中几种常用3D场景优化策略 方法 对于整个项目来说,本文中出现的方法也只是冰山一角,慢慢积累学习吧! 内容包括遮挡剔除(Occlusion Culling)、层消隐距离技术 和 LOD多层次细节

努力前行,总会成为自己心中的那道光 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LLM Provider 统一多模型接入层:Provider Registry 设计与 LiteLLM 实践

用 Provider Registry 注册表加 LiteLLM 统一多模型接入层,把模型名、Key、Base URL 差异收敛为一张不可变配置表。文中给出可复制的 ProviderSpec 定义、config.yaml 与 settings.json 三份配置,并附三层验证脚本与 401、前缀重复等报错排查路径。统一入口可选用 TaoToken,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_35826166的博客 4

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OpenClaw 总体架构技术拆解:从 TaoToken 统一 Key 通道看多模型接入层设计

OpenClaw 模型接入层配置常因 Key、Base URL、Model ID 不对齐而报 401 或 local proxy failed。用 TaoToken 统一 Key 通道,把多模型鉴权收敛成一套 provider 配置,一个 Key 即可切换 Claude、GPT 等模型。访问 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 生成 Key,按分层验证步骤即可跑通整条链路。

weixin_42599558的博客 11

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Agent-Reach:面向LLM应用的轻量级API代理调度层

大语言模型(LLM)API调用稳定性是工程落地的核心瓶颈,其本质是连接层的确定性问题——而非模型能力本身。Agent-Reach作为一种轻量级代理调度层,聚焦解决密钥管理、上下文长度预估、服务健康检查、错误码智能解析与多模型动态降级等‘非智力故障’。它不替代模型,而是统一抽象不同平台(如DeepSeek、智谱、Minimax、Ollama)的认证方式、请求规范与限流策略,通过CLI驱动实现自然语言式命令到标准化API调用的精准映射。适用于需批量处理YouTube字幕、Reddit热帖、小红书评论等场景的数据

weixin_42545503的博客 275

OpenClaw核心架构深度解析:从TaoToken统一Key到多模型路由的工程实践

OpenClaw多模型接入常因Key分散导致401与路由混乱。本文拆解Agent层LLM Provider,给出TaoToken统一Key配置片段与多模型路由映射表,并演示通过请求日志验证路由命中与失败回退,附401、reading choices等报错排查路径。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42466857的博客 167

LLM网关项目复盘:多模型统一接入层的架构设计与工程挑战

统一接入层屏蔽了5个Provider的SDK差异——调用方不感知底层用哪个模型智能路由节省了约40%的LLM费用——简单问题用便宜模型,复杂问题才用贵的故障切换让整体可用性从单Provider的99.5%提升到99.9%成本追踪让"每个请求花了多少钱"从黑盒变成白盒Provider接口抽象让新增模型接入成本从"改全局代码"降到"实现一个适配器"当前网关日均处理约2万次LLM调用,月费用约$1800。

qq_34803115的博客 4753

多 LLM 提供商统一接入:Provider 模式与 LiteLLM 实践

CountBot 的多 Provider 架构展示了一个优秀的适配器模式实践:通过抽象基类定义统一接口,通过注册表管理元数据,通过 LiteLLM 处理底层差异。这种设计使得系统可以轻松适应快速变化的 LLM 生态。

m0_64363449的博客 729

大模型 SDK 的 Provider 怎么设计:多模型统一接入实战

raw。

清言清语的专栏 285

多 LLM 提供商统一接入:Provider 模式与 LiteLLM 实践——用 TaoToken 统一 Key 打通多模型调用

用 LiteLLM 的 Router 配置 fallbacks 字段,即可让 gpt-4o 失败时自动回退到 claude-sonnet,业务代码无需改动。本文给出可复制的 Provider 抽象基类与 LiteLLM 路由片段,并借助 TaoToken 统一 Key 打通多模型调用,一个 Base URL 完成多提供商接入。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42601702的博客 13

aisuite 开源统一 LLM 接口实战:用 TaoToken 统一 Key 打通多模型调用

用 aisuite 开源统一 LLM 接口,只需把 OPENAI_BASE_URL 指向 TaoToken 即可一个 Key 打通多模型调用。本文给出安装、provider 配置骨架与循环切换 gpt-4o、Claude、Gemini 的可复制代码,并附 401、model not found 等常见报错排查。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_28850145的博客 178

Code Agent 解剖(21):从零扩展——接入新的 LLM Provider

OpenAI、DeepSeek、Kimi、Qwen……每隔一段时间就有新的 LLM 服务出现,而 MyCodeAgent 已经支持了 10 家。接入一个新 provider,不是改调用链,而是往一张表里加一行。这一篇把 provider 路由机制讲透,再带你走完接入全流程

Cheson的专栏 892

Mainplane 如何统一多种 LLM 接口:Provider 抽象层与七种 Envelope 深度解析

Mainplane 是一个开源 Agent 生态,其核心设计之一是通过 **Provider 抽象层**和 **Envelope(信封)机制**,将 Anthropic、OpenAI、Google Gemini、AWS Bedrock、ChatGPT 订阅、Claude Code 等七种 LLM 接口统一为一套编译-流式解析流程。本文带你从架构到源码,逐步读懂这套设计。 ## 为什么需要统一 L

gitblog_00221的博客 171
上一篇: 记忆与调度:智能体的持久化能力(nanobot架构分析)
下一篇: Python最常考的面试题——内存模型深度解剖:从地址、堆栈到深浅拷贝的底层逻辑
玄同765
玄同765 新星创作者: 人工智能技术领域 新星创作者: 人工智能技术领域
博客等级 码龄6年 1万+粉丝 262原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值