用 LiteLLM 和 MCP 打造超灵活的 AI 工具整合

 

随着各种大模型供应商各种推陈出新,在实际已经用可能会随时切换不同的模型,试想一下:你费尽心思搞了个高端 AI 工具整合,客户却突然说要从 Qwen 换到 Deepseek,因为成本更低。或者,他们得用本地模型处理敏感数据,同时又想用云端模型搞定普通查询。如果没搞好抽象层,每次变动都得重写整合代码,简直是噩梦!但有了 LiteLLM 和 Model Context Protocol (MCP),这事儿就变成改个配置那么简单。

这篇文章要给你展示,LiteLLM 的通用网关咋跟 MCP 搭档,打造一个真·可移植的 AI 工具整合。不管你用的是 OpenAI、Anthropic、AWS Bedrock、Qwen、Deepseek,还是通过 Ollama 跑本地模型,你的 MCP 工具都能无缝适配。

如果觉得这篇文章有用请记得关注本公众号哦!

我们的 MCP 服务器:客户服务助手

在聊 LiteLLM 和 MCP 的连接前,先了解下我们要连啥。我们用 FastMCP 搭了个完整的客户服务 MCP 服务器,具体在我们的 MCP 完整指南里有讲。这个服务器是展示不同客户端整合的基础。

我们的 MCP 服务器提供了三个超强的工具,任何 AI 系统都能用:

可用工具:

  • • get_recent_customers:拉取最近活跃的客户列表和他们的状态,帮 AI 了解客户历史和行为模式。
  • • create_support_ticket:创建新的支持工单,可以自定义优先级,验证客户是否存在,还会生成唯一工单 ID。
  • • calculate_account_value:分析购买历史,算出账户总价值和平均购买金额,方便客户分层和支持优先级排序。

