跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.aihubmix.com/llms.txt

Use this file to discover all available pages before exploring further.

LiteLLM 项目简介

LiteLLM 是一个开源的 AI 统一网关,由 BerriAI 开发,目标是用一套标准接口调用市面上几乎所有主流大模型。项目仓库见:https://github.com/BerriAI/litellm 每个 LLM 提供商都有自己的 SDK 和 API 格式,OpenAI、Anthropic、Google 各不相同。一旦需要切换模型或同时使用多个模型,就要维护多套代码。LiteLLM 可以实现——写一次代码,换一个参数,即可调用任意模型
Image

两种使用形态

形态说明适合场景
Python SDKpip install litellm,直接在代码中调用个人开发、快速原型
Proxy Server独立部署的 AI 网关服务团队共用、企业管控

核心能力

  • 统一 OpenAI 格式:支持 100+ 个 Provider,包括 OpenAI、Anthropic、Gemini、Bedrock、Azure 等
  • 虚拟密钥管理:统一管控团队 API Key,无需暴露原始密钥
  • 成本追踪:按用户/项目统计 Token 消耗和费用
  • 负载均衡:跨多个模型或部署自动分流,支持故障转移
  • 高性能:1000 RPS 下 P95 延迟约 8ms

安装指南

环境要求

Python 3.8+ macOS 推荐使用 Homebrew 安装:
brew install python
验证:
python3 --version
Windows 前往 python.org/downloads 下载安装包,安装时勾选 “Add Python to PATH” 验证:
python --version
Linux(Ubuntu/Debian)
sudo apt update
sudo apt install python3 python3-pip

pip

pip 通常随 Python 一起安装,验证是否可用:
pip --version
# 或
pip3 --version
如果提示未找到,手动安装:
# 通用方式
python3 -m ensurepip --upgrade

# Ubuntu/Debian
sudo apt install python3-pip

# 升级到最新版
pip install --upgrade pip

安装 LiteLLM

环境就绪后,执行:
python3 -m pip install litellm
验证安装成功,在终端运行:
python3 -m pip show litellm
这已经包含了调用所有主流 Provider 的能力。

按需安装额外依赖

部分 Provider 需要额外的依赖包:
# AWS Bedrock
pip install litellm[bedrock]

# Google Vertex AI
pip install litellm[vertex]

# 全部依赖(体积较大,不推荐生产环境)
pip install litellm[all]

安装 Proxy Server

如果需要部署独立的网关服务,安装带 proxy 的版本:
pip install 'litellm[proxy]'

验证安装

import litellm
print(litellm.__version__)

Docker 安装(可选)

如果你更倾向于容器化部署:
docker pull ghcr.io/berriai/litellm:main-latest

推荐做法:个人开发直接 pip install litellm,团队部署选 Proxy + Docker。
Image

配置 API Key 并调用

获取 AiHubMix API Key

前往 aihubmix.com 控制台,创建一个 API Key。

设置环境变量

export AIHUBMIX_API_KEY="your-aihubmix-key"

发起第一次调用

import os
from litellm import completion

response = completion(
    model='openai/gpt-4o-mini',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '你好,介绍一下你自己'}]
)

print(response.choices[0].message.content)

基础用法

1. 切换不同模型

AiHubMix 支持主流模型,切换只需改 model 参数:
import os
from litellm import completion

response = completion(
    model='openai/claude-sonnet-4-6',  # 换这里
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '你好,介绍一下你自己'}]
)

print(response.choices[0].message.content)

2. 流式输出(Streaming)

加一个 stream=True,模型会像打字机一样逐字输出:
import os
from litellm import completion

response = completion(
    model='openai/claude-sonnet-4-6',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '用100字介绍一下Python'}],
    stream=True
)

for chunk in response:
    print(chunk.choices[0].delta.content or '', end='', flush=True)
print()

3. 多轮对话

把历史消息拼进 messages 列表,模型就能记住上下文:
import os
from litellm import completion

messages = [
    {'role': 'user', 'content': '我叫小明'},
    {'role': 'assistant', 'content': '你好,小明!'},
    {'role': 'user', 'content': '我叫什么名字?'}
]

response = completion(
    model='openai/claude-sonnet-4-6',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=messages
)

print(response.choices[0].message.content)

4. 异步调用

