环境检查
把你产品里的 AI 请求分三类:即时问答、后台批处理、付费高价值任务。三类不要共用一个默认模型。
| 任务 | 推荐路由 | 成本风险 |
|---|---|---|
| 标题改写 | 小模型优先 | 量大,单次低 |
| 客服草稿 | 中等模型 + fallback | 失败会影响留存 |
| 合同分析 | 强模型优先 | 长上下文贵 |
| agent 调工具 | 逐步升级 | 重试会放大费用 |
我的习惯是先在代码里定义「任务类型」,而不是直接到处写 model name。后面换模型、调预算、做 A/B 才不会满仓库搜索。
操作步骤
第一步,配置 LiteLLM Router。把可选模型、权重、超时和重试放在一个地方。不要让业务代码知道供应商细节。
第二步,在 LangChain 调用时补 metadata:tenant_id、feature、plan、request_id。这些字段以后会救命,因为你真正要看的不是全站总成本,而是某个客户是否把你的毛利吃掉。
第三步,把 LangSmith cost tracking 接上。确认 trace 里出现真实模型名和 token 用量。如果模型名被网关改写,就手动映射价格表。
第四步,给每个套餐设预算阈值。免费用户走小模型,Pro 用户关键路径用强模型,超出月额度后降级或提示排队。
常见失败原因
- Router fallback 次数过多,失败请求也计入成本
- LangSmith 里模型名缺失,成本显示为 0 或 unknown
- prompt cache 命中率没记录,误以为某个模型很贵
- 用户上传长 PDF,没有截断和摘要层
- 后台任务重跑,没有幂等 key
跨地区协作
多模型路由常会牵涉外部 endpoint、团队成员本地调试和 CI。我的做法是:本地只保留网关地址,不把每家 key 散到电脑;生产环境按租户打日志。需要快速验证 Claude、OpenAI 兼容接口时,可以接入独立开发者可用的 Claude / OpenAI API 中转,把产品逻辑跑通,再决定是否自建。
已上线后的成本清单
- 每天看 top 20 高成本请求
- 每周看不同套餐毛利
- 每月更新模型单价表
- 给 agent 工具调用设置最大步数
- 对长上下文先摘要再调用
- 对失败请求保留 request id,方便复盘
路由分层实践
我会把模型池分成三层,而不是按供应商分。第一层是「批量便宜层」,负责改写、分类、标签、摘要;第二层是「交互默认层」,负责客服草稿、短问答、代码解释;第三层是「高价值层」,只给付费用户、复杂任务和人工确认后的重试。
每一层都要有退出条件。比如摘要超过 8K token,先切块;工具调用超过 6 步,停止并要求用户确认;连续两次 fallback,返回可读错误,而不是继续烧钱。这个规则比具体模型名更重要,因为模型价格会变,用户行为不会按你的预算来。
计费口径也要早定。我的建议是业务库记录「这次请求应向用户收多少额度」,观测系统记录「这次请求真实花了多少成本」。两套数字不要混在一起。前者服务产品权益,后者服务毛利分析。很多独立开发者亏钱,就是把真实成本藏在平均值里,直到某个重度用户把账单打穿。
上线后还要看失败成本。有些请求最后返回失败,但前面已经消耗了一轮长上下文和一次 fallback。退款时用户只记得失败,你的账单却已经发生。所以报表里单独拉一列 failed_cost,超过阈值就优先修稳定性,而不是继续调提示词。这个指标早一天建立,后面少很多糊涂账。