服务器还提供了一个客户资源(customer://{customer_id}),可以直接访问客户数据,还有个生成专业客服回复的提示模板。

这套系统的牛掰之处在于,这些工具能适配任何兼容 MCP 的客户端,不管是 OpenAI、Claude、LangChain 还是 DSPy,建一次服务器,就能服务所有框架。这就是 MCP 带来的标准化整合威力!

接下来,我们会讲 LiteLLM 咋连上这个服务器,让这些工具适配超过 100 种 LLM 提供商。

认识 LiteLLM:通用 LLM 网关

LiteLLM 不是普通的 AI 库,它就像 AI API 的“罗塞塔石碑”,让你写一次代码,就能适配所有支持的模型。主要特点有:

  • • 支持 100+ 模型:从 OpenAI、Anthropic 到本地模型和专业提供商。
  • • 统一接口:同一套代码适配所有提供商。
  • • 负载均衡:把请求分配到多个提供商。
  • • 成本追踪:监控使用量和成本。
  • • 失败切换:失败时自动换提供商。
  • • 格式转换:在不同 API 格式间无缝转换。

想深入了解 LiteLLM,可以看看我写的关于多提供商聊天应用和 RAG 增强的文章。

LiteLLM + MCP 的超能力

把 LiteLLM 和 MCP 结合起来,简直无敌:

  • • 一次编写,哪儿都能跑:MCP 工具适配任何 LLM 提供商。
  • • 提供商无关:切换模型不用改工具整合代码。
  • • 成本优化:把请求发到最划算的提供商。
  • • 合规友好:敏感数据用本地模型,普通查询用云端。
  • • 面向未来:新 LLM 提供商上线后,现有工具也能直接用。

打造你的第一个 LiteLLM + MCP 整合

我们来搞个整合,展示 LiteLLM 如何让 MCP 工具适配不同提供商。

步骤 1:配置整合

这是连接 LiteLLM 和 MCP 服务器的核心代码:

import asyncio
import json
import litellm
from litellm import experimental_mcp_client
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from config import Config

asyncdefsetup_litellm_mcp():
    """配置 LiteLLM 和 MCP 工具"""
    
    # 创建 MCP 服务器连接
    server_params = StdioServerParameters(
        command="poetry",
        args=["run""python""src/main.py"]
    )

    asyncwith stdio_client(server_params) as (read, write):
        asyncwith ClientSession(read, write) as session:
            # 初始化 MCP 连接
            await session.initialize()

            # 以 OpenAI 格式加载 MCP 工具
            tools = await experimental_mcp_client.load_mcp_tools(
                session=session,
                format="openai"
            )

            print(f"加载了 {len(tools)} 个 MCP 工具")

关键点在于 format=”openai” 参数。LiteLLM 的实验性 MCP 客户端会把工具加载成 OpenAI 的函数调用格式,然后 LiteLLM 再把这格式翻译成任何提供商能用的格式。

步骤 2:多模型测试

LiteLLM 的强项之一是让同一套代码适配多种模型:

# 根据配置动态选择模型
models_to_test = []

if Config.LLM_PROVIDER == "openai":
    models_to_test.append(Config.OPENAI_MODEL)
elif Config.LLM_PROVIDER == "anthropic":
    models_to_test.append(Config.ANTHROPIC_MODEL)
else:
    # 测试多个提供商
    models_to_test = [Config.OPENAI_MODEL, Config.ANTHROPIC_MODEL]

for model in models_to_test:
    print(f"\n用 {model} 测试...")

    # 同一套代码适配任何模型
    response = await litellm.acompletion(
        model=model,
        messages=messages,
        tools=tools,
    )

这种灵活性让你可以:

  • • 用不同模型测试工具,比较性能。
  • • 根据可用性或成本切换提供商。
  • • 针对不同查询类型用不同模型。

步骤 3:处理工具执行

LiteLLM 把工具执行标准化,适配所有提供商:

# 检查模型是否调用了工具
ifhasattr(message, "tool_calls"and message.tool_calls:
    print(f"🔧 调用了 {len(message.tool_calls)} 个工具")

    # 处理每个工具调用
    for call in message.tool_calls:
        print(f"   - 执行 {call.function.name}")

        # 通过 MCP 执行工具
        arguments = json.loads(call.function.arguments)
        result = await session.call_tool(
            call.function.name,
            arguments
        )

        # 把工具结果加到对话中
        messages.append({
            "role""tool",
            "content"str(result.content),
            "tool_call_id": call.id,
        })

    # 用工具结果获取最终回复
    final_response = await litellm.acompletion(
        model=model,
        messages=messages,
        tools=tools,
    )

这段代码展示了 LiteLLM 如何:

  • • 用标准化格式接收工具调用。
  • • 通过 MCP 执行工具。
  • • 为每个提供商格式化结果。
  • • 处理完整的对话流程。

理解流程

我们来想象 LiteLLM 如何协调不同 LLM 提供商和 MCP 工具的沟通:

这张图展示了 LiteLLM 作为通用翻译器的角色,把不同提供商的格式转换,同时为你的应用保持一致的接口,让多种模型无缝支持 MCP 工具。

现实场景

用 LiteLLM 能干啥有趣的事儿?

场景 1:成本优化路由

# 把简单查询路由到便宜模型
if is_simple_query(message):
    model = "gpt-4.1-mini"  # 更便宜
else:
    model = "gpt-4.1"  # 更强

response = await litellm.acompletion(
    model=model,
    messages=messages,
    tools=tools
)

场景 2:合规性路由

# 敏感数据用本地模型
if contains_pii(message):
    model = "ollama/llama2"  # 本地模型
else:
    model = "claude-sonnet-4-0"  # 云端模型

场景 3:失败切换

# LiteLLM 自动处理失败切换
models = ["gpt-4.1""claude-sonnet-4-0""ollama/mixtral"]

for model in models:
    try:
        response = await litellm.acompletion(
            model=model,
            messages=messages,
            tools=tools
        )
        break  # 成功,跳出循环
    except Exception as e:
        print(f"{model} 失败,试下一个...")
        continue

架构

完整的架构展示了 LiteLLM 如何连接多个世界:

这个架构有几个关键好处:

  • • 单一整合点:你的应用只需要懂 LiteLLM 的接口。
  • • 提供商无关:切换或添加提供商不用改应用代码。
  • • 统一工具访问:MCP 工具在所有提供商上表现一致。
  • • 集中监控:跨所有提供商追踪使用量和成本。

高级模式

模式 1:提供商特定优化

# 为每个提供商定制参数
provider_configs = {
    "gpt-4.1": {"temperature"0.7"max_tokens"2000},
    "claude-sonnet-4-0": {"temperature"0.5"max_tokens"4000},
    "ollama/mixtral": {"temperature"0.8"max_tokens"1000}
}

model = select_best_model(query)
config = provider_configs.get(model, {})

response = await litellm.acompletion(
    model=model,
    messages=messages,
    tools=tools,
    **config  # 提供商特定参数
)

模式 2:成本与性能追踪

# LiteLLM 自动追踪成本
from litellm import completion_cost

response = await litellm.acompletion(
    model=model,
    messages=messages,
    tools=tools
)

cost = completion_cost(completion_response=response)
print(f"这次请求成本:${cost:.4f}")

模式 3:支持工具的流式处理

# 流式处理回复,同时支持工具
asyncfor chunk inawait litellm.acompletion(
    model=model,
    messages=messages,
    tools=tools,
    stream=True
):
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

    # 实时处理流式工具调用
    ifhasattr(chunk.choices[0].delta, "tool_calls"):
        # 实时处理工具调用
        pass

快速上手

克隆示例仓库:

git clone git@github.com:RichardHightower/mcp_article1.git
cd mcp_article1

安装 LiteLLM 和依赖(按 README.md 的说明):

poetry add litellm python-mcp-sdk

配置你的提供商:

# .env 文件
OPENAI_API_KEY=your-key
ANTHROPIC_API_KEY=your-key
# 添加其他提供商的 key

运行整合:

poetry run python src/litellm_integration.py

核心收获

LiteLLM 和 MCP 的组合带来了 AI 工具整合的终极灵活性:

  • • 真·可移植:一次编写,适配任何 LLM 提供商。
  • • 成本优化:为每个查询选最经济的提供商。
  • • 风险规避:无厂商锁定,轻松切换提供商。
  • • 合规就绪:为不同数据敏感度选合适的模型。
  • • 面向未来:新提供商上线后,现有工具直接可用。

通过抽象工具层(MCP)和模型层(LiteLLM),你能打造适应需求变化的 AI 系统,连代码都不用改。这就是企业级的灵活性巅峰!

参考资料

  • • GitHub 仓库:MCP 文章示例 — 所有整合的完整代码 (https://github.com/RichardHightower/mcp_article1)
  • • LiteLLM 文章
    • • LiteLLM Docs — 完整 API 参考 (https://docs.litellm.ai/)
    • • MCP Specification — 协议细节 (https://modelcontextprotocol.io/introduction)

 

(文:PyTorch研习社)

发表评论