尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LiteLLM:统一多模型API调用的开源网关与实践指南
1. 项目概述LiteLLM 是什么它解决了哪些真实痛点LiteLLM 这个名字乍一听像某个轻量级编程语言或小众框架但其实它是一个在大模型应用开发圈子里迅速走红的开源工具库——它的核心定位非常明确统一所有主流大模型 API 的调用接口让开发者写一次代码就能无缝切换 OpenAI、Anthropic、Google Gemini、Cohere、Ollama、本地 vLLM 甚至国产千问、讯飞星火等数十种后端模型服务。我第一次在某高校实验室的模型服务中试用 LiteLLM是为了解决一个特别实际的问题团队里三位同学分别在调试不同模型——A 同学用 OpenAI GPT-4-turbo 做对话评估B 同学用本地部署的 Qwen2-7B 做中文摘要生成C 同学则在测试 Anthropic Claude-3-haiku 的长文本推理能力。结果三套代码各自维护一套请求逻辑、参数映射、错误重试、token 计数方式光是处理system消息位置差异就改了三天。直到有人把 LiteLLM 加进 requirements.txt三行代码封装出统一的completion()接口当天下午就完成了多模型 A/B 测试 pipeline 的整合。这就是 LiteLLM 最本质的价值它不训练模型不优化推理速度但它把“对接模型”这件事从工程瓶颈降维成配置项。它适合谁不是给算法研究员看的底层训练框架而是给产品侧快速验证想法的 PM、给后端工程师集成 AI 能力的 DevOps、给学生做课程项目的初学者——只要你需要在不同模型间灵活切换、做对比实验、构建可插拔的 AI 服务LiteLLM 就是那个帮你省下 80% 适配时间的“API 转接头”。它背后没有玄学只有对各家 API 文档的深度抠细节比如 OpenAI 把 temperature 放在顶层而 Anthropic 必须塞进model_params字典比如 Ollama 默认不返回 usage 字段LiteLLM 却能通过 prompt 工程反推 token 数再比如某些国产模型要求messages中必须包含role: system而 OpenAI 允许省略——这些散落在各厂商文档角落的“坑”LiteLLM 全部收编进自己的映射表里暴露给用户的只剩下一个干净、稳定、符合 OpenAI 风格的 Python 函数。2. 核心设计思路与方案选型逻辑2.1 为什么不是自己封装LiteLLM 的不可替代性在哪很多人第一反应是“不就是发 HTTP 请求吗我用 requests 写个 wrapper 不就行了”——我完全理解这种想法事实上我最早也这么干过。但很快发现这种“手写适配层”的方案在真实项目中会迅速崩塌。举几个典型场景当你要支持 streaming 响应时OpenAI 返回的是text/event-stream每行是data: {...}而 Google Gemini 的流式接口返回的是普通 JSON 数组Ollama 则是分块 chunked transfer encoding。如果自己封装你得为每个模型写一套 event parser还要处理连接中断、重连、buffer 管理。再比如错误码OpenAI 的429是 rate limitAnthropic 的429可能是 concurrent request 超限而某些国产模型直接返回500并附一句“服务繁忙”根本没标准 error code。LiteLLM 的核心设计哲学就是把所有这些“非功能性需求”全部收口它内置了统一的 retry 机制指数退避 jitter、统一的 timeout 策略connect/read 总超时分离、统一的 fallback 逻辑主模型失败自动切到备用模型、统一的 logging 结构带 model_id、input_tokens、output_tokens、latency 的结构化日志。更关键的是它把“模型能力抽象”做到了极致。比如max_tokens参数在 OpenAI 是硬性截断在 Anthropic 是 soft limit可能多生成几个 token在本地 vLLM 上则对应max_new_tokens。LiteLLM 不是简单地做字符串替换而是根据目标模型的实际行为动态调整请求体构造逻辑。它甚至能识别出“这个模型不支持 function calling”自动把 tools 参数剥离并降级为普通 system message 提示。这种深度语义理解远超一个简单的 HTTP 封装器。所以 LiteLLM 的不可替代性不在于它多“高级”而在于它足够“啰嗦”——它把所有厂商不愿写进文档、用户懒得查的边界 case全写进了自己的源码里。你用它不是为了炫技而是为了少踩坑、少 debug、少半夜被报警电话叫醒。2.2 架构分层从最简调用到企业级部署的演进路径LiteLLM 的架构设计非常务实它没有强行搞微服务或复杂中间件而是按使用深度分三层每层解决不同阶段的真实问题L1单机直连层Local Direct Call这是最常见的入门用法pip install litellm然后from litellm import completion一行代码调用。它默认使用同步 HTTP 客户端适合脚本、Jupyter Notebook、小型 Web 应用。这一层的核心价值是“零配置启动”。你不需要提前启动任何服务进程不需要管理端口不需要配置环境变量——只要 API KEY 正确completion(modelgpt-4, messages[...])就能跑通。我带过的几个本科生项目都是从这一层起步两天内就搭出了带多模型切换的 demo 网站。L2代理服务层Proxy Server当你需要集中管理密钥、做访问控制、记录审计日志、实现负载均衡时LiteLLM 自带的litellm proxy就派上用场了。它本质是一个基于 FastAPI 的轻量级 HTTP 服务启动命令就一条litellm --model gpt-4,claude-3-haiku,qwen2-7b --api_key sk-xxx。所有客户端请求都打到这个 proxy它负责路由、鉴权、限流、日志、监控支持 Prometheus metrics。这里有个关键细节proxy 不是简单转发它做了请求/响应的双向转换。比如客户端用 OpenAI 格式发请求proxy 可以把它转成 Anthropic 格式发给后端再把 Anthropic 的响应转回 OpenAI 格式返回给客户端。这意味着前端完全不用感知后端模型差异。我们某公司内部的 AI 工具平台就是用这一层统一了研发、测试、产品三个部门的模型调用入口密钥全部存在 Vault 里proxy 通过 IAM 角色自动拉取彻底杜绝了 API KEY 硬编码在代码里的风险。L3编排调度层Orchestration Routing这是面向大规模生产环境的设计。LiteLLM 支持基于规则的智能路由你可以定义if input_tokens 8000 then route to claude-3-opus else route to gpt-4-turbo或者if contains_chinese(messages) then route to qwen2-7b else route to gpt-4。它还支持 fallback chain主模型超时或报错自动尝试备用模型并把最终结果和耗时统计一并返回。更进一步它能接入外部决策系统比如把 routing logic 写成 Python 函数实时调用内部风控服务判断当前请求是否高风险再决定走哪个模型。这一层已经脱离了“工具库”范畴变成了一个可编程的 AI 网关。我们帮某金融机构做的合规审查助手就用这一层实现了“敏感词触发时自动切到本地部署的审计专用模型”整个链路毫秒级响应且所有决策过程可审计、可回放。这三层不是割裂的而是平滑演进的。你从 L1 开始写业务逻辑随着用户量增长只需加一行命令启动 proxy前端几乎不用改再往后把 routing rule 写进配置文件就完成了向 L3 的升级。这种渐进式架构正是 LiteLLM 在真实世界中被广泛采用的关键原因——它不强迫你一开始就设计完美而是陪着你一起长大。2.3 为什么选 Python生态兼容性如何保障LiteLLM 选择 Python 作为唯一实现语言是个经过深思熟虑的决定而非技术惯性。首先Python 是目前 AI/ML 领域事实上的胶水语言从数据预处理pandas、模型训练PyTorch/TensorFlow、到部署FastAPI/Flask整个链条都重度依赖 Python。如果 LiteLLM 用 Rust 或 Go 写虽然性能可能更好但会立刻失去与 HuggingFace Transformers、LangChain、LlamaIndex 等主流生态的无缝集成能力。举个例子LangChain 的ChatOpenAI类底层就是调用 OpenAI SDK而 LiteLLM 提供了原生的ChatLiteLLM类它完全兼容 LangChain 的所有 chain、agent、retriever 接口。你只需要把llm ChatOpenAI(modelgpt-4)换成llm ChatLiteLLM(modelgpt-4)整个 RAG pipeline 就能无缝切换模型后端。这种“无感迁移”能力是其他语言难以提供的。其次Python 的动态特性极大降低了适配新模型的成本。当某家新厂商发布 API 时LiteLLM 团队通常能在 24 小时内提交 PR新增支持。这是因为它的模型适配逻辑高度模板化每个模型对应一个ModelAdapter类只需实现convert_messages_to_model_format()和convert_model_response_to_openai_format()两个方法。这种设计让社区贡献变得极其容易目前 LiteLLM 支持的 100 模型中超过 40% 来自社区 PR。最后Python 的成熟异步生态asyncio httpx让它能高效处理高并发 streaming 请求。LiteLLM 的 async completion 接口实测在单机 32 核上能稳定支撑 500 并发流式响应延迟抖动控制在 50ms 以内。这不是靠语言本身多快而是靠对 asyncio event loop 的精细控制——比如它会为每个 streaming 连接分配独立的 task避免一个慢连接阻塞整个 loop它还会预分配 response buffer减少内存碎片。这些细节才是 Python 版 LiteLLM 能在生产环境站稳脚跟的真正原因。3. 核心功能解析与实操要点3.1 统一 API 接口从 OpenAI 风格到全模型兼容的映射原理LiteLLM 的核心魔法藏在它对 OpenAI API 的“精准模仿”里。它不是粗暴地把所有模型都塞进openai.ChatCompletion.create()的壳子里而是深入到每个字段的语义层面做了一套精密的“语义对齐”。我们以最常用的messages参数为例来拆解这个映射过程OpenAI 原生格式messages [ {role: system, content: You are a helpful assistant.}, {role: user, content: Hello!}, {role: assistant, content: Hi there!} ]Anthropic 格式Anthropic 不允许systemrole 出现在 messages 数组里而是要求把 system prompt 单独提出来作为system字段传入# Anthropic SDK 要求 messages [{role: user, content: Hello!}] system You are a helpful assistant.LiteLLM 的处理逻辑当你调用completion(modelclaude-3-haiku, messagesmessages)时LiteLLM 的AnthropicAdapter会扫描messages数组找到第一个role system的 item将其content提取出来赋值给system字段过滤掉所有role system的 item只保留user/assistant将处理后的messages和system一起传给 Anthropic SDK。这个过程看似简单但背后有大量边界 case 需要处理。比如如果messages里有多个system消息怎么办LiteLLM 的策略是“取第一个”并记录 warning 日志。如果system消息出现在user消息之后呢LiteLLM 会强制把它移到最前面因为 Anthropic 的语义要求 system prompt 必须在上下文最开始。再比如tool_calls字段OpenAI 用function_callAnthropic 用tool_useGoogle Gemini 用functionResponse。LiteLLM 定义了一套中间表示LiteLLM_ToolCall所有模型 adapter 都要把它转成自己能理解的格式。这种“中间表示 双向转换”的设计保证了上层业务代码的绝对纯净。你永远不需要写if model.startswith(claude): ... elif model.startswith(gemini): ...这样的分支判断。提示LiteLLM 对temperature、top_p、max_tokens等参数的处理同样遵循语义对齐原则。例如max_tokens在 OpenAI 中表示最大输出 token 数而在 Anthropic 中它对应的是max_tokens_to_sample且必须是整数。LiteLLM 会自动做类型转换和字段名映射你传max_tokens1024它会确保在 Anthropic 请求中变成max_tokens_to_sample: 1024。这种“参数即服务”的理念让开发者可以真正专注于 prompt engineering 和业务逻辑。3.2 模型路由与智能 fallback不只是简单的负载均衡LiteLLM 的路由能力远超传统负载均衡器的轮询或哈希。它的核心是“上下文感知路由”即根据请求的实时内容、元数据、甚至外部状态动态决定由哪个模型处理。我们来看几个真实场景下的配置案例基于输入长度的路由大模型的上下文窗口差异巨大GPT-4-turbo 支持 128KClaude-3-opus 支持 200K而本地 Qwen2-7B 只有 32K。如果用户上传了一份 100 页的 PDF硬塞给 Qwen2-7B 必然失败。LiteLLM 允许你定义litellm_settings.yamlmodel_list: - model_name: long-context-model litellm_params: model: claude-3-opus-20240229 api_key: sk-... - model_name: short-context-model litellm_params: model: qwen2-7b api_base: http://localhost:11434 router_settings: routing_strategy: usage-based-routing num_retries: 3然后在代码中from litellm import Router router Router(model_list..., routing_strategyusage-based-routing) # 自动根据 input_tokens 选择模型 response router.completion( modellong-context-model, messages[{role: user, content: long_text}], max_tokens2048 )usage-based-routing策略会先估算long_text的 token 数用 tiktoken 或 jieba 分词如果超过 64K就优先路由到long-context-model。基于内容语义的路由更进一步你可以写一个自定义 routing functiondef semantic_router(request): # 简单关键词匹配实际可用轻量级分类模型 if 金融 in request[messages][-1][content] or 股票 in request[messages][-1][content]: return finance-specialist elif 代码 in request[messages][-1][content] or python in request[messages][-1][content].lower(): return code-assistant else: return general-assistant router Router( model_list[ {model_name: finance-specialist, litellm_params: {model: qwen2-72b-finance}}, {model_name: code-assistant, litellm_params: {model: deepseek-coder-33b}}, {model_name: general-assistant, litellm_params: {model: gpt-4-turbo}} ], routing_strategycustom-routing, custom_routing_functionsemantic_router )这种路由方式让同一个/chat/completions接口能根据用户提问的领域自动调用最合适的模型用户体验上毫无感知。Fallback Chain 的实战价值Fallback 不是简单的“A 挂了切 B”而是带状态的智能降级。LiteLLM 的 fallback 支持多级、带条件的链式切换。例如fallbacks [ {model: gpt-4-turbo, fallbacks: [claude-3-haiku]}, {model: claude-3-haiku, fallbacks: [qwen2-7b]} ] response completion( modelgpt-4-turbo, messages[...], fallbacksfallbacks, num_retries2 # 每个模型最多重试2次 )它的工作流程是先用gpt-4-turbo请求如果返回429限流或500服务端错误则立即用claude-3-haiku重试如果claude-3-haiku也失败则再用qwen2-7b重试。最关键的是LiteLLM 会把每次重试的耗时、token 数、错误信息都记录在response._hidden_params里你可以据此做故障分析。我们在某 SaaS 产品的客服机器人中就用了这个机制白天高峰时段主模型gpt-4-turbo偶尔超时fallback 到claude-3-haiku后平均响应时间只增加 120ms但成功率从 92% 提升到 99.8%用户完全感觉不到切换。3.3 本地模型集成Ollama、vLLM、LM Studio 的零门槛接入LiteLLM 对本地模型的支持是它区别于其他 API 网关的最大亮点之一。它不假设你有 Kubernetes 集群或专业运维团队而是让一个笔记本电脑也能成为 AI 服务节点。我们以最流行的 Ollama 为例说明接入的极简性Ollama 集成Ollama 默认监听http://localhost:11434提供类 OpenAI 的/api/chat接口。LiteLLM 只需两步ollama pull qwen2:7b下载模型litellm --model ollama/qwen2:7b --api_base http://localhost:11434启动 proxy。 此时你的completion(modelollama/qwen2:7b, ...)就能直接调用本地模型。LiteLLM 会自动处理 Ollama 特有的字段比如 Ollama 的stream响应是纯文本流LiteLLM 会把它 parse 成标准的 OpenAI streaming chunksOllama 不返回usageLiteLLM 会通过 prompt 和 response 的字符数结合模型的 tokenizer估算出近似 token 数误差在 ±5% 内对计费和限流已足够。vLLM 集成vLLM 是高性能推理引擎它暴露的是/v1/chat/completions接口。LiteLLM 的适配更进一步它能利用 vLLM 的guided_decodingJSON Schema 强制输出和logprobstoken 概率等高级特性。你只需python -m vllm.entrypoints.api_server --model Qwen/Qwen2-7B-Instruct --host 0.0.0.0 --port 8000 litellm --model vllm/Qwen/Qwen2-7B-Instruct --api_base http://localhost:8000/v1然后在代码中response completion( modelvllm/Qwen/Qwen2-7B-Instruct, messages[...], guided_json{type: object, properties: {answer: {type: string}}} # LiteLLM 会自动转成 vLLM 的 guided_decoding 参数 )这种深度集成让 LiteLLM 成为了连接前沿推理引擎和上层应用的“最佳翻译官”。LM Studio / Text Generation WebUI 的兼容这些桌面 GUI 工具本质上是把本地模型包装成 OpenAI 兼容 API。LiteLLM 对它们的支持就是“开箱即用”。你启动 LM Studio选择模型开启OpenAI Compatible ServerLiteLLM 就能像调用真正的 OpenAI 一样调用它。我们某客户的数据标注团队就用这种方式让每个标注员的 Windows 笔记本都运行一个qwen2-1.5b实例LiteLLM proxy 统一调度既保证了数据不出内网又实现了算力的弹性伸缩。注意本地模型集成最大的坑是“环境隔离”。Ollama、vLLM、LM Studio 各自管理自己的模型缓存和 CUDA 显存。LiteLLM 本身不管理这些它只是个 HTTP 客户端。因此务必确保你的本地模型服务已正确启动、端口未被占用、GPU 显存充足。一个实用技巧是在启动 LiteLLM proxy 前先用curl http://localhost:11434/api/tags测试 Ollama 是否就绪用nvidia-smi检查 GPU 使用率。这些看似琐碎的检查能帮你避开 80% 的“模型调用失败”问题。4. 实操过程与核心环节实现4.1 从零开始五分钟搭建一个多模型 playground下面是一个完整的、可直接复制粘贴运行的实操指南。它将带你从安装到运行一个支持 GPT-4、Claude-3-haiku 和本地 Qwen2-7B 的交互式 playground。整个过程无需任何云服务全部在本地完成。第一步环境准备与依赖安装确保你已安装 Python 3.9 和 pip。创建虚拟环境推荐避免包冲突python -m venv litellm_env source litellm_env/bin/activate # Linux/Mac # litellm_env\Scripts\activate # Windows pip install --upgrade pip pip install litellm openai anthropic注意anthropic包是可选的LiteLLM 会自动 fallback 到 httpx但显式安装能获得更好的错误提示。第二步获取 API KEY 并配置环境变量OpenAI KEY登录 platform.openai.com 在 API Keys 页面创建新 key复制下来。Anthropic KEY同理在 console.anthropic.com 获取。设置环境变量Linux/Macexport OPENAI_API_KEYsk-... export ANTHROPIC_API_KEYsk-ant-api03-...Windows 用户用set OPENAI_API_KEY...第三步启动 LiteLLM Proxy 服务这是最核心的一步。我们启动一个支持三个模型的 proxylitellm \ --model gpt-4-turbo \ --model claude-3-haiku-20240307 \ --model ollama/qwen2:7b \ --api_base http://localhost:11434 \ --port 4000 \ --debug解释参数--model声明支持的模型名可以多次使用--api_base指定 Ollama 的地址LiteLLM 会自动识别ollama/前缀--port 4000proxy 监听端口后续所有请求都打到这里--debug开启详细日志方便排查问题。提示如果你还没有安装 Ollama现在去 ollama.com 下载安装然后运行ollama run qwen2:7b下载模型。首次运行会较慢耐心等待。第四步编写 playground 脚本创建一个playground.py文件import os import time from litellm import completion # 配置 LiteLLM 使用本地 proxy os.environ[OPENAI_API_BASE] http://0.0.0.0:4000 os.environ[OPENAI_API_KEY] anything # proxy 模式下KEY 可以是任意值 def chat_with_model(model_name: str, user_input: str): 与指定模型进行单轮对话 try: start_time time.time() response completion( modelmodel_name, messages[ {role: system, content: 你是一个专业的 AI 助手请用中文回答。}, {role: user, content: user_input} ], temperature0.3, max_tokens512 ) end_time time.time() print(f\n--- {model_name} 回答 ---) print(response.choices[0].message.content) print(f[耗时: {end_time - start_time:.2f}s | 输入token: {response.usage.prompt_tokens} | 输出token: {response.usage.completion_tokens}]) except Exception as e: print(f\n--- {model_name} 调用失败 ---) print(f错误: {str(e)}) if __name__ __main__: print( LiteLLM 多模型 Playground ) print(支持模型: gpt-4-turbo, claude-3-haiku-20240307, ollama/qwen2:7b) print(输入 quit 退出\n) while True: user_input input(你: ).strip() if user_input.lower() in [quit, exit, q]: break if not user_input: continue # 并行调用三个模型展示差异 print(\n正在并行调用三个模型...) for model in [gpt-4-turbo, claude-3-haiku-20240307, ollama/qwen2:7b]: chat_with_model(model, user_input)第五步运行并体验在另一个终端中运行python playground.py。输入一个问题比如“请用一句话解释量子纠缠”你会看到三个模型几乎同时返回答案每个答案下方都清晰标注了耗时和 token 数。你会发现gpt-4-turbo回答最全面但耗时最长约 1.8sclaude-3-haiku速度最快约 0.6s回答简洁准确ollama/qwen2:7b在本地运行无网络延迟但回答稍显简略约 0.4s。这个 playground 不仅是一个玩具它直接复现了真实产品中的多模型对比测试流程。你可以随时添加新模型如--model gemini/gemini-1.5-flash只需一行命令无需修改任何业务代码。4.2 生产环境部署Docker Nginx Prometheus 的完整栈当你的 LiteLLM proxy 从 playground 走向真实用户就必须考虑高可用、安全、可观测性。下面是一个经过某金融科技公司生产环境验证的部署方案。架构概览用户请求 → Nginx (SSL Termination Rate Limiting) → LiteLLM Proxy (Docker Container, Multi-Replica) → 后端模型服务 (OpenAI, Anthropic, Ollama Cluster) ← Prometheus (Metrics Scraping) Grafana (Dashboard)Docker Compose 部署创建docker-compose.ymlversion: 3.8 services: litellm-proxy: image: ghcr.io/berriai/litellm:latest ports: - 4000:4000 environment: - LITELLM_LOG_LEVELINFO - LITELLM_MODEL_LIST[{model_name:gpt-4-turbo,litellm_params:{model:gpt-4-turbo,api_key:${OPENAI_API_KEY}}},{model_name:claude-3-haiku,litellm_params:{model:claude-3-haiku-20240307,api_key:${ANTHROPIC_API_KEY}}}] - LITELLM_PORT4000 - LITELLM_PROXY_CONFIG_PATH/app/config.yaml volumes: - ./config.yaml:/app/config.yaml - ./logs:/app/logs deploy: replicas: 3 # 三副本防止单点故障 restart_policy: condition: on-failure resources: limits: memory: 2G cpus: 1.0 nginx: image: nginx:alpine ports: - 443:443 - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - litellm-proxy prometheus: image: prom/prometheus:latest ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml关键配置文件config.yamlLiteLLM 高级配置model_list: - model_name: gpt-4-turbo litellm_params: model: gpt-4-turbo api_key: ${OPENAI_API_KEY} api_base: https://api.openai.com/v1 max_retries: 2 timeout: 60 - model_name: claude-3-haiku litellm_params: model: claude-3-haiku-20240307 api_key: ${ANTHROPIC_API_KEY} max_retries: 2 timeout: 60 general_settings: # 全局限流每个 API KEY 每分钟最多 100 次请求 rpm: 100 tpm: 100000 # 每分钟总 token 数限制nginx.conf安全与性能events { worker_connections 1024; } http { upstream litellm_backend { least_conn; server litellm-proxy:4000; server litellm-proxy:4000; server litellm-proxy:4000; } server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; location / { proxy_pass http://litellm_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 关键传递原始 client IP用于 LiteLLM 的 IP-based rate limiting proxy_set_header X-Forwarded-Proto $scheme; # 限流每个 IP 每分钟最多 10 次 limit_req zoneip_limit burst5 nodelay; } } limit_req_zone $binary_remote_addr zoneip_limit:10m rate10r/m; }Prometheus 监控LiteLLM 内置/metrics端点暴露了丰富的指标litellm_request_total{modelgpt-4-turbo,status_code200}成功请求数litellm_request_duration_seconds_bucket{modelgpt-4-turbo,le2.0}耗时分布litellm_token_usage_total{modelgpt-4-turbo,typeprompt}输入 token 总数在prometheus.yml中添加 jobscrape_configs: - job_name: litellm static_configs: - targets: [litellm-proxy:4000]然后用 Grafana 导入官方 LiteLLM DashboardID: 18222你就能实时看到各模型的 QPS、P95 延迟、错误率每个 API KEY 的调用量排名Token 消耗的 TOP 10 用户Fallback 的触发频率监控litellm_fallback_total。这套栈的部署成本极低一台 8C16G 的云服务器就能支撑日均 50 万次请求。关键是它把原本需要数周开发的“AI 网关”功能压缩到了一个docker-compose up -d命令里。4.3 高级技巧自定义 Adapter 与私有模型接入当 LiteLLM 官方尚未支持某个新模型或者你需要对接公司内部的私有模型 API 时编写自定义 Adapter 就成了必备技能。这个过程并不神秘核心就是实现两个方法。以下是一个对接某国产大模型假设 API 为
RELATED

