大家好,我是何三,独立开发者。

今天咱们来聊聊一个能让你的AI应用开发效率翻倍的“瑞士军刀”——LiteLLM。如果你正在为调用不同大模型厂商的API而头疼,每个厂商一套SDK,参数格式千奇百怪,那么LiteLLM可能就是你的“终极解决方案”。

LiteLLM 到底是啥?

简单说,LiteLLM 是一个 Python 库,它提供了一个统一的接口来调用各种大语言模型(LLM)的 API。

你可以把它想象成一个“万能翻译器”或者“统一遥控器”。不管你是想用 OpenAI 的 GPT-4,还是百度的文心一言,或者是阿里的通义千问,LiteLLM 都能用几乎相同的代码帮你搞定。它把各家厂商那些复杂的、不兼容的 API 调用方式,封装成了一个简单、一致的接口。

为什么需要 LiteLLM?

你可能会问:我直接调用官方 SDK 不香吗?为啥要加一层?

问得好!这就好比出国旅游:你可以学英语、法语、日语、韩语……或者,带一个翻译器。LiteLLM 带来的核心价值是:

  1. 代码统一,维护简单:一套代码兼容多个厂商,不用为每个厂商写一套逻辑。
  2. 降低切换成本:今天用 OpenAI,明天想换国产模型?改个参数就行,代码几乎不用动。
  3. 功能增强:内置了重试、故障转移、缓存、流式输出等高级功能,不用自己重复造轮子。
  4. 成本优化:可以方便地比较不同模型的性能和价格,找到性价比最高的方案。

上手体验:从安装到第一次对话

第一步:安装

打开终端,一行命令:

uv add litellm

或者用 pip:

pip install litellm

第二步:最简单的对话(以 OpenAI 为例)

虽然重点是国内厂商,但咱们先从最熟悉的 OpenAI 开始,感受一下 LiteLLM 的基本用法:

import litellm
from litellm import completion

# 设置你的 OpenAI API Key(这里需要替换成你自己的)
import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 发起一次对话
response = completion(
    model="gpt-3.5-turbo",  # 指定模型
    messages=[
        {"role": "user", "content": "用一句话介绍 Python 编程语言"}
    ]
)

# 打印回复
print(response.choices[0].message.content)

运行这段代码(记得先设置好 API Key),你会看到 GPT-3.5 对 Python 的介绍。注意看,这个 completion 函数的调用方式,是不是和直接使用 OpenAI SDK 很像?这就是 LiteLLM 的魔力——它模仿了 OpenAI 的 API 格式,让你用起来非常顺手。

核心实战:一键切换国内主流模型

好了,热身结束,现在进入正题!LiteLLM 真正强大的地方在于它对众多模型的支持。下面我带你快速体验几家国内主流大模型厂商。

重要提示:以下示例都需要你先在对应平台申请 API Key,并可能需要安装额外的依赖包(如 openai 包)。LiteLLM 会尽量帮你处理这些细节。

案例 1:百度文心一言(ERNIE)

百度文心一言是国内领先的大模型之一,通过千帆平台提供 API。

import litellm
from litellm import completion
import os

# 设置百度千帆的 API Key 和 Secret Key
os.environ["BAIDU_API_KEY"] = "your-qianfan-api-key"
# 注意:百度需要同时设置 api_key 和 secret_key,LiteLLM 内部会处理
# 更推荐的方式是直接传入参数,见下方示例

# 调用文心一言 ERNIE-4.0-8K 模型
response = completion(
    model="baidu/ernie-4.0-8k",  # 模型标识符
    messages=[
        {"role": "user", "content": "写一首关于春天的五言绝句"}
    ],
    api_key="your-qianfan-api-key",
    # 百度需要额外的参数,可以通过 litellm.modify_params 或直接传入
    # 具体请参考 LiteLLM 文档对百度适配的说明
)

print("文心一言回复:")
print(response.choices[0].message.content)

