SWE / Infra · System Design

Meta LLM 评论建议:三候选、五十语言与成本预算

用户进入评论框时生成三条相关建议,在现有特征库、LLM网关、翻译、排名和限流组件上优化接受率、延迟与token成本。

题目重点:用户进入评论框时生成三条相关建议,在现有特征库、LLM网关、翻译、排名和限流组件上优化接受率、延迟与token成本。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 日请求20M是练习给定数字,平均20,000,000/86400≈231.5QPS;峰值、重试和取消另算,不能多加一个0。训练设峰值10倍、P95端到端500ms仅作预算示例。
  • 现有组件包括实时user/post embedding库、版本化LLM gateway/回测/streaming、缓存、翻译、rank、rate limit和traffic shaping。缓存缩写未明确含义,先确认读写与失效能力再用。
  • 用户只是focus评论框,不保证会发言;建议不得代替用户自动发布。隐私帖子权限、语言偏好和安全政策需在服务端检查。

解题路线

  1. 触发先去抖与权限校验,传postVersion/requestId/language与有限用户偏好。先读帖子可复用的三候选缓存;未命中走特征检索、短上下文生成、多候选去重、安全过滤、relevance rank,再返回三条。不要为同一用户反复focus重新付费生成。
  2. 缓存按postVersion+language+model/prompt/policyVersion键;普适候选可共享,敏感个性化建议不能跨用户缓存泄露。权限与删除即时校验,过期内容不能只靠TTL等待。singleflight合并同帖子并发miss,热点post异步预生成。
  3. 模型路由从轻模型baseline开始,复杂/低质量样本才升级重模型;限制输入内容摘要、最大输出token和候选数量。固定可用短语降级比超时空白更可靠,但不能把模版冒充“理解所有语言”。
  4. 五十语言优先原语言生成与分组评估;低资源语言可翻译到pivot再生成/回译,成本和往返延迟计入预算,保留语气/文化/实体。翻译与安全过滤都可能漏掉暗语,语言专家抽检和用户反馈形成标签。
  5. 已有gateway版本与backtest用于同样本离线对比,rank按相关性/多样性/安全约束排序;streaming不能把未经安全检验的半句直接展示。短三候选若完整输出成本很小,先完成审核再展示更简单。
  6. A/B按用户随机,衡量展示后被选择/编辑/最终发布的漏斗、用户评论总增量和负反馈;增加点击可能只是替代自己输入。记录exposure实际可见、model/prompt版本,监测语言分组、P95、token/成功发布与举报守护指标。

手动走一遍

平均231.5QPS,若缓存命中80%,生成流量约46.3QPS;每次输入300/输出60token,平均生成约13,889输入token/秒、2,778输出token/秒。单次链路预算例权限/缓存30ms、特征40、生成250、安全rank80、网络50,总450ms;实际P95不能把独立阶段P95简单相加当测量结果。

规模与取舍

月token预算=请求量×missRate×(输入/输出token),再按实际模型单价分别计费;重试、回译和升级比例需另加。缓存命中路径与miss路径的延迟分布不同,需真实load test与端到端追踪,不宣称以上假设就是生产SLA。

易错点与追问

容易失分的边界

  • 只算20M平均QPS而不算峰值和模型耗时,无法得到GPU并发与排队预算。
  • 模型先stream不当文字再撤回不能算成功过滤;用户已经看见。
  • 缓存忽略postVersion/权限/语言会输出过时或不可见内容。

继续深挖

  • 如何验证低成本?按真实流量日志重放路由,核对cache命中、token、升级/重试,观察成本与接受率joint curve。
  • 采用率低先辨别建议不相关、语气不像本人、延迟错过时机或用户本就不想评论;分漏斗而非只换大模型。
  • focus预生成导致大量unused候选,如何平衡早生成与浪费?根据意图概率选择预取,单独记录unused spend。
✓已复制微信号!