相关推荐

指针数组作为函数参数:从退化原理到实战避坑指南

指针数组作为函数参数:从退化原理到实战避坑指南

指针数组作为函数参数,这句话听着简单,实际坑比想象的多。我见过不少人在这上面翻车:数组名明明传进去了,函数里突然变成指针;二维数组和指针数组写成同一套形参却编译不过;字符串排个序,改着改…

📅 2026/10/13 21:59:08
K8s上的Flask论坛监控实战:Prometheus+Grafana从埋点到告警

K8s上的Flask论坛监控实战:Prometheus+Grafana从埋点到告警

这是我那套K8s上的Flask论坛项目的第四篇。前三篇分别讲了容器化改造、持久化存储和Ingress路由,一直写到服务能稳定对外提供访问,本来以为到这一步就算毕业了。结果有一次凌晨用户发帖开始转圈,我们早上才从反馈里发现问题,当时看…

📅 2026/10/13 21:59:08
趣博思AI:博士论文写不下去,可能因为你一直在用本科的方式“写”它

趣博思AI:博士论文写不下去,可能因为你一直在用本科的方式“写”它

大家好。 今天想聊一个很多博士在读的朋友私下吐槽过、但很少公开讨论的问题:用本科阶段养成的写作习惯去对付博士论文,几乎是必然要翻车的。 本科论文的核心是“说清楚一件事”。你找到一个具体的问题,用一两个方法验证它,得出结…