适合需要同时发多个请求的场景,不用等一个完成再发下一个:
import os
import asyncio
from litellm import acompletion

async def ask(question):
    response = await acompletion(
        model='openai/claude-sonnet-4-6',
        api_base='https://aihubmix.com/v1',
        api_key=os.environ.get('AIHUBMIX_API_KEY'),
        messages=[{'role': 'user', 'content': question}]
    )
    return response.choices[0].message.content

async def main():
    questions = ['苹果是什么颜色?', '天空是什么颜色?', '草地是什么颜色?']
    results = await asyncio.gather(*[ask(q) for q in questions])
    for q, r in zip(questions, results):
        print(f'问:{q}')
        print(f'答:{r}')
        print()

asyncio.run(main())

5. 设置超时与重试

避免请求卡住或因网络抖动失败:
import os
from litellm import completion

response = completion(
    model='openai/claude-sonnet-4-6',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '你好'}],
    timeout=10,        # 超过 10 秒自动报错
    num_retries=3      # 失败自动重试 3 次
)

print(response.choices[0].message.content)
timeout 单位是秒,num_retries 建议设 2~3,太高会拖慢响应。

6. 统计 Token 用量和费用

每次调用的返回结果里自带 Token 用量信息:
import os
from litellm import completion

response = completion(
    model='openai/claude-sonnet-4-6',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '用100字介绍一下Python'}]
)

print(response.choices[0].message.content)
print()
print('Token 用量:')
print(f'  输入:{response.usage.prompt_tokens}')
print(f'  输出:{response.usage.completion_tokens}')
print(f'  合计:{response.usage.total_tokens}')

统计多次调用的累计费用:
import os
from litellm import completion, completion_cost

response = completion(
    model='openai/claude-sonnet-4-6',
    api_base='https://aihubmix.com/v1',
    api_key=os.environ.get('AIHUBMIX_API_KEY'),
    messages=[{'role': 'user', 'content': '用100字介绍一下Python'}]
)

cost = completion_cost(completion_response=response)
print(f'本次费用:${cost:.6f}')

7. 负载均衡 / 故障转移

配置多个模型,自动分流或在某个模型失败时切换到备用模型:
import os
from litellm import Router

router = Router(
    model_list=[
        {
            'model_name': 'my-model',
            'litellm_params': {
                'model': 'openai/claude-sonnet-4-6',
                'api_base': 'https://aihubmix.com/v1',
                'api_key': os.environ.get('AIHUBMIX_API_KEY'),
            }
        },
        {
            'model_name': 'my-model',
            'litellm_params': {
                'model': 'openai/gpt-4o',
                'api_base': 'https://aihubmix.com/v1',
                'api_key': os.environ.get('AIHUBMIX_API_KEY'),
            }
        }
    ]
)

response = router.completion(
    model='my-model',
    messages=[{'role': 'user', 'content': '你好'}]
)

print(response.choices[0].message.content)
两个模型共用同一个 model_name,LiteLLM 会自动轮询;若其中一个报错,自动切换到另一个。

8. 部署 Proxy Server

Proxy Server 是一个独立运行的网关服务,团队成员统一通过它访问模型,无需每个人单独配置 API Key。

安装

python3 -m pip install 'litellm[proxy]'

创建配置文件

新建 config.yaml
model_list:
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_base: https://aihubmix.com/v1
      api_key: os.environ/AIHUBMIX_API_KEY

  - model_name: claude-sonnet
    litellm_params:
      model: openai/claude-sonnet-4-6
      api_base: https://aihubmix.com/v1
      api_key: os.environ/AIHUBMIX_API_KEY

  - model_name: gemini-flash
    litellm_params:
      model: openai/gemini-2.0-flash
      api_base: https://aihubmix.com/v1
      api_key: os.environ/AIHUBMIX_API_KEY

启动服务

litellm --config config.yaml --port 4000
看到以下输出说明启动成功:
LiteLLM: Proxy running on http://0.0.0.0:4000

调用本地服务

服务启动后,把 api_base 换成本地地址即可:
import os
from litellm import completion

response = completion(
    model='gpt-4o',
    api_base='http://localhost:4000',
    api_key='any-string',
    messages=[{'role': 'user', 'content': '你好'}]
)

print(response.choices[0].message.content)
api_key 此时可以填任意字符串,真实的 AiHubMix Key 由 Proxy 统一管

