Litelm: LiteLLM 精简版
摘要
Litelm 是一个轻量级 Python 库,提供从 LiteLLM 中提取的核心 LLM 路由和消息翻译功能,旨在通过最小依赖实现简洁和高效。
查看缓存全文
缓存时间: 2026/09/11 20:24
kennethwolters/litelm
来源:https://github.com/kennethwolters/litelm
litelm
PyPI (https://pypi.org/project/litelm/) Python (https://pypi.org/project/litelm/) 测试 (https://github.com/kennethwolters/litelm/actions/workflows/test.yml) 许可证:MIT (https://opensource.org/licenses/MIT)
用约 2,900 行代码和 2 个依赖(openai、httpx)实现 litellm 的路由与格式转换。
litellm 能够在多个服务商之间路由 LLM 调用并转换消息格式。但其核心功能淹没在超过 10 万行的代理服务器、缓存层、成本追踪以及大多数用户从未使用的数十项功能代码中。litelm 仅提取了调用路径的核心——模型路由、消息转换、流式传输、工具使用和嵌入向量——除此之外别无他物。没有 Router 类,没有代理服务器,没有缓存功能。
安装
pip install litelm # openai + httpx
pip install litelm[anthropic] # + anthropic SDK
pip install litelm[bedrock] # + boto3
pip install litelm[all] # 全部功能
使用
import litelm
# 基础补全
response = litelm.completion("openai/gpt-4o", messages=[{"role": "user", "content": "你好!"}])
print(response.choices[0].message.content)
# 流式传输
for chunk in litelm.completion("groq/llama-3.1-70b-versatile", messages=[...], stream=True):
print(chunk.choices[0].delta.content or "", end="")
# 嵌入向量
response = litelm.embedding("openai/text-embedding-3-small", input=["hello world"])
每个函数都有异步变体:acompletion、aembedding、aresponses、atext_completion。
API 设计与 litellm 保持一致——相同的函数名、相同的参数、相同的响应类型。如果你正在使用 litellm,只需将导入语句中的 litellm 替换为 litelm 即可完成迁移。
功能清单
| 功能 | litellm | litelm |
|---|---|---|
模型路由(provider/model → 正确端点) | ✓ | ✓ |
| 消息格式转换(Anthropic、Bedrock、Cloudflare、Mistral) | ✓ | ✓ |
流式传输 + stream_chunk_builder | ✓ | ✓ |
| 工具使用(函数调用) | ✓ | ✓ |
| 嵌入向量 | ✓ | ✓ |
| 文本补全 | ✓ | ✓ |
| OpenAI Responses API | ✓ | ✓ |
| 模拟响应 | ✓ | ✓ |
| 路由器(负载均衡、故障转移) | ✓ | ✗ |
| 代理服务器 | ✓ | ✗ |
| 缓存 / 预算 / 成本追踪 | ✓ | ✗ |
| Token 计数 | ✓ | ✗ |
| 图像生成、音频、OCR、微调 | ✓ | ✗ |
| 代理、安全护栏、调度器 | ✓ | ✗ |
服务商支持
通过 "provider/model-name" 语法路由至 19 个服务商。任何 OpenAI 兼容端点均可通过 api_base 参数接入。
| 服务商 | 环境变量 | 处理器 | 已验证 |
|---|---|---|---|
| OpenAI | OPENAI_API_KEY | OpenAI SDK | 是 |
| Anthropic | ANTHROPIC_API_KEY | 自定义 | 是 |
| Groq | GROQ_API_KEY | OpenAI 兼容 | 是 |
| Mistral | MISTRAL_API_KEY | 自定义 | 是 |
| xAI | XAI_API_KEY | OpenAI 兼容 | 是 |
| OpenRouter | OPENROUTER_API_KEY | OpenAI 兼容 | 是 |
| Azure | AZURE_API_KEY | OpenAI SDK (Azure) | 是 |
| Bedrock | AWS_ACCESS_KEY_ID | 自定义 | 否 |
| Cloudflare | CLOUDFLARE_API_TOKEN | 自定义 | 否 |
| Together | TOGETHERAI_API_KEY | OpenAI 兼容 | 否 |
| Fireworks | FIREWORKS_API_KEY | OpenAI 兼容 | 否 |
| DeepSeek | DEEPSEEK_API_KEY | OpenAI 兼容 | 否 |
| Perplexity | PERPLEXITYAI_API_KEY | OpenAI 兼容 | 否 |
| DeepInfra | DEEPINFRA_API_TOKEN | OpenAI 兼容 | 否 |
| Gemini | GEMINI_API_KEY | OpenAI 兼容 | 否 |
| Cohere | COHERE_API_KEY | OpenAI 兼容 | 否 |
| Ollama | — | OpenAI 兼容 | 否 |
| vLLM | — | OpenAI 兼容 | 否 |
| LM Studio | — | OpenAI 兼容 | 否 |
API 密钥
设置服务商对应的环境变量:
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
或直接传递:
litelm.completion("openai/gpt-4o", messages=[...], api_key="sk-...")
litelm.completion("openai/gpt-4o", messages=[...], api_base="http://localhost:8000/v1")
错误处理
所有服务商错误均映射至 litelm 的异常体系:
from litelm import ContextWindowExceededError, RateLimitError, AuthenticationError
try:
response = litelm.completion("openai/gpt-4o", messages=messages)
except ContextWindowExceededError:
# 提示过长 —— 截断后重试
pass
except RateLimitError:
# 触发速率限制
pass
except AuthenticationError:
# API 密钥无效
pass
工具调用
tools = [{"type": "function", "function": {
"name": "get_weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}}]
response = litelm.completion(
"openai/gpt-4o", messages=[{"role": "user", "content": "巴黎的天气如何?"}],
tools=tools, tool_choice="required",
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name, tool_call.function.arguments)
自定义 / 本地服务商
任何 OpenAI 兼容服务器均可通过 api_base 接入:
# vLLM
litelm.completion("openai/my-model", messages=[...], api_base="http://localhost:8000/v1")
# Ollama
litelm.completion("ollama/llama3", messages=[...], api_base="http://localhost:11434/v1")
# LM Studio
litelm.completion("openai/local-model", messages=[...], api_base="http://localhost:1234/v1")
开发透明度
litelm 是人类主导、AI 辅助开发的软件。大部分代码由 Claude Code 基于 Claude Opus 4.6/4.7 编写。2026-05-14 之后的代码均通过 Pi 基于 GPT-5.5 编写。兼容性声明基于测试和维护者审查,而非 AI 的参与程度。
上游验证
维护者验证声明(2026-09-11):LiteLLM 的路由/格式转换变更已通过从 649eb2d 到 9a715df2 的提交记录进行审查。该审计筛选了 360 个核心路径提交,检查了上游测试中的潜在相关行为,并以测试优先的方式修复了由此产生的兼容性缺口。本地范围测试:262 通过,55 跳过;所有 45 个可用服务商实时测试和 10 个 DSPy 冒烟测试在当前依赖锁定下均通过。
此声明仅验证 litelm 已声明的路由/格式转换/DSPy 功能范围,并非完整的 litellm 兼容性保证。
状态
Alpha 阶段。 262 项自有测试全部通过。当前基于 LiteLLM 9a715df2 基线的范围化测试包含 75 项移植测试且无残留可操作的断言/运行时失败。
DSPy (https://github.com/stanfordnlp/dspy) 集成已验证——全部 7 条执行路径均通过实际测试(Predict、CoT、类型化签名、流式传输、嵌入向量、工具使用、多输出)。
测试
uv run --extra all pytest tests/ -x --ignore=tests/ported --timeout=10 # 262 项非实时测试
bash scripts/ported_contract.sh # 49 项快速上游契约测试
uv run --extra all pytest tests/test_live.py -m live --timeout=30 # 45 项服务商实时测试
uv run pytest tests/test_dspy_smoke.py -m live --timeout=60 # 10 项 DSPy 集成测试
实时测试需要在 .env.test 文件中设置 API 密钥。默认跳过;通过 -m live 标志运行。
相似文章
使用llama.cpp在GStreamer中进行本地LLM文本翻译或转换
一个新的GStreamer元素集成了llama.cpp,使得在多媒体管道中能够基于本地LLM进行文本翻译和转换,从而实现实时字幕生成和改写。
llm 0.32a1
llm 0.32a1 版本发布说明。llm 是由 Simon Willison 开发的一个用于处理大语言模型的 Python 命令行工具和库。
@MaximeRivest: LM15-python,一个专用库,用于在统一API模型下对任何提供商进行LLM同步和异步调用。即将变得…
LM15-python 是一个轻量级的 Python 库,提供通用 API,用于对各种 LLM 提供商进行同步和异步调用。
llm 0.31.1
Simon Willison 发布的 llm 0.31.1,这是一个用于与大语言模型交互的命令行工具。
用于与LLM交互的Prolog库
一个最小的SWI-Prolog库(pllm),它公开了llm/2谓词,用于向兼容OpenAI的聊天/补全端点发送提示并统一响应,支持配置不同的提供商,如OpenAI和Ollama。