LLM Interview Cheat Sheet
把高频大模型面试题压缩成一页可搜索速查表
覆盖 Transformer、推理优化、RAG、Agent、对齐、微调、分布式训练、评估、模型网关与安全治理。适合面试前 30 分钟快速过重点,也适合复习时按模块查漏补缺。
95
道核心问答
15
个知识模块
30min
面试前冲刺
2026
前沿趋势补充
当前显示 95 / 95 道题
全部题目
没有匹配的题目
换一个关键词,或点击“重置筛选”查看全部内容。
基础必答Attention 公式、复杂度、Pre-LN、RoPE、KV Cache 是最容易被追问的底层题。
工程落地重点准备 vLLM、PagedAttention、RAG 召回/重排、模型网关、成本治理和评估闭环。
前沿加分能讲清 GRPO、MoE、长上下文、LiveBench、数据合成,会明显拉开差距。
Mock Interview
模拟面试问答诊断
随机抽一道高频题,写下你的回答。页面会按关键词覆盖度给出本地诊断,并推荐对应 notes。
点击“换一题”开始模拟面试。
Weakness Radar
薄弱点判断测试
给 8 个方向打分,低分模块会直接输出复习路径和 notes 链接。
Transformer & Attention
8 题
Q
Self-Attention 的计算公式是什么?为什么要除以 √d_k?高频
▼
公式:
为什么除以 √d_k:若 Q、K 各分量独立均值为 0、方差为 1,则点积 qᵀk 的方差为 d_k。除以 √d_k 使方差归一化为 1,防止 softmax 输入过大导致梯度消失(注意力分布极端集中到少数 token)。
Attention(Q,K,V) = softmax(QK^T / √d_k) · V为什么除以 √d_k:若 Q、K 各分量独立均值为 0、方差为 1,则点积 qᵀk 的方差为 d_k。除以 √d_k 使方差归一化为 1,防止 softmax 输入过大导致梯度消失(注意力分布极端集中到少数 token)。
Q
Multi-Head Attention 的作用?参数量和单头相比如何?高频
▼
多头注意力将 d_model 切分为 h 个子空间,每头维度
总参数量与单头基本等同(4 个 d_model×d_model 矩阵),但捕获了更丰富的特征表示。
d_k = d_model/h,独立学习不同类型依赖(句法、语义、指代等),再 Concat 后线性变换。总参数量与单头基本等同(4 个 d_model×d_model 矩阵),但捕获了更丰富的特征表示。
Q
Self-Attention 的时间和空间复杂度是多少?高频
▼
| 维度 | 复杂度 | 瓶颈 |
|---|---|---|
| 时间 | O(n²·d) | n 为序列长度,d 为维度 |
| 空间 | O(n²) | 注意力矩阵是 n×n 的 |
Q
Pre-LN 和 Post-LN 有什么区别?LLaMA 用的是哪种?
▼
Post-LN(原始 Transformer):LayerNorm 在残差相加后,训练容易不稳定,需要精心 warmup。
Pre-LN:LayerNorm 在子层之前,梯度流更稳定,收敛更快。
LLaMA 使用 Pre-LN,并将 LayerNorm 替换为 RMSNorm(去掉均值中心化,省 7% 计算量,性能相当)。
Pre-LN:LayerNorm 在子层之前,梯度流更稳定,收敛更快。
LLaMA 使用 Pre-LN,并将 LayerNorm 替换为 RMSNorm(去掉均值中心化,省 7% 计算量,性能相当)。
Q
GQA 和 MQA 是什么?LLaMA 2 为什么用 GQA?高频
▼
| 方案 | K/V 数量 | KV Cache |
|---|---|---|
| MHA | H 套(每头独立) | 最大 |
| MQA | 1 套(所有头共享) | 最小 |
| GQA | G 套(每组共享) | 折中 |
Q
Flash Attention 的核心优化思想是什么?高频
▼
标准 Attention 需要将完整 N×N 注意力矩阵写入 HBM(显存),IO 成为瓶颈。
FlashAttention 核心:Tiling(分块)——将 Q/K/V 切成小块,在 GPU SRAM(片上高速缓存)中完成计算,通过 Online Softmax 保证数值正确性,反向传播用重计算避免存储中间结果。
结果:HBM 访问复杂度从 O(N²) 降至 O(N²/M),显存从 O(N²) 降至 O(N),同时更快。
FlashAttention 核心:Tiling(分块)——将 Q/K/V 切成小块,在 GPU SRAM(片上高速缓存)中完成计算,通过 Online Softmax 保证数值正确性,反向传播用重计算避免存储中间结果。
结果:HBM 访问复杂度从 O(N²) 降至 O(N²/M),显存从 O(N²) 降至 O(N),同时更快。
Q
Encoder-only / Decoder-only / Encoder-Decoder 三种架构各适合什么任务?
▼
| 架构 | 代表 | 注意力 | 适合任务 |
|---|---|---|---|
| Encoder-only | BERT | 双向 | 分类、NER、句对匹配 |
| Decoder-only | GPT/LLaMA | Causal Mask | 对话、续写(当前主流) |
| Encoder-Decoder | T5/BART | 双向+交叉 | 翻译、摘要 Seq2Seq |
Q
SwiGLU 激活函数的公式是什么?为什么比 ReLU 效果好?
▼
FFN(x) = (xW₁ ⊙ σ(xW₁)) · xW₃(Swish + GLU 门控)优于 ReLU 的原因:引入了门控机制,提供更平滑的非线性和梯度,允许负值通过(不像 ReLU 硬截断)。代价是需要 3 个权重矩阵,FFN 隐藏层通常设为 2/3×4d 以保持参数量不变。LLaMA、Qwen、DeepSeek 均采用 SwiGLU。
位置编码
5 题
Q
RoPE 旋转位置编码的基本原理是什么?高频
▼
RoPE 对 Q 和 K 向量按位置 m/n 分别乘以旋转矩阵 R_m 和 R_n,使得内积 q_m·k_n 只依赖相对位置 (m-n),从而以绝对位置编码的实现方式达到相对位置编码的效果。
高维向量被拆分成 d/2 对,每对按不同频率
高维向量被拆分成 d/2 对,每对按不同频率
θᵢ = 10000^(-2i/d) 旋转。被 LLaMA、Qwen、Mistral 等主流模型采用。苏剑林(苏神)提出。
Q
RoPE 在超长序列上为什么失效?有哪些扩展方法?高频
▼
失效原因:训练时只见过 [0, L_train] 范围内的旋转角度,超出范围后角度分布发生偏移,注意力计算异常。
| 方法 | 思路 | 使用模型 |
|---|---|---|
| 位置插值 (PI) | 位置 index 等比压缩到训练范围 | Meta 方案 |
| NTK-aware | 修改旋转基底 base,高低频差异化缩放 | 通用扩展 |
| YaRN | 混合策略 + 注意力温度调整 | LLaMA 3 (128K+) |
Q
RoPE 和 ALiBi 位置编码各有什么优劣?
▼
ALiBi:对远距离 token 施加线性惩罚,天然支持外推,无需额外参数,但下游性能略逊。
RoPE:捕获更精细的旋转相位信息,性能更好,但外推性差需要 PI/YaRN 额外处理。
当前主流开源模型(LLaMA、Qwen)以 RoPE 为主;ALiBi 见于 BLOOM 等模型。
RoPE:捕获更精细的旋转相位信息,性能更好,但外推性差需要 PI/YaRN 额外处理。
当前主流开源模型(LLaMA、Qwen)以 RoPE 为主;ALiBi 见于 BLOOM 等模型。
Q
LLaMA 3 为什么把 RoPE 的 base 从 10000 改为 500000?
▼
RoPE 的 base 控制旋转频率,base 越大,低频维度旋转越慢,编码更长距离位置关系的"容量"越大。增大 base 后,模型不需要遇到极端旋转角度就能区分远距离位置,配合 YaRN 微调,将有效上下文从 8K 扩展到 128K。
Q
绝对位置编码(Sinusoidal)和相对位置编码的根本区别是什么?
▼
绝对位置编码(sin/cos 或可学习)直接把位置信息加到 token 表示,Attention 计算无法直接反映两个 token 的相对距离。
相对位置编码(RoPE、ALiBi、T5 Bias)让注意力分数显式依赖相对位置 (m-n),在长度泛化和长文本处理时更有优势。
相对位置编码(RoPE、ALiBi、T5 Bias)让注意力分数显式依赖相对位置 (m-n),在长度泛化和长文本处理时更有优势。
KV Cache & 推理优化
6 题
Q
KV Cache 的原理是什么?会带来什么问题?高频
▼
Decoder 自回归生成第 t 个 token 时,需要前 t-1 个 token 的 Key 和 Value 参与注意力计算。KV Cache 将历史 K/V 缓存,每步只计算当前 token 的 Q,从 O(n²) 降至 O(n)。
代价:显存随序列长度线性增长。LLaMA2-7B FP16 下,2K 序列 KV Cache 约 1GB,长上下文 + 大 batch 场景压力极大。
代价:显存随序列长度线性增长。LLaMA2-7B FP16 下,2K 序列 KV Cache 约 1GB,长上下文 + 大 batch 场景压力极大。
Q
PagedAttention(vLLM)解决了什么问题?核心思想是什么?高频
▼
问题:传统 KV Cache 需要预分配连续最大长度的显存,造成严重内存碎片。
PagedAttention 核心:借鉴操作系统虚拟内存分页,将 KV Cache 切成固定大小的物理 Block,通过 Block Table 维护逻辑-物理映射,按需分配。支持 Copy-on-Write 实现 Prefix Sharing(多请求共享系统 prompt 的 KV Block)。
实测吞吐量较 HuggingFace 提升 2-4 倍。
PagedAttention 核心:借鉴操作系统虚拟内存分页,将 KV Cache 切成固定大小的物理 Block,通过 Block Table 维护逻辑-物理映射,按需分配。支持 Copy-on-Write 实现 Prefix Sharing(多请求共享系统 prompt 的 KV Block)。
实测吞吐量较 HuggingFace 提升 2-4 倍。
Q
Speculative Decoding(投机解码)为什么能加速推理?高频
▼
LLM 推理是 Memory-Bound 操作,生成 1 个 token 和并行验证 k 个 token 的时延几乎相同(瓶颈在权重加载带宽,不在计算量)。
流程:小草稿模型快速生成 k 个候选 → 大目标模型并行验证 → 接受匹配的 token,从第一个拒绝处重采样。
高接受率(α≈0.8)时理论加速比约 2-3 倍。Medusa、EAGLE 等用额外解码 Head 替代草稿模型。
流程:小草稿模型快速生成 k 个候选 → 大目标模型并行验证 → 接受匹配的 token,从第一个拒绝处重采样。
高接受率(α≈0.8)时理论加速比约 2-3 倍。Medusa、EAGLE 等用额外解码 Head 替代草稿模型。
Q
量化主流方案有哪些?INT4 和 INT8 的核心区别是什么?高频
▼
| 方案 | 核心思路 |
|---|---|
| GPTQ | 逐层 PTQ,Hessian 矩阵补偿量化误差 |
| AWQ | 激活感知,保护显著权重不量化 |
| FP8 | H100 原生支持,精度损失极小,DeepSeek-V3 生产使用 |
Q
Continuous Batching 是什么?相比 Static Batching 有何优势?
▼
Static Batching:等待 batch 内最长序列完成才整体出队,短序列完成后 GPU 空转。
Continuous Batching(iteration-level scheduling):每个解码步骤检查哪些序列已完成,立即移出并插入新请求,动态调度。
在实际服务(请求长度差异大)中吞吐量提升可达数倍。
Continuous Batching(iteration-level scheduling):每个解码步骤检查哪些序列已完成,立即移出并插入新请求,动态调度。
在实际服务(请求长度差异大)中吞吐量提升可达数倍。
Q
MoE 架构的优势和训练难点是什么?高频前沿
▼
优势:FFN 层替换为 N 个专家,每个 token 只激活 Top-K(通常 K=2)个专家(稀疏激活),使参数量大幅增加而实际计算量基本不变。如 Mixtral 8×7B 总参数 47B,激活参数约 13B。
训练难点:专家坍塌(Expert Collapse)——部分专家长期不被选中,需要加辅助负载均衡 Loss 确保均匀使用;分布式推理时需将全部专家加载进显存,通信开销大。
训练难点:专家坍塌(Expert Collapse)——部分专家长期不被选中,需要加辅助负载均衡 Loss 确保均匀使用;分布式推理时需将全部专家加载进显存,通信开销大。
RAG & 检索增强
7 题
Q
RAG 的完整链路是什么?每一步的关键点?高频工程
▼
典型链路:文档解析 → 分块 Chunking → 向量化 → 建索引 → Query 改写 → 召回 → 重排 → 上下文组装 → 生成 → 引用/评估。
关键点:分块决定可召回粒度;Embedding 决定语义匹配上限;Hybrid Search 解决关键词和实体召回;Reranker 决定最终上下文质量;生成阶段要约束答案必须基于证据。
关键点:分块决定可召回粒度;Embedding 决定语义匹配上限;Hybrid Search 解决关键词和实体召回;Reranker 决定最终上下文质量;生成阶段要约束答案必须基于证据。
Q
RAG 中 Chunk Size 如何选择?Overlap 有什么用?高频工程
▼
Chunk 太小会丢失上下文,太大又会引入噪声并降低召回精度。常见设置是 300-800 tokens,代码/表格/法律文档通常需要按结构分块。
Overlap 用来避免答案跨 chunk 边界时信息断裂,常设为 chunk size 的 10%-20%。更好的方案是标题层级、段落、Markdown heading、AST 等结构化切分,而不是纯固定长度切分。
Overlap 用来避免答案跨 chunk 边界时信息断裂,常设为 chunk size 的 10%-20%。更好的方案是标题层级、段落、Markdown heading、AST 等结构化切分,而不是纯固定长度切分。
Q
向量检索、BM25、Hybrid Search 各适合什么场景?高频工程
▼
| 方法 | 优势 | 短板 |
|---|---|---|
| 向量检索 | 语义相似、同义表达 | 对数字、代码、专有名词不稳定 |
| BM25 | 关键词、实体、精确匹配强 | 无法理解语义改写 |
| Hybrid | 语义 + 关键词互补 | 需要分数归一化和融合策略 |
Q
Reranker 为什么重要?Bi-Encoder 和 Cross-Encoder 区别是什么?工程
▼
Bi-Encoder 分别编码 query 和 doc,速度快,适合大规模召回;Cross-Encoder 把 query-doc 拼在一起做交互注意力,相关性判断更准但成本更高。
RAG 里通常先用 Bi-Encoder/Hybrid 粗召回,再用 Cross-Encoder Reranker 精排,能显著降低“召回到了但没放进上下文”的失败率。
RAG 里通常先用 Bi-Encoder/Hybrid 粗召回,再用 Cross-Encoder Reranker 精排,能显著降低“召回到了但没放进上下文”的失败率。
Q
RAG 为什么仍然会幻觉?如何缓解?高频工程
▼
RAG 幻觉常见来源:检索不到、检索错、上下文过长导致模型忽略证据、多个证据互相冲突、Prompt 没要求引用来源。
缓解方法:提升召回率(Query Rewrite、Hybrid、Multi-query)、加 Reranker、答案必须引用 chunk id、无证据时拒答、对关键事实做二次验证(Answer Verification)。
缓解方法:提升召回率(Query Rewrite、Hybrid、Multi-query)、加 Reranker、答案必须引用 chunk id、无证据时拒答、对关键事实做二次验证(Answer Verification)。
Q
GraphRAG 解决了普通 RAG 的什么问题?前沿工程
▼
普通 RAG 擅长局部事实问答,但对“跨文档、多跳关系、全局总结”能力弱。GraphRAG 先从文档中抽取实体和关系,构建知识图谱,再基于社区发现和图遍历检索相关子图。
优势是适合复杂关系分析、企业知识库和长报告总结;代价是构图成本高、更新复杂、实体消歧和关系抽取质量会直接影响效果。
优势是适合复杂关系分析、企业知识库和长报告总结;代价是构图成本高、更新复杂、实体消歧和关系抽取质量会直接影响效果。
Q
什么时候应该用 Fine-tuning 而不是 RAG?高频
▼
| 场景 | 推荐 | 原因 |
|---|---|---|
| 需要实时/最新知识 | RAG | 知识库可动态更新,无需重训 |
| 学习特定风格/格式/行为模式 | Fine-tuning | 这是模型行为问题,不是知识问题 |
| 领域术语/专业知识密集 | RAG + Fine-tuning | FT 学术语表达,RAG 提供事实 |
| 数据量少(<1K 样本) | RAG | 小样本 FT 容易过拟合 |
| 高频固定任务(降延迟/降成本) | Fine-tuning | 省去检索环节,推理更快更便宜 |
RAG 解决"知不知道",Fine-tuning 解决"会不会做"。两者不是互斥的,生产系统常同时使用。
Agent & Tool Use
7 题
Q
LLM Agent 的核心组件有哪些?高频前沿工程
▼
Agent 通常由 模型、任务规划、工具调用、记忆、环境反馈、终止条件 组成。模型负责推理和决策,工具负责访问外部世界,记忆保存跨轮上下文,反馈用于修正行动。
面试可强调:Agent 不是“会聊天的模型”,而是“能基于目标循环执行观察-思考-行动的系统”。工程重点在工具 schema、权限边界、错误恢复和可观测性。
面试可强调:Agent 不是“会聊天的模型”,而是“能基于目标循环执行观察-思考-行动的系统”。工程重点在工具 schema、权限边界、错误恢复和可观测性。
Q
Function Calling / Tool Use 的工作机制是什么?高频工程
▼
开发者给模型提供工具名称、描述和 JSON Schema 参数;模型根据用户意图输出结构化 tool call;应用执行工具并把结果回传给模型;模型再基于结果继续回答或调用下一步工具。
关键是 Schema 要清晰、工具粒度要适中、工具结果要可验证。不要让模型直接执行任意字符串命令,外部副作用操作要有人类确认或权限控制。
关键是 Schema 要清晰、工具粒度要适中、工具结果要可验证。不要让模型直接执行任意字符串命令,外部副作用操作要有人类确认或权限控制。
Q
ReAct、Plan-and-Execute、Reflection 有什么区别?工程
▼
| 范式 | 核心思想 | 适合场景 |
|---|---|---|
| ReAct | 推理和行动交替 | 搜索、排错、交互式任务 |
| Plan-and-Execute | 先拆计划,再逐步执行 | 多步骤长任务 |
| Reflection | 执行后自评并修正 | 代码、写作、复杂推理 |
Q
Agent 系统最常见的安全风险有哪些?高频工程
▼
常见风险:Prompt Injection、工具越权、数据外泄、把不可信网页/文档当成系统指令、自动执行不可逆操作、循环调用导致成本失控。
防护:系统指令与外部内容隔离;工具最小权限;敏感操作二次确认;对工具输入做校验;日志审计;将网页/邮件/文档内容标记为不可信数据而不是指令。
防护:系统指令与外部内容隔离;工具最小权限;敏感操作二次确认;对工具输入做校验;日志审计;将网页/邮件/文档内容标记为不可信数据而不是指令。
Q
多 Agent 协作相比单 Agent 有什么收益和问题?前沿工程
▼
收益:角色分工更清晰,如 Planner、Coder、Reviewer、Tester;可以并行探索不同方案;对复杂任务更容易做交叉检查。
问题:通信成本高、状态同步复杂、错误会在 Agent 间传播、评估难度上升。实际生产中常用“主控 Agent + 专用工具/子任务”而不是完全开放式群聊。
问题:通信成本高、状态同步复杂、错误会在 Agent 间传播、评估难度上升。实际生产中常用“主控 Agent + 专用工具/子任务”而不是完全开放式群聊。
Q
Agent 记忆应该如何设计?短期记忆和长期记忆有什么区别?高频工程
▼
短期记忆通常是当前对话窗口和任务状态,适合保存正在执行的步骤、工具结果和临时约束;长期记忆用于跨会话保存稳定偏好、用户画像、项目事实或可复用知识。
设计重点:只保存未来有价值的信息;写入前做去重和可信度判断;检索时按相关性注入上下文;敏感信息要可删除、可审计。错误记忆会长期污染 Agent 行为,所以记忆系统必须比普通聊天历史更谨慎。
设计重点:只保存未来有价值的信息;写入前做去重和可信度判断;检索时按相关性注入上下文;敏感信息要可删除、可审计。错误记忆会长期污染 Agent 行为,所以记忆系统必须比普通聊天历史更谨慎。
Q
ReAct、Plan-and-Execute、Function Calling 三种 Agent 策略有什么区别?高频
▼
| 策略 | 核心循环 | 优点 | 缺点 |
|---|---|---|---|
| ReAct | Thought→Action→Observation 交替 | 灵活、可处理多步推理、LLM 自主决策 | 可能无限循环、每一步都要 LLM 推理成本高 |
| Plan-and-Execute | 先生成完整计划→再逐步执行 | 全局视野、减少中间 LLM 调用、计划可审查 | 计划僵化、环境变化时需重规划 |
| Function Calling | LLM 输出结构化 JSON→外部执行→结果注入 | 确定性高、类型安全、OpenAI 原生支持 | 只适合单步工具调用、缺乏多步推理能力 |
ReAct 适合探索性任务(研究/调试),Plan-and-Execute 适合目标明确的复杂任务(代码生成/报告撰写),Function Calling 适合有明确 API 的简单工具调用。
Prompt & 上下文工程
8 题
Q
Prompt Engineering 和 Context Engineering 有什么区别?高频工程
▼
Prompt Engineering 更关注“如何写一段指令”;Context Engineering 更关注“如何构造模型每次调用看到的完整上下文”。
后者包括系统指令、用户输入、历史消息、RAG 证据、工具结果、记忆、输出格式约束和 token 预算管理。生产系统里 Context Engineering 通常比单句 prompt 技巧更重要。
后者包括系统指令、用户输入、历史消息、RAG 证据、工具结果、记忆、输出格式约束和 token 预算管理。生产系统里 Context Engineering 通常比单句 prompt 技巧更重要。
Q
Zero-shot、Few-shot、Chain-of-Thought 各适合什么场景?高频
▼
| 方式 | 特点 | 适合场景 |
|---|---|---|
| Zero-shot | 只给任务指令 | 通用问答、简单分类 |
| Few-shot | 给少量示例 | 格式稳定、风格迁移、标签任务 |
| CoT | 引导逐步推理 | 数学、逻辑、多跳推理 |
Q
结构化输出为什么容易失败?如何提高 JSON 输出稳定性?工程
▼
失败原因包括 schema 太复杂、字段语义含糊、用户输入与输出格式混杂、模型生成解释性文本、长上下文导致约束被稀释。
提升方法:使用 JSON Schema / function calling;明确 required 字段;减少可选分支;对枚举值做限制;服务端做解析与重试;不要让模型自己“保证 JSON 合法”,而要用结构化解码或工具调用机制约束。
提升方法:使用 JSON Schema / function calling;明确 required 字段;减少可选分支;对枚举值做限制;服务端做解析与重试;不要让模型自己“保证 JSON 合法”,而要用结构化解码或工具调用机制约束。
Q
长上下文一定比 RAG 好吗?高频工程
▼
不一定。长上下文适合一次性分析完整文档、跨段落综合、避免检索漏召回;RAG 适合大规模知识库、频繁更新、低成本检索和可引用证据。
长上下文的问题是成本高、延迟高、注意力稀释、“needle in a haystack” 仍可能失败。工程上常用 RAG 缩小候选,再把少量关键证据放入长上下文。
长上下文的问题是成本高、延迟高、注意力稀释、“needle in a haystack” 仍可能失败。工程上常用 RAG 缩小候选,再把少量关键证据放入长上下文。
Q
Prompt Caching 解决什么问题?适合哪些场景?前沿工程
▼
Prompt Caching 复用长前缀上下文的计算结果,降低重复请求的首 token 延迟和输入成本。适合固定系统提示词、长文档问答、多轮代码库分析、RAG 中大量共享背景资料等场景。
关键限制:缓存通常要求前缀完全一致或高度稳定,所以应把稳定内容放前面,把用户问题、时间戳、随机字段放后面。
关键限制:缓存通常要求前缀完全一致或高度稳定,所以应把稳定内容放前面,把用户问题、时间戳、随机字段放后面。
Q
Temperature 参数的本质是什么?不同任务怎么设?高频
▼
Temperature 控制 softmax 输出的"锐度":
p_i = exp(z_i/T) / Σ exp(z_j/T)。| T 值 | 效果 | 适合任务 |
|---|---|---|
| T → 0 | 分布尖锐,几乎确定性输出(等价于 greedy) | 数学计算、代码生成、事实问答 |
| T = 0.3-0.7 | 平衡准确性和多样性 | 翻译、摘要、通用对话 |
| T = 0.8-1.2 | 分布更平滑,输出更多样 | 创意写作、头脑风暴、故事生成 |
| T > 1.5 | 分布接近均匀,输出趋于随机 | 通常不推荐(质量急剧下降) |
Temperature 和 Top-p/Top-k 通常组合使用。低 T + 高 Top-p 能平衡质量和多样性。面试中不要忘了提:Temperature=0 并不能保证确定性(GPU 浮点非结合性),需要设置 seed。
Q
Greedy、Beam Search、Top-p/Top-k 解码策略各有什么特点?
▼
| 策略 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| Greedy | 每步选概率最高的 token | 最快,确定性 | 容易陷入重复循环,缺乏多样性 |
| Beam Search | 维护 K 条候选路径,按累积概率选择 | 比 Greedy 质量好 | 开放生成中输出趋于重复/通用 |
| Top-k Sampling | 只在概率最高的 k 个 token 中采样 | 增加多样性 | k 固定,对尖峰/平峰分布不适配 |
| Top-p (Nucleus) | 在累积概率达 p 的最小 token 集合中采样 | 动态适应分布形状 | 目前主流,但 p 值需调 |
Q
什么是 Prompt Injection?有哪些防御手段?工程
▼
Prompt Injection 是攻击者通过在输入中嵌入恶意指令,覆盖或劫持 LLM 原始 system prompt 的行为。
常见攻击类型: ① 直接注入:用户输入中包含"忽略以上指令,执行..."
② 间接注入:在 RAG 检索的文档/网页中埋藏恶意指令,模型读取后被劫持
③ 越狱(Jailbreak):用角色扮演、编码、多语言等技巧绕过安全限制
防御手段:
常见攻击类型: ① 直接注入:用户输入中包含"忽略以上指令,执行..."
② 间接注入:在 RAG 检索的文档/网页中埋藏恶意指令,模型读取后被劫持
③ 越狱(Jailbreak):用角色扮演、编码、多语言等技巧绕过安全限制
防御手段:
| 方法 | 说明 |
|---|---|
| 输入/输出隔离 | 用特殊分隔符明确区分 system/user/data,模型不能混淆来源 |
| 权限分离 | 工具调用需要二次确认,敏感操作不依赖 LLM 单次判断 |
| 输入过滤 | 检测和清理已知攻击模式(但不完美,攻击形式不断演变) |
| 最小权限原则 | Agent 的工具权限严格限定所需范围,不授予多余能力 |
没有完美的防御。安全设计应假设 Prompt Injection 一定会发生,核心策略是限制攻击面(blast radius),而不是试图完全阻止注入。
数据工程 & 预训练
5 题
Q
LLM 预训练数据清洗通常包括哪些步骤?高频
▼
常见步骤:语言识别、格式解析、去 HTML/脚本噪声、质量过滤、敏感/违法内容过滤、去重、PII 脱敏、按领域配比采样。
高质量数据比单纯扩大 token 数更重要。面试可强调 dedup 会影响 benchmark 污染,质量分类器会影响模型风格和安全边界。
高质量数据比单纯扩大 token 数更重要。面试可强调 dedup 会影响 benchmark 污染,质量分类器会影响模型风格和安全边界。
Q
Tokenizer 的 BPE、WordPiece、Unigram 有什么区别?高频
▼
| 方法 | 思想 | 代表 |
|---|---|---|
| BPE | 从字符开始频繁合并 token pair | GPT 系列 |
| WordPiece | 按似然增益选择子词 | BERT |
| Unigram | 从大词表开始按概率裁剪 | SentencePiece/T5 |
Q
合成数据在 LLM 训练中有什么作用?风险是什么?前沿
▼
合成数据可用于指令微调、偏好数据、数学/代码推理轨迹、低资源语言扩充和安全拒答样本生成。高质量 teacher model 能快速扩大训练集并覆盖长尾任务。
风险:模式坍塌、错误被放大、风格单一、评测污染、模型学会 teacher 的偏见。通常需要人工抽检、规则验证、去重和多模型交叉生成。
风险:模式坍塌、错误被放大、风格单一、评测污染、模型学会 teacher 的偏见。通常需要人工抽检、规则验证、去重和多模型交叉生成。
Q
Scaling Law 的核心结论是什么?Chinchilla 做了什么修正?高频
▼
Scaling Law 表明模型损失会随参数量、数据量、计算量按幂律下降。早期很多模型参数很大但训练 token 不足。
Chinchilla 结论:在固定计算预算下,模型参数量和训练 token 数应更均衡扩展,很多大模型其实“欠训练”。经验上训练 token 数应远大于参数量,后续 LLaMA 等模型都明显增加了 token 数。
Chinchilla 结论:在固定计算预算下,模型参数量和训练 token 数应更均衡扩展,很多大模型其实“欠训练”。经验上训练 token 数应远大于参数量,后续 LLaMA 等模型都明显增加了 token 数。
Q
预训练中为什么要做数据配比?代码、数学、多语言数据如何影响模型?工程
▼
数据配比决定模型能力分布。代码数据能提升结构化推理和工具使用;数学数据提升多步推理;高质量百科/教材提升事实知识;多语言数据提升跨语言能力但会稀释英文能力。
实践中常用 mixture weight 控制不同来源数据,并在后期加入更高质量的数据做 annealing,以改善指令遵循和推理能力。
实践中常用 mixture weight 控制不同来源数据,并在后期加入更高质量的数据做 annealing,以改善指令遵循和推理能力。
RLHF & 对齐训练
7 题
Q
RLHF 的完整训练流程是什么?高频
▼
三个阶段:
① SFT:在高质量指令-回复对上有监督微调预训练模型。
② 奖励模型训练(RM):用人类偏好标注(哪个回复更好)以 Bradley-Terry 模型训练:
③ PPO 强化学习:以奖励模型分数为信号,用 PPO 优化策略,同时加入 KL 惩罚防止偏离 SFT 参考模型:
① SFT:在高质量指令-回复对上有监督微调预训练模型。
② 奖励模型训练(RM):用人类偏好标注(哪个回复更好)以 Bradley-Terry 模型训练:
Loss = -E[log σ(r(x,y_w) - r(x,y_l))]③ PPO 强化学习:以奖励模型分数为信号,用 PPO 优化策略,同时加入 KL 惩罚防止偏离 SFT 参考模型:
reward = r(x,y) - β·KL[π_θ || π_ref]
Q
PPO 在 RLHF 中涉及哪四个模型?各自作用是什么?高频
▼
| 模型 | 是否冻结 | 作用 |
|---|---|---|
| Actor(策略) | 否(被优化) | 生成回复的模型,初始化自 SFT |
| Critic(价值) | 否 | 估计状态价值 V(s),计算 GAE 优势 |
| Reward Model | 是 | 为每个回复打分 |
| Reference Model | 是 | SFT 模型,计算 KL 散度惩罚 |
Q
DPO 与 PPO/RLHF 的核心区别是什么?高频
▼
DPO 发现 RLHF 最优策略有闭合解,将奖励函数隐式参数化为策略本身,直接从偏好数据优化:
区别:无需显式训练奖励模型,只需两个模型(策略+参考),离线学习,训练更稳定简单。代价:无法在线更新偏好数据,可能存在分布偏移。
Loss = -E[log σ(β·log(π_θ(y_w|x)/π_ref(y_w|x)) - β·log(π_θ(y_l|x)/π_ref(y_l|x)))]区别:无需显式训练奖励模型,只需两个模型(策略+参考),离线学习,训练更稳定简单。代价:无法在线更新偏好数据,可能存在分布偏移。
Q
GRPO 和 PPO 的区别是什么?DeepSeek-R1 为什么用 GRPO?前沿
▼
| 维度 | PPO | GRPO |
|---|---|---|
| Critic 网络 | 需要(额外显存) | 不需要 |
| 基线估计 | 价值函数 V(s) | 组内奖励均值 |
| 适用场景 | 通用对话 | 数学/代码等可验证任务 |
Q
RLHF 中 KL 散度惩罚项的作用?beta 过大过小会怎样?
▼
KL 惩罚约束策略模型不能离 SFT 参考模型太远,防止奖励黑客(模型找到高分但低质量的捷径)和灾难性遗忘。
beta 过大:模型几乎无法更新,无法学习偏好。
beta 过小:约束失效,容易奖励过优化(Reward Overoptimization)。
实践中 beta 通常在 0.01-0.5 之间。
beta 过大:模型几乎无法更新,无法学习偏好。
beta 过小:约束失效,容易奖励过优化(Reward Overoptimization)。
实践中 beta 通常在 0.01-0.5 之间。
Q
SimPO、ORPO 等新型对齐算法相比 DPO 的改进是什么?
▼
DPO 依赖参考模型(π_ref),需要额外推理开销。
SimPO:去掉参考模型,用生成长度归一化的对数似然作为隐式奖励,加入 Margin Reward 保证分数差。
ORPO:将 SFT 损失和偏好优化合并为单目标,一步训练完成对齐,无需参考模型也无需单独 RM 训练阶段。
SimPO:去掉参考模型,用生成长度归一化的对数似然作为隐式奖励,加入 Margin Reward 保证分数差。
ORPO:将 SFT 损失和偏好优化合并为单目标,一步训练完成对齐,无需参考模型也无需单独 RM 训练阶段。
Q
什么是 Reward Hacking?RLHF 中如何检测和缓解?高频
▼
Reward Hacking(奖励黑客)是指策略模型找到奖励模型的漏洞,生成高分但实际低质量的回复。常见模式:回答过长/过于礼貌(奖励模型偏好长文本)、重复正面短语、过度迎合用户而非纠正错误。
检测:监控 reward 分数和 KL 散度是否同步异常升高;人工抽检高 reward 回复;对比不同奖励模型打分是否一致。
缓解:① KL 惩罚约束(防止策略偏离参考模型太远);② 奖励模型集成(多 RM 取最低分);③ 在线偏好标注(PPO 过程中持续注入新的人类反馈);④ GRPO 用规则奖励(数学题直接验证答案)从根本上避免 RM hacking。
检测:监控 reward 分数和 KL 散度是否同步异常升高;人工抽检高 reward 回复;对比不同奖励模型打分是否一致。
缓解:① KL 惩罚约束(防止策略偏离参考模型太远);② 奖励模型集成(多 RM 取最低分);③ 在线偏好标注(PPO 过程中持续注入新的人类反馈);④ GRPO 用规则奖励(数学题直接验证答案)从根本上避免 RM hacking。
LoRA & 参数高效微调
6 题
Q
LoRA 的核心原理是什么?为什么有效?高频
▼
基于"预训练权重更新矩阵具有低内在秩"的假设,将权重更新分解为低秩矩阵乘积:
训练时冻结 W₀ 只更新 A 和 B,参数量从 d×k 降到 r(d+k),通常节省 100 倍以上。初始化 B=0 保证训练起点不影响原模型输出。推理时将 BA 合并进 W₀,零额外推理开销。
W = W₀ + ΔW = W₀ + B·A(B ∈ R^{d×r},A ∈ R^{r×k},r ≪ d,k)训练时冻结 W₀ 只更新 A 和 B,参数量从 d×k 降到 r(d+k),通常节省 100 倍以上。初始化 B=0 保证训练起点不影响原模型输出。推理时将 BA 合并进 W₀,零额外推理开销。
Q
LoRA 中 rank(r)和 lora_alpha 如何设置?高频
▼
rank r:控制低秩矩阵的秩。r=4~16 适合大多数任务,复杂任务用 r=32~64。
lora_alpha(α):缩放因子,实际更新为
lora_alpha(α):缩放因子,实际更新为
ΔW = (α/r)·BA,通常设 α=2r(如 r=8 则 α=16),切换 rank 时不需要重调学习率。
Q
QLoRA 相比 LoRA 有哪些关键技术改进?高频
▼
三个关键技术:
① 4-bit NF4 量化:NormalFloat4 格式(针对正态分布权重,精度损失小于 INT4)存储预训练模型。
② 双重量化(Double Quantization):对量化常数再次量化,每参数额外节省约 0.37 bit。
③ 分页优化器(Paged Optimizer):利用 NVIDIA 统一内存防止 OOM,自动在 GPU/CPU 间换页。
最终效果:65B 模型可在单张 48GB GPU 上微调,精度接近全量微调。
① 4-bit NF4 量化:NormalFloat4 格式(针对正态分布权重,精度损失小于 INT4)存储预训练模型。
② 双重量化(Double Quantization):对量化常数再次量化,每参数额外节省约 0.37 bit。
③ 分页优化器(Paged Optimizer):利用 NVIDIA 统一内存防止 OOM,自动在 GPU/CPU 间换页。
最终效果:65B 模型可在单张 48GB GPU 上微调,精度接近全量微调。
Q
Adapter Tuning、Prefix Tuning、LoRA 三种 PEFT 方法的核心区别是什么?
▼
| 方法 | 方式 | 推理开销 | 效果 |
|---|---|---|---|
| Adapter Tuning | 层间插入 MLP 瓶颈(串行) | 有额外延迟 | 一般 |
| Prefix Tuning | 输入前拼接可学习向量 | 占用上下文长度 | 中等 |
| LoRA | 旁路低秩矩阵 | 推理可合并权重,零开销 | 最优 |
Q
什么是 AdaLoRA?解决了 LoRA 的什么问题?
▼
标准 LoRA 对所有层使用相同 rank,但不同层对任务重要性不同,参数分配不合理。
AdaLoRA:引入基于 SVD 的自适应 rank 分配,通过重要性评估动态给重要层分配更大 rank、不重要层分配更小 rank,在相同参数预算下性能更优。
AdaLoRA:引入基于 SVD 的自适应 rank 分配,通过重要性评估动态给重要层分配更大 rank、不重要层分配更小 rank,在相同参数预算下性能更优。
Q
全量微调和 LoRA 微调分别在什么场景下选择?
▼
选全量微调:数据量充足(10M+ tokens)、任务与预训练差异大(领域知识注入)、计算资源允许时,效果上限更高。
选 LoRA:数据量较少(<1M tokens)、多任务需要灵活切换 adapter、计算/显存受限,同时能防止过拟合和灾难性遗忘。
选 LoRA:数据量较少(<1M tokens)、多任务需要灵活切换 adapter、计算/显存受限,同时能防止过拟合和灾难性遗忘。
指令微调(Instruct SFT)用 LoRA 通常足够;需要深度领域知识融合时全量更可靠。
分布式训练
6 题
Q
数据并行、模型并行、流水线并行的核心区别?高频
▼
| 并行方式 | 切分对象 | 通信 | 适用场景 |
|---|---|---|---|
| 数据并行(DDP) | Batch | AllReduce 同步梯度 | 通用,最易实现 |
| 张量并行(TP) | 单层矩阵运算 | 每层 AllReduce,频繁 | 单机 NVLink 高带宽 |
| 流水线并行(PP) | 模型层 | 只传激活值,少 | 跨机器低带宽 |
Q
ZeRO Stage 1/2/3 分别对什么做了分片?高频
▼
训练时每参数对应 16B 状态(FP16 参数 2B + 梯度 2B + Adam m/v 各 4B + FP32 主参数 4B):
ZeRO-3 代价:每次 forward/backward 需要 all-gather 参数,通信量增加约 1.5x。
| Stage | 分片内容 | 显存节省 |
|---|---|---|
| ZeRO-1 | 优化器状态 | ~4x |
| ZeRO-2 | 优化器状态 + 梯度 | ~8x |
| ZeRO-3 | 优化器状态 + 梯度 + 参数 | ~64x+ |
Q
流水线并行中的 Bubble 是什么?1F1B 调度如何减少?
▼
Bubble:Naive 流水线中,第一个 micro-batch 前向传播依次经过所有 stage 时,后续 stage 空闲等待,Bubble 比例 = (p-1)/m(p 为 stage 数,m 为 micro-batch 数)。
1F1B 调度:每个 stage 交替执行前向和反向,steady state 下所有 GPU 始终有任务,峰值显存从 O(p·m) 降至 O(p)。Interleaved 1F1B 进一步将 Bubble 降至 (p-1)/(m·v)。
1F1B 调度:每个 stage 交替执行前向和反向,steady state 下所有 GPU 始终有任务,峰值显存从 O(p·m) 降至 O(p)。Interleaved 1F1B 进一步将 Bubble 降至 (p-1)/(m·v)。
Q
3D 并行是什么?如何确定各并行度的配置?
▼
3D 并行 = TP × PP × DP(Megatron-DeepSpeed 使用)。
配置原则:TP 优先用于单机(NVLink 高带宽,TP 通信频繁,通常 ≤ 8);PP 用于跨机器(只传激活值,通信量小);DP 用剩余资源。
总 GPU 数 = TP × PP × DP。
配置原则:TP 优先用于单机(NVLink 高带宽,TP 通信频繁,通常 ≤ 8);PP 用于跨机器(只传激活值,通信量小);DP 用剩余资源。
总 GPU 数 = TP × PP × DP。
Q
混合精度训练为什么需要保留 FP32 主副本?FP16 和 BF16 如何选?高频
▼
FP16 精度范围有限(最大约 65504),大模型训练中梯度更新量(1e-7 级别)可能被截断为零,累积导致权重停止更新。FP32 主权重用于更新,前向/反向用 FP16 加速。
现代 LLM 训练首选 BF16。
| FP16 | BF16 | |
|---|---|---|
| 动态范围 | 小,易溢出 | 大(与 FP32 相当) |
| 需要 Loss Scaling | 是 | 否 |
| 推荐硬件 | V100/T4 | A100/H100 |
Q
Gradient Checkpointing 的原理和代价是什么?
▼
标准反向传播需要缓存所有层激活值,显存 O(L)。梯度检查点只保存部分"检查点",反向传播时从最近检查点重新前向计算。
显存节省:峰值从 O(L) 降至 O(√L)。计算代价:约增加 33% 的计算量(每次 forward 计算约 1.33 次)。
PyTorch:
显存节省:峰值从 O(L) 降至 O(√L)。计算代价:约增加 33% 的计算量(每次 forward 计算约 1.33 次)。
PyTorch:
from torch.utils.checkpoint import checkpoint
大模型评估
6 题
Q
Perplexity(困惑度)是什么?它能完全代表模型质量吗?
▼
PPL = exp(-1/N · Σ log P(wᵢ|w₁,...,wᵢ₋₁)),值越低表示模型预测越准确。局限:低 PPL 不代表生成质量高,模型可能存在严重幻觉、指令不遵循、偏见等。不同 tokenizer 的 PPL 不可直接比较。适合作为预训练内部指标,不适合对话模型能力评估。
Q
什么是 Benchmark 污染?如何检测和缓解?高频
▼
定义:训练数据中包含评测集题目或答案,导致分数虚高,无法反映真实泛化能力。
检测:n-gram 重叠检测;Min-K% Prob 方法(统计模型对测试样本的概率分布)。
缓解:动态 Benchmark(定期更新题目);私有内部测试集;Live Evaluation(LMSYS ChatBot Arena 人类投票)。
检测:n-gram 重叠检测;Min-K% Prob 方法(统计模型对测试样本的概率分布)。
缓解:动态 Benchmark(定期更新题目);私有内部测试集;Live Evaluation(LMSYS ChatBot Arena 人类投票)。
Q
大模型幻觉(Hallucination)的成因和缓解方法有哪些?高频
▼
成因:训练数据含噪声;模型依赖语言模式而非真实知识;RLHF 可能强化流畅度而非准确性;知识截止日期。
缓解方法:
缓解方法:
| 方法 | 针对问题 |
|---|---|
| RAG | 知识截止、事实性幻觉 |
| CoT / Self-Consistency | 推理性幻觉 |
| CoVe(链式验证) | 独立验证每个事实声明 |
| RLHF / Constitutional AI | 对齐训练减少系统性偏差 |
RAG 无法解决推理性幻觉;完全消除幻觉目前没有方案。
Q
MT-Bench 和 LMSYS Chatbot Arena 是什么评估方式?
▼
MT-Bench:80 道多轮对话题(8 类任务),用 GPT-4 打 1-10 分,通过 LLM-as-Judge 方式自动评估,成本低但存在评测者偏差。
Chatbot Arena:基于人类偏好投票的 ELO 排行榜,用户与两个匿名模型对话后选更好的,是目前最接近真实用户体验的评估方式,但成本高、受主观偏好影响。
Chatbot Arena:基于人类偏好投票的 ELO 排行榜,用户与两个匿名模型对话后选更好的,是目前最接近真实用户体验的评估方式,但成本高、受主观偏好影响。
Q
代码生成任务如何评估?HumanEval 有什么局限性?
▼
HumanEval:164 道 Python 编程题,用
局限:题目较简单(平均约 10 行代码),无法评估系统级编程、多文件项目;题目已大量收录进训练数据(污染);pass@k 不评估代码风格、效率、安全性。
补充:MBPP、LiveCodeBench(实时更新,防污染)是更好的补充。
pass@k(k 次采样中至少 1 次通过单元测试的概率)评估。局限:题目较简单(平均约 10 行代码),无法评估系统级编程、多文件项目;题目已大量收录进训练数据(污染);pass@k 不评估代码风格、效率、安全性。
补充:MBPP、LiveCodeBench(实时更新,防污染)是更好的补充。
Q
2025-2026 年 LLM 评估的新趋势是什么?前沿
▼
Benchmark 饱和危机:MMLU、GSM8K 等经典 benchmark 已被顶级模型接近满分,区分度丧失。
新方向:
新方向:
| Benchmark | 特点 |
|---|---|
| LiveBench | 实时更新题目,防污染 |
| GPQA | 博士级科学题,人类专家才能解答 |
| ARC-AGI | 视觉抽象推理,o3 达 87.5% |
| FrontierMath | 顶级数学竞赛题,当前模型 < 5% |
Embedding & 向量数据库
6 题
Q
什么是向量嵌入(Embedding)?Embedding 模型在 LLM 应用中怎么用?高频
▼
Embedding 是将文本/图片等非结构化数据映射为高维稠密向量的技术,使语义相近的文本在向量空间中距离更近。
在 LLM 应用中的角色:
主流模型:text-embedding-3、BGE、E5、GTE、Jina。
在 LLM 应用中的角色:
| 场景 | 用法 |
|---|---|
| RAG 检索 | 将文档和用户查询映射到同一向量空间,通过相似度匹配召回相关片段 |
| 语义搜索 | 替代关键词匹配,按语义相似度排序 |
| 聚类/去重 | Embedding 聚类发现主题,去重相似数据 |
| 分类 | Embedding + 线性分类器做少样本分类 |
Q
如何在你的数据上评测 Embedding 模型?准确率低怎么优化?
▼
评测方法:构建标注数据集(查询-相关文档对),计算 Recall@K、MRR、NDCG 等检索指标。MTEB benchmark 是通用评测标准。
如果准确率低: ① 检查 Embedding 模型的训练数据是否覆盖你的领域(领域不匹配是常见原因);
② 用领域数据微调 Embedding 模型(如使用对比学习 + 难负样本);
③ 增加 instruction prefix(BGE 模型对 query 侧加"为这个句子生成表示"有效果);
④ 考虑升级到更大维度或更强的模型(如 BGE-M3 多语言版)。
如果准确率低: ① 检查 Embedding 模型的训练数据是否覆盖你的领域(领域不匹配是常见原因);
② 用领域数据微调 Embedding 模型(如使用对比学习 + 难负样本);
③ 增加 instruction prefix(BGE 模型对 query 侧加"为这个句子生成表示"有效果);
④ 考虑升级到更大维度或更强的模型(如 BGE-M3 多语言版)。
Q
向量数据库和传统数据库的核心区别是什么?高频
▼
| 维度 | 传统数据库 | 向量数据库 |
|---|---|---|
| 查询方式 | 精确匹配 (SQL WHERE =) | 近似最近邻 (ANN) |
| 索引结构 | B-Tree / Hash | HNSW / IVF / PQ 图索引 |
| 返回结果 | 精确结果 | 近似结果(可配置精度-速度折中) |
| 存储数据 | 结构化行/列 | 高维浮点向量 + 元数据 |
Q
HNSW 和 IVF 两种索引算法的原理和适用场景?
▼
| 算法 | 原理 | 优势 | 劣势 |
|---|---|---|---|
| HNSW | 多层可导航小世界图,每层是临近图,搜索时从顶层向下贪心遍历 | 查询快、精度高、增量插入友好 | 内存占用大(存储图结构),构建慢 |
| IVF | 用 K-Means 聚类将向量空间划分为 Voronoi 单元,查询时只搜最近几个聚类 | 内存效率高、构建快 | 查询精度略低,需定期重建索引 |
Q
余弦相似度、欧氏距离、内积分别适合什么场景?
▼
| 度量 | 公式 | 适合场景 |
|---|---|---|
| 余弦相似度 | cos = A·B/(‖A‖‖B‖) | 文本语义相似度(忽略长度,只看方向),RAG 默认选择 |
| 欧氏距离 | ‖A-B‖ | 需要考虑向量大小差异时(如特征值),对归一化敏感 |
| 内积 | A·B | 模型已做过归一化训练时;推荐系统中评分预测 |
如果用 L2 归一化后的向量,余弦相似度 = 内积,等价。大多数 Embedding 模型输出归一化向量,此时三种度量等价。
Q
向量数据库中的过滤(Filter)有哪些类型和挑战?工程
▼
过滤类型:
① Pre-filtering:先按元数据过滤,再在剩余结果中做 ANN。风险是过滤后候选集太小,可能漏掉真正相关的。
② Post-filtering:先 ANN 召回 top-K,再过滤。风险是过滤后可能返回不到 K 个结果。
③ Single-stage filtering:在 ANN 搜索时同时检查过滤条件(Milvus/Qdrant 支持),平衡精度和效率。
挑战:多条件 AND/OR 组合下保证召回 K 个结果;过滤条件过于严苛时需降级策略(放宽条件或返回更多候选然后二次过滤)。
② Post-filtering:先 ANN 召回 top-K,再过滤。风险是过滤后可能返回不到 K 个结果。
③ Single-stage filtering:在 ANN 搜索时同时检查过滤条件(Milvus/Qdrant 支持),平衡精度和效率。
挑战:多条件 AND/OR 组合下保证召回 K 个结果;过滤条件过于严苛时需降级策略(放宽条件或返回更多候选然后二次过滤)。
LLM 部署与推理加速
6 题
Q
模型量化为什么不会显著降低精度?INT8/INT4 的本质是什么?高频
▼
神经网络权重天然存在冗余(过参数化),权重分布集中在一定范围内,不需要 FP16 全部精度来表示。量化将权重从 FP16 映射到低精度整数,只是"舍入"了低有效位,对前向计算影响极小。
关键在于:量化方法(GPTQ/AWQ)通过校准数据感知哪些权重重要,对重要权重用更高精度或保护性缩放;group-wise 量化(每 128 个元素独立 scale)比 per-tensor 量化误差小得多。
实测 GPTQ INT4 在大多数 Benchmark 精度损失 < 1%。但数学/推理任务对精度更敏感。
关键在于:量化方法(GPTQ/AWQ)通过校准数据感知哪些权重重要,对重要权重用更高精度或保护性缩放;group-wise 量化(每 128 个元素独立 scale)比 per-tensor 量化误差小得多。
实测 GPTQ INT4 在大多数 Benchmark 精度损失 < 1%。但数学/推理任务对精度更敏感。
Q
如何提升 LLM 推理的吞吐量(Throughput)?有哪些工程手段?高频
▼
系统级优化:
生产推荐:vLLM/SGLang + FP8 量化 + Prefix Caching 开启。高并发场景下 Disaggregated Prefill/Decode 可以进一步提升 40%+。
| 手段 | 效果 |
|---|---|
| Continuous Batching | 动态调度请求,GPU 不空转,吞吐提 2-10x |
| PagedAttention | KV Cache 分页管理,显存利用率接近 100%,可服务更多并发 |
| 量化 (INT8/INT4/FP8) | 权重压缩 2-4x,同等显存放更大 batch |
| Tensor Parallelism | 单层矩阵切分到多卡,支持超大模型(如 70B+) |
| Prefix Caching | 复用系统 prompt 的 KV Cache,减少重复计算 |
| Speculative Decoding | 草稿模型 + 目标模型并行验证,吞吐 2-3x |
Q
FP8 是什么?相比 INT8 有什么优势?
▼
FP8 是 NVIDIA H100/H200 原生支持的低精度浮点格式,有 E4M3(4 位指数 + 3 位尾数)和 E5M2(5 位指数 + 2 位尾数)两种变体。
相比 INT8 的优势: ① INT8 是定点格式,动态范围有限(-128~127),激活值中的异常值(outlier)会严重损害精度;
② FP8 保留了浮点格式的指数位,动态范围覆盖 10^-9 到 10^5,天然适配神经网络中呈正态分布的激活值;
③ H100 有专门 FP8 Tensor Core,算力是 FP16 的 2 倍。
DeepSeek-V3 训练全程用 FP8 混合精度,降低了 60% 的显存和带宽需求。
相比 INT8 的优势: ① INT8 是定点格式,动态范围有限(-128~127),激活值中的异常值(outlier)会严重损害精度;
② FP8 保留了浮点格式的指数位,动态范围覆盖 10^-9 到 10^5,天然适配神经网络中呈正态分布的激活值;
③ H100 有专门 FP8 Tensor Core,算力是 FP16 的 2 倍。
DeepSeek-V3 训练全程用 FP8 混合精度,降低了 60% 的显存和带宽需求。
Q
如何估算 LLM 服务的 GPU 显存需求?工程
▼
显存 = 模型权重 + KV Cache + 推理临时变量
以 LLaMA2-7B (FP16) 在 2K 上下文、batch=8 为例:
① 权重:7B × 2 bytes = 14 GB(INT8 减半,INT4 再减半)
② KV Cache:2×层数(32)×hidden(4096)×序列长度(2048)×精度(2)×batch(8) ≈ 4.3 GB
③ 临时变量:约 1-2 GB
合计约 20 GB,至少需要一张 24GB 显卡。
KV Cache 公式(FP16):
以 LLaMA2-7B (FP16) 在 2K 上下文、batch=8 为例:
① 权重:7B × 2 bytes = 14 GB(INT8 减半,INT4 再减半)
② KV Cache:2×层数(32)×hidden(4096)×序列长度(2048)×精度(2)×batch(8) ≈ 4.3 GB
③ 临时变量:约 1-2 GB
合计约 20 GB,至少需要一张 24GB 显卡。
KV Cache 公式(FP16):
2 × n_layers × d_model × max_seq_len × batch_size × 2 bytes。增大上下文或并发时 KV Cache 是主要瓶颈,PagedAttention 和 GQA 可以显著压缩。
Q
在消费级硬件上如何部署 LLM?有哪些关键工具?
▼
工具选型表:
日常推荐:Ollama + Q4_K_M 量化模型,8GB 内存可跑 7B 模型。需要服务化则用 llama.cpp server 模式。
| 工具 | 适合场景 | 关键技术 |
|---|---|---|
| llama.cpp | CPU/边缘/Mac 推理 | GGUF 格式 + Q4_K_M 量化,纯 C++ 无依赖 |
| Ollama | 本地一键体验 | 基于 llama.cpp,Modelfile 配置,REST API |
| MLX | Apple Silicon 微调+推理 | Apple 官方框架,Metal GPU 加速 |
| ExLlamaV2 | NVIDIA 消费显卡 | 极速 GPTQ kernel,Flash Attention 实现 |
Q
什么是 Disaggregated Prefill/Decode?为什么能提升效率?前沿
▼
Prefill(处理输入 prompt)和 Decode(逐 token 生成)对硬件的需求截然不同:Prefill 是计算密集型(并行处理所有 token),Decode 是内存带宽密集型(每步加载所有权重,只算一个 token)。
Disaggregated P/D 将两个阶段部署在不同 GPU 集群上,各自独立扩缩容。Prefill 集群用高算力 GPU(如 H100),Decode 集群用大显存 GPU。通过高速网络传输 KV Cache。
优势:TTFT(首 token 延迟)和 TPOT(token 间延迟)独立优化;整体吞吐提升 40%+;Better resource utilization。vLLM v1 和 SGLang 均已原生支持。Mooncake (月之暗面) 论文详细描述了该架构。
Disaggregated P/D 将两个阶段部署在不同 GPU 集群上,各自独立扩缩容。Prefill 集群用高算力 GPU(如 H100),Decode 集群用大显存 GPU。通过高速网络传输 KV Cache。
优势:TTFT(首 token 延迟)和 TPOT(token 间延迟)独立优化;整体吞吐提升 40%+;Better resource utilization。vLLM v1 和 SGLang 均已原生支持。Mooncake (月之暗面) 论文详细描述了该架构。
高级检索与文档处理
6 题
Q
什么是文档分块(Chunking)?为什么 Chunk 大小很重要?高频
▼
Chunking 是将长文档切分成更小的文本片段,便于 Embedding 模型处理和向量检索。Embedding 模型有输入长度限制(如 512/8192 tokens),且过长的文本会稀释语义焦点。
Chunk 大小的影响:
实践中常用 512-1024 tokens 作为默认值,然后根据具体文档类型和问答精度评测调优。Chunk overlap 一般设 10-20%。
Chunk 大小的影响:
| Chunk 大小 | 优点 | 缺点 |
|---|---|---|
| 小 (128-256 tokens) | 语义聚焦、检索精准 | 丢失上下文、信息碎片化 |
| 中 (512-1024 tokens) | 平衡上下文和精度 | 通用场景试用 |
| 大 (2048+ tokens) | 上下文完整 | 检索精度下降、噪声增加 |
Q
有哪些常见的 Chunking 方法?如何选择?
▼
| 方法 | 原理 | 适合场景 |
|---|---|---|
| 固定大小 | 按 token/字符数均分 | 通用文本,最简单 |
| 递归分割 | 按优先级分隔符(段落→句子→空格)递归切 | 结构化文档(→ 是默认推荐) |
| 语义分块 | 用 Embedding 相似度判断断点(相邻句子相似度突降处切开) | 主题分散的文档 |
| 文档结构感知 | 按 Markdown/HTML 标题层级切 | 技术文档/API 文档 |
| Agentic Chunking | 让 LLM 决定最佳切分点 | 高精度场景(慢且贵) |
LangChain 的 RecursiveCharacterTextSplitter + chunk_size=1000 + overlap=200 是最常见的起步配置。复杂文档(年报、合同)优先用结构感知分块。
Q
混合搜索(Hybrid Search)是什么?为什么需要它?高频
▼
Hybrid Search = 稀疏检索(BM25)+ 稠密检索(向量相似度),将两者的分数融合为一个最终排序。
为什么需要: ① 向量搜索擅长语义匹配("便宜"≈"价格低"),但对精确关键词匹配(产品型号 SKU、法律条款编号)表现差;
② BM25 擅长精确关键词匹配和生僻词(OOV),但无法理解同义改写;
③ 两者互补,融合后召回效果显著优于任一单独方法。
融合方式:最常见是 Reciprocal Rank Fusion (RRF):
为什么需要: ① 向量搜索擅长语义匹配("便宜"≈"价格低"),但对精确关键词匹配(产品型号 SKU、法律条款编号)表现差;
② BM25 擅长精确关键词匹配和生僻词(OOV),但无法理解同义改写;
③ 两者互补,融合后召回效果显著优于任一单独方法。
融合方式:最常见是 Reciprocal Rank Fusion (RRF):
score = Σ 1/(k+rank_i),无需调权重。也可以用加权求和或学习排序(LambdaMART)。
Q
RAG 检索不准时,有哪些优化手段?工程
▼
逐层排查与优化:
① 查询层:Query Rewriting(用 LLM 改写用户问题,补全指代/扩写缩写);HyDE(先让 LLM 生成假设答案,用假答案去检索);Multi-Query(生成多个变体查询取并集)
② Embedding 层:检查模型是否适配你的领域;用领域数据微调 Embedding;采用 BGE-M3 等支持多语言的模型
③ 检索层:启用 Hybrid Search(BM25 + 向量);增加 Re-ranker(如 BGE-Reranker/Cohere)对召回结果精排
④ 数据层:优化 Chunking 策略(结构和语义边界对齐);去除文档噪声和重复
⑤ 回退策略:检索为空或相关性低时,降级为关键词搜索或扩大搜索范围
① 查询层:Query Rewriting(用 LLM 改写用户问题,补全指代/扩写缩写);HyDE(先让 LLM 生成假设答案,用假答案去检索);Multi-Query(生成多个变体查询取并集)
② Embedding 层:检查模型是否适配你的领域;用领域数据微调 Embedding;采用 BGE-M3 等支持多语言的模型
③ 检索层:启用 Hybrid Search(BM25 + 向量);增加 Re-ranker(如 BGE-Reranker/Cohere)对召回结果精排
④ 数据层:优化 Chunking 策略(结构和语义边界对齐);去除文档噪声和重复
⑤ 回退策略:检索为空或相关性低时,降级为关键词搜索或扩大搜索范围
Q
如何处理 RAG 中的表格、列表和图表等复杂文档结构?
▼
表格:不要直接切碎!先用 OCR/解析提取表格结构 → 转为 Markdown/JSON 描述 → 或用 Table-Specific Embedding 模型。大表格可拆为表头+多行片段,每个片段都携带表头上下文。
列表:保持列表项完整性,在 chunk overlap 中保留完整的列表前导句。
图表:用多模态模型(GPT-4V/Qwen-VL)生成图表摘要文本 → 将摘要 Embedding 存储;检索时返回摘要,上层再调原图。
复杂排版(年报/合同):推荐 Unstructured.io / Docling 等专用解析工具,它们能识别标题层级、表格、列表、图片并分别输出。
列表:保持列表项完整性,在 chunk overlap 中保留完整的列表前导句。
图表:用多模态模型(GPT-4V/Qwen-VL)生成图表摘要文本 → 将摘要 Embedding 存储;检索时返回摘要,上层再调原图。
复杂排版(年报/合同):推荐 Unstructured.io / Docling 等专用解析工具,它们能识别标题层级、表格、列表、图片并分别输出。
Q
什么是重排序(Re-ranking)?为什么两阶段检索更好?
▼
两阶段检索架构:
① 第一阶段(粗排):用 Embedding 模型 + ANN 从海量文档中快速召回 Top-K(如 K=100),速度快但精度一般
② 第二阶段(精排):用更强的 Cross-Encoder(Re-ranker)对 100 条候选逐对计算 query-doc 相关性分数,重新排序后取 Top-N(如 N=5)
为什么更好:Bi-Encoder 将 query 和 doc 独立编码,速度快但交互不充分;Cross-Encoder 将 query 和 doc 拼接后联合编码,能捕捉细粒度语义匹配(如否定、条件关系),精度高但慢。两阶段取各自所长。
主流工具:Cohere Rerank、BGE-Reranker-v2、Jina Reranker、Cross-Encoder 微调。
② 第二阶段(精排):用更强的 Cross-Encoder(Re-ranker)对 100 条候选逐对计算 query-doc 相关性分数,重新排序后取 Top-N(如 N=5)
为什么更好:Bi-Encoder 将 query 和 doc 独立编码,速度快但交互不充分;Cross-Encoder 将 query 和 doc 拼接后联合编码,能捕捉细粒度语义匹配(如否定、条件关系),精度高但慢。两阶段取各自所长。
主流工具:Cohere Rerank、BGE-Reranker-v2、Jina Reranker、Cross-Encoder 微调。
生产化与安全治理
6 题
Q
生产级 LLM 应用和 Demo 最大区别是什么?高频工程
▼
Demo 重点证明“模型能回答”,生产系统重点保证稳定、可控、可评估、可追责。
生产级 LLM 应用通常要补齐:模型网关、鉴权与配额、Prompt/模型版本管理、RAG 数据更新、离线评测集、线上反馈、成本监控、限流熔断、审计日志和安全策略。
生产级 LLM 应用通常要补齐:模型网关、鉴权与配额、Prompt/模型版本管理、RAG 数据更新、离线评测集、线上反馈、成本监控、限流熔断、审计日志和安全策略。
| 维度 | Demo | 生产系统 |
|---|---|---|
| 调用方式 | 业务直接调模型 | 统一模型网关 |
| 质量判断 | 人工感觉不错 | 评测集 + 线上指标 + 抽检 |
| 故障处理 | 失败就报错 | 超时、重试、降级、熔断 |
| 安全 | 靠 system prompt | 权限、过滤、工具约束、审计 |
Q
为什么需要模型网关?模型网关应该做哪些事?高频工程
▼
模型网关是所有模型调用的统一入口,把业务服务和具体模型供应商解耦。它的价值是把“不可控的 API 调用”变成“可治理的基础设施”。
核心职责:
① Model Alias:业务只使用
② 路由与降级:按任务难度、SLA、成本预算选择模型,上游异常时 fallback
③ 限流与配额:按用户、租户、应用控制调用量和预算
④ 观测与审计:记录 request id、模型、token、延迟、错误码、prompt 版本
⑤ 安全隔离:统一保管 API key,工具调用和敏感输出统一过策略层
核心职责:
① Model Alias:业务只使用
qa-fast、qa-strong 这类别名,不写死模型名② 路由与降级:按任务难度、SLA、成本预算选择模型,上游异常时 fallback
③ 限流与配额:按用户、租户、应用控制调用量和预算
④ 观测与审计:记录 request id、模型、token、延迟、错误码、prompt 版本
⑤ 安全隔离:统一保管 API key,工具调用和敏感输出统一过策略层
Q
模型路由怎么做?如何在质量、延迟和成本之间取舍?工程
▼
模型路由的目标不是永远用最强模型,而是在满足质量底线的前提下降低成本和延迟。
评估时不能只看成本下降,还要同时看回答通过率、用户负反馈、超时率、fallback 比例和高风险任务误路由率。
| 策略 | 做法 | 适合场景 |
|---|---|---|
| 规则路由 | 按长度、语言、业务线、风险等级切模型 | MVP 到早期生产 |
| Cascade | 先小模型,低置信度再转强模型 | 大量简单 FAQ |
| Learned Router | 训练路由器预测哪个模型性价比最高 | 流量大、有评测数据 |
| A/B Test | 按用户或请求比例灰度新模型 | 模型升级和 Prompt 迭代 |
Q
LLM 成本优化有哪些抓手?高频工程
▼
成本优化要先做归因,再做优化。否则不知道钱花在输入 token、输出 token、embedding、rerank、重试还是错误路由上。
常见抓手:
① Prompt 压缩:删除无效上下文,减少重复 system prompt
② Prompt caching:稳定长前缀放前面,复用系统指令、工具说明和固定示例
③ RAG 控制 top-k:用 rerank 选少量高质量证据,不把整篇文档塞给模型
④ 模型分层:简单问题走小模型,复杂技术方案走强模型
⑤ 输出控制:设置合理
⑥ 重试治理:区分 429、5xx、timeout,限制最大重试次数
常见抓手:
① Prompt 压缩:删除无效上下文,减少重复 system prompt
② Prompt caching:稳定长前缀放前面,复用系统指令、工具说明和固定示例
③ RAG 控制 top-k:用 rerank 选少量高质量证据,不把整篇文档塞给模型
④ 模型分层:简单问题走小模型,复杂技术方案走强模型
⑤ 输出控制:设置合理
max_tokens、停止条件和结构化输出⑥ 重试治理:区分 429、5xx、timeout,限制最大重试次数
面试回答重点:成本优化不是“换便宜模型”这么简单,而是 token、路由、缓存、RAG 和重试共同治理。
Q
RAG 如何做权限控制,避免泄露企业知识库内容?高频工程
▼
原则是:模型不能看到用户无权访问的 chunk。不能先检索全库再让模型判断能不能回答,因为只要敏感内容进入 prompt,就已经有泄露风险。
正确链路:
① 文档入库时打
② 查询时从用户身份解析 ACL 条件
③ 检索阶段强制带 metadata filter,只召回有权限的 chunk
④ 答案引用必须绑定 chunk id 和来源
⑤ 审计日志记录 user id、query、retrieved chunk ids、policy decision
多租户场景下,向量库索引、缓存和日志也要隔离,尤其要防止 response cache 返回其他用户的答案。
正确链路:
① 文档入库时打
tenant_id、部门、项目、密级、可见范围等 metadata② 查询时从用户身份解析 ACL 条件
③ 检索阶段强制带 metadata filter,只召回有权限的 chunk
④ 答案引用必须绑定 chunk id 和来源
⑤ 审计日志记录 user id、query、retrieved chunk ids、policy decision
多租户场景下,向量库索引、缓存和日志也要隔离,尤其要防止 response cache 返回其他用户的答案。
Q
Prompt Injection 和 LLM 红队测试怎么做?前沿工程
▼
Prompt Injection 不是只发生在用户输入里,也可能藏在 RAG 文档、网页、邮件、日志和工具返回结果中。红队测试要覆盖“模型会读到的所有不可信文本”。
测试清单:
① 基础攻击:忽略系统指令、要求输出 system prompt、要求泄露 key 或内部配置
② RAG 攻击:在文档中植入恶意指令、污染召回、请求无权限知识库内容、要求伪造引用
③ Agent 攻击:诱导调用无关工具、构造危险参数、把内部结果发到外部 endpoint
④ 数据隐私:PII 泄露、多租户串扰、日志明文存储、缓存污染
防御思路是纵深防御:数据和指令隔离、ACL 过滤、工具参数 schema 校验、高风险动作人工确认、输出敏感信息检测、全链路审计。
测试清单:
① 基础攻击:忽略系统指令、要求输出 system prompt、要求泄露 key 或内部配置
② RAG 攻击:在文档中植入恶意指令、污染召回、请求无权限知识库内容、要求伪造引用
③ Agent 攻击:诱导调用无关工具、构造危险参数、把内部结果发到外部 endpoint
④ 数据隐私:PII 泄露、多租户串扰、日志明文存储、缓存污染
防御思路是纵深防御:数据和指令隔离、ACL 过滤、工具参数 schema 校验、高风险动作人工确认、输出敏感信息检测、全链路审计。