关键点

  • 模型名格式为 厂商/模型,这里是 baidu/ernie-4.0-8k
  • 你需要去百度智能云千帆平台申请 API Key。
  • LiteLLM 正在不断完善对国内厂商的支持,参数传递方式可能更新,请以最新文档为准。

案例 2:阿里通义千问(Qwen)

通义千问是阿里云推出的大语言模型。

import litellm
from litellm import completion
import os

# 设置阿里云 DashScope 的 API Key
os.environ["ALIBABA_API_KEY"] = "your-dashscope-api-key"

# 调用通义千问 Max 模型
response = completion(
    model="qwen-max",  # 或者 "alibaba/qwen-max"
    messages=[
        {"role": "user", "content": "用 Python 写一个快速排序函数,并加上注释"}
    ],
    api_key="your-dashscope-api-key",  # 也可以在这里传入
)

print("通义千问回复:")
print(response.choices[0].message.content)

案例 3:智谱 AI(GLM)

智谱 AI 的 GLM 系列模型也非常受欢迎。

import litellm
from litellm import completion

# 调用智谱 GLM-4 模型
response = completion(
    model="zhipu/glm-4",  # 模型标识符
    messages=[
        {"role": "user", "content": "解释一下什么是机器学习"}
    ],
    api_key="your-zhipu-api-key",  # 从智谱AI开放平台获取
)

print("智谱 AI 回复:")
print(response.choices[0].message.content)

案例 4:月之暗面(Kimi)

Kimi 以其超长的上下文处理能力闻名。

import litellm
from litellm import completion

# 调用 Kimi 模型(注意:需要确认 LiteLLM 是否已官方支持,或使用自定义 provider)
# 以下为示例格式,实际调用可能需要根据 Moonshot 的 API 文档调整参数
response = completion(
    model="moonshot/kimi-latest",  # 示例模型名,请查阅最新文档
    messages=[
        {"role": "user", "content": "总结一下《三体》第一部的主要情节"}
    ],
    api_key="your-moonshot-api-key",
    # 可能需要 base_url 等额外参数
)

print("Kimi 回复:")
print(response.choices[0].message.content)

重要提醒:国内厂商的 API 接入方式更新较快,且 LiteLLM 作为一个开源项目,对其的支持可能滞后或需要额外配置。最可靠的方法是查阅 LiteLLM 官方文档的 Provider 页面对应云厂商的 API 文档

高级功能:这才是 LiteLLM 的精华

如果只是统一接口,那还不够惊艳。LiteLLM 真正厉害的是下面这些功能:

1. 故障转移(Fallbacks):确保服务高可用

假设你的应用主要使用模型 A,但当它失败或超时时,自动切换到模型 B。

from litellm import completion

response = completion(
    model=["gpt-4", "claude-3-opus", "qwen-max"],  # 按顺序尝试这些模型
    messages=[{"role": "user", "content": "重要问题..."}],
    api_key="your-key",
    # fallbacks 参数可以更精细地控制重试逻辑
)

2. 重试与超时控制

网络不稳定?API 偶尔抽风?LiteLLM 内置了重试机制。

from litellm import completion

response = completion(
    model="gpt-3.5-turbo",
    messages=messages,
    api_key="your-key",
    num_retries=3,  # 重试次数
    timeout=30.0,   # 超时时间(秒)
)

3. 流式输出(Streaming)

对于长文本生成,流式输出可以提升用户体验,让回复看起来是“打出来”的。

from litellm import completion

response = completion(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "讲一个长篇故事"}],
    stream=True,
    api_key="your-key",
)

for chunk in response:
    # 每次收到一个片段就打印出来
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

4. 成本计算与预算控制

LiteLLM 可以帮你跟踪每次调用的花费,避免账单爆炸。

from litellm import completion

response = completion(
    model="gpt-4",
    messages=messages,
    api_key="your-key",
)

# 查看本次调用的成本
print(f"本次调用消耗: ${response.cost}")
print(f"使用的 token 数: {response.usage.total_tokens}")

