W7D5 学习手册 1.LiteLLM定位2.虚拟Key3.预算配额4.多租户成本 5.管理界面6.部署形态7.SpringAI集成8.BuildVsBuy 9.自研场景10.直接用11.ADR写法12.ADR示例 达标①达标②自测速记

FDE W7D5 学习手册 · LiteLLM 集成与 Build vs Buy ADR

W7 Day5 · B/C 级(企业平台与架构决策核心)· 4h · 学完能讲清"企业级模型网关选型 + 自研 vs 购买决策 + ADR 写作"

本日定位:W7 是"企业 AI 平台与部署交付"周。D5 聚焦 LiteLLM 这一开源企业级 LLM 网关,以及"何时自研 Gateway(D4)、何时直接用 LiteLLM"的架构决策,并用 ADR(架构决策记录) 把决策沉淀下来。
学完能回答:① LiteLLM 提供哪些企业能力(虚拟 Key / 预算 / 配额 / 多租户 / 项目级成本 / 管理界面);② Build vs Buy 决策框架,何时自研、何时直接用;③ ADR 的结构怎么写(背景 / 决策 / 权衡 / 后果)。
候选人背景:36 岁,Java + 大数据 + 医疗保险。重点放在 Java 侧企业 AI 平台(Spring AI + 网关)与交付落地,强调"为什么这样选、怎么说服团队"。
使用方法:通读原理 → 重点看「工程含义」「面试话术」「易错点」→ 做自测清单 → 配合《FDE-W7D5-评测题.md》。选中不熟的词可标注(左下★重要 / 右下📌待查)。
📚 延伸资源:LiteLLM 官方文档 docs.litellm.ai(虚拟 Key / 预算 / 多租户 / Proxy UI 均有权威配置示例,中文社区资料丰富,非 OpenAI 官方)。

一、LiteLLM 是什么与定位

1.1 一句话定位

LiteLLM 是一个轻量级 LLM 网关 / 统一调用层,核心解决两件事:① 用统一的 OpenAI 格式 API 调用 100+ 家模型(OpenAI / Anthropic / Gemini / 本地 vLLM 等);② 提供企业级治理能力——虚拟 Key、预算、配额、多租户、项目级成本、管理界面。

1.2 两个最常用的形态

对企业 Java 平台而言,LiteLLM 通常作为"模型网关中间层":Spring AI 调 LiteLLM 的代理地址,而不是直接调各家。这样 Java 侧只认一个 OpenAI 兼容地址,模型厂商切换、Key 轮换、成本治理全在网关层做,对业务透明。
LiteLLM = 统一调用层 + 企业治理层。统一各家 API 格式,并把虚拟 Key、预算、多租户、成本统计这些"企业才需要"的能力收口在网关。对 Java 平台,它通常是 Spring AI 后面的那一层代理。
① LiteLLM 不是模型、不是向量库,它是网关/代理,本身不产生 token,只转发。② SDK 和 Proxy 是两种用法:SDK 是代码内调用,Proxy 是独立服务——治理能力(虚拟 Key/预算)主要在 Proxy 模式才有。③ 别把"统一格式"和"治理"混为一谈:格式统一是 SDK 就能做,预算/租户治理必须上 Proxy。

二、虚拟 Key(Virtual Key)机制

2.1 原理

LiteLLM 对外给用户/应用发的是虚拟 Key(也叫 Consumer Key / Token),用户用这个 Key 调 Proxy;Proxy 内部再拿真正的"厂商 Master Key"去调模型。真实厂商 Key 不暴露在业务侧。

业务应用 ──(虚拟 Key)──▶ LiteLLM Proxy ──(Master Key)──▶ 厂商模型

2.2 虚拟 Key 能做什么

能力说明企业价值
密钥隔离业务侧只持有虚拟 Key,厂商 Key 集中保管降低泄露面,轮换厂商 Key 不影响业务
按 Key 计费/配额每个 Key 可设预算、速率、模型白名单谁调了多少花了多少一目了然
按团队/应用发放不同业务线/环境发不同 Key隔离故障与成本,出了事能定位到 Key
随时吊销Key 泄露或越权可即时吊销不波及厂商 Key
对保险这类多系统共用 AI 能力的企业,虚拟 Key 是"最小授权 + 可追溯"的基础:核心系统、报表系统、客服系统各发一个 Key,互不串,成本也能按 Key 拆。厂商 Master Key 只放在网关的 Secret 里。
虚拟 Key 是"给用户用的假 Key",背后映射真实厂商 Key。作用是密钥隔离、按 Key 计费和配额、按团队发放、可随时吊销——让厂商 Key 不落业务侧,泄露了也只吊销虚拟 Key。
① 虚拟 Key 不是"多一层加密",它不提高模型效果,只是治理手段。② 如果所有业务都用同一个虚拟 Key,就丧失了"按 Key 拆分成本/定位问题"的价值——要按团队/应用粒度发。③ 吊销虚拟 Key 不会吊销厂商 Key,但吊销厂商 Key 会让所有虚拟 Key 失效。

