技术热点落地:Ollama + LiteLLM 混合路由实现本地与云端 LLM 统一调用(2026-05-24)
适用场景与目标
谁需要这个架构:
- 成本敏感团队:每天大量 API 调用被云端 LLM 消耗大量预算,希望用本地模型承接简单任务。
- 隐私敏感场景:用户数据不能上云,但又有复杂任务需要 Claude/GPT-4 级别能力。
- 混合推理需求:既有低延迟简单问答,也有需要强推理的复杂任务,需要动态路由。
- 开发效率优先:不想维护多套 SDK,希望用统一接口调用本地+云端模型。
核心目标: 部署一套「本地 Ollama 模型」+「云端 Claude」的统一网关,按任务复杂度、数据敏感度自动路由,降低 60%+ 云端 API 成本,同时保证复杂任务质量。
最小可行方案(MVP)
架构概览
客户端 → LiteLLM(统一网关) → Ollama(本地模型)
↘ Anthropic Claude(云端)
Step 1:安装 Ollama
# macOS / Linux 一键安装
curl -fsSL https://ollama.com/install.sh | sh
# 拉取模型(推荐 7B 级,性价比最高)
ollama pull llama3.2:3b # 简单问答、分类、摘要
ollama pull qwen2.5:7b # 中文场景首选
# 验证运行
ollama run llama3.2:3b "你好,介绍一下自己"
Windows: 直接下载 ollama-windows-amd64.exe,双击运行。
Step 2:安装 LiteLLM
# 推荐用 venv 隔离
python3 -m venv litellm-env
source litellm-env/bin/activate # Windows: litellm-env\Scripts\activate
pip install litellm[proxy]
Step 3:配置 LiteLLM 路由规则
创建 config.yaml:
model_list:
- model_name: llama-local
litellm_params:
model: ollama/llama3.2:3b
api_base: http://localhost:11434
suppress_debug_warning: true
- model_name: qwen-local
litellm_params:
model: ollama/qwen2.5:7b
api_base: http://localhost:11434
- model_name: claude-cloud
litellm_params:
model: anthropic/claude-sonnet-4-20250514
api_key: os.environ/ANTHROPIC_API_KEY
router_settings:
redis_host: localhost
redis_port: 6379
priority: random # 可选:least-cost(按成本优先)
Step 4:启动 LiteLLM 代理网关
litellm --config config.yaml --port 4000
Step 5:写一个智能路由客户端
import litellm
import os
# 设置 API Key
os.environ["ANTHROPIC_API_KEY"] = "sk-ant-xxxx"
def route_task(prompt: str, require_high_quality: bool = False, is_sensitive: bool = False):
"""
路由策略:
- 敏感数据 → 本地模型
- 高质量需求 + 非敏感 → Claude 云端
- 其他 → 本地模型(最低成本)
"""
if is_sensitive:
return litellm.completion(
model="ollama/qwen-local",
messages=[{"role": "user", "content": prompt}]
)
if require_high_quality and not is_sensitive:
return litellm.completion(
model="anthropic/claude-sonnet-4-20250514",
messages=[{"role": "user", "content": prompt}]
)
# 默认本地模型,成本最低
return litellm.completion(
model="ollama/llama-local",
messages=[{"role": "user", "content": prompt}]
)
# 使用示例
result = route_task("帮我写一段 Python 快速排序", require_high_quality=True)
print(result["choices"][0]["message"]["content"])
关键实现细节
1. Ollama 模型选择建议(2026)
| 模型 | 参数量 | 适用场景 | 内存要求 |
|---|---|---|---|
| llama3.2:3b | 3B | 分类、摘要、简单问答 | ~2GB |
| qwen2.5:7b | 7B | 中文对话、通用推理 | ~6GB |
| phi-4-mini | 3.8B | 代码、指令遵循 | ~4GB |
| mistral-nemo | 12B | 高质量通用(需 Mac M2+) | ~12GB |
内存不够? 用 ollama ps 查看当前加载的模型,不用的模型用 ollama stop <model> 卸载。
2. LiteLLM 的 cost routing 自动节省成本
Litellm 内置 least-cost 路由策略,可以自动选择最便宜的模型:
# 启用自动 cost 路由
response = litellm.acompletion(
model="gpt-4o, claude-sonnet-4, llama-local",
messages=[{"role": "user", "content": "解释什么是闭包"}],
routing_strategy="least-cost"
)
LiteLLM 会按配置的模型成本自动选最便宜的,本地模型成本几乎为零。
3. 同模型双写(写入本地 + 云端)
import asyncio
async def dual_write(prompt: str):
tasks = [
litellm.acompletion(model="ollama/qwen-local", messages=[{"role": "user", "content": prompt}]),
litellm.acompletion(model="anthropic/claude-sonnet-4-20250514", messages=[{"role": "user", "content": prompt}])
]
results = await asyncio.gather(*tasks, return_exceptions=True)
# 成功的结果
for r in results:
if not isinstance(r, Exception):
return r
常见坑与规避清单
坑 1:Ollama 模型下载极慢
原因: 默认从 registry.chain位置.com 下载,CDN 覆盖差。
解决:
# 换国内镜像(如果有),或者用 modelscope 加速
# 或者先手动下载 GGUF 文件,然后用 ollama create 导入
ollama create qwen2.5 -f /path/to/model.gguf
坑 2:Ollama 内存不足(OOM)
原因: 同时加载多个大模型。
解决: 用 OLLAMA_NUM_PARALLEL=1 限制并发数,只保留一个模型在内存。
export OLLAMA_NUM_PARALLEL=1
export OLLAMA_KEEP_ALIVE=5m # 5分钟无请求自动卸载模型
ollama serve
坑 3:LiteLLM 路由到 Ollama 超时
原因: Ollama 处理速度慢,LiteLLM 默认超时 60s。
解决:
response = litellm.completion(
model="ollama/llama-local",
messages=[...],
timeout=180 # 增加到 180 秒
)
坑 4:Claude 云端 API 费用暴涨
原因: 所有请求无脑走 Claude。
解决: 加严路由规则,简单的分类/抽取任务全部强制走本地:
def classify(prompt: str):
# 分类任务 100% 本地,节省 API 费用
return litellm.completion(model="ollama/llama-local", messages=[{"role": "user", "content": prompt}])
坑 5:本地模型输出质量差
原因: 3B 模型对复杂推理确实不够用。
解决: 复杂任务设置 require_high_quality=True 走云端;或者换 7B 以上模型。
成本/性能/维护权衡
| 维度 | 纯云端 | Ollama 本地 | 混合路由(本方案) |
|---|---|---|---|
| API 成本 | $0.01-0.1/千token | ~$0 | 降低 60-80% |
| 推理延迟 | 1-3s | 0.2-1s(本地) | 根据路由波动 |
| 部署复杂度 | 低 | 中 | 中 |
| 数据隐私 | 差(上传云) | 好(全本地) | 好(敏感数据本地) |
| 复杂推理质量 | 最高 | 中等(7B+ 可接受) | 按需使用 Claude |
维护成本: Ollama 更新模型只需 ollama pull;LiteLLM 升级 pip install litellm -U。整体维护难度低于自建模型服务。
一周内可执行行动清单
- Day 1-2: 在个人机器上安装 Ollama,拉取
llama3.2:3b或qwen2.5:7b,跑通第一个本地对话。 - Day 3: 安装 LiteLLM,配置本地模型为 provider,理解
completion()调用接口。 - Day 4: 配置 Claude 云端 key,打通双路路由,跑通同一个 prompt 在本地和云端同时返回。
- Day 5: 实现智能路由函数,按敏感度/复杂度自动选择模型,统计成本节省。
- Day 6: 添加 Redis(可选)启用
least-cost策略,性能要求高的场景加并发控制。 - Day 7: 整理这套架构到团队 wiki,准备下周一推广到项目原型。
总结: Ollama 让本地 LLM 部署从「极客玩具」变成「工程选项」,LiteLLM 把本地+云端封装成统一接口,配上智能路由规则,就成了一套成本可控、隐私安全、质量有保障的 AI 工程架构。2026 年这个组合已经是中小团队 AI 工程化的标配路径,值得一周内动手验证。