尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

LiteLLM 自定义提供商接入指南:从 0 到 1 接上你的私有模型服务

LiteLLM 自定义提供商接入指南:从 0 到 1 接上你的私有模型服务 LiteLLM 自定义提供商接入指南从 0 到 1 接上你的私有模型服务【免费下载链接】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 自定义提供商要解决的事它把各家接口统一成 OpenAI 格式你只需给它写一层翻译。动手前先弄懂这四件事一个提供商就是一个目录。所有厂商实现都放在litellm/llms/下每家一个子目录比如novita/、clarifai/chat 能力的翻译类固定在chat/transformation.py。新提供商就是照这个形状长出一个文件。BaseConfig 是所有翻译类的基类定义在 litellm/llms/base_llm/chat/transformation.py。它规定了你必须回答的四个问题支持哪些 OpenAI 参数get_supported_openai_params、参数怎么映射map_openai_params、请求怎么发validate_environmenttransform_request响应怎么转回来。同文件里还有统一异常BaseLLMException厂商侧的错误要包装成它抛出。接口兼容 OpenAI 的可以直接站在OpenAIGPTConfig肩膀上。仓库里的 NovitaConfig 就只继承它再改几行 URL 和鉴权因为协议一致请求/响应转换几乎白送。名字到配置的路由在 get_llm_provider_logic.py。modelnovita/xxx里斜杠前的字符串在这里被解析成厂商、默认 api_base 和 API key 环境变量没注册的名字会被当成未知提供商。把一个新提供商搭起来选继承基类OpenAI 兼容还是全自定义拿一份对方文档的示例请求逐字段和 OpenAI 对一下。路径是/v1/chat/completions、SSE 流式、字段基本同名——继承OpenAIGPTConfig只覆盖get_complete_url和validate_environment字段完全不同比如只接受 prompt 字符串——从BaseConfig起步四个抽象方法全部实现。对得上的部分一行都不用写。翻译类怎么写以 OpenAI 兼容场景为例# litellm/llms/acme_ai/chat/transformation.py from litellm.llms.openai.chat.gpt_transformation import OpenAIGPTConfig class AcmeAIConfig(OpenAIGPTConfig): def get_supported_openai_params(self, model): # 只列出对方真正支持的参数多余参数会被丢弃或报错 return [temperature, max_tokens, tools] def map_openai_params(self, non_default_params, optional_params, model, drop_params): # 对方把 max_tokens 叫 max_new_tokens在这里改名 optional_params[max_new_tokens] optional_params.pop(max_tokens, None) return optional_params def get_complete_url(self, api_base, api_key, model, optional_params, litellm_params, streamNone): return f{api_base.rstrip(/)}/acme/v1/chat def validate_environment(self, headers, model, messages, optional_params, litellm_params, api_keyNone, api_baseNone): # 校验凭证并补上鉴权头 headers[Authorization] fBearer {api_key} return headers响应方向一般不用动兼容 OpenAI 的响应会被基类直接解析成ModelResponse。只在对方返回结构特殊时才重写响应转换。提供商名怎么注册进路由表翻译类写完再把名字登记进路由参照 novita 的分支写法# litellm/litellm_core_utils/get_llm_provider_logic.py 中仿照 novita 分支 elif custom_llm_provider acme_ai: api_base api_base or get_secret(ACME_AI_API_BASE) or https://api.acme-ai.example.com/acme/v1 _llm_provider acme_aiget_secret会按约定读环境变量API key 同样走ACME_AI_API_KEY。成本与上下文窗口怎么登记单价是数据不是代码往 litellm/cost.json 加一条每次调用后的成本字段就自动算好根目录model_prices_and_context_window.json存上下文窗口路由器的预算判断依赖它{ acme-ai/llama-3-8b: { litellm_provider: acme_ai, mode: chat, input_cost_per_token: 0.0000004, output_cost_per_token: 0.0000012 } }跑通它最小验证脚本与排错 开发模式下安装仓库pip install -e .然后用这个最小脚本验证import os import litellm os.environ[ACME_AI_API_KEY] sk-test-0001 litellm.verbose_logging True # 打印完整请求/响应体排错第一手资料 resp litellm.completion( modelacme_ai/llama-3-8b, messages[{role: user, content: 用一句话介绍你自己}], api_basehttps://api.acme-ai.example.com/acme/v1, ) print(resp.choices[0].message.content) print(resp.usage) # token 用量成本统计的输入验证顺序建议先跑通非流式再开streamTrue看 SSE 是否正常逐块吐出。想沉淀成回归测试照tests/llm_translation/里现有厂商的测试文件加一个test_acme_ai.py本地pytest即可。放进 proxy 使用时在proxy_server_config.yaml的 models 里加一条acme_ai/llama-3-8b面板里的花费与调用记录就能覆盖它进阶玩法工具调用、成本与伪流式 ✨工具调用基类已提供_add_tools_to_optional_params对方不支持response_format时可用基类的_add_response_format_to_tools把结构化输出伪装成一次强制工具调用。成本计算登记cost.json后由 cost_calculator.py 统一计算proxy 侧的 spend 跟踪直接复用。伪流式对方不支持真流式时重写should_fake_stream返回True由网关自己把整块响应切成流。避坑指南三个最容易卡住的地方 ⚠️问题调用报未知提供商或行为异常。原因只写了翻译类没在get_llm_provider_logic.py注册名字或model字符串斜杠前的部分和注册名不一致。 解法补上路由分支临时验证时可在调用里显式传custom_llm_provideracme_ai。问题一直 401 invalid api key。原因API key 环境变量没按约定命名分支里的get_secret(ACME_AI_API_KEY)和你实际 export 的变量对不上。 解法在路由分支里显式兜底读取并打印api_base确认打对了地址。问题流式没数据或中途断。原因对方 SSE 帧格式和 OpenAI 不一致CustomStreamWrapper 解析不到 delta。 解法开verbose_logging看原始 chunk先修翻译类的流式解析实在不支持流式就改用伪流式。写在最后整条链路其实就三件事写翻译类、注册名字、填成本数据之后无论 SDK 直调还是走 proxy都用acme_ai/xxx这一个格式触达服务日志、成本、限流全部复用网关现成能力。如果后续这台服务还加了图像生成或语音转写照同样的模式去litellm/llms/base_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),仅供参考
返回列表