三、预算(Budget)与配额(Quota / Rate Limit)

3.1 预算

预算是钱/Token 的上限,可设在不同粒度:

预算超限后,请求被拒(返回 429 / budget exceeded),避免"一个失控的调用把整月额度刷爆"。

3.2 速率配额(Rate Limit / RPM-TPM)

3.3 模型级白名单

每个虚拟 Key 可限制只能用哪些模型(如只准用便宜的 gpt-4o-mini,不准用贵的 o1)。这是"成本护栏"的控制点。

保险企业最怕"一个新人写错循环,半夜把调用量跑飞"。预算 + RPM/TPM + 模型白名单三件套,能让平台方把爆炸半径控制在单个 Key 内。配合告警(预算用到 80% 就报警),是交付时的硬性要求。
预算管"花多少钱/多少 Token"的上限,配额管理"每分钟请求/Token 数"。两者配合模型白名单,构成成本护栏。超限直接拒,避免单点失控拖垮全局额度。
① 预算是累计/周期概念,限速是瞬时概念,别混。② 预算建议设多级:Key 级 + 团队级,单层容易被"合谋刷爆"。③ 默认不报警只拒绝,业务侧会"莫名其妙失败",一定要配预算水位告警。

四、多租户(Multi-tenant)与项目级成本

4.1 多租户模型

LiteLLM 用 team / organization 维度组织租户。不同团队是不同租户,各自有 Key、预算、模型权限;平台方在后台统一看总成本和各租户分布。

4.2 项目级成本(Project / Tag)

4.3 成本数据从哪里来

Proxy 把每次调用的 token 用量、模型、耗时、Key/团队/项目写到数据库(Postgres/MySQL)或日志/BI。LiteLLM 提供 /spend 接口和 Daily Spend 报表做查询。

对医疗保险公司,多租户很自然:理赔、核保、客服是不同的"租户团队",要分别看 AI 支出、分别设预算。项目级成本让 CFO 能看到"理赔自动化这个 AI 项目本月花 ¥X,带来 ¥Y 节省"——这是说服管理层持续投入的关键证据。
多租户=按 team/organization 隔离不同团队;项目级成本=给每次请求打 project 标签,后端聚合成报表。两者让成本可拆分、可结算。成本数据来自 Proxy 落库 + Spend 报表。
① 多租户隔离是逻辑隔离(同库不同行),不是物理隔离;要严格隔离得上独立部署/独立库。② 项目标签是调用方自己传的,可被伪造——结算前要做可信来源校验。③ 成本聚合依赖 Proxy 落库,数据库挂了成本数据就没了,要配持久化和备份。

五、管理界面(Proxy UI / Spend Dashboard)

5.1 提供什么

5.2 工程价值

没有 UI 时,运营/财务查成本得登数据库跑 SQL;有 UI 后,非技术人员也能自助看。交付企业平台时,这直接关系到"甲方能不能自己用起来"。

交付保险客户时,对方运营不会写 SQL。一个能自助看"本月 AI 花费 Top 5 业务线"的界面,比十页技术文档更能证明平台价值。UI 不是锦上添花,是交付验收项。
LiteLLM 的管理界面提供 Key 管理、成本报表、请求日志、租户管理,让非技术人员也能自助运营。对企业交付,UI 是验收项,不是可有可无。
① UI 的访问权限要单独管控(它本身也是敏感入口),别让所有人都能吊销 Key。② 报表数据来自 Proxy 落库,库延迟/故障会让 UI 显示不准,要理解"UI 只是数据库的视图"。

六、LiteLLM Proxy 的部署形态

6.1 部署方式

方式适用注意
Docker 单容器起步、PoC、小团队配置用 env / yaml,状态落库
Docker Compose代理 + 数据库一起起适合单机演示
K8s(Helm)生产多副本、高可用网关本身要无状态 + 水平扩展(D7 讲)

6.2 配置要点

