资讯动态

大模型API统一网关liteLLM:从部署到避坑的实战全解析

发布时间:2026/10/21 8:34:13 来源:尧图企业网站定制
在现在的技术圈里同时对接多家大模型API已经是家常便饭的事情。但真正干过这活的人心里都清楚OpenAI、Anthropic、百度、智谱各家接口风格五花八门鉴权方式不一样、限流规则不一样、报错格式也不一样一旦业务流量上来代码里就会铺满各种兼容层、重试逻辑和开关判断。后来我大范围使用了一个叫 litellm 的统一网关方案它本质上就是一个标准化的代理层把上游N个模型提供方全部封装成同一个 OpenAI 风格的接口无论你接的是哪家的模型客户端看到的都是同一个协议。这篇文章不打算再重复文档里的那些废话而是从我实际部署和长期运维的角度把 litellm 到底怎么用、有哪些隐藏参数、哪些坑必须绕开一次性讲透。1. 先搞清楚 litellm 是谁定位、边界与适用场景1.1 它到底解决了什么问题很多刚接触的人会把 litellm 理解成“一个可以调用各家模型的SDK”实际上它的定位比SDK更重最重要的是它作为独立服务的形态出现让团队里的业务代码只需要配置一个 base_url 和 API Key剩下的事情全部由网关负责。这个思路可以说是一个典型的“中间层”设计。在没使用网关之前你的服务端代码里有大量的胶水层A厂商的客户端要单独初始化、B厂商的请求签名要给 header 里塞特殊字段、C厂商的流式接口返回结构还不一样这些逻辑混在一起测试和排错成本都很高。有了 litellm 之后业务侧只要按 OpenAI 的规范发请求网关帮你完成模型路由、参数映射、密钥托管、重试熔断甚至预算控制相当于把原来散落在一堆函数里的脏活累活全部收编到一个独立进程里。它的核心价值有三个接口归一化、配置动态化、治理集中化。接口归一化让代码只依赖一种协议换模型不需要改代码配置动态化指的是路由规则通过 config.yaml 维护不用重新发版治理集中化让密钥、限流、预算、日志统一管理这对稍有规模的技术团队来说吸引力是拉满的。1.2 它的边界在哪里litellm 再强也不会替你解决模型本身的能力问题——它不产生回答也不理解业务它更像一个“接口翻译和流量调度员”。所以如果你现在最大的痛点是“我的提示词写得不好”“模型经常幻觉”“A/B测试怎么做”网关给不了你直接答案但可以帮你把 A/B 测试的流量切分、数据回流这几件周边事梳理利索。另外一个容易产生误解的点是“部署了网关会不会增加延迟”。公平来讲如果你按常规方式让请求多跳转一次网络上空闲的毫秒数肯定是有的。但 litellm 本身不会频繁加工请求内容它做的主要是转发和可能的重试逻辑所以这个开销在绝大多数项目中是可接受的甚至可以忽略。关键是你要注意流式响应的网络连接怎么保持别把网关自己在等模型返回时也当成一次重复的超时计时点。从技术选型的角度讲如果你团队只有两三个人只对接了一个固定模型那确实没必要引入 litellm直接用官方SDK是最省钱省事的方式。但只要你面前的模型供应商数量达到三四个以上或者你打算适配微软、亚马逊、谷歌、国内多家平台的模型那么统一网关带来的收益就会超过引入成本。1.3 适合什么规模的使用者我的体会是 litellm 对两种人最有吸引力。第一种是独立开发者或小团队想快速做一个多模型聚合的应用比如一个兼容各家大模型的中转后台、一个查询优先路由的 Agent 工具litellm 可以让你的代码一下子精简很多第二种是已经有正经业务规模的公司要解决 API Key 散落在客户端、预算失控、单点限流、日志审计缺失这些合规和运维问题。我身边有开发者拿它做内部“模型聚合站”也有人用它管理生产环境的投放模型。一个很典型的场景是公司有多个产品线每个产品线不同模型不同供应商你想统一用量和成本报表以前得写定时脚本去各平台拉取现在 litellm 直接给出用量追踪甚至可以在请求头里带上用户ID、团队ID方便后续做成本分摊和计费报表。还有一个经常被忽略的场景本地开发环境。你本地代码如果直连国外生产模型延迟高不说如果团队的模型配置经常变每次都要同步配置环境变量。利用 litellm 在本地起一个网关所有团队成员连同一个测试入口模型切换集中生效这个体验谁用谁知道。2. 核心能力拆解哪些日常必用哪些是意外惊喜2.1 统一接口协议的底层逻辑litellm 之所以能把几十家服务商捏成一块揉圆搓扁是因为它内部维护了一个庞大的“模型别名映射表”。例如你在请求时指定 model 为 claude-3-5-sonnet在 config 里配置好这个别名对应的真实供应商 ID比如 anthropic/claude-3-5-sonnetlitellm 就会自动转换成对应厂商的请求格式返回时再把厂商的数据格式统一转成 OpenAI 风格的 response。这样的设计跟普通 SDK 内部封装有着本质区别普通 SDK 是编译期绑定了客户端行为而 litellm 把映射关系抽成了运行时配置。这个抽象层带来一个巨大的便利——你可以给同一个模型配多个 provider 渠道比如同时挂通国内某云服务商和海外某服务商然后通过路由策略动态切换你也可以把某个小团队的测试流量打到速度更快但略贵的渠道把生产流量打到稳定但稍慢的渠道这些都是配置层的调整。这个 routing 能力听起来抽象我举个例子很多公司既买了某大厂的托管模型又保留了从模型原厂直连的渠道。平时流量走大厂托管但一到月底大厂限额不够了你就希望自动切到原厂渠道。如果代码硬编码这种切换非常痛苦在 litellm 里只需在一个 model group 下列出多个渠道再写一个简单的 fallback 列表网关就会按顺序尝试。2.2 模型路由与自动重试省心但藏着小心机litellm 的路由能力不仅仅是“换一个供应商”还包括在同一个模型组下面的多个上游渠道之间做负载均衡、健康检查、超时摘除以及最简单的异常重试。这个“重试”看似无害实则最容易踩雷原因在于大模型 API 返回的错误码五花八门有的是真的网络闪断有的是因为上下文过长导致直接拒答有的是因为并发超限需要等一段时间再试。如果你无脑对每一种错误都重试遇到上下文过长或者内容审核类错误你重试一百次也没有意义反而会推高成本和时间。litellm 允许针对不同上游异常类型分别配置重试次数和退避时间建议的实际操作是把 401、403 这类鉴权错误设为不重试把 429、5xx 和网络错误设为有限次数的指数退避重试。还有一点要额外提醒的是流式Streaming场景下的重试比普通请求复杂得多。如果你一个流式长连接跑到一半断开了重试意味着用户端要看到前面一部分句子又重复一遍体验会非常怪。比较务实的做法是在网关层对首包响应时间做一次轻量健康检查一旦首包返回正常就把后续流正常转给业务端此时即使中途断了也不要盲目重试最多在业务端给用户一个“继续生成”的按钮。2.3 密钥托管、预算控制和多租户管理管理 API Key 其实是一门大生意。如果直接在前端暴露高管账号的密钥那等于把公司的账本贴在门口。litellm 提供的虚拟密钥机制非常实用你可以基于一个真实的供应商密钥签发很多个子 Key每个子 Key 有自己的额度、速率限制、可访问模型范围甚至可以绑定到一个团队或一个项目。我在实际项目中用这种方式把密钥分发给了不同产品线。某运营活动要的日调用量预计十万次我就建一个总量十万次的虚拟 Key预算用尽该 Key 自动失效。这对防止内部同学误操作刷爆账单、防止外部撞库都很有价值。配合预算周报财务上能看清每个业务方到底花了多少钱这在一个公司里往往比技术本身更能让团队获得认可。多租户还不只是密钥隔离。litellm 支持按照请求头里的 metadata 来区分不同的租户然后在配置里对每个租户做模型可见性控制这样同一个网关后面可以服务于不同权限级别的用户避免了一个项目里为了权限而再写一层校验。2.4 日志与用量追踪给模型装上“电表”如果说密钥和预算还是防守型的那用量追踪就是管理型的。litellm 能把每一次请求的关键信息记录下来包括跟谁、用了什么模型、输入输出各有多少 token、耗时、成本以及当时的元数据并支持自定义回调推送到数据库、日志平台或者自己的业务系统中。这里有个很多人不知道的细节litellm 的成本计算依赖模型单价表但不同供应商、不同站点比如海外站点和国内站点、不同计费模式按token还是按次差异巨大所以如果你要拿到精准的成本数字往往需要自己更新单价表。如果你只是看一个大概的量级默认值也能工作但要做好与对账单存在偏差的心理准备。日志可以帮我做的最实际的事情是排查问题比如当用户反馈响应特别慢时我可以直接通过日志看网关侧等待上游返回的时间到底是多少这样就快速定位到底是我们自己的服务处理慢还是模型本身生成慢避免两个团队互相扯皮。3. 从零部署六步把 litellm 网关跑起来3.1 环境准备与安装litellm 的部署形态有两种主流方式一是作为 Python 包直接 pip 安装后命令行启动二是通过 Docker 方式运行。如果你只是个人测试pip 安装就够了但我强烈建议生产环境用 Docker毕竟网关依赖的 Python 环境和各种 SDK 版本很容易被系统其他项目弄得乌烟瘴气容器化能把你从环境问题里解放出来。先看一个最简单的安装方式pip install litellm[proxy]如果你用的是 Docker官方镜像拉取后直接跑容器需要注意挂载配置文件和持久化数据卷docker pull ghcr.io/berriai/litellm:main-latest docker run -d \ --name litellm \ -p 4000:4000 \ -v $(pwd)/config.yaml:/app/config.yaml \ -v $(pwd)/litellm_data:/app/litellm_data \ ghcr.io/berriai/litellm:main-latest \ --config /app/config.yaml这里我踩过一个坑容器内的数据库路径如果不挂载成持久卷每次重启后用量记录和密钥表都会清空表面上看起来服务还正常但虚拟密钥全变成了无效状态排查半天还以为配置写错了。3.2 第一个 config.yaml从两三家供应商起步litellm 的配置中心就是一个 YAML 文件。新手建议从一个最简单的模型映射开始model_list: - model_name: gpt-4o-mini litellm_params: model: openai/gpt-4o-mini api_key: os.environ/OPENAI_API_KEY - model_name: claude-3-5-sonnet litellm_params: model: anthropic/claude-3-5-sonnet api_key: os.environ/ANTHROPIC_API_KEY - model_name: qwen-max litellm_params: model: openai/qwen-max api_base: https://dashscope.aliyuncs.com/compatible-mode/v1 api_key: os.environ/DASHSCOPE_API_KEY看到没有模型名的写法是“供应商前缀/具体版本”litellm 拿到之后就按对应的供应商规则去调 API。有些供应商提供了 OpenAI 兼容接口比如国内的不少云厂商都支持你不需要使用它自己专有的一套调用逻辑只要指定 model 前缀为 openai再手动填 api_base 就行。对于常用的几个供应商你甚至可以不填 api_baselitellm 内置了默认接入地址。但如果是自建模型服务比如本地源码部署的模型、局域网内的推理服务就必须显式声明 api_base 了。3.3 启动与快速自测配置写好之后启动服务litellm --config ./config.yaml --port 4000看到服务监听成功的日志后先用 curl 做一个最小化验证curl http://localhost:4000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-1234 \ -d { model: gpt-4o-mini, messages: [{role: user, content: 你好请做一下自我介绍}] }注意这里 Authorization 里的 Bearer Token 并不是必须等于真实上游的 API Key因为 litellm 默认有基于数据库的虚拟密钥机制。不过你如果还没有配置虚拟密钥它会尝试调用你环境变量里设置的某个可以访问所选模型的 Key 来做这个请求。这个试一下能通说明客户端到网关、网关到上游的通路都是好的。接下来你可以在代码里直接把 base_url 改成 http://litellm-host:4000SDK 基本不用改逻辑。3.4 接入 Python / Node 等常用客户端以 Python 的 openai 库为例接入 litellm 的代码可以说简易得不太真实from openai import OpenAI client OpenAI( base_urlhttp://localhost:4000/v1, api_keysk-1234 ) resp client.chat.completions.create( modelclaude-3-5-sonnet, messages[{role: user, content: 讲个冷笑话}], streamFalse ) print(resp.choices[0].message.content)Node 端仅需替换 baseURL 和 apiKey 即可如果你原本接的是 OpenAI 官方 API迁移到 litellm 几乎是复制粘贴改两个字段。这个“无缝切换”是我第一次用的时候觉得最惊艳的地方它真正把多模型的差异吞到了网关层。3.5 Docker Compose 方式生产环境更省事如果你希望把 litellm、数据库、管理后台等一起编排起来推荐使用 docker-compose。底层组件中 litellm 的数据库既可以是默认的本地 SQLite也可以是 PostgreSQL。团队规模稍大一点我建议直接用 PostgreSQL因为多实例部署时 SQLite 会带来文件锁和同步问题并发一高很容易出幺蛾子。下面是一段精简的 compose 示例services: litellm: image: ghcr.io/berriai/litellm:main-latest ports: - 4000:4000 volumes: - ./config.yaml:/app/config.yaml - ./litellm_data:/app/litellm_data environment: - DATABASE_URLpostgresql://user:passpostgres:5432/litellm command: [--config, /app/config.yaml] depends_on: - postgres postgres: image: postgres:16 environment: POSTGRES_USER: user POSTGRES_PASSWORD: pass POSTGRES_DB: litellm volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata: {}3.6 管理面板与可视化配置litellm 自带一个 UI 管理面板默认地址通常是 http://localhost:4000/ui。你可以在这里查看请求日志、修改配置、签发虚拟密钥、查询预算消耗。面板虽小但属实解决了运维人员不想整天编辑 YAML 的痛点。我个人的使用习惯是初始化和重大变更走 config.yaml 管理日常配虚拟密钥和查用量走 UI这样既保证配置可审计又提升了操作效率。如果你团队有严格的基础设施审批流程建议把 config.yaml 做进 Git 仓库走 Code ReviewUI 只开放给需要临时排查问题的人。4. 企业级配置实战密钥、预算、模型组与多租户4.1 虚拟密钥和用量预算的详细配置虚拟密钥的签发一般有两种方式。一种直接通过 UI 点鼠标完成另一种使用 CLI 生成。在服务启动的情况下你可以执行litellm --create-key --alias 产品A线上Key --models gpt-4o-mini --max_budget 100执行后系统会返回一串 sk- 开头的 Key这就是一个仅能访问 gpt-4o-mini 且最多消费 100 美元的虚拟密钥。当消费达到 100 美元后再用这个 Key 去请求就会被拒绝并返回预算超限错误。在 config.yaml 你也可以预设 Team 和 User 级别的预算限制general_settings: master_key: sk-1234 database_url: postgresql://user:passlocalhost:5432/litellm router_settings: num_retries: 2 timeout: 600 cooldown_time: 30这里一定要设置 master_key否则外部请求可以直接绕过虚拟密钥访问上游这属于高危配置错误。我在测试环境里有一次图省事没设 master_key结果局域网内其他服务也能随意请求网关幸好只是内部网络否则账单要爆炸。4.2 模型组Model Group与故障转移模型组是实现多供应商故障转移的基础设施。比如我对“主力对话模型”定义了一个组里面同时放了三个渠道model_list: - model_name: hero-chat litellm_params: model: openai/gpt-4o api_key: os.environ/OPENAI_API_KEY - model_name: hero-chat litellm_params: model: azure/gpt-4o api_base: https://my-azure.openai.azure.com/ api_key: os.environ/AZURE_OPENAI_KEY - model_name: hero-chat litellm_params: model: vertex_ai/gemini-1.5-pro api_key: os.environ/GOOGLE_AI_KEY这样当客户端指定 model 为 hero-chat 时网关可以在三个渠道之间做路由。配合路由模式可以实现 loadbalance 或 fallback。前者看重吞吐和负载均衡后者侧重于一个挂了切下一个。我通常采取的策略是一个主渠道若干备渠道并且把主渠道的超时时间设短一些这样一旦主渠道没能快速响应网关能尽早切入备用渠道用户在体验上可以少等很久。配置路由策略例如router_settings: routing_strategy: simple-shuffle fallbacks: - {hero-chat: [azure/gpt-4o, vertex_ai/gemini-1.5-pro]}这里 fallbacks 的表达方式比较灵活可以为不同模型设置不同故障转移链。实际操作中需要注意“路径上所有渠道都需要保证模型别名可用”否则故障转移会落入一个无效模型的坑里。4.3 多租户与请求元数据管理除了密钥上有租户概念litellm 还允许你在请求中带上 metadata 字段它并不参与模型调用但会被网关落到日志和用量追踪中。你可以用它标记来自哪个团队、哪个业务方、哪个终端渠道。举个例子from openai import OpenAI client OpenAI(base_urlhttp://localhost:4000/v1, api_keysk-virtual-key) client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: 帮我查一下订单}], extra_body{ metadata: { team: customer-service, project: order-bot, user_id: u12345 } } )在生成财务报表的时候可以直接按 team 分组聚合 token 数和金额这样可以非常清晰地看到哪个团队最消耗模型资源。这个做法虽然不是 litellm 的独家能力但因为它天然内置而且零额外开发性价比极高。4.4 企业部署中的反向代理与 TLS 终结虽然 litellm 自带服务端口但几乎不应该直接暴露到公网。通常我会在前面加上一层反向代理负责 TLS 证书管理、访问控制、甚至 WAF 防护把 litellm 作为内网可靠服务跑在代理后面。反向代理暴露到公网的路径通常是您自己的域名。为了避免外部扫端口建议不要把 litellm 的 4000 端口直接映射到公网而只是映射到内网网段然后由入口代理转发同时限制只有特定 Header 或IP范围的请求能到达网关端口。这样可以大大降低密钥被扫出来的概率。5. 真实踩坑记录这些排查思路值得打印出来5.1 429 限流与上游并发全局重试不要开太大很多团队第一天接入多个模型就把 litellm 的全局 retries 设置为 5结果在某个上游厂商的限流阈值边缘反复摩擦让本就处于高位的时间消耗雪上加霜。我在生产环境中遇到过一个很经典的问题某渠道正常响应时间约 1 秒但当触发限流后因为错误处理太猛后续并发全部涌入上游立即承担数倍请求把一个小时段所有配额直接耗尽后面整个业务直接不可用。正确做法是限流相关错误的重试采用“较短的退避较低的次数”同时从源头做好并发控制。litellm 里提供了 RPM/TPM 限速参数你可以在模型参数中配置model_list: - model_name: gpt-4o litellm_params: model: openai/gpt-4o api_key: os.environ/OPENAI_API_KEY rpm: 60 tpm: 100000这样网关会进行本地令牌桶限流超过限制的请求会立刻返回 429而不会真正打到上游。对上游渠道是种保护对自己服务也是一种降级缓冲。5.2 超时配置别让一个慢模型拖垮整个网关大模型响应很慢是很正常的事情特别是长文生成一分钟都不稀奇。但网关自己的工作超时如果设置不当就会出现客户端的请求被网关直接切断而模型那边还在继续烧钱生成。这类残缺回答在实际产品中很招人恨。所以我通常考虑的是两层超时第一层是网关等待上游首包的超时建议 30-60 秒第二层是整体最大超时建议 300 秒。如果模型在首包时间内没有任何返回可以切换备选渠道如果首包已经正常返回那就不要因为整体超时设置太短而在生成的中途切断流。在 litellm 里超时可以精细到每个模型或者通过 router_settings 统一设置。我建议给不同模型不同超时因为摘要模型和长文创作模型的耗时完全不在一个量级。5.3 流式响应丢数据与异常断开我在自测时曾遇到过一种情况用 SSE 流式接入 litellm一开始收到的内容都正常但生成到一半的时候流突然结束客户端还以为生成了完整答案。排查后发现原因是上游代理在连接空闲期存在反空闲断开也就是一段时间内没有数据包就把连接视为超时给断了。这不是 litellm 的 bug更多是与底层网络设施相关。解决思路有几个一是适当降低流式空闲超时阈值靠前发心跳包二是关闭某些 IDC 网络设备的“空闲会话老化”策略三是把 SSE 的响应改成小批次聚合后吐出不要让前后两个包之间的间隔太长。总之要把流式链路当成一条常年运行的隧道来维护而不能假设网络永远稳定。5.4 模型别名混乱导致的循环调用我见过一个团队把 config.yaml 里的 model_name 和 litellm_params.model 配置成同样名字然后又没有映射真实供应商结果请求进来后网关尝试调用“openai/xxx”却发现 xxx 在配置里又指向另一个别名形成递归。这类错误一般在启动时能发现一部分但诡异的是如果有多层嵌套启动日志会正常直到流量触发特定路径才会报错。我的建议是命名规范尽量统一比如业务叫 gpt-4o-chat真实映射永远写成 openai/gpt-4o一旦一个配置错误错误日志中要找的是非常明确的 unreachable provider 等关键字不要被一大串堆栈吓住。5.5 配置文件热加载与多实例一致性litellm 支持一定的配置热加载但这个能力在生产环境不能依赖。我遇到过一台旧实例没有加载最新配置文件跟新实例行为不一致导致用户请求被路由到不同策略上。最后我们把它变为“启动时持久化配置 重启后从数据库同步”保证所有实例都走统一的配置源。如果你是多实例部署一定要让多个 litellm 实例共享同一个数据库这样才能保证虚拟密钥、用量记录、预算数据是一致的不然不同实例各自记账预算就是一笔糊涂账。6. 性能调优与成本治理的进阶玩法6.1 连接池与 keep-alive 优化litellm 作为一个中间代理如果连接管理做得不好很容易在上游服务商那里创建大量短连接不仅增加握手开销还容易耗尽端口。生产环境建议在系统层和配置层同时开启连接复用对上游厂家保持长连接对客户端也开启 keep-alive。Python 侧的 httpx 客户端本身有连接池管理但你要确认连接池上限足够大不要在高并发时因为池限制拖后腿。另外上游供应商 API 普遍支持流式响应压缩开启之后可以有效降低传输带宽。很多模型服务商在响应头中会返回 content-encoding网关要把它透传给客户端。6.2 语义缓存把重复的问题挡在网关外Gateway 位置很适合做响应缓存。很多用户问的问题极其相似完全相同的请求甚至可以缓存上模型结果直接在网关层返回减少真实模型调用和费用支出。litellm 支持自定义缓存你可以把缓存放到 Redis 中配置简单用起来体感很好。但对缓存有个基本底线聊天和个性化任务别乱开缓存适合缓存的往往是事实性问答、固定模板内容、对用户公开资料的摘要等。还要记得给缓存结果设置 TTL否则时间一长里面的知识已经过时用户会对产品质量产生质疑。6.3 成本核算的关键更新模型单价litellm 的量价统计能做到相当精细但前提是模型单价得对。因为各家定价变动频繁且存在渠道折扣人工维护单价表确实繁琐却是做成本分析的前提。我建议至少每个月把主要模型的价格表同步一次如果有多家渠道那就按不同渠道单价分别维护。实际中如果你只是为了排名对比不同渠道的毛利模型可以先按标准价看趋势不必死磕绝对正确但如果要拿给财务做结算依据就必须确保单价表与供应商账单一致特别是某些平台有按量阶梯价或者特殊折扣时litellm 的简单单价模型会算不准这时你还需要二次校准。6.4 日志平台对接与告警litellm 的日志可以很容易地通过 webhook 或内置回调推到外部系统。我通常在用量日志之外还会单独推送“错误日志”和“延迟日志”分别对接不同的告警渠道。比如当错误率达到某个阈值或 P95 延迟超过某个值时立刻触发企业微信或钉钉机器人通知这样值班同学可以在用户大面积反馈之前先发现隐患。从稳定性角度讲litellm 自身也应该被监控不能因为他是网关就默认它高可用。我会额外探活它的 /health 端点一旦连续多次失败就触发容器重启或副本扩缩。6.5 从网关到平台未来的扩展思路litellm 做到一定程度你可能会发现它其实已经成为一个“AI 中台”的最核心组件。在它之上你可以继续建设提示词管理平台、模型评测系统、成本核算系统、A/B 实验平台。因为所有的模型请求都从网关经过你天然有了观测、干预、治理的抓手。我个人在实际操作中的体会是网关这层设计最重要的反而不是技术本身而是它让你获得了一种“可编排”的主动权。模型市场的格局还在快速变化今天这家便宜、明天那家效果更好如果每一次变化都要改业务代码团队很快就会疲惫。litellm 的配置化方式至少让变更变成了一次可以回滚的配置更新这在以周为迭代周期的业务里是真正让人安心的东西。后续如果你也打算把公司内所有 AI 能力收敛到一个统一入口litellm 完全可以作为第一块地基值得在这个方向继续深挖下去。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