litellm 自定义提供商扩展指南3 个组件完成任意 LLM 接入【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm你手上跑着一个自研推理服务接口稳定但业务方只认 OpenAI 的调用格式。litellm 自定义提供商扩展开发就是为这个场景准备的继承一个模板类、写好双向参数转换、按命名约定放进 provider 目录你的服务立刻能被像 GPT-4 一样统一调用。拆解机制骨架、神经与注册表litellm 把「接一个新 LLM」拆成三个职责看懂它们就能照猫画虎。骨架在litellm/llms/base.py它定义了每个提供商必须兑现的四个动作completion、acompletion、streaming、astreaming即同步/异步 × 非流式/流式的四种组合。仓库里还备好了模板litellm/llms/custom_llm.py四个方法的函数签名全部写死你只管填函数体。神经是参数转换层负责两次翻译请求进你的 API 前把 OpenAI 风格的 messages 翻译成你服务的入参响应回来后再把你的出参翻译回统一的 ModelResponse。现有 provider 全是这个套路比如litellm/llms/langgraph/chat/transformation.py里的 transform_request / transform_response 两个方法值得逐行读一遍。注册表不用手写。litellm 按litellm/llms/下的目录名自动发现 provider路由时把模型名按provider/model拆开查表逻辑在litellm/utils.py的 get_llm_provider。目录建好、名字写对注册就完成了。动手构建自定义 LLM 接入三步走搭骨架如何继承模板实现四个核心方法把 handler 放进litellm/llms/mypkg/chat/继承 CustomLLM 即拿齐全套签名示例只列必要参数from litellm.llms.custom_llm import CustomLLM # 模板自带四个方法签名 from litellm.llms.custom_httpx.http_handler import HTTPHandler from litellm.types.utils import ModelResponse, Usage class MyProviderHandler(CustomLLM): # 骨架继承即完成 def completion(self, model, messages, api_base, optional_params, api_key, **kwargs): headers {Authorization: fBearer {api_key}} # 替换成你的密钥 payload self.transform_request(model, messages, optional_params) resp HTTPHandler().post(f{api_base}/v1/chat, jsonpayload, headersheaders) # 替换成你的 API 地址 return self.transform_response(resp.json(), model) # acompletion / streaming / astreaming 结构相同换异步客户端 SSE 逐行解析completion 是主战场acompletion 换成异步客户端streaming / astreaming 在它基础上多一层 SSE 逐行解析。接神经请求参数与响应的双向转换怎么写def transform_request(self, model, messages, optional_params): # 神经①OpenAI 风格入参 → 你的服务格式不支持的参数直接丢弃 return {model: model, prompt: \n.join(f{m[role]}:{m[content]} for m in messages), max_new_tokens: optional_params.get(max_tokens, 100)} def transform_response(self, raw, model): # 神经②你的服务出参 → litellm 统一格式usage 必须回填成本统计靠它 return ModelResponse(choices[{message: {role: assistant, content: raw[text]}, finish_reason: stop, index: 0}], modelmodel, usageUsage(prompt_tokensraw[input_tokens], completion_tokensraw[output_tokens]))请求侧把你支持但参数名不同的字段映射过去如 max_tokens → max_new_tokens不支持的就丢别硬塞响应侧漏掉 usage成本统计就是空的proxy 计费看板会直接失血。入注册表provider 命名约定与路由前缀# 无需改注册表代码provider 名 litellm/llms/ 下的目录名 resp litellm.completion(modelmypkg/your-model, # 前缀即路由 api_basehttp://127.0.0.1:8000, # 替换成你的 API 地址 api_keysk-test, # 替换成你的密钥 messages[{role: user, content: 你好}])目录名 mypkg 就是 provider 名调用时写mypkg/your-model万一前缀路由不到在 kwargs 里显式传custom_llm_providermypkg强制指定。验证与调试5 分钟冒烟测试脚本# smoke_test.py保存后执行 python smoke_test.py import asyncio, litellm KW dict(modelmypkg/your-model, api_basehttp://127.0.0.1:8000, api_keysk-test) # 替换成你的 MSGS [{role: user, content: 打个招呼}] async def main(): print((await litellm.acompletion(**KW, messagesMSGS)).choices[0].message.content) async for c in litellm.acompletion(**KW, streamTrue, messagesMSGS): print(c.choices[0].delta.content, end, flushTrue) asyncio.run(main()) print(冒烟通过异步 流式两路都通)调试时最容易卡住的是流式你的服务返回的每一行若不是data:开头的 OpenAI 风格 chunklitellm 的流式包装器会一直等确认结束帧是data: [DONE]或在你的结束标记处 break断流问题基本就消失了。进阶与避坑工具调用如果服务支持 function callingtransform_request 里保留 tools 字段并映射到你的参数名transform_response 里把 tool_calls 还原成 OpenAI 的{id, type, function:{name, arguments}}结构即可参考litellm/llms/anthropic/下 transformation 的写法。成本计算在model_prices_and_context_window.json里为你的模型补一行每百万 token 单价配合响应里的 usagelitellm 自动完成每次请求的成本核算proxy 侧计费随之生效。多模态、路由与负载均衡属于上层能力建在 Router 与 proxy 配置之上扩展本身不用动。密钥配了却不生效症状环境变量明明导出了请求却 401。原因litellm 按PROVIDER_API_KEY全大写约定找变量目录叫 mypkg变量就得叫MYPKG_API_KEY对不上就静默回退。解法别靠猜调用参数里显式传 api_key一了百了。前缀路由不到报未知 provider症状modelmypkg/x抛 provider 不识别。原因目录名、包路径、注册名三处有一处对不上大小写也敏感。解法显式传custom_llm_providermypkg绕开自动发现再回头逐处对名字。流式响应断流怎么排查症状流式调用卡住或提前截断。原因SSE 行格式不符合data:约定或结束帧缺失导致异步迭代器不收尾。解法先用 curl 裸打你的服务看原始流行格式对齐 OpenAI再在 astreaming 末尾 yield 一个带 finish_reason 的收尾块。下一步挑litellm/llms/里一个结构最简单的 provider 通读一遍langgraph 是好样本对照补全你缺的字段扩展写得够通用就提 PR 给社区顺手让仓库里所有接入 LLM 的开发者受益。【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考