1. 项目概述:一份面向LLM与RAG求职者的实战指南
最近几年,AI领域,尤其是大语言模型(LLM)和应用层技术如检索增强生成(RAG),热度持续攀升。随之而来的,是市场上对相关人才需求的激增。无论是想从传统开发转型AI应用,还是希望深耕大模型技术栈的工程师,面试都成了必须跨越的一道坎。我见过太多朋友,技术底子不错,项目经验也有,但一到面试环节,面对那些看似基础却又暗藏玄机的问题,常常发挥不出应有水平,与心仪的岗位失之交臂。
这份“面试问题大全”的初衷,就是想解决这个痛点。它不是一个简单的题库罗列,而是我结合自己多次作为面试官和应聘者的双重经验,对LLM和RAG领域面试核心考察点的系统性梳理与深度解析。市面上很多所谓的“八股文”只给答案,不讲逻辑,更不谈场景,死记硬背反而容易在追问下露怯。我的目标是帮你构建一个清晰的知识框架,让你不仅知道“是什么”,更能理解“为什么”和“怎么用”,从而在面试中能够自信、有条理地展示你的技术深度和工程思维。
无论你是应聘LLM应用开发工程师、算法工程师,还是专注于RAG系统搭建的岗位,这份指南都将从 基础概念、核心原理、工程实践到系统设计 等多个维度,为你提供一份详尽的备考地图。我们不止步于回答问题,更会拆解问题背后的意图,分享实战中的避坑经验,让你准备的每一分钟都有的放矢。
2. LLM面试核心考点深度剖析
大语言模型本身是面试的基石。面试官不会期望你从头推导一个GPT的公式,但一定会考察你对模型核心机制、能力边界以及应用成本的理解是否扎实。
2.1 模型基础与核心机制
首先,必须厘清几个最常被混淆的基础概念。当被问到“Transformer的核心是什么?”时,你不能只回答“自注意力机制”。你需要清晰地阐述其如何工作,以及为什么它如此关键。
自注意力机制(Self-Attention) 的本质是让序列中的每个词(Token)都能与序列中所有其他词进行交互,并根据相关性分配权重。你可以用一个开会的场景来类比:讨论“苹果”这个词时,如果上下文是“我吃了一个红色的苹果”,那么“红色”和“吃”这两个词就会获得较高的注意力权重;如果上下文是“苹果公司发布了新手机”,那么“公司”和“手机”的权重会更高。这种动态的、基于上下文计算权重的能力,是模型理解语言的关键。
而 Transformer架构 就是基于多头自注意力(Multi-Head Attention)和前馈网络(FFN)堆叠而成的。多头机制好比让多个专家从不同角度(例如语法、语义、指代关系)同时分析同一段文本,最后综合他们的意见,使得模型的理解更为全面和稳健。
关于 GPT、BERT、T5等模型的区别 ,这是一个经典问题。关键在于抓住它们的预训练目标:
- GPT(Generative Pre-trained Transformer) :采用 自回归(Autoregressive) 语言建模,即根据上文预测下一个词。这使其天生擅长文本生成任务,比如对话、续写、代码生成。你可以把它想象成一个极其擅长“接龙”的专家。
- BERT(Bidirectional Encoder Representations from Transformers) :采用 掩码语言模型(MLM) 和 下一句预测(NSP) 进行预训练。通过随机遮盖一些词让模型预测,它能够同时利用上下文双向信息,因而在文本分类、实体识别、语义相似度判断等理解类任务上表现卓越。它是一个优秀的“文本理解者”。
- T5(Text-to-Text Transfer Transformer) :提出了“万物皆可文本到文本”的统一框架。无论是翻译、摘要、分类还是问答,都被格式化为“输入文本 -> 输出文本”的形式。这种设计简化了任务流程,但在具体任务上可能不如专门优化的模型极致。
注意 :回答这类问题时,切忌死记硬背定义。最好能结合一两个具体的应用场景来说明。例如,可以说:“在开发一个智能客服系统时,如果核心是理解用户意图(分类),我会优先考虑基于BERT的模型进行微调;如果核心是多轮对话生成,那么GPT系列或ChatGLM这类自回归模型会更合适。”
2.2 上下文长度、Token与成本控制
这是工程实践中无法回避的现实问题。面试官常问:“如何处理长文本?模型有上下文窗口限制怎么办?”
首先,要明白 Token 不是简单的“字”或“词”。在LLM中,文本通过分词器(Tokenizer)被切分成Token。对于英文,一个单词可能是一个或多个Token(如“apple”是一个,“unfortunately”可能被分成“un”, “fort”, “unate”, “ly”)。对于中文,常见的分词方式是按字切分,但词表也可能包含常见词语。理解Token是计算成本和理解模型输入输出的基础。
上下文窗口(Context Window) 是指模型一次性能处理的最大Token数量。当输入文本超过这个限制时,就必须进行截断或处理,否则模型无法运行。这就引出了几个关键的工程问题:
-
长文本处理方法 :
- 滑动窗口(Sliding Window) :将长文本分成重叠的片段,分别输入模型,再整合结果。简单但可能丢失跨片段的长程依赖。
- 关键信息提取(Key Information Extraction) :先用一个较小的模型或规则提取长文本的核心摘要、关键句,再将摘要送入大模型。适用于问答、总结等任务。
- 层次化处理(Hierarchical Processing) :先对段落或章节进行编码或总结,再基于这些浓缩后的信息进行最终处理。这是RAG系统中常用思路的前身。
-
成本估算与控制 :LLM API的调用成本通常按Token数计费。你需要有成本意识。例如,GPT-4的输入Token比输出Token便宜,但总体仍远高于GPT-3.5。在系统设计时,必须考虑:
- 提示词(Prompt)优化 :精简指令,避免冗余。
- 缓存机制 :对于重复性查询或相似上下文,缓存模型的输出或中间表示。
- 模型选型 :在效果可接受的范围内,优先使用更经济的模型(如GPT-3.5 Turbo处理简单任务,GPT-4处理复杂推理)。
- 流式输出(Streaming) :对于生成长文本的场景,使用流式接口可以改善用户体验,并在某些计费方式下可能更优。
2.3 提示工程与思维链
如何与LLM有效沟通,决定了其能力发挥的上限。 提示工程(Prompt Engineering) 就是这门沟通的艺术。
基础技巧包括:提供清晰的指令、设定角色(“你是一个资深的Python程序员”)、给出输出格式示例(Few-shot Learning)、将复杂任务分解(Chain-of-Thought)。其中, 思维链(Chain-of-Thought, CoT) 尤为重要。它要求模型在给出最终答案前,先展示其推理步骤。这不仅大幅提升了模型在数学、逻辑推理问题上的准确性,也让模型的思考过程变得可解释、可调试。
在面试中,你可能会被要求现场设计一个提示词来解决某个问题。例如,“设计一个提示词,让模型从一篇技术文章中提取所有提到的工具库名称及其用途。” 一个较好的回答框架是:
- 角色设定 :“你是一个信息提取专家。”
- 任务描述 :“请从以下文章中,找出所有被提及的软件库、框架或工具的名称。”
-
格式要求
:“请以JSON列表格式输出,每个对象包含
name和description字段。” - 示例(可选) :给一个简单的例子说明你期望的格式。
- 输入文本 :“文章内容:...”
实操心得 :不要迷信“魔法提示词”。最好的提示词往往是清晰、具体、无歧义的。多进行迭代测试,观察模型在哪些地方容易出错,然后针对性调整提示词。例如,如果模型总把公司名也当作工具库,就在指令中明确排除“公司、组织名称”。
3. RAG技术栈面试全解
如果说LLM是“大脑”,那么RAG就是为这个大脑配备了一个强大的“外部记忆系统”和“信息检索工具”。RAG相关的面试问题通常更偏向系统设计和工程实现。
3.1 RAG核心流程与组件拆解
一个标准的RAG系统通常包含以下核心环节,面试官可能会让你描述整个流程,并深入追问每个环节的细节:
-
文档加载与预处理 :
-
来源
:如何从PDF、Word、HTML、Markdown、数据库甚至第三方API中加载文档?你会用到哪些库?(如
PyPDF2,python-docx,BeautifulSoup,langchain.document_loaders等)。 - 预处理 :清洗文本(去除页眉页脚、无关字符)、处理编码问题、识别文档结构(标题、段落、列表)。对于中文,可能还需要进行额外的分词或分句处理,为后续切分做准备。
-
来源
:如何从PDF、Word、HTML、Markdown、数据库甚至第三方API中加载文档?你会用到哪些库?(如
-
文本分割(Chunking) :
-
这是RAG系统的关键之一
。分割的好坏直接影响检索质量。常见策略有:
- 固定长度重叠分割 :按固定Token数(如512)分割,相邻片段间保留一部分重叠(如50个Token),防止语义被硬生生切断。这是最常用、最稳健的方法。
- 基于语义分割 :利用句子嵌入模型,在语义发生较大变化的地方进行分割。更符合逻辑,但对模型依赖性强。
-
递归分割
:先按大分隔符(如
\n\n)分,如果片段还太大,再按小分隔符(如\n,。)继续分,直到满足大小要求。
- 面试必问 :“你们是如何确定Chunk大小和重叠度的?” 标准答案是: 没有银弹,需要通过实验确定 。你可以说:“我们会根据文档类型(技术文档段落长,对话记录短)和使用的嵌入模型上下文窗口,设计几组参数(如256/50, 512/100, 1024/150),然后在代表性的查询集上测试检索精度(Recall@K),选择效果最好的组合。”
-
这是RAG系统的关键之一
。分割的好坏直接影响检索质量。常见策略有:
-
向量化与索引构建 :
-
嵌入模型(Embedding Model)
:将文本片段转化为高维向量。选择至关重要。面试官会问:“为什么用这个模型?” 你需要了解常见开源模型(如
text-embedding-ada-002的替代品:BGE-M3,M3E,Nomic Embed等)和商用API的优缺点。关键指标包括:嵌入维度、上下文长度、在多语言/跨模态检索上的表现、以及 在你的领域数据上的表现 (一定要强调这一点)。 - 向量数据库(Vector Database) :存储和检索向量。常见选择有Pinecone(云服务)、Weaviate(开源)、Qdrant(开源高性能)、Milvus(开源,适合大规模)。你需要能对比它们:Pinecone省心但贵且有 vendor lock-in 风险;Weaviate内置向量化和分类模块;Qdrant的过滤功能强大;Milvus生态庞大但运维复杂。
- 索引过程 :将分割后的文本片段(Chunk)通过嵌入模型转化为向量,然后连同原文(或元数据)一起存入向量数据库。
-
嵌入模型(Embedding Model)
:将文本片段转化为高维向量。选择至关重要。面试官会问:“为什么用这个模型?” 你需要了解常见开源模型(如
3.2 检索、重排与生成优化
检索到相关片段后,工作只完成了一半。如何精炼检索结果并生成高质量答案,是另一大考察重点。
-
检索(Retrieval) :
- 相似度计算 :最常用余弦相似度。需要理解其原理:衡量两个向量在方向上的接近程度,与长度无关,非常适合文本语义相似度比较。
- Top-K检索 :通常不会只取最相似的一个,而是取前K个(如K=5)。给后续的重排和生成提供更多上下文。
- 混合检索(Hybrid Search) :这是高级玩法。除了向量检索, 同时结合关键词检索(如BM25) 。向量检索擅长语义匹配,关键词检索擅长精确字面匹配。将两者的结果按分数融合,能显著提升召回率,尤其是当查询词在文档中出现形式不一致时。面试官非常喜欢问这个,因为它体现了你对检索系统深度的理解。
-
重排(Reranking) :
- 为什么需要重排? 向量检索返回的Top-K结果,按相似度排序,但“语义相似”不一定等于“对回答问题最有用”。一个片段可能和问题很相关,但只是背景介绍,不包含答案。
-
如何重排?
使用一个更精细但通常也更慢的
重排模型
(如
BGE-Reranker,Cohere Rerank)。这个模型将“问题”和“候选片段”作为输入,直接输出一个相关性分数。用这个分数对Top-K结果进行重新排序,选取最相关的几个(如Top-3)送入LLM生成答案。这步能大幅提升答案的准确性和相关性。
-
提示工程与生成 :
- 将重排后的相关片段(上下文)和用户问题一起,构造成最终的提示词(Prompt)送给LLM。
-
一个经典的Prompt模板如下:
你是一个专业的问答助手。请严格根据以下提供的上下文信息来回答问题。如果上下文信息不足以回答问题,请直接说“根据已知信息无法回答该问题”,不要编造信息。 上下文: {context_1} {context_2} ... 问题:{question} 答案: - 关键点 :指令必须清晰,强调“基于上下文”,并设置“拒答”机制,这是控制LLM“幻觉(Hallucination)”的核心手段之一。
3.3 高级话题与系统设计
对于资深岗位,面试官会考察你对RAG系统瓶颈的理解和优化能力。
-
评估指标 :如何判断你的RAG系统好坏?
- 检索阶段 :Recall@K(前K个结果中包含标准答案的比率)、MRR(平均倒数排名)。
- 生成阶段 :答案相关性、信息完整性、事实准确性(需要人工或LLM-as-a-Judge评估)。可以设计一些“对抗性”问题,测试系统在上下文不足时是否会胡编乱造。
-
痛点与优化 :
- 检索精度不足 :尝试更优的嵌入模型、调整Chunk策略、引入混合检索、添加元数据过滤(如按文档类型、时间过滤)。
- 上下文利用率低 :LLM可能无法从长上下文中精准定位答案。可以尝试在Prompt中强调关键信息,或使用更复杂的“迭代检索”或“递归检索”策略。
- “Lost in the Middle”问题 :LLM对输入上下文中间部分的信息关注度可能下降。可以通过重排确保最重要信息放在上下文开头或结尾,或在生成时明确指示模型关注特定部分。
-
Agentic RAG :这是当前的热点。传统的RAG是被动的“检索-生成”管道。Agentic RAG引入了智能体(Agent)的思维,使其能主动规划。例如,对于一个复杂问题,Agent可以将其分解成多个子问题,针对每个子问题独立进行检索,然后综合所有中间答案进行推理,最终生成回答。这要求系统具备任务规划、工具调用(检索就是工具之一)和多步推理的能力。如果面试涉及此话题,你需要展现出对ReAct、Plan-and-Execute等范式的理解。
4. 工程实践与项目经验深挖
面试中,“你做过什么”远比“你知道什么”更有说服力。面试官会通过你的项目经历来评估你的工程能力和解决问题的思维。
4.1 如何阐述你的RAG项目
当被要求介绍一个RAG项目时,请采用 STAR法则(情境、任务、行动、结果) 结构化回答,并重点突出你的技术决策和遇到的挑战。
一个高质量的回答框架:
- 情境与任务 :“我们团队需要为一个大型内部知识库(约10万份技术文档和会议纪要)构建一个智能问答系统,要求回答准确、响应快,并且能处理‘根据某年某项目报告,某某技术的指标是多少’这类复杂查询。”
-
行动
:
- 技术选型 :“我们评估后,选择了LangChain作为框架快速搭建原型,因为它的组件丰富。但后期为了性能和定制化,我们转向了更底层的LlamaIndex结合自定义管道。”
-
数据处理
:“文档格式杂乱,我们编写了统一的预处理流水线,针对PDF用了
pypdf并优化了OCR后文本的清洗逻辑,对HTML用了BeautifulSoup提取正文。” - 核心难点 :“最大的挑战是Chunk分割。技术文档包含大量代码块和表格,固定长度分割会破坏其结构。我们采用了递归分割,先按章节标题分,再按段落分,并对代码块和表格做了特殊处理,将其视为一个整体不分割。”
-
检索优化
:“初期测试发现,对于包含特定产品型号和错误代码的查询,纯向量检索效果不好。我们引入了
Elasticsearch进行关键词检索(BM25),实现了混合检索,召回率提升了约30%。” - 评估与迭代 :“我们构建了一个包含200个‘问题-标准答案’对的测试集,用Recall@5和人工评估答案质量来驱动迭代。我们发现加入重排模型(BGE-Reranker)后,答案相关性评分显著提高。”
- 结果 :“最终系统上线后,平均回答准确率(对比标准答案)达到85%以上,复杂查询的满意度调查得分在4.2/5.0。系统日均处理查询约5000次,P95延迟低于2秒。”
4.2 性能、成本与运维考量
一个能落地的系统,不仅仅是效果要好。
-
性能优化 :
- 索引速度 :对于百万级文档,全量更新向量索引可能很慢。需要考虑增量更新策略。
- 检索延迟 :向量数据库的选型、索引类型(如HNSW)、硬件(是否使用GPU加速嵌入模型)都影响延迟。需要监控P99延迟。
- 缓存 :对高频或相同查询的结果进行缓存,是降低延迟和成本的立竿见影的手段。
-
成本控制 :
- 嵌入成本 :如果使用商用嵌入API,大量文档的初次向量化和后续增量更新成本不菲。评估开源嵌入模型并在自有数据上微调,是长期降低成本的关键。
-
LLM API成本
:优化Prompt减少不必要的Token,设置合理的
max_tokens限制,对简单查询使用小模型(如GPT-3.5),复杂查询再用大模型(如GPT-4),即实现路由(Routing)。 - 基础设施成本 :自建向量数据库和模型服务的服务器成本。
-
监控与运维 :
- 监控什么 :API调用成功率、延迟、Token消耗、费用消耗、检索结果的相关性(可通过抽样人工评估或自动化评分)。
- 日志 :记录完整的检索链路(用了哪些Chunk、得分如何、最终生成的答案),这对于调试和优化至关重要。
- 迭代更新 :知识库更新后,如何触发重新索引?是定时全量,还是实时监听文件变化增量处理?这需要设计可靠的流水线。
4.3 避坑指南与常见问题排查
分享你在实战中踩过的坑,最能体现你的经验价值。
-
坑1:Chunk分割的“语义断裂” 。
- 现象 :检索到的片段看起来相关,但信息不完整,导致LLM无法生成好答案。
- 排查 :检查分割后的Chunk,看是否在句子中间、关键实体(如人名、公式)处被切断。查看重叠度是否足够。
- 解决 :采用句子感知的分割器,或增加重叠度。对于表格、代码块,实现自定义分割逻辑,保证其完整性。
-
坑2:嵌入模型的“领域不适配” 。
-
现象
:通用嵌入模型(如
text-embedding-ada-002)在特定领域(如法律、医疗)术语上检索效果差。 - 排查 :构建领域内同义词/相关词查询对,测试检索的召回率。
- 解决 :在领域数据上继续训练(微调)开源嵌入模型(如BGE),使用领域内数据对比学习,使其更懂你的“行话”。
-
现象
:通用嵌入模型(如
-
坑3:LLM的“幻觉”难以根治 。
- 现象 :即使提供了相关上下文,LLM有时还是会编造数字、日期或细节。
- 排查 :分析Prompt,是否指令不够强硬?是否没有设置清晰的“拒答”边界?
- 解决 :强化Prompt指令(“必须严格引用上下文中的数字”)。在生成后添加 引用溯源(Citation) 步骤,让模型为答案中的关键陈述标注出自哪个源Chunk,便于用户核查,也便于你发现哪些上下文被模型误解了。
-
坑4:系统响应慢 。
- 现象 :查询延迟高,用户体验差。
- 排查 :使用链路追踪工具,定位耗时环节。是嵌入模型推理慢?向量数据库检索慢?还是LLM生成慢?
-
解决
:嵌入模型可考虑量化或使用更轻量模型;向量数据库优化索引参数(如HNSW的
ef_construction和ef_search);LLM生成启用流式响应,让用户先看到部分结果;对检索和生成环节实施并发处理。
5. 面试实战技巧与心态准备
技术知识储备充足后,临场发挥和沟通技巧同样重要。
5.1 如何应对系统设计题
“设计一个支持百万级文档的RAG问答系统。” 这类开放性问题考察你的系统思维。回答时要有层次,从宏观到微观。
- 澄清需求 :不要急于给出方案。先问清楚:“文档的主要格式是什么?(PDF/网页)”“查询的QPS(每秒查询数)预期是多少?”“对答案准确率和延迟的要求是什么?(比如P95<3s)”“预算是多少?” 这体现了你的工程思维是以需求为导向的。
- 勾勒架构 :在白板或虚拟白板上画出核心组件框图。通常包括:负载均衡器 -> Web服务器/API层 -> 查询处理层(解析、路由)-> 检索服务(向量DB+关键词DB)-> 重排服务 -> LLM生成服务 -> 缓存层(Redis)-> 数据流水线(预处理、嵌入、索引)。
- 深入细节 :面试官会针对某个环节深入。例如,“向量数据库怎么选?” 你可以说:“初期数据量小,为了快速验证,可以用PGVector(如果熟悉PostgreSQL)或Chroma。中期达到百万级,需要关注性能和可扩展性,我会选Qdrant或Weaviate,它们性能好且过滤功能强。如果团队有运维能力且数据量极大,可以考虑Milvus。云服务像Pinecone能免运维,但需考虑成本和技术绑定。”
- 讨论权衡 :没有完美方案。要主动讨论权衡。“为了追求极致的检索精度,我们引入了重排模型,但这会增加100-200ms的延迟。我们需要根据业务对准确率和延迟的容忍度来决定是否开启此功能,或者只对复杂查询开启。”
- 考虑扩展性与故障 :“如果流量增长十倍,如何扩展?”“如果向量数据库挂了,有什么降级方案?(例如,降级到纯关键词检索,虽然效果差但服务可用)”
5.2 行为问题与项目深挖
“你遇到的最大技术挑战是什么?怎么解决的?” 准备好1-2个精彩的故事。使用STAR法则,重点突出你的 个人贡献 和 解决问题的思维过程 ,而不是简单说“我们团队做了...”。
例如:“在XX项目中,我们遇到检索结果相关但答案不准的问题。我 个人 通过分析日志,假设是Chunk分割导致答案信息被割裂。我 主导 设计了一个A/B测试,对比了三种分割策略,并用一个小的测试集验证。最后发现递归分割结合句子边界检测效果最好。我 推动 了该方案上线,使相关查询的答案准确率提升了15%。” 这个故事展示了你的分析、实验和推动能力。
5.3 反向提问的艺术
面试尾声,面试官通常会问你有什么问题。这是一个展示你思考深度和对岗位兴趣的好机会。不要问那些在招聘简章上就能查到的问题。
可以问的好问题:
- “团队目前正在解决的、最有趣的RAG或LLM相关的技术挑战是什么?”
- “这个岗位主要负责的产品/系统,未来的技术路线图大致是怎样的?”
- “团队是如何评估和迭代RAG系统效果的?有专门的评估框架或流程吗?”
- “在模型选型上,团队是更倾向于使用开源模型自建,还是主要依赖商用API?背后的考量是什么?”
避免问的问题: 薪资福利(后续谈)、加班情况(显得畏难)、过于基础的技术问题(显得准备不足)。
面试本质上是一次技术交流和技术匹配度的检验。充分准备知识体系,清晰梳理项目经验,保持自信、坦诚的沟通态度,即使遇到不会的问题,也可以展示你的学习思路和解决问题的潜力。记住,面试官寻找的是那个能一起解决未来未知问题的人,而不仅仅是背熟了今天已知答案的人。这份指南为你提供了地图和装备,但通往Offer的道路,还需要你用自己的思考和经验去一步步踏实前行。
383

被折叠的 条评论
为什么被折叠?



