🏗️ AI系统设计面试¶
⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。
适用岗位:AI算法工程师(二面/三面)、MLOps/AI Infra工程师 核心能力:将AI模型落地为可靠、高效、可扩展的生产系统
目录¶
| 章节 | 内容 | 学时 |
|---|---|---|
| 01-方法论 | 系统设计面试框架(AI版RESHADED) | 2h |
| 02-经典题型 | 10个高频AI系统设计题(详解) | 8h |
| 03-核心组件 | 特征系统/推理服务/训练平台/监控 | 4h |
| 04-模拟面试 | 45分钟模拟面试流程 | 2h |
总学时:约16小时
01 AI系统设计面试方法论¶
1.1 AI-RESHADED框架(45分钟)¶
| 步骤 | 时间 | 内容 |
|---|---|---|
| Requirements | 5min | 功能需求+非功能需求(QPS/延迟/成本) |
| Estimate | 3min | 数据量/模型大小/计算量 back-of-envelope |
| System Overview | 5min | 端到端架构图(数据→训练→推理→监控) |
| High-level Design | 10min | ML方案选择+技术权衡 |
| Architecture | 10min | 详细组件设计(特征/推理/存储) |
| Deep Dive | 7min | 面试官感兴趣的技术细节 |
| Evaluation | 3min | 离线→在线评估+监控方案 |
| Deployment | 2min | 发布策略+版本管理+回滚 |
1.2 AI系统设计 vs 传统系统设计¶
| 维度 | 传统系统 | AI系统 |
|---|---|---|
| 核心 | 数据存储+检索 | 模型训练+推理 |
| 评估 | 功能正确性 | 离线指标+在线AB |
| 迭代 | 代码更新 | 数据+模型+代码 |
| 特有问题 | - | 数据偏差/模型漂移/幻觉 |
| 资源 | CPU+内存+磁盘 | +GPU+显存 |
1.3 性能估算方法(Back-of-Envelope)¶
系统设计面试中的快速估算是核心能力,以下是常用公式和参考值:
| 估算项 | 公式/经验值 |
|---|---|
| 平均QPS | DAU × 日均请求次数 / 86400 |
| 峰值QPS | 平均QPS × 2~3(峰值系数) |
| 存储总量 | 数据量 × 单条大小 × 副本数 × 保留天数 |
| GPU显存 | 模型参数量 × 精度字节数(FP16=2B, INT8=1B, INT4=0.5B) |
| 推理延迟 | 模型计算 + 特征查询 + 网络开销 + 队列等待 |
| 带宽 | QPS × 单次响应大小 |
常用数值参考:
| 组件 | 延迟/容量 |
|---|---|
| Redis读取 | <1ms |
| FAISS向量检索(百万级) | ~5ms |
| Cross-Encoder Rerank(10条) | ~50ms |
| LLM推理(7B, 512 tokens) | ~2-5s |
| A100 80GB FP16 | 7B模型~14GB显存, 70B~140GB(需多卡) |
| Kafka端到端延迟 | ~10-100ms |
| ES/倒排检索(千万级) | ~10-50ms |
估算示例(推荐系统):
DAU = 1亿
日均请求 = 10次/用户
日总请求 = 10亿
平均QPS = 10亿 / 86400 ≈ 12K
峰值QPS = 12K × 2.5 ≈ 30K
单请求延迟 = 特征查询(5ms) + 召回(20ms) + 精排(50ms) + 重排(10ms) ≈ 85ms < 200ms ✓
GPU需求 = 30K QPS × 50ms/req ÷ 1000 = 1500 GPU·s/s → 需~1500个推理线程
02 经典题型(10题详解)¶
题目1: 设计一个推荐系统(抖音/小红书)¶
需求:日活1亿,每次请求推荐50条内容,延迟<200ms
架构:
用户请求 → API Gateway → 用户画像服务(Redis) → 多路召回(并行)
├→ ItemCF召回(Redis)
├→ 双塔向量召回(FAISS, GPU)
├→ 热度召回
├→ 多兴趣召回(MIND)
└→ 社交召回
→ 合并去重(10000→1000) → 粗排(轻量双塔) → 精排(DIN多目标模型, GPU)
→ 重排(多样性+业务规则) → 返回50条
关键设计决策: - 特征系统: 离线(Spark T+1)+近实时(Flink分钟级)+实时(Redis毫秒级) - 精排模型: DIN + 多目标(CTR/完播率/互动) + MMoE - 模型更新: 小时级增量训练 + 天级全量训练 - AB测试: 用户级分流,核心指标+护栏指标
题目2: 设计一个RAG问答系统(企业知识库)¶
需求:100万文档,QPS 100,准确率目标>90%,延迟<3s
架构:
文档上传 → 解析(PDF/HTML/DOC) → 分块(500 tokens, 50 overlap)
→ Embedding(BGE-M3) → 向量库(Milvus) + 关键词索引(ES)
用户查询 → Query改写(HyDE) → 混合检索(Dense 0.7 + BM25 0.3)
→ Rerank(Cross-Encoder, Top-10) → LLM生成(GPT-4o/Qwen-72B)
→ 引用标注 → 返回结果
关键设计决策: - 分块策略: 语义感知分块(按段落/标题) > 固定大小 - 混合检索: Dense(语义)+Sparse(关键词)互补 - Rerank: Cross-Encoder精排通常能显著提升纯向量检索效果 - 幻觉控制: 引用标注+自一致性检查+置信度阈值
题目3: 设计一个LLM推理服务(日调用1亿)¶
需求:支持7B-70B模型,P99<5s,GPU成本优化
架构:
客户端 → LB(Nginx) → API Gateway(认证/限流/路由)
→ 请求队列(Redis Stream, 优先级队列)
→ 推理集群:
├→ 小模型池(7B, INT4, 高并发)
├→ 中模型池(70B, FP8, 中并发)
└→ 大模型池(API代理, GPT-4o)
→ SSE流式响应 → 客户端
关键优化: - vLLM: PagedAttention + Continuous Batching - 量化: GPTQ/AWQ(INT4) → 4x显存节省 - 路由策略: 简单问题→7B,复杂→70B,极难→API - 自动扩缩: K8s HPA + GPU利用率指标(DCGM) - 成本: Spot实例(可抢占) + 预留实例混合
题目4: 设计一个实时欺诈检测系统¶
需求:交易延迟<100ms内完成检测,识别率>99%,误报率<0.1%
架构:
交易事件 → Kafka → Flink(实时特征计算)
→ 特征拼接(Redis实时特征 + 离线用户画像) → 决策层:
├→ 规则引擎(黑名单/高风险规则, <5ms) → 直接拦截
└→ ML模型推理(XGBoost+DNN ensemble) → 风险评分
→ 决策(评分>0.9拦截 / 0.6-0.9人工审核 / <0.6放行)
→ 异步: 结果回写 + 告警通知
离线链路: Spark(历史特征+标签) → 模型训练(每日更新) → 模型注册(MLflow)
→ A/B灰度发布 → 上线
关键设计决策: - 特征工程: 交易金额/频率统计(1h/6h/24h滑动窗口) + 设备指纹 + IP地理位置 + 用户历史行为 - 模型策略: 规则引擎(高置信度快速拦截) + ML模型(复杂模式识别) 两层决策 - 样本不均衡: 正负样本比约1000:1,使用欠采样 + Focal Loss + 时间加权 - 实时性保障: Flink滑动窗口聚合 + Redis预计算特征,确保E2E <100ms - 对抗升级: 定期对抗样本训练,攻击模式漂移监控,黑产IP/设备库动态更新 - 可解释性: SHAP值输出每笔交易的风险归因,支持人工审核和合规要求
题目5: 设计一个图像内容审核系统¶
需求:日处理图片千万级,审核延迟<500ms,识别精度>99%
架构:
图片上传 → 图片预处理(缩放/裁剪) → 多模型并行审核:
├→ 色情检测(NSFW分类器)
├→ 暴力/血腥检测
├→ OCR文字检测 → 文本审核(NLP)
├→ 人脸检测 → 人物识别(敏感人物库)
└→ 商标/Logo检测
→ 综合判定(规则引擎+模型融合) → 通过/拦截/人工复审
关键设计决策: - 模型部署: TensorRT加速 + Triton Inference Server多模型管理 - 级联审核: 快速模型先过滤(95%正常内容),复杂模型处理可疑内容 - 反馈闭环: 人工复审结果回流至训练集,持续优化模型
题目6: 设计一个搜索排序系统(电商)¶
需求:日搜索请求千万级,从查询到展示延迟<300ms
架构:
用户Query → Query理解(NER/意图识别/Query改写)
→ 多路召回(倒排索引+向量检索+业务规则)
→ 粗排(LightGBM, 千级→百级)
→ 精排(DNN+Cross-Attention, 百级→十级)
→ 重排(多样性/业务调控) → 返回结果
关键设计决策: - 相关性特征: 文本匹配(BM25) + 语义匹配(BERT) + 行为特征(CTR/CVR) - 多目标优化: 点击率 × 转化率 × GMV,结合业务权重 - 实时性: Flink计算实时特征,模型小时级增量更新
题目7: 设计一个对话机器人(客服)¶
需求:日对话百万级,解决率80%常见问题,复杂问题转人工
架构:
用户输入 → 意图识别(BERT分类器) → 槽位填充(NER)
→ 对话管理器(DST):
├→ FAQ匹配(RAG检索) → 知识库问答
├→ 任务型对话(查订、退换货) → 调用业务API
├→ 闲聊/开放域 → LLM生成
└→ 转人工(复杂/敏感/情绪检测)
→ 品控审核 → 返回回复
关键设计决策: - 多轮对话管理: 维护对话状态(Redis) + 上下文窗口 - 安全护栏: 输出过滤敏感信息 + 幻觉检测 - 持续优化: 对话日志分析 → 发现bad case → 优化检索/模型
题目8: 设计一个视频推荐系统¶
需求:日活千万级,短视频+长视频混合推荐,优化观看时长与次日留存率
架构:
用户请求 → 用户画像服务(Redis) → 多路召回(并行):
├→ 双塔向量召回(视频Embedding, FAISS)
├→ ItemCF协同过滤(Swing算法)
├→ 热度/新内容探索池(时间衰减)
├→ 关注作者最新内容
└→ 标签兴趣图谱召回
→ 粗排(双塔模型, 万级→千级)
→ 精排(多目标DNN: 完播率/点赞/评论/转发, MMoE结构)
→ 重排(多样性打散DPP + 流量调控 + 广告混排) → 返回推荐列表
内容理解(异步): 视频上传 → 多模态特征提取(CLIP视觉+ASR音频+NLP标题)
→ 内容标签/质量评分 → 写入特征库
关键设计决策: - 多模态特征: 视频帧特征(CLIP) + 音频ASR转文本 + 标题/弹幕NLP + 封面图特征 - 完播率建模: 视频时长归一化处理,长/短视频分开建模(不同的目标函数) - 探索与利用: 新内容分配探索流量池(10%流量),根据早期互动数据决定是否进入精排 - 实时反馈: 用户滑过/点赞/评论 → Flink实时更新Redis中的用户兴趣向量 - 冷启动: 新用户基于设备/地域/时段的群体画像推荐;新视频基于内容特征匹配
题目9: 设计一个广告竞价系统(eCPM排序)¶
需求:广告竞价QPS万级,延迟<100ms,最大化平台收入与用户体验平衡
架构:
广告请求(用户画像+页面上下文) → 广告检索(定向匹配):
├→ 人群定向(DMP标签匹配)
├→ 关键词定向(Query-广告相关性)
└→ 重定向(Retargeting)
→ 候选广告集(千级) → 预估模型(并行):
├→ pCTR模型(Deep&Cross Network)
├→ pCVR模型(ESMM, 解决样本选择偏差)
└→ 质量分模型(广告与上下文相关性)
→ eCPM排序(pCTR × pCVR × Bid × 质量分)
→ 竞价扣费(GSP二价机制) → 预算检查(Pacing) → 广告展示
→ 异步: 曝光/点击/转化日志 → Kafka → 归因 + 模型训练
关键设计决策: - eCPM排序: eCPM = pCTR × pCVR × Bid,多目标模型预估点击率和转化率 - 竞价机制: GSP(Generalized Second Price)二价扣费,激励广告主真实出价 - 预算控制: 平滑消耗算法(Pacing),按时间段均匀分配预算,防止预算过早耗尽 - 特征工程: 广告主特征 + 用户画像 + 上下文特征 + 交叉特征(DeepFM/DCN) - 冷启动: 新广告分配explore流量池(Thompson Sampling),积累一定数据后进入正常竞价 - 频控与体验: 用户级频次控制,同一广告限制每日曝光次数,避免用户疲劳
题目10: 设计一个ML特征平台(Feature Store)¶
需求:统一管理训练/推理特征,支持离线/近实时/实时三层,在线查询P99<10ms
架构:
数据源(业务DB / 用户行为日志 / 事件流) → 特征计算:
├→ 离线批处理(Spark/dbt → Hive/Delta Lake, T+1)
├→ 近实时流(Kafka → Flink → Redis, 分钟级)
└→ 实时请求(上下文特征: 位置/时间/设备, 毫秒级)
特征注册中心(元数据/血缘/权限/版本) ← SDK注册特征定义
特征服务:
├→ 训练: Point-in-time Join → 生成训练数据集(避免数据泄漏)
└→ 推理: 在线特征查询(Redis/DynamoDB, P99<10ms)
监控: 特征分布漂移(PSI) / 缺失率 / 新鲜度 / 查询延迟
关键设计决策: - Train-Serving一致性: 训练和推理使用同一套特征计算逻辑(DSL定义),避免Training-Serving Skew - 存储分层: 离线(Hive/Delta Lake)、在线(Redis/DynamoDB)、近实时(Flink+Redis) - 特征注册: 元数据管理(名称/类型/owner/数据源/更新频率),支持特征发现和跨团队复用 - 时间旅行: Point-in-time Join避免数据泄漏(data leakage),确保训练时只用事件发生前的特征 - 监控: 特征分布漂移检测(PSI>0.2告警)、缺失率、新鲜度(SLA监控) - 回填(Backfill): 新增特征可回填历史数据,支持离线实验快速迭代
03 核心组件设计¶
3.1 特征系统(Feature Store)¶
离线特征: Spark/dbt → Hive/Delta Lake → 同步Redis/DynamoDB
近实时特征: Kafka → Flink → Redis(分钟级)
实时特征: 请求上下文(位置/时间/设备)
3.2 推理服务¶
- 模型格式: PyTorch→ONNX→TensorRT
- Serving: Triton(多模型/动态批处理) / vLLM(LLM专用)
- 监控: 延迟P50/P99、GPU利用率、模型漂移
3.3 训练平台¶
- 实验追踪: MLflow/W&B
- 分布式训练: PyTorch FSDP / DeepSpeed
- 超参优化: Optuna/Ray Tune
- 自动化: Airflow触发重训练
3.4 监控与评估¶
- 数据监控: 特征分布漂移(PSI/KL散度)
- 模型监控: 预测分布变化、在线指标下降
- 系统监控: QPS/延迟/错误率(Prometheus+Grafana)
04 模拟面试流程¶
45分钟模拟(以推荐系统为例)¶
0-5min: 需求澄清 - "这是哪种平台?内容形态?" → 短视频 - "日活/QPS量级?" → 日活1亿 - "核心优化指标?" → 用户时长+留存
5-8min: 估算 - "1亿DAU × 平均10次请求/天 = 10亿请求/天 ≈ 12K QPS(峰值30K)"
8-13min: 整体架构 - 画出端到端架构图
13-23min: ML方案设计 - 多路召回策略、特征工程、精排模型选择、多目标优化
23-33min: 架构详细设计 - 特征系统、模型Serving、AB测试、实时更新
33-40min: 深入讨论 - 面试官可能追问:冷启动怎么办?数据偏差怎么处理?
40-43min: 评估方案 - 离线(AUC/NDCG) → 在线(CTR/留存AB测试)
43-45min: 总结 - 部署策略、风险点、未来优化方向
最后更新:2026年2月





