Any-LLM:多厂商 LLM 统一接口
开源路由层屏蔽 LLM 厂商差异,避免应用绑定单一供应商。125 points 说明开发者需求旺盛。
开源路由层屏蔽 LLM 厂商差异,避免应用绑定单一供应商。125 points 说明开发者需求旺盛。
使用单一、统一的接口与任意 LLM Provider 通信。无需修改代码,即可在 OpenAI、Anthropic、Azure / Microsoft Foundry、Mistral、Ollama 等 Provider 之间切换。
文档 | otari.ai | 体验 Demo | 参与贡献
pip install 'any-llm-sdk[mistral,ollama]'
export MISTRAL_API_KEY="YOUR_KEY_HERE" # or OPENAI_API_KEY, etc
from any_llm import completion
import os
# Make sure you have the appropriate environment variable set
assert os.environ.get('MISTRAL_API_KEY')
response = completion(
model="mistral-small-latest",
provider="mistral",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
就这么简单!修改 Provider 名称,并添加对应 Provider 的密钥,即可在不同的 LLM Provider 之间切换。
正在从 LiteLLM 迁移?你的 API 密钥和环境变量可以原封不动地继续使用。安装 SDK 时加入所需 Provider 的 extras,然后更新 import 和模型字符串:
pip install 'any-llm-sdk[openai,anthropic]' # or [all] for everything
# before
from litellm import completion
response = completion(model="openai/gpt-4o", messages=[...])
# after
from any_llm import completion
response = completion(model="openai:gpt-4o", messages=[...])
请参阅“支持的 Provider”,映射你现有的模型字符串。
这就是迁移的全部工作——不需要代理,也不需要额外配置。
准备好你想使用的各个 LLM Provider 的 API 密钥。
安装特定 Provider 的支持:
pip install 'any-llm-sdk[openai]' # Just OpenAI
pip install 'any-llm-sdk[mistral,ollama]' # Multiple providers
pip install 'any-llm-sdk[all]' # All supported providers
请查看支持的 Provider 列表,选择你需要的 Provider。
为选定的 Provider 设置环境变量:
export OPENAI_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
export MISTRAL_API_KEY="your-key-here"
# ... etc
你也可以直接在代码中传入 API 密钥(参见用法示例)。
如需预算管理、API 密钥管理、用量分析和多租户支持,请参阅 mozilla-ai/otari。
简单、统一的接口——所有 Provider 共用一个函数,只需修改字符串即可切换模型。
对开发者友好——提供完整的类型提示,改善 IDE 支持,并给出清晰、可直接采取行动的错误信息。
利用 Provider 官方 SDK——确保最大程度的兼容性。
保持与框架无关,因此可以用于不同的项目和使用场景。
经过实战检验——为我们自己的生产工具 any-agent 提供支持。
any-llm 提供两种与 LLM Provider 交互的主要方式:
推荐方式:分别使用 provider 和 model 参数:
from any_llm import completion
import os
# Make sure you have the appropriate environment variable set
assert os.environ.get('MISTRAL_API_KEY')
response = completion(
model="mistral-small-latest",
provider="mistral",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
另一种语法:使用组合的 provider:model 格式:
response = completion(
model="mistral:mistral-small-latest", # <provider_id>:<model_id>
messages=[{"role": "user", "content": "Hello!"}]
)
对于需要复用 Provider、执行多种操作或进行更多控制的应用:
from any_llm import AnyLLM
llm = AnyLLM.create("mistral", api_key="your-mistral-api-key")
response = llm.completion(
model="mistral-small-latest",
messages=[{"role": "user", "content": "Hello!"}]
)
两种方式支持完全相同的功能:流式输出、tools、Responses API 等。
对于实现了 OpenAI 风格 Responses API 的 Provider,请使用 responses 或 aresponses:
from any_llm import responses
result = responses(
model="gpt-4o-mini",
provider="openai",
input_data=[
{"role": "user", "content": [
{"type": "text", "text": "Summarize this in one sentence."}
]}
],
)
# Non-streaming returns an OpenAI-compatible Responses object alias
print(result.output_text)
provider_id 应与我们支持的 Provider 名称一致。
model_id 会被直接传给 Provider。要查找可用模型,可以:
list_models API(前提是该 Provider 支持)LLM Provider 的接口生态十分碎片化。虽然 OpenAI API 已成为事实标准,但不同 Provider 在参数名称、响应格式和功能集方面仍存在细微差异。因此,我们需要轻量级封装,在保持一致接口的同时,妥善处理这些差异。
LiteLLM:很受欢迎,但它重新实现了 Provider 接口,而不是利用官方 SDK,因此可能存在兼容性问题。
AISuite:方案简洁、模块化,但缺少积极维护、全面测试以及现代 Python 类型规范。
特定于框架的方案:一些 Agent 框架要么依赖 LiteLLM,要么自行实现 Provider 集成,进一步造成了生态碎片化。
仅代理方案:OpenRouter 和 Portkey 等方案要求在你的代码与 LLM Provider 之间部署托管代理。
any-llm 通过尽可能利用官方 SDK、保持与框架无关的设计,并且不要求部署代理服务器,解决了这些问题。
完整文档——完整的指南和 API 参考。
支持的 Provider——所有受支持 LLM Provider 的列表。
Cookbook 示例——深入的用法示例。
欢迎各种技能水平的开发者参与贡献!请查看我们的贡献指南,或创建 issue 讨论变更。
本项目采用 Apache License 2.0 许可证——详情请参阅 LICENSE 文件。