9. 虚拟密钥管理

虚拟密钥让你可以给不同成员或项目分配独立的 Key,统一管控权限和用量,而不暴露真实的 AiHubMix API Key。

前置条件

虚拟密钥需要数据库支持,先启动一个 PostgreSQL:
docker run -d \
  --name litellm-db \
  -e POSTGRES_USER=litellm \
  -e POSTGRES_PASSWORD=litellm \
  -e POSTGRES_DB=litellm \
  -p 5432:5432 \
  postgres

更新配置文件

config.yaml 中加入数据库配置:
model_list:
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_base: https://aihubmix.com/v1
      api_key: os.environ/AIHUBMIX_API_KEY

  - model_name: claude-sonnet
    litellm_params:
      model: openai/claude-sonnet-4-6
      api_base: https://aihubmix.com/v1
      api_key: os.environ/AIHUBMIX_API_KEY

general_settings:
  master_key: sk-my-master-key
  database_url: postgresql://litellm:litellm@localhost:5432/litellm

重启服务

litellm --config config.yaml --port 4000

创建虚拟密钥

master_key 创建一个新的虚拟 Key:
curl -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer sk-my-master-key" \
  -H "Content-Type: application/json" \
  -d '{
    "key_alias": "team-a",
    "max_budget": 10,
    "models": ["gpt-4o", "claude-sonnet"]
  }'
返回结果中的 key 字段就是虚拟密钥,例如 sk-xxxxxx

使用虚拟密钥调用

from litellm import completion

response = completion(
    model='claude-sonnet',
    api_base='http://localhost:4000',
    api_key='sk-xxxxxx',
    messages=[{'role': 'user', 'content': '你好'}]
)

print(response.choices[0].message.content)

查看用量

curl http://localhost:4000/key/info \
  -H "Authorization: Bearer sk-my-master-key" \
  -H "Content-Type: application/json" \
  -d '{"key": "sk-xxxxxx"}'
每个虚拟 Key 可以单独设置可用模型、预算上限、过期时间,适合团队多人协作场景。
先设置环境变量:
export AIHUBMIX_API_KEY="你的Key"

实战:多模型对比测试

同一个问题同时发给多个模型,对比输出质量、速度和 Token 消耗。

设置 API Key

export AIHUBMIX_API_KEY="你的Key"

运行对比测试

python3 -c "
import os
import time
import asyncio
from litellm import acompletion

MODELS = [
    'gpt-5.5',
    'claude-opus-4-7',
    'deepseek-v4-flash',
    'coding-glm-5.1-free',
]

QUESTION = '如果你只能给程序员一条建议,你会说什么'

async def ask_model(model, question):
    start = time.time()
    try:
        response = await acompletion(
            model=f'openai/{model}',
            api_base='https://aihubmix.com/v1',
            api_key=os.environ.get('AIHUBMIX_API_KEY'),
            messages=[{'role': 'user', 'content': question}]
        )
        return {
            'model': model,
            'answer': response.choices[0].message.content.strip(),
            'tokens': response.usage.total_tokens,
            'time': round(time.time() - start, 2),
            'error': None
        }
    except Exception as e:
        return {
            'model': model,
            'answer': None,
            'tokens': 0,
            'time': round(time.time() - start, 2),
            'error': str(e)
        }

async def main():
    print(f'问题:{QUESTION}')
    print('=' * 60)
    tasks = [ask_model(m, QUESTION) for m in MODELS]
    results = await asyncio.gather(*tasks)
    for r in results:
        print(f'\n模型:{r[\"model\"]}')
        print(f'耗时:{r[\"time\"]} 秒  |  Token:{r[\"tokens\"]}')
        print('-' * 40)
        if r['error']:
            print(f'错误:{r[\"error\"]}')
        else:
            print(r['answer'])
    print('\n' + '=' * 60)
    print(f'{\"模型\":<30} {\"耗时\":>8} {\"Token\":>8}')
    print('-' * 50)
    for r in sorted(results, key=lambda x: x['time']):
        status = f'{r[\"time\"]}s' if not r['error'] else '失败'
        print(f'{r[\"model\"]:<30} {status:>8} {r[\"tokens\"]:>8}')

asyncio.run(main())
"

Image
最新更新日期:2026年4月29日