# 你还可以设置预算上限
# litellm.max_budget = 100.0  # 设置每月最大预算为 100 美元

实战项目:构建一个多模型问答机器人

让我们把这些知识组合起来,创建一个简单的命令行问答机器人,它可以让你自由选择使用哪个模型。

import litellm
from litellm import completion
import os

# 模型配置字典(请在此处填入你真实的 API Keys)
MODEL_CONFIGS = {
    "openai": {
        "model": "gpt-3.5-turbo",
        "api_key": os.getenv("OPENAI_API_KEY", "your-openai-key"),
    },
    "baidu": {
        "model": "baidu/ernie-4.0-8k",
        "api_key": os.getenv("BAIDU_API_KEY", "your-baidu-key"),
    },
    "alibaba": {
        "model": "qwen-max",
        "api_key": os.getenv("ALIBABA_API_KEY", "your-alibaba-key"),
    },
    "zhipu": {
        "model": "zhipu/glm-4",
        "api_key": os.getenv("ZHIPU_API_KEY", "your-zhipu-key"),
    },
}

def ask_model(provider, question):
    """向指定厂商的模型提问"""
    if provider not in MODEL_CONFIGS:
        return f"错误:不支持的服务商 '{provider}'"

    config = MODEL_CONFIGS[provider]

    try:
        response = completion(
            model=config["model"],
            messages=[{"role": "user", "content": question}],
            api_key=config["api_key"],
            timeout=20.0,
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"调用 {provider} 模型时出错: {str(e)}"

# 主交互循环
print("=== 多模型问答机器人 ===")
print("可用模型:openai, baidu, alibaba, zhipu")
print("输入 'quit' 退出\n")

while True:
    provider = input("请选择模型厂商:").strip().lower()
    if provider == "quit":
        break

    question = input("请输入你的问题:")
    if question == "quit":
        break

    print(f"\n[{provider.upper()}] 正在思考...\n")
    answer = ask_model(provider, question)
    print(f"回答:{answer}\n")
    print("-" * 50)

这个简单的机器人展示了 LiteLLM 的核心价值:用几乎相同的代码逻辑,无缝切换不同的模型服务。你可以轻松地扩展它,加入更多厂商、故障转移、流式输出等功能。

一些思考与注意事项

  1. API 兼容性:LiteLLM 的目标是提供统一接口,但各家厂商的 API 能力有差异(比如支持的最大 token 数、参数名称)。高级功能可能需要针对特定厂商进行调整。
  2. 网络与延迟:调用国内模型通常比调用海外模型延迟更低、更稳定,但也要考虑厂商服务器的状态。
  3. 成本差异:不同模型的定价策略差别很大,需要根据你的使用场景(对话、长文本、代码生成等)和预算来选择。
  4. 持续更新:大模型领域发展极快,LiteLLM 和各家厂商的 API 都在不断更新。遇到问题时,第一选择是查阅最新文档。

它适合谁?

  • AI 应用开发者:不想被某个厂商绑定,希望灵活切换模型。
  • 产品经理/研究者:需要快速对比不同模型在相同任务上的表现。
  • 企业开发者:对服务的稳定性、成本和合规性有要求,需要多备份方案。
  • 任何想降低 AI 集成复杂度的 Python 开发者

最后

LiteLLM 就像是大模型世界的“HTTP 客户端”(比如 requests 库)。它不生产模型,它只是模型的搬运工和翻译官。

在 AI 应用开发中,我们经常面临选择:“用 OpenAI 还是国产模型?” 而 LiteLLM 给出的答案是:“为什么不都试试呢?” 它降低了我们尝试和切换的成本,让开发者能更专注于应用逻辑本身,而不是繁琐的 API 集成。

好的工具应该消除障碍,而不是增加复杂度。 LiteLLM 正是在这一点上做得非常出色。

项目地址:https://github.com/BerriAI/litellm


我是何三,一个致力于让 AI 开发更简单的独立开发者。如果这篇文章对你有帮助,欢迎分享给你的朋友。我们下期再见!