网关是"所有 AI 流量咽喉",必须高可用:K8s 多副本 + 无状态 + 数据库独立。单点部署网关一旦挂,全公司 AI 能力全瘫。这一点在 D6/D7 的部署设计里要体现。
Proxy 可 Docker 单容器、Compose、或 K8s(Helm) 部署。生产要 K8s 多副本无状态 + 独立数据库。配置用 yaml,密钥用 Secret,日志靠回调外推。
① 网关必须高可用,它是单点咽喉,挂了全公司 AI 停。单机 Docker 只适合 PoC。② 数据库是网关的"记忆",Key/预算都在里面,库没了治理就没了,要独立部署 + 备份。③ 网关本身无状态才好水平扩展,别把会话状态存在网关本地。

七、与 Spring AI 的集成方式

7.1 集成思路

Spring AI 的 OpenAiChatModel(或兼容 OpenAI 的客户端)只要把 base-url 指向 LiteLLM Proxy 地址、把 api-key 填成虚拟 Key,就能无缝调用。对 Java 业务代码而言,背后是 LiteLLM 还是真 OpenAI 完全透明。

# Spring AI 配置示例(application.yml)
spring:
  ai:
    openai:
      base-url: http://litellm-proxy:4000/v1   # 指向 LiteLLM 代理
      api-key: sk-virtual-xxxx                 # 虚拟 Key
      chat:
        options:
          model: gpt-4o-mini

7.2 分层职责

职责
Java 业务 / Spring AI业务编排、Prompt、工具调用、重试
LiteLLM Proxy统一格式、虚拟 Key、预算、多租户、成本
厂商模型实际推理
这是 Java 候选人最该讲清的:LiteLLM 是"平台基础设施层",Spring AI 是"应用开发框架层"。治理放网关、业务放应用,职责清晰,出问题各自负责。不要为了"显得自研"把预算逻辑写进 Java 代码——那是反模式。
Spring AI 把 base-url 指向 LiteLLM Proxy、api-key 填虚拟 Key 即可。分层:Java 管业务,LiteLLM 管治理,厂商管推理。治理别写进业务代码。
① 不要把预算/Key 校验逻辑写进 Spring AI 业务代码——那是网关该干的,重复实现易不一致。② 如果 Proxy 挂了,Spring AI 的所有调用都失败,要在应用层配降级(换直连/兜底模型/人工),不能让业务卡死。③ 两个 OpenAI 兼容层叠在一起,报错栈会变长,要统一日志链路追踪。

八、Build vs Buy 决策框架总览

8.1 本质问题

"自研 Gateway(D4 讲的那种)还是直接用 LiteLLM(买/用开源)?"这是一个经典的 Build vs Buy 决策。框架不是二选一,而是用一组维度打分。

8.2 评估维度

维度自研(Build)直接用 LiteLLM(Buy)
启动速度慢(从零造)快(开箱即用)
定制深度任意定制(内部鉴权/特殊路由)受限于其扩展点
维护成本自己养团队社区维护,跟版本
可控性/合规完全可控,数据不出内网需评估开源协议与数据流向
企业治理能力要自己实现 Key/预算/租户原生提供
决策要落到"我们的情况"。保险金融客户往往要求:① 数据不出内网(LiteLLM 可私有部署,满足);② 特殊合规审计(可能要自研补一层);③ 已有 K8s/Java 体系(LiteLLM 是 Python,要评估团队能否运维)。不要背结论,要背"按维度评估"的框架。
Build vs Buy 不是站队,是按维度(速度/定制/维护/合规/治理能力)打分。金融场景重点看数据不出网、合规审计、团队能否运维 Python 网关。结论要可辩护。
① 别一上来就说"肯定自研"或"肯定买"——面试官要的是决策过程,不是立场。② "Buy 不用维护"是误区:开源也要跟版本、要安全更新、要会排障。③ 合规不是"开源就不合规",LiteLLM 私有部署 + 代码审计可过金融合规,关键是评估动作要做到位。

九、何时选择自研 Gateway(D4 场景)

9.1 适合自研的信号

9.2 自研的成本(要诚实说)

自研意味着你要自己实现:虚拟 Key、预算扣减、配额、多租户、成本落库、UI、高可用——这些 LiteLLM 白送的,你都得造。D4 讲的"自研 Gateway 最小集"就是这部分。

