说实话,这几年我面过的LLM岗候选人没有一百也有八十,能让我愿意聊到最后一轮的人,往往不是刷题最多的,而是能把这八个问题讲清楚的人。问题看起来很基础,但基础恰恰最能暴露一个人是真懂还是背过。今天不聊虚的,直接把八个高频淘汰点拆开揉碎,每个都给出回答的思路、背后的逻辑,以及我实际面试时最想听到的细节。
1. 先搞懂面试官到底在考察什么:为什么这8个问题能决定去留
很多候选人有个误解,觉得LLM面试就是拼谁背的模型参数多、谁知道的框架多。其实不是。做LLM应用和做传统后端不一样,它的问题域横跨算法、工程、数据、系统设计四层,而面试官要在45分钟到1小时里判断你的真实水平,最有效的方式就是抛出几个看似基础、实则层层递进的问题,看你是能答出“是什么”,还是能答出“为什么”和“怎么办”。
这8个问题基本覆盖了LLM从原理到落地的主链路:模型基础架构、参数高效微调、幻觉治理、评估体系、推理加速、数据工程、智能体设计、系统容错。任何一个环节答不上来,都意味着你在真实项目中大概率会踩坑,而面试官恰恰最怕招进来一个“只会调API,出事就抓瞎”的人。
另外还有一个隐形的考察点:沟通能力。同样一个问题,有人三句话说完,有人能讲清楚背景、权衡、适用边界和失败案例。后者在我这里会明显加分。因为LLM项目几乎永远是跨团队协作的,你不光要自己能干活,还得让同事听懂你在干什么。
我把这8个问题按照“基础原理—工程实践—系统设计”分成了三层。下面逐题拆解,每道题都给出了“回答骨架”和“加分细节”,你可以直接拿去对照自测。
2. 第一层:模型基础原理(问题1-2)
2.1 问题1:Transformer的注意力机制为什么会取代RNN?请解释QKV的含义
这个几乎是必考题,但大多数人的答案停留在“注意力可以并行计算”这个层面。面试官其实想听到的是:你不仅知道Transformer用了注意力,还知道它解决了什么问题,以及注意力内部的数学直觉。
我的回答思路是这样:
RNN的核心问题是串行。它必须按时间步逐个处理输入,t时刻的隐状态依赖t-1时刻的输出,这导致两个致命缺陷:一是训练效率低,GPU并行能力完全用不上;二是长期依赖问题,虽然LSTM用门控机制缓解了梯度消失,但信息传递的链条仍然太长,距离远的词之间关联容易被稀释。
Attention机制的提出,本质上是把“按顺序传递信息”改成了“直接建模任意两个位置之间的关系”。注意力分数的计算是Query和Key做点积。你可以把Query理解成“我在找什么”,Key理解成“我有什么”,两个向量做点积得到匹配度,再经过softmax归一化得到权重,最后用这个权重去加权求和Value——也就是“我真正要提取的内容”。
这里有一个很多人忽略的面试加分点:为什么要除以根号d_k。如果不做缩放,当向量维度很大时,点积的结果方差会变大,softmax会进入饱和区,梯度变得极小。除以根号d_k是为了把方差拉回1左右,保证训练稳定。如果你能主动说出这个细节,面试官会知道你读过原始论文或深入源码。
回答时最好再补一句:多头注意力其实是在做“多视角匹配”。不同的头可能学到不同的关系模式,比如有的头关注句法依赖,有的头关注指代关系。这样整个模型就有了更强的表达能力。
注意:千万不要答成“注意力就是加权平均”。加权平均只是最后一步,核心是QKV的映射和缩放点积的数学设计。
2.2 问题2:LoRA为什么能省显存?它和全量微调的本质区别是什么?
第二个高频题就是微调。现在中小公司几乎不会全量微调大模型,LoRA是最常用的方案。这题考察的是你对参数更新机制的理解。
全量微调需要为每一层都保存梯度、优化器状态和动量项。一个7B的模型,如果用AdamW优化器,光是优化器状态就要占相当于两倍模型参数的显存——实际算下来,全量微调7B模型可能要80GB以上的显存,很多时候还得上多卡。而LoRA的思路非常巧妙:冻结原始权重,只训练注入的低秩分解矩阵。
具体来说,对每个权重矩阵W,LoRA不直接更新W,而是用一个低秩增量ΔW = B × A代替,其中A的维度是d×r,B的维度是r×d,r远小于d。训练时,原始W保持不动,只更新A和B。这样可训练参数量从d×d变成了2×d×r,假设d=4096,r=8,那么参数量从1600多万降到6万5千多,直接差了250多倍。
面试时能把这个数学规模对比讲清楚,基本就过关了。但如果你想更稳,再补一个权衡:r值不是越大越好。r太小,模型能力不够,学不动领域知识;r太大,过拟合风险高,而且推理时如果想合并权重,显存和延迟都会增加。我一般建议从r=8开始试,根据验证集效果和训练loss曲线调整。
另外还有一个隐藏考点:为什么低秩有效?这个问题的直觉是,微调本质上是让模型适应特定任务,这种适应行为通常只涉及低维子空间的参数变化,不需要对整个参数空间做大幅修改。LoRA恰好利用了这个特性。
实操中我见过有人直接拿LoRA去微调代码模型,r设成4,结果代码生成质量一塌糊涂。后来改成r=16配合更好的数据清洗才好转。别迷信小r,要看你任务的复杂度。
3. 第二层:工程实践核心(问题3-4)
3.1 问题3:模型幻觉是怎么产生的?有什么缓解方案?
幻觉这题几乎成了LLM面试的“分水岭”。能答好的人,说明他真的在业务里被幻觉折磨过。面试官不想听“模型会胡说八道”这种空话,想听的是产生机制和工程手段。
我的答案分三层。
第一层,幻觉的来源。主要有三个:一是训练数据本身存在错误或矛盾,模型把噪音也学进去了;二是解码阶段的自回归机制导致概率最高不等于事实正确,模型会在不确定性高的地方强行“编”一个最合理的词;三是生成任务的设计目标就是“像人类一样说话”,而不是“说真话”,模型在训练时并没有内建事实校验模块。
第二层,缓解手段。这个一定要分“训练前”“推理中”“推理后”三个环节。训练前要做数据清洗和事实一致性过滤,比如用规则或小模型筛掉明显矛盾的样本。推理中可以用约束解码、知识图谱嵌入、或者Retrieval-Augmented Generation(RAG)把外部事实源引入生成过程。推理后最常用的是让模型自验证——让模型重新读一遍自己生成的答案并打分,或者用NLI(自然语言推理)模型检测生成内容和输入文档之间是否矛盾。
第三层,给一个真实项目中的案例。我在做客服助手时,发现模型经常把不同产品的退款政策搞混。后来在prompt里明确加了“只依据以下文档回答”,同时把文档切块后做检索,幻觉率从14%降到4%左右。虽然不能完全消除,但已经可以上线了。
这里我会额外强调一个观点:不要追求100%消除幻觉,这不符合LLM的底层原理。你要做的是“可控性”——在关键场景用RAG或规则兜底,在非关键场景允许一定程度的发散,但对“事实性输出”做严格校验。
3.2 问题4:如何评估一个微调后的模型?只看Loss够吗?
这题考察的是工程判断力。很多刚入行的人喜欢盯着训练loss,说loss降了就是变好了。但LLM微调面对的是生成任务,loss和真实使用效果之间的相关性非常弱。
及格线是回答出“离线评估+在线评估”两个维度。离线评估至少包括:perplexity(虽然我不太建议作为唯一指标)、BLEU/ROUGE(对翻译和摘要类任务有一定参考价值)、以及最关键的——人工评估或基于GPT-4的评估。在线评估则是小流量AB测试,看点击率、留存、用户反馈等真实业务指标。
高分的回答是能说清楚“评估集怎么构建”。我的经验是:不要随机采样数据做评估,要按业务场景分层。比如客服场景,你应该单独划分一个“高频问题集”“模糊问题集”“数据缺失问题集”。因为不同场景的失败模式不同,合并统计会掩盖问题。另外评估样本至少要几百条,否则置信区间太宽。
还有一个很关键的细节:评估指标要和业务目标对齐。如果做的是摘要工具,用户在意的是“关键信息是否保留”和“是否有幻觉”,那么你应该采用FactCC这类事实一致性指标,或者人工打分维度里明确写“信息完整性”“事实正确性”“语言流畅度”,而不是只看ROUGE分数。
我踩过一个坑:微调后用单一测试集测了个高准确率,上线后发现面对少见句式直接崩。后来查原因是测试集和训练集同源,模型实际上是在“背答案”。所以做评估集时一定要保证和训练集完全隔离,最好从不同时间段、不同用户渠道抽取。
4. 第三层:系统设计与实践(问题5-7)
4.1 问题5:服务端推理速度太慢,你会怎么优化?
这道题实际是把“部署经验”摆上桌。很多候选人背了一堆技术名词,但我一问“你现在模型多大规模、跑在什么GPU上、时延多少、瓶颈在哪”,就答不上来了。所以这题的回答重点是“分析链路”而不是“列方案”。
一个完整的推理链路包括:输入解析→Prompt处理→模型前向传播→采样生成→后处理。绝大多数情况下,瓶颈都在模型前向传播和自回归采样。优化手段我一般分成四类。
第一类是算法层:量化(INT8、INT4)、剪枝、蒸馏。量化最立竿见影,INT8量化通常能把FP16模型体积减半,推理速度提升1.5到2倍。但要注意量化对模型精度的影响,小模型被量化后性能下降更明显。
第二类是框架层:用vLLM、TensorRT-LLM这类推理框架,而不是裸的Transformers库。它们做了PagedAttention、Continuous Batching等优化,吞吐量能提升一个数量级。我实测过同样的模型,vLLM比HuggingFace pipeline快5到10倍,而且支持并发请求。
第三类是解码策略:贪心解码永远最快但质量一般;如果要用beam search,beam size别超过4,否则计算量指数级增长。另外可以调整max_tokens,很多情况下默认的最大长度远大于实际需要,白白浪费计算。我见过有人把max_tokens设为1024,实际上绝大多数回答只有200多token,这就浪费了四分之三的理论计算量。
第四类是模型侧:能不能把模型换小一点?知识蒸馏过的7B模型在某些场景下效果接近13B,但推理速度快一半。如果业务允许,优先选更小的模型而不是一直堆算力。
还有个大坑:不少人模型部署好了但性能仍不行,最后发现是CPU和GPU之间数据搬运太频繁——加载tokenize和batch拼接过慢。别只顾着优化GPU,数据预处理也要压到最低开销。
4.2 问题6:在做AI Agent(智能体)时,如何保证多步推理的可靠性?
Agent是这两年大模型应用最热的方向之一,面试几乎必问。这题的核心不是“怎么让Agent完成任务”,而是“任务失败后怎么办”。Agent的本质是一个循环系统:接收任务→调用工具→观察结果→更新计划→再调用工具。每一步都可能出错,比如工具返回了错误数据、模型误判了工具输出、或者计划本身就偏离了目标。
我的回答思路是先给一个架构图式的描述:Agent = LLM + 工具集 + 记忆 + 规划器。但关键在设计容错机制,具体有四点。
第一,工具调用要有明确的输入输出契约。不要让模型自由发挥参数,而要用Function Calling或JSON Schema约束。所有工具返回值都要带上状态码和错误信息,比如“找不到数据”“权限不足”“时间超时”。
第二,要给Agent设置“重试与回退”机制。当工具调用失败时,不是直接报错,而是把错误信息反馈给LLM,让它重新规划策略。比如查询数据库超时了,可以重试一次;如果连续三次失败,就切换到备用方案,比如走缓存或换一个查询接口。
第三,要有“护栏”。给Agent设定最大步数,防止死循环;设定可信度阈值,低置信度时主动向用户确认;设定敏感操作确认机制,比如删除、写入这类动作必须经过用户授权。
第四,我记得热词里有个概念叫“自主容错控制”,其实在工程上就体现为:每次Agent执行步骤都要留痕,记录输入、输出、置信度、耗时。这样一旦出问题可以回溯,而不是黑盒。这个做法在面试里说出来会很加分,因为它体现的是系统级思维。
我做过一个数据分析Agent,最开始模型总是喜欢“自由发挥”生成SQL,结果经常查询不存在的字段。后来强制让模型先用一个“表结构描述工具”获取schema,再生成SQL;同时给SQL执行结果加了“字段存在性校验”。这样一改,Agent任务成功率从58%提到了83%。
4.3 问题7:模型上线后,如何做数据标注和质量监控?
数据标注这题看似基础,但在LLM场景里坑最多。尤其是微调和评估阶段,数据质量直接决定模型效果的上限。面试官想考察的是你有没有一套完整的数据闭环。
我通常会分四个环节讲。
首先是标注规范制定。不要只给标注员一个“标什么”的说明,要给出“什么情况算对”“边界情况怎么处理”的示例。比如做“判断回答是否包含幻觉”的任务,规范里应该写清楚:如果回答包含文档中不存在的信息,但该信息是常识正确,算不算幻觉?这一类边界问题不提前定义,标注一致性会非常差。
其次是标注工具选型。小团队直接用开源工具,比如Label Studio;大规模用商业平台也行。好用的工具应支持多人协同、标签热键、争议样本仲裁。另外,最好把模型预测结果预填到标注界面,让标注员只做“修正”,能大幅提高标注效率。
然后是质检机制。我习惯让两个人独立标注同一批样本,计算Cohen's Kappa一致性。Kappa值低于0.6就得重新培训标注员或修改规范。这个指标比简单看“准确率”靠谱得多,因为它能排除随机猜测的影响。
最后是数据迭代闭环。标注完的数据不是一劳永逸,要定期从线上真实用户反馈中抽取低分case,再回来补充标注和微调。这个过程跑起来,模型才能持续变好。
还有一个隐形常识:LLM的数据标注里,“模型生成结果的排序标注”比“从零开始写答案”更容易保持一致。所以能先让模型生成候选,再让人排序,就不要让人从头写。
4.4 问题8:如何设计大模型服务的监控体系?
这个问题现在越来越常问,因为太多模型上线后“死得不明不白”。监控体系的设计本质上是在回答三个问题:它现在正常吗?哪里出了问题?怎么快速恢复?
我的框架分三层。
第一层是基础运维监控:GPU利用率、显存水位、推理时延(P50/P95/P99)、吞吐量、错误率。这些用Prometheus+Grafana就能搞定。要特别注意P99和P50的差距,如果差距过大,说明系统里存在明显的长尾请求——可能是超长输入、或者需要回调工具的场景。
第二层是模型质量监控。这是LLM特有的难点。不能只看硬件指标,还要监控答案质量。实际方法有两种:一种是规则抽样,按比例抽取线上请求,用目标模型或小模型做质量评分;另一种是用户反馈埋点,在UI上加“顶/踩”按钮,把反馈数据回流到评估集。如果发现某个时间段“踩”率上升,要能定位到是prompt变更、知识库更新还是模型版本切换引起的。
第三层是数据漂移监控。LLM应用的输入分布会随业务变化而变化。比如电商客服,遇到大促,用户问题里会突然出现大量新商品名、新活动规则,模型见过的样本变少,表现可能下滑。这时候要监控输入向量的分布距离(比如用Kullback-Leibler散度),或者直接统计高频词变化。一旦发现漂移,要触发重训或补充知识库。
我自己的经验是:监控体系一定要和“告警”“回滚”打通。不要只发一条告警邮件就完了,要有一键回滚到上一版本模型的能力。多试几次你会发现,回滚比在线修复模型快得多,尤其是深夜被别人喊起来的时候。
5. 面试实战中的常见误区与加分解法
5.1 这几类回答方式会瞬间拉低印象分
第一类是“只背概念,不说场景”。比如问LoRA,就背一遍ZERO是啥,bagging是啥——不对,跑题了。问LoRA就只回答“低秩分解”,但问他实际做微调时rank怎么选、target_modules怎么配,他完全没概念。这种只会背书的人,真到项目里大概率会束手无策。
第二类是“抱怨模型”。有人一上来就说“GPT-4也不好用,幻觉很严重,还是传统方法靠谱”。这种态度非常减分。LLM本来就有局限性,面试官想听的是你如何在这些局限里设计出能用的系统,而不是听你吐槽。
第三类是“不懂装懂”。我遇到过候选人把MHA说成是“多头注意力,每头学不同的特征”,这句没错,但紧接着问他“如果我去掉一半头会怎样”,他支支吾吾半天。宁可说“这块我没深入验证过,我的猜测是……”,也比编一个强。
5.2 我作为面试官,最愿意听到的三个特质
第一,有量化意识。不论讲什么方案,都愿意带上“能快多少”“能降多少延迟”“能提几个点”这类数据。哪怕数据是估算的,也代表你在用工程视角而不是学生视角看问题。
第二,能拆解问题。面试官抛出的问题往往很大,比如“怎么优化推理速度”,如果你直接答“用量化”,我会觉得太窄。更好的方式是先说“我先从三个层面分析——模型层、框架层、部署层”,然后层层展开。这种结构感非常加分。
第三,有承认边界的坦诚。真正有经验的人知道什么方案可行,什么方案在当前条件下不可行。比如“在预算有限的情况下,我宁愿先做RAG也不做全量微调”。这种判断力需要踩坑才能长出来。
6. 写在最后:准备面试更重要的是建立系统思维
这8个问题孤立看是各自独立的,但串起来其实是一个完整的工程闭环:理解原理才能选对模型结构,懂微调才能有效利用数据,会评估才能判断模型好不好,懂推理优化才能服务上线,会设计Agent和监控才能让系统真正运营起来。我面过的那些最后能拿高薪的候选人,无一例外都具备这条系统链路。他们的答案里总能看到一个“活过”项目的影子——知道哪里会出问题,知道出了问题怎么修,知道怎么预防下一个问题。
回到这篇文章的标题,说“答不上来直接淘汰”,听起来有点残酷,但现实就是如此。LLM技术迭代太快,面试时临时抱佛脚刷几篇论文是掩盖不了基本功缺失的。我的建议是,把这8个问题当作一面镜子,照一照自己到底站在哪一层。如果你现在有几题答不上来,没关系,逐题去补,把每个问题背后对应的实操项目亲手做一遍,下次面试你就不再是背答案的人了。
最后再说个小技巧吧。准备面试时,别只看问题本身,试着追问自己一层:面试官为什么这么问?他想听到什么?当你开始这样思考时,你已经不是在被面试,而是在和技术前辈对话了。