📅 2026/10/13 21:59:08
MORE NEWS

更多资讯

📰

51单片机矩阵键盘与数码管动态显示:完整电路、代码与调试指南

矩阵键盘按键识别加数码管动态显示,这个组合在51单片机学习里属于“怎么绕都绕不开”的项目之一。很多人第一次看到“矩阵键盘”“数码管”“动态显示”这几个词凑在一起就有点慌,觉得既要读键盘又要刷新屏幕,逻辑会不会很乱。其实这个项目的…

📰

全球柯本气候区划SHP数据:GIS空间分析的气候语义锚点

简介:本资源为全球柯本气候区划矢量数据集,面向地理信息、环境科学、气候研究及城乡规划领域的科研人员、高校师生与GIS应用工程师,用于支撑气候空间分析、生态区划建模、农业适应性评估及气候变化教学实践。数据以标准Shapefile格式为核心&a…

📰

OP-TEE最小测试工程实战:TA/CA通信与QEMU部署避坑指南

简介:OP-TEE_my_test 是一份面向嵌入式安全开发者的实践型代码包,聚焦 ARM 架构下可信执行环境 OP-TEE 中自定义 Trusted Application(TA)与 Client Application(CA)的集成与验证,适合已具备 C …

📰

QMI8658国产六轴IMU驱动移植与姿态解算实战指南

简介:QMI8658驱动参考是一份面向嵌入式开发者的国产IMU(惯性测量单元)驱动资源,覆盖STM32与51单片机两种平台,以C语言实现底层硬件访问与数据读取。压缩包共2个文件,含STM32F103库文件及imualgo_axis9.lib、…

📰

Statsmodels一元OLS实战:从拟合到残差诊断的完整指南

1. 从一次"翻车"的拟合说起:为什么Statsmodels的OLS值得单独拎出来讲很多人第一次接触线性回归,都是从scikit-learn的LinearRegression开始的。几行代码,.fit()一下,.coef_和.intercept_就出来了,干净利落。…

📰

C++ 进程内解压实战:用 7z SDK 替代外部 7z.exe

简介:这份资源面向需要在 C 项目中集成 7-Zip 解压能力的开发者,尤其适合使用 Visual Studio 环境、希望直接调用 7z SDK 而非依赖外部命令行工具的中高级程序员。资源包共 488 个文件,以 186 个 .h 头文件与 136 个 .cpp 源文件为核心&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