对 Java 老手,自研的诱惑是"我们最熟 Java"。但要算清楚账:LiteLLM 已覆盖的治理能力,自研至少 1-2 人月,且要长期维护。除非有上面那些"LiteLLM 真做不到"的点,否则自研是重复造轮子。
自研适合:深度定制路由、已有 Java 治理底座不想割裂、特殊合规审计、核心能力不愿外包。但要承认成本——Key/预算/租户/UI/高可用都得自己造,和 LiteLLM 重复。
① "我们团队只会 Java"不是自研的好理由——运维一个 Python 网关的门槛远低于自研一套治理的工程量。② 自研很容易"做着做着变成 LiteLLM 山寨版",功能重合度高时要警惕是不是在重复造轮子。③ 自研后没人维护 = 技术债,决策时要写清 ownership。

十、何时选择直接用 LiteLLM

10.1 适合直接用的信号

10.2 什么情况会"卡脖子"

若需要 LiteLLM 没有的扩展(如特定内部鉴权协议、私有模型特殊调度),要么用它的 callback/hook 扩展点,要么在它外面再包一层薄适配——而不是推翻重造。

对保险交付项目,90% 的场景 LiteLLM 够用:多租户(理赔/核保/客服)、预算护栏、成本结算、Spring AI 集成都覆盖了。先做"直接用 + 必要扩展",只有真遇到标准能力解决不了的点,才评估局部自研。
直接用适合:要快速拿到治理能力、模型厂商多切换频繁、团队小交付急、需求在 LiteLLM 能力内。遇扩展需求先用它的 hook/callback,别动辄推翻重造。
① "直接用"不等于"零成本"——要会部署、运维、跟版本、读源码排障,团队要有这能力。② 别因为"想显得技术强"而自研,企业交付看的是稳定交付而非炫技。③ 扩展点(callback/hook)能力有限,超出部分要清楚边界,别硬塞。

十一、ADR(架构决策记录)怎么写

11.1 ADR 是什么

ADR(Architecture Decision Record)是记录"为什么做这个架构决策"的轻文档。它不描述系统怎么搭,而是记录"在 X 背景下,我们决定做 Y,权衡了 Z,后果是 W"。目的是让后人(包括 6 个月后的自己)理解"当时为什么这么选"。

11.2 标准四段结构

段落回答什么关键
背景(Context)面临什么问题 / 约束是什么写清驱动力:业务、合规、团队、时间
决策(Decision)我们决定怎么做一句话结论 + 范围
权衡(Options / Trade-offs)还考虑过哪些,为什么没选体现你比较过,不是拍脑袋
后果(Consequences)选了之后带来什么正面 + 负面 + 后续动作
ADR 是企业架构师的"基本功"。面试官看你写 ADR,实际在考:你能不能把"自研 vs 用 LiteLLM"这种决策,用可复盘的书面形式讲清楚、讲 defendable。保险/金融客户特别吃这套——他们要审计留痕。
ADR 记"为什么这么选",不是记"系统长啥样"。四段:背景(问题/约束)→ 决策(怎么做)→ 权衡(还考虑过啥、为啥不选)→ 后果(正负影响+后续)。让决策可复盘、可审计。
① ADR 不是设计文档,不写实现细节,只写决策与理由。② 漏掉"权衡"段最致命——显得没想过别的方案,决策像拍脑袋。③ "后果"要写负面(技术债/维护成本),只写好处显得不诚实,也利于后人判断是否要推翻。

十二、示例 ADR:是否引入 LiteLLM 作为模型网关

12.1 模板示例

ADR-007  引入 LiteLLM 作为企业模型网关

【背景】
W7 要落地企业 Agent 平台,需统一调用多家模型,并具备虚拟 Key、
预算、多租户与成本结算能力。团队以 Java 为主,交付窗口 2 个月。

【决策】
采用 LiteLLM Proxy 作为模型网关层;Spring AI 通过 OpenAI 兼容
接口对接;厂商 Master Key 存 Secret,业务侧只持虚拟 Key。

【权衡】
- 自研 Gateway:可控性高,但要 1-2 人月并实现全套治理能力,超限。
- 直接用 LiteLLM:开箱治理能力,私有部署满足数据不出网;不足处
  用 callback 扩展,不推翻重造。 → 选此项。
- 直连厂商不使用网关:最简单,但无预算/租户/成本,否决。

【后果】
+ 2 周内具备企业治理能力,Spring AI 零改造接多模型。
+ 成本可按团队/项目结算,支撑内部 Chargeback。
- 引入 Python 组件,需建立运维与版本跟进能力。
- 后续若遇标准能力外的定制,需评估 hook 扩展或薄适配层。
写 ADR 时"背景"要落到具体约束(时间/团队/合规),"决策"要可验证,"权衡"要体现你真的比较过自研,"后果"要诚实列负面。这样评审会上没人能一句话推翻你。
示例 ADR 把背景(2 个月窗口、Java 团队)、决策(用 Proxy、Spring AI 对接)、权衡(自研太贵/直连无治理否决)、后果(快但引入 Python 运维)都写清。结构完整、可被挑战。
① 示例里的"2 周/1-2 人月"要基于真实评估,别瞎编数字——评审会被追问。② "后果"里写"引入 Python 运维"是诚实点,漏了会被问"你考虑过运维吗"。③ ADR 要有人审、有版本、能检索,写成一次性 Word 塞网盘就失去意义。

十三、面试达标线①:讲清 LiteLLM 的企业能力

能力一句话企业价值
虚拟 Key给用户假 Key,映射真实厂商 Key密钥隔离、可吊销、按 Key 拆分
预算Key/团队/项目级花费上限防失控刷爆,成本护栏
配额(RPM/TPM)每分钟请求/Token 限速防打满厂商限速、互相影响
多租户team/org 隔离不同团队理赔/核保/客服分别管控
项目级成本请求打标签聚合成报表内部结算 Chargeback、CFO 可见
管理界面Key/成本/日志可视非技术人员自助运营、交付验收
核心:LiteLLM 用"虚拟 Key + 预算 + 配额 + 多租户 + 项目成本 + 管理界面"把企业治理能力收口在网关层。对 Java 平台,它是 Spring AI 后面的代理,业务只认一个 OpenAI 兼容地址。

十四、面试达标线②:Build vs Buy 框架 + ADR 结构

Build vs Buy:按 速度/定制/维护/合规/治理能力 维度打分 → 选"直接用 LiteLLM"或"自研 Gateway(D4)" ADR 四段:背景(Context) → 决策(Decision) → 权衡(Options/Trade-offs) → 后果(Consequences)
  1. Build vs Buy:不是站队,是按维度评估;金融场景重点看数据不出网、合规审计、团队能否运维 Python。
  2. 自研信号:深度定制路由、已有 Java 治理底座、特殊合规、核心能力不愿外包。
  3. 直接用信号:要快速拿治理能力、厂商多切换勤、团队小、需求在能力边界内。
  4. ADR 背景:写清业务/合规/团队/时间约束,让决策有根。
  5. ADR 决策:一句话结论 + 范围,可验证。
  6. ADR 权衡:列出备选方案及否决理由,证明比较过。
  7. ADR 后果:正面 + 负面 + 后续动作,诚实列技术债。

十五、W7D5 自测清单

十六、高频面试题速记卡

Q:LiteLLM 是模型吗?它解决什么问题?
不是模型,是 LLM 网关。统一各家 API 格式 + 提供企业治理(虚拟 Key/预算/多租户/成本)。
Q:虚拟 Key 和厂商 Key 什么关系?
用户持虚拟 Key 调 Proxy,Proxy 用真实 Master Key 调厂商。厂商 Key 不落业务侧,泄露只吊销虚拟 Key。
Q:预算和限速(RPM/TPM)区别?
预算是累计/周期花费上限,限速是每分钟请求/Token 瞬时上限。两者配合模型白名单构成成本护栏。
Q:项目级成本怎么来的?
请求带 project 标签,Proxy 落库后聚合成报表,支撑内部 Chargeback 结算。
Q:Spring AI 怎么接 LiteLLM?
base-url 指向 Proxy 地址、api-key 填虚拟 Key。治理在网关,业务在应用,职责分离。
Q:什么时候该自研 Gateway 而不是用 LiteLLM?
深度定制路由、已有 Java 治理底座不想割裂、特殊合规审计、核心能力不愿外包时。
Q:Build vs Buy 决策该站哪边?
不站队,按速度/定制/维护/合规/治理能力维度评估,结论要可辩护。
Q:ADR 四段是什么?
背景(Context) → 决策(Decision) → 权衡(Options) → 后果(Consequences)。记决策与理由,不是实现细节。
Q:ADR 最容易漏哪段?
"权衡"段——漏了显得拍脑袋没比较;以及"后果"里的负面要诚实写。
Q:网关部署为什么必须高可用?
它是所有 AI 流量咽喉,单点挂了全公司 AI 停。要 K8s 多副本无状态 + 独立数据库。
FDE W7D5 学习手册 · LiteLLM 集成与 Build vs Buy ADR(面试级)· 配合《FDE-W7D5-评测题.md》自测
📌 待查★ 重要