最近参加了几场大模型算法工程师/AI智能体研发岗位的面试,整体感觉行业对候选人的要求越来越高,不仅需要扎实的理论基础,更看重实际项目经验和工程落地能力。以下是我在面试中遇到的一些常见问题、考察点及其参考答案要点,希望能对大家有所帮助。
一、 核心技术与综合能力考察
面试官通常会从候选人的专业技能表入手,对技术点进行深入提问。
1. 大语言模型 (LLM) 基础与微调:
-
模型架构与原理: 会被问到对主流LLM架构(如Transformer、GPT系列、Llama系列)的理解,特别是其核心组件(如Self-Attention)的工作原理和优势。预训练的目标和方法也是常考点。
-
参考答案要点:
-
Transformer架构: Encoder-Decoder结构(或仅Decoder),多头自注意力机制(Multi-Head Self-Attention)能够捕捉序列内长距离依赖,并行计算能力强。位置编码(Positional Encoding)解决序列顺序问题。前馈神经网络(Feed-Forward Networks)。
graph TD A["输入序列 (Tokens)"] --> B("Token Embeddings + Positional Embeddings"); B --> C{"N x Encoder / Decoder Layers"}; subgraph C direction LR C1["Multi-Head Self-Attention"] --> C2["Add & LayerNorm"]; C2 --> C3["Feed Forward Network"]; C3 --> C4["Add & LayerNorm"]; end C --> D["Output Layer (e.g., Linear + Softmax for classification/generation)"]; D --> E["输出序列/概率分布"]; -
Self-Attention: 通过计算Query (Q), Key (K), Value (V) 之间的点积相似度来动态分配注意力权重,使模型能够关注输入序列中不同部分的相关性。
-
公式: <math xmlns="http://www.w3.org/1998/Math/MathML"> A t t e n t i o n ( Q , K , V ) = s o f t m a x ( d k Q K T ) V Attention(Q,K,V)=softmax(dkQKT)V </math>Attention(Q,K,V)=softmax(dkQKT)V
- dk 是 Key 向量的维度,用于缩放,防止点积结果过大导致softmax梯度过小。
-
多头注意力 (Multi-Head Attention): 将Q, K, V分别线性投影到多个低维空间("头"),在每个头中并行计算Attention,然后将各头的结果拼接并再次线性投影。 <math xmlns="http://www.w3.org/1998/Math/MathML"> M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , ... , h e a d h ) W O w h e r e h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) W i Q ∈ R d m o d e l × d k , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v , W O ∈ R h d v × d m o d e l MultiHead(Q,K,V)=Concat(head1,...,headh)WO where headi=Attention(QWiQ,KWiK,VWiV) WiQ∈Rdmodel×dk, WiK∈Rdmodel×dk, WiV∈Rdmodel×dv, WO∈Rhdv×dmodel </math>MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhereheadi=Attention(QWiQ,KWiK,VWiV)WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv,WO∈Rhdv×dmodel
-
概念流程图:
graph LR Input["输入序列 (X)"] --> ProjQ["Linear Projection to Q"]; Input --> ProjK["Linear Projection to K"]; Input --> ProjV["Linear Projection to V"]; ProjQ -- Q --> ScaleDotProduct["Scaled Dot-Product Attention"]; ProjK -- K --> ScaleDotProduct; ProjV -- V --> ScaleDotProduct; ScaleDotProduct --> WeightedSum["Weighted Sum (Context Vector Z)"];
-
-
预训练目标: 如掩码语言模型(Masked Language Model, MLM,如BERT,损失函数通常是交叉熵损失 ∑−logP(xi∣X∖i))、下一词预测(Next Token Prediction, NTP,如GPT,损失函数也是交叉熵损失 ∑−logP(xi∣x<i))。通过大规模无标签文本学习通用的语言表示。
-
GPT系列与Llama系列: 通常是Decoder-only架构,擅长文本生成。Llama的改进点(如RMSNorm替代LayerNorm以提升稳定性和效率, SwiGLU激活函数替代ReLU/GELU以提升性能,RoPE旋转位置编码替代绝对/相对位置编码以更好地处理长序列和相对位置信息)也可能被问到。
-
-
-
微调技术:
-
SFT (监督微调): 如何构建高质量的指令数据集?数据清洗、多样性、均衡性如何保证?数据配比对模型效果有何影响?
-
参考答案要点:
-
高质量指令数据集: 清晰的指令、准确的回答、覆盖多样的任务类型和领域。来源可以包括人工编写、开源数据集筛选、用户数据(脱敏后)、利用强模型生成合成数据(如Self-Instruct)。
-
SFT数据处理流程:
graph TD A["原始数据收集 (多来源)"] --> B["数据清洗与去重"]; B --> C["格式转换 (统一为Prompt-Completion格式)"]; C --> D["质量评估与筛选 (人工/自动)"]; D --> E["多样性与均衡性分析"]; E -- "欠采样/过采样/数据增强" --> F["最终SFT数据集"]; F --> G["模型微调 (计算交叉熵损失)"]; -
数据清洗: 去除低质量(如不连贯、事实错误)、重复、有害内容(如偏见、歧视)。格式规范化,去除无关字符。使用启发式规则、分类器或人工审核。
-
多样性与均衡性:
- 指令多样性: 覆盖不同任务类型(问答、摘要、翻译、代码生成、创作等)、不同领域、不同提问方式(疑问句、祈使句)、不同复杂度。
- 回答多样性: 长度、风格、详细程度。
- 均衡性: 避免数据集中某些类别或主题占比过高,导致模型偏向。可以使用欠采样、过采样或数据增强技术(如回译、同义词替换)。
-
数据配比: 不同来源、不同质量、不同任务类型的数据应有合理的比例。例如,高质量人工标注数据可以占比较小但权重较高,通用知识与领域知识的配比也需考量。过多低质量数据或不均衡的配比会影响模型泛化能力和特定任务表现。需要通过实验迭代调整。
-
-
-
对齐技术: RLHF的流程是怎样的?DPO的核心思想是什么,相比RLHF有何优劣?(可能会追问其他偏好优化算法,如GRPO、GAPO,但通常理解前两者即可)。
-
参考答案要点:
-
RLHF (Reinforcement Learning from Human Feedback):
graph TD subgraph "阶段1: 监督微调 (SFT)" SFT_A["预训练LLM"] --> SFT_B["指令数据集"]; SFT_B --> SFT_C["SFT模型 (π_SFT)"]; end subgraph "阶段2: 奖励模型训练 (RM)" RM_A["SFT模型 (π_SFT)"] --> RM_B["为Prompt生成多个回答"]; RM_B --> RM_C["人类标注者对回答进行排序/打分"]; RM_C --> RM_D["偏好数据集"]; RM_D --> RM_E["训练奖励模型 (RM, r_φ)"]; end subgraph "阶段3: 强化学习微调 (RL)" RL_A["SFT模型 (π_SFT) 作为初始策略"] --> RL_B{"RL算法 (如PPO)"}; RM_E -- "奖励信号" --> RL_B; RL_B -- "生成回答" --> RL_C["语言模型 (π_θ^RL)"]; RL_C -- "与SFT模型计算KL散度 (约束)" --> RL_B; RL_B --> RL_D["对齐后的LLM"]; end SFT_C --> RM_A; SFT_C --> RL_A;- SFT阶段: (可选但推荐)初始模型监督微调,使其具备基础的指令遵循能力。
- 奖励模型训练 (Reward Model Training): 从SFT模型或基础模型生成多个回答,收集人类对这些回答的偏好排序数据(如A优于B,或打分),训练一个奖励模型来学习和预测人类偏好。RM的输入是(prompt, response),输出是一个标量奖励值。损失函数通常基于Bradley-Terry模型,最大化偏好回答的奖励高于非偏好回答的奖励的概率: <math xmlns="http://www.w3.org/1998/Math/MathML"> L ( ϕ ) = − E ( x , y w , y l ) ∼ D [ l o g ( σ ( r ϕ ( x , y w ) − r ϕ ( x , y l ) ) ) ] L(ϕ)=−E(x,yw,yl)∼D[log(σ(rϕ(x,yw)−rϕ(x,yl)))] </math>L(ϕ)=−E(x,yw,yl)∼D[log(σ(rϕ(x,yw)−rϕ(x,yl)))]
- 强化学习微调 (RL Fine-tuning): 使用PPO (Proximal Policy Optimization) 等强化学习算法,将语言模型视为策略(Policy),奖励模型提供的奖励作为环境反馈,进一步微调语言模型,使其生成更符合人类偏好的内容。通常会加入KL散度惩罚项,防止RL策略偏离SFT模型太远。
- PPO目标函数(简化): <math xmlns="http://www.w3.org/1998/Math/MathML"> L C L I P + V F + S ( θ ) = E t [ m i n ( r t ( θ ) A t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) − c 1 L t V F ( θ ) + c 2 S π θ ] LCLIP+VF+S(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)−c1LtVF(θ)+c2Sπθ] </math>LCLIP+VF+S(θ)=Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)−c1LtVF(θ)+c2Sπθ]
- <math xmlns="http://www.w3.org/1998/Math/MathML"> r t ( θ ) = π θ o l d ( a t ∣ s t ) π θ ( a t ∣ s t ) rt(θ)=πθold(at∣st)πθ(at∣st) </math>rt(θ)=πθold(at∣st)πθ(at∣st) 是概率比率。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> A t A^t </math>At 是优势函数估计 (Advantage estimate)。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> L V F LVF </math>LVF 是价值函数损失 (Value function loss)。
- <math xmlns="http://www.w3.org/1998/Math/MathML"> S π θ Sπθ </math>Sπθ 是策略熵(鼓励探索)。
- PPO目标函数(简化): <math xmlns="http://www.w3.org/1998/Math/MathML"> L C L I P + V F + S ( θ ) = E t [ m i n ( r t ( θ ) A t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) − c 1 L t V F ( θ ) + c 2 S π θ ] LCLIP+VF+S(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)−c1LtVF(θ)+c2Sπθ] </math>LCLIP+VF+S(θ)=Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)−c1LtVF(θ)+c2Sπθ]
-
DPO (Direct Preference Optimization):
-
核心思想: 直接利用人类偏好数据 (x,yw,yl) (yw 是偏好回答,yl 是非偏好回答)来优化语言模型,而无需显式训练一个奖励模型,也避免了复杂的强化学习过程。它通过一个简单的分类损失函数,直接最大化模型生成"选择的回答"相对于"拒绝的回答"的概率。
-
损失函数: <math xmlns="http://www.w3.org/1998/Math/MathML"> L D P O ( π θ ; π r e f ) = − E ( x , y w , y l ) ∼ D [ l o g σ ( β l o g π r e f ( y w ∣ x ) π θ ( y w ∣ x ) − β l o g π r e f ( y l ∣ x ) π θ ( y l ∣ x ) ) ] LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))] </math>LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))] 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> π θ πθ </math>πθ 是要优化的策略(LLM), <math xmlns="http://www.w3.org/1998/Math/MathML"> π r e f πref </math>πref 是参考策略(通常是SFT模型), <math xmlns="http://www.w3.org/1998/Math/MathML"> β β </math>β 是一个超参数,控制对参考策略的偏离程度。
-
优势: 流程更简单,训练更稳定,通常需要更少的计算资源。
-
劣势: 可能不如RLHF在探索和优化复杂偏好方面灵活;对偏好数据的质量和形式可能更敏感。
-
DPO与RLHF关系图示:
graph TD subgraph "RLHF" RLHF_A["SFT Model"] --> RLHF_B["Preference Data"]; RLHF_B --> RLHF_C["Train Reward Model (RM)"]; RLHF_A --> RLHF_D{"RL (PPO) Fine-tuning"}; RLHF_C -- "Reward Signal" --> RLHF_D; RLHF_D --> RLHF_E["Aligned LLM"]; end subgraph "DPO" DPO_A["SFT Model (as Reference π_ref)"] --> DPO_B["Preference Data"]; DPO_B --> DPO_C{"Direct Optimization (Loss Function)"}; DPO_A -- "Initial Policy π_θ" --> DPO_C; DPO_C --> DPO_D["Aligned LLM"]; end
-
-
-
-
参数高效微调: LoRA、QLoRA的原理,以及在实际项目中如何选择和应用。
- 参考答案要点:
- LoRA (Low-Rank Adaptation): 在预训练模型的权重矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> W 0 ∈ R d × k W0∈Rd×k </math>W0∈Rd×k 旁边引入两个可训练的低秩矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> A ∈ R r × k A∈Rr×k </math>A∈Rr×k 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> B ∈ R d × r B∈Rd×r </math>B∈Rd×r (其中秩 <math xmlns="http://www.w3.org/1998/Math/MathML"> r ≪ m i n ( d , k ) r≪min(d,k) </math>r≪min(d,k)),微调时只更新 <math xmlns="http://www.w3.org/1998/Math/MathML"> A A </math>A 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> B B </math>B 的参数,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> W 0 W0 </math>W0 保持不变。模型的前向传播中,对权重的修改为 <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ W = B A ΔW=BA </math>ΔW=BA。因此,更新后的权重为 <math xmlns="http://www.w3.org/1998/Math/MathML"> W = W 0 + B A W=W0+BA </math>W=W0+BA。大大减少了需要训练的参数量。
- QLoRA: LoRA的进一步优化。
- 基座模型量化: 将预训练模型权重 W0 量化到4-bit(如使用NF4 - NormalFloat4数据类型,一种对正态分布数据信息最优的4-bit量化方法)。
- LoRA模块: 在量化后的 W0 之上应用LoRA,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ W = B A ΔW=BA </math>ΔW=BA 中的 A 和 B 依然以较高精度(如16-bit BFloat16)进行训练和存储。
- 双重量化 (Double Quantization): 对第一步量化产生的量化常数(quantization constants)再次进行量化,进一步节省显存。
- Paged Optimizers: 利用NVIDIA统一内存特性,在GPU显存不足时,将优化器状态(如Adam的动量和方差)分页到CPU内存,使得大模型微调成为可能。
- 选择与应用: 根据可用资源(显存、算力)、模型大小、对性能的要求来选择。QLoRA能用更少资源微调更大模型,但可能略有性能损失。LoRA的秩(rank, r)和alpha(缩放因子, <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ W ΔW </math>ΔW 通常乘以 <math xmlns="http://www.w3.org/1998/Math/MathML"> α / r α/r </math>α/r)是重要超参,影响微调效果和参数量。
- 参考答案要点:
-
-
Prompt Engineering: 如何设计高效、鲁棒的指令?有哪些关键原则和常用技巧?能否举例说明如何通过迭代优化Prompt提升模型输出质量?
-
参考答案要点:
-
关键原则: 清晰明确(避免歧义)、提供充足上下文(Context)、赋予角色(Persona)、明确输出格式、逐步引导(Decomposition)。
-
常用技巧: Zero-shot, Few-shot (提供示例), Chain-of-Thought (引导模型输出思考步骤), 使用分隔符区分指令和内容, 指定长度/风格/语气, 负向指令(谨慎使用)。
-
迭代优化:
graph TD A["1. 定义任务与初始Prompt"] --> B["2. 构建小批量高质量评估集 (Input-Output Pairs)"]; B --> C["3. 模型生成与评估 (人工/自动指标)"]; C -- "分析Bad Cases" --> D{"4. 诊断问题 (指令模糊? 上下文不足? 格式错误?)"}; D --> E["5. 修改Prompt (调整措辞/结构/示例/参数)"]; E --> C; C -- "达到预期效果" --> F["6. 最终Prompt"];例如,在信息抽取任务中,最初Prompt可能只要求抽取实体,效果不佳后,可以增加对实体类型的明确定义、提供抽取示例、并要求以特定JSON格式输出,从而提升准确率和可用性。
-
-
2. AI智能体 (AI Agent) 设计与开发:
-
Agent框架: 对ReAct、AutoGPT等框架的理解和应用经验。
-
参考答案要点:
-
ReAct (Reason+Act): LLM交替生成思考(Thought)和行动(Action)。思考用于任务分解、策略制定、从过去的行动中学习;行动则是调用工具或与环境交互。通过这种Thought-Action-Observation循环实现复杂任务。
graph TD Start["User Request"] --> A{"LLM (ReAct Prompt)"}; A -- "Generate" --> B["Thought 1: Plan/Analyze Current State"]; B --> C["Action 1: Call Tool_X with params_Y"]; C -- "Execute Tool" --> D["Observation 1: Tool_X Result (or Error)"]; D -- "Append to History/Scratchpad" --> A; A -- "Generate (if task not done)" --> E["Thought 2: Re-evaluate based on Observation 1 ..."]; A -- "Generate (if task done)" --> End["Final Answer to User"]; -
AutoGPT: 更自主的Agent,尝试自我设定目标、规划任务、执行并从结果中学习,通常包含任务队列、短期/长期记忆模块、工具集、自我反思和批评机制。
-
应用经验: 能够描述在项目中如何使用这些框架,遇到了哪些问题(如幻局导致错误规划、陷入循环、工具调用失败处理、token消耗过大),以及如何解决的(如优化Prompt引导、限制思考步数、设计更鲁棒的工具错误处理、引入人工反馈、记忆模块优化)。
-
-
-
多轮对话管理: 如何处理意图识别、澄清式交互、状态跟踪和上下文维护?特别是在长对话或复杂任务场景下。
-
参考答案要点:
-
意图识别: 基于LLM的Zero-shot/Few-shot分类,或微调专门的意图识别模型。复杂场景下可能需要多标签意图或分层意图。
-
澄清式交互: 设计策略让Agent在检测到信息不足或指令模糊时主动提问。例如,当槽位未填满或存在歧义时,生成澄清问题。
-
状态跟踪 (Dialogue State Tracking, DST): 维护一个结构化表示(如JSON对象)来存储对话历史中的关键信息(如用户画像、已确认的槽位、任务进度、历史工具调用结果)。
graph TD A["User Utterance (t)"] --> B{"NLU Module (Intent & Slot Filling)"}; B --> C["Dialogue State (t-1)"]; C --> D{"DST Update Logic"}; B --> D; D --> E["Dialogue State (t)"]; E --> F{"Policy Network / LLM for Response Generation"}; -
上下文维护: LLM的上下文窗口有限。策略包括:
- 滑动窗口: 保留最近N轮对话。
- 摘要: 对较早的对话内容进行摘要(可用另一个LLM完成)。
- 向量记忆 (RAG-like): 将对话历史分块嵌入并存入向量数据库,需要时检索相关历史片段。
- 结构化记忆: 将重要信息存入DST,只将DST和当前轮次对话传入LLM。
-
-
-
工具调用 (Function Calling / Tool Use): 如何设计和实现Agent与外部API、数据库、私有知识库的集成?如何保证调用的可靠性和安全性?
-
参考答案要点:
-
设计与实现(LLM驱动的工具调用流程):
graph TD A["User Request / Current Task"] --> B{"LLM with Tool Descriptions"}; B -- "Decide to use a tool" --> C["LLM Generates Tool Name & Arguments (e.g., JSON)"]; C --> D{"Argument Validation & Security Check"}; D -- "Valid" --> E["Tool Executor"]; E -- "Call External API / DB / Function" --> F["External System"]; F -- "Result / Error" --> E; E --> G["Format Tool Output"]; G --> B; B -- "Decide task is complete or no tool needed" --> H["LLM Generates Final Response"];- 工具定义/Schema: 为每个工具提供清晰的描述(JSON Schema或类似格式),包括名称、功能描述、输入参数(名称、类型、是否必需、描述)、输出格式描述。
- LLM选择与参数生成: LLM根据任务需求和工具描述,选择合适的工具并生成调用参数(通常是JSON对象)。
- Agent执行器: 解析LLM生成的工具调用请求,实际执行API调用或函数执行。
- 结果返回: 将工具执行结果(成功或失败信息)返回给LLM,供其进行下一步思考或生成最终答复。
-
可靠性: 输入参数校验、API调用超时与重试机制、API错误码解析与标准化、工具执行状态监控。
-
安全性: API密钥的安管管理(如Vault)、输入参数清洗(防止注入攻击)、对工具的访问权限控制(RBAC/ABAC)、限制Agent可调用的高风险工具、对LLM生成的代码或参数进行沙箱执行或严格审查。
-
-
3. 专家模型与领域适应:
-
如何针对特定领域(如金融、法律、医疗)进行专家模型微调?如何有效地注入领域知识图谱或行业规则?
-
参考答案要点:
-
专家模型微调(领域自适应流程):
graph TD A["通用预训练LLM"] --> B["1. 领域数据收集 (文本, 指令, KG, 规则)"]; B --> C["2. 数据预处理与清洗"]; C --> D{"3. 继续预训练 (Domain-Adaptive Pretraining, 可选)"}; D -- "在领域文本上继续无监督学习" --> E; A -- "直接进行SFT" --> E; E["4. 监督微调 (SFT) on 领域指令数据"]; E --> F["5. 对齐微调 (RLHF/DPO, 可选) on 领域偏好数据"]; F --> G["领域专家LLM"]; -
注入知识图谱:
- 数据增强: 将KG中的三元组转换为自然语言描述或问答对,加入SFT数据。
- RAG: 将KG作为外部知识源,在推理时检索相关知识增强LLM输入。
- 模型结构修改(较复杂): 如显式地将图嵌入融入模型(如ERNIE)。
-
注入行业规则:
- Prompt约束: 在指令中明确告知模型需要遵守的规则。
- 后处理校验: 对模型输出进行规则校验和修正。
- RLHF/DPO: 在偏好数据中体现对规则遵守的偏好。
- 规则引擎工具: 将规则逻辑化为Agent可调用的工具。
-
-
-
小样本学习、持续学习在LLM领域适应中的应用场景和挑战。
- 参考答案要点:
- 小样本学习 (Few-shot Learning): 当领域数据稀疏时,通过Prompt中提供少量示例让模型快速适应。挑战在于示例的选择和Prompt设计。
- 持续学习 (Continual Learning): 模型在不断接收新数据和新任务时,能够学习新知识而不遗忘旧知识(灾难性遗忘)。方法包括弹性权重巩固 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( E W C : L ( θ ) = L B ( θ ) + ∑ i 2 λ F i ( θ i − θ A , i ∗ ) 2 (EWC: L(θ)=LB(θ)+∑i2λFi(θi−θA,i∗)2 </math>(EWC:L(θ)=LB(θ)+∑i2λFi(θi−θA,i∗)2,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> F i Fi </math>Fi是Fisher信息矩阵对角线元素)、经验回放等。挑战在于平衡新旧知识的学习和计算开销。
- 参考答案要点:
4. 数据与工程能力:
-
Text-to-SQL: 基于自然语言生成多轮数据库复杂查询的技术路径、挑战以及如何处理模糊查询和多轮澄清。
- 参考答案要点:
- 技术路径(Spider等数据集上的典型模型思路):
- Schema Encoding: 将数据库Schema(表名、列名、类型、主外键关系)编码为向量表示。
- Question Encoding: 将自然语言问题编码。
- Schema Linking: 识别问题中提及的列和表。
- SQL Component Prediction: 分别预测SELECT的列和聚合函数,FROM的表,WHERE的条件列、操作符和值,GROUP BY的列,ORDER BY的列和方向等。
- SQL Generation/Decoding: 将预测的组件组合成合法的SQL查询。 LLM可以直接进行端到端生成,但通常也需要有效的Schema表示和Prompt。
- 挑战: Schema的复杂性与多样性、自然语言的歧义性、隐式知识、大型数据库的性能考量、SQL的正确性与安全性。
- 模糊查询处理: LLM进行意图推断,利用数据库的全文检索或模糊匹配功能,或通过澄清式对话引导用户明确查询条件(如 "您是指XX表的YY列吗?")。
- 多轮澄清: Agent记录对话历史和已确认的查询片段,逐步构建SQL查询。当用户提供新信息或修正时,LLM基于当前上下文更新SQL。
- 技术路径(Spider等数据集上的典型模型思路):
- 参考答案要点:
-
MoE (Mixture of Experts): 架构原理、训练阶段的专家负载均衡实现(如辅助损失函数、专家容量限制等具体机制和公式),以及推理优化策略。
-
参考答案要点:
-
架构原理与推理流程:
graph TD Input["Token Representation (x)"] --> Gating["Gating Network G(x)"]; Gating -- "Routing Weights/Probabilities" --> Router{"Router (Select Top-k Experts)"}; subgraph Experts direction LR E1["Expert 1 (E_1)"]; E2["Expert 2 (E_2)"]; EN["... Expert N (E_N)"]; end Router -- "Route token x to selected expert(s)" --> E1; Router -- "Route token x to selected expert(s)" --> E2; Input -- "Pass token x to selected expert(s)" --> E1; Input -- "Pass token x to selected expert(s)" --> E2; E1 -- "Output E_1(x)" --> Combine; E2 -- "Output E_2(x)" --> Combine; Combine["Combine Expert Outputs (Weighted Sum)"]; Combine --> Output["Final Token Representation (y)"];门控网络 G(x) 根据输入 x 计算每个专家的权重或选择概率,通常只激活Top-k个专家(如k=1或2)。输出是所选专家输出的加权和(或直接拼接)。 y=∑i∈TopK(G(x))G(x)i⋅Ei(x)
-
负载均衡(训练阶段):
- 辅助损失函数 (Load Balancing Loss): 确保所有专家得到充分利用。一种常见的形式 (如Switch Transformer): <math xmlns="http://www.w3.org/1998/Math/MathML"> L a u x = α ⋅ N ⋅ ∑ i = 1 N f i ⋅ P i Laux=α⋅N⋅∑i=1Nfi⋅Pi </math>Laux=α⋅N⋅∑i=1Nfi⋅Pi 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>N 是专家数, <math xmlns="http://www.w3.org/1998/Math/MathML"> T T </math>T 是批次中的token总数, <math xmlns="http://www.w3.org/1998/Math/MathML"> f i = T 1 ∑ x ∈ B a t c h I ( t o k e n x i s r o u t e d t o e x p e r t i ) fi=T1∑x∈BatchI(token x is routed to expert i) </math>fi=T1∑x∈BatchI(tokenxisroutedtoexperti) 是路由到专家 i 的token比例, <math xmlns="http://www.w3.org/1998/Math/MathML"> P i = ∑ x ∈ B a t c h I ( t o k e n x i s r o u t e d t o e x p e r t i ) ∑ x r o u t e d t o i g ( x ) i Pi=∑x∈BatchI(token x is routed to expert i)∑x routed to ig(x)i </math>Pi=∑x∈BatchI(tokenxisroutedtoexperti)∑xroutedtoig(x)i 是门控网络对路由到专家 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 的token所分配的平均概率( <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( x ) i g(x)i </math>g(x)i 是门控网络输出的专家 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 的概率)。 <math xmlns="http://www.w3.org/1998/Math/MathML"> α α </math>α 是损失权重。
- 专家容量限制 (Expert Capacity): 每个专家在一个批次中能处理的token数量上限 CE: CE=K⋅⌈NT⌉ 容量因子 (K, capacity_factor) 通常 > 1。超出容量的token会被丢弃,不参与专家计算。
-
推理优化: 优化门控网络计算,专家并行化,缓存常用专家,针对特定硬件的算子融合。
-
-
二、项目经验深度剖析
面试的重头戏通常是对过往项目经验的深入挖掘。候选人应能清晰、量化地回答,突出技术深度和解决问题的能力。
(以下针对特定项目类型的回答要点,请候选人结合自身实际项目展开)
1. 企业级AI智能运营助手类项目:
- "更短计划、更少token"的ReAct设计模式:
- 回答要点:
- 实现方式: 可能包括:1. Prompt优化: 引导LLM生成更简洁、直接的思考链,避免不必要的反思或重复规划。2. 规划与执行分离: 先用一个轻量级LLM或规则系统做初步规划,生成高级步骤,再让强大的LLM执行具体步骤。3. 限制思考深度/长度: 设定最大思考步骤或token数。4. 上下文压缩: 对历史Thought-Action-Observation进行摘要,减少传入LLM的上下文。5. 工具描述优化: 使工具描述更精准,LLM能更快选择正确工具和参数。
- 量化效果: 应提供具体指标,如平均任务完成步数减少X%,平均每轮token消耗降低Y%,任务成功率提升Z%。
- 回答要点:
4. 智能文档处理与多模态信息抽取平台类项目 (涉及OCR):
- Structure Output模块与先进分块策略:
- 文档主题识别与完整主题描述生成:
- 回答要点: 可能使用的方法:1. 无监督方法: LDA (P(words∣topics),P(topics∣documents))、NMF等传统主题模型;或基于句子/段落嵌入的聚类(如KMeans + TF-IDF加权)。2. 有监督/半监督方法: 若有标注数据,可训练文本分类模型识别预定义主题。3. LLM直接生成: 使用LLM进行Zero-shot或Few-shot的主题识别和摘要生成。
- 完整主题描述: 基于识别出的主题关键词或代表性文本,再利用LLM生成该主题的连贯描述或摘要。
- 基于主题的分块策略替代滑动窗口:
- 回答要点: 1. 首先进行文档结构分析(章节、标题)和主题识别。2. 以识别出的语义连贯的章节或主题块作为基本分块单元,而不是固定大小的滑动窗口。3. 对于过长的主题块,可再细分为子主题或使用LLM进行摘要后作为一块。4. 关键是保证每个块内部的语义完整性和上下文连贯性,同时块间有清晰的边界。
- 保障RAG信息完整性与上下文连贯性:
- 回答要点: 语义分块使得检索到的上下文更集中于某一特定主题或论点,减少了无关信息的干扰。生成模型能基于更连贯、完整的上下文进行回答,从而提升RAG的准确性和相关性。
- 深度结构化数据与精准度提升:
- 回答要点: 通过主题识别和语义分块,可以构建包含层级结构(文档-主题-段落-实体)的JSON输出。例如,发票中的金额、税额等字段,由于其通常出现在特定的上下文区域(如金额栏、总计栏),在语义分块和结构化识别的辅助下,模型能更准确地定位和抽取这些字段,减少因版面复杂或OCR错误导致的误判。
- 文档主题识别与完整主题描述生成:
三、总结与个人感悟
面试是一个双向选择的过程。除了技术能力的考察,面试官也会关注候选人的学习能力、逻辑思维、解决问题的思路、沟通协作能力以及与团队文化的匹配度。
- 持续学习: 大模型领域技术发展日新月异,保持好奇心和学习热情至关重要。
- 动手实践: 理论结合实践,多动手复现论文、参与开源项目、打磨个人项目,才能真正理解技术细节。
- 深度思考: 对做过的项目要有深度思考和总结,能够清晰地阐述项目的价值、难点和自己的贡献。
- 沟通表达: 清晰、准确、有条理地表达自己的想法非常重要。
希望以上经验能给大家带来一些启发。祝各位面试顺利,拿到心仪的Offer!大模型与AI智能体方向面试经验分享 (含答案要点V3)
最近参加了几场大模型算法工程师/AI智能体研发岗位的面试,整体感觉行业对候选人的要求越来越高,不仅需要扎实的理论基础,更看重实际项目经验和工程落地能力。以下是我在面试中遇到的一些常见问题、考察点及其参考答案要点,希望能对大家有所帮助。
一、 核心技术与综合能力考察
面试官通常会从候选人的专业技能表入手,对 заявленные 技术点进行深入提问。
1. 大语言模型 (LLM) 基础与微调:
-
模型架构与原理: 会被问到对主流LLM架构(如Transformer、GPT系列、Llama系列)的理解,特别是其核心组件(如Self-Attention)的工作原理和优势。预训练的目标和方法也是常考点。
-
参考答案要点:
-
Transformer架构: Encoder-Decoder结构(或仅Decoder),多头自注意力机制(Multi-Head Self-Attention)能够捕捉序列内长距离依赖,并行计算能力强。位置编码(Positional Encoding)解决序列顺序问题。前馈神经网络(Feed-Forward Networks)。
graph TD A["输入序列 (Tokens)"] --> B("Token Embeddings + Positional Embeddings"); B --> C{"N x Encoder / Decoder Layers"}; subgraph C direction LR C1["Multi-Head Self-Attention"] --> C2["Add & LayerNorm"]; C2 --> C3["Feed Forward Network"]; C3 --> C4["Add & LayerNorm"]; end C --> D["Output Layer (e.g., Linear + Softmax for classification/generation)"]; D --> E["输出序列/概率分布"]; -
Self-Attention: 通过计算Query (Q), Key (K), Value (V) 之间的点积相似度来动态分配注意力权重,使模型能够关注输入序列中不同部分的相关性。
-
公式: Attention(Q,K,V)=softmax(dkQKT)V
- dk 是 Key 向量的维度,用于缩放,防止点积结果过大导致softmax梯度过小。
-
多头注意力 (Multi-Head Attention): 将Q, K, V分别线性投影到多个低维空间("头"),在每个头中并行计算Attention,然后将各头的结果拼接并再次线性投影。 MultiHead(Q,K,V)=Concat(head1,...,headh)WO where headi=Attention(QWiQ,KWiK,VWiV) WiQ∈Rdmodel×dk, WiK∈Rdmodel×dk, WiV∈Rdmodel×dv, WO∈Rhdv×dmodel
-
概念流程图:
graph LR Input["输入序列 (X)"] --> ProjQ["Linear Projection to Q"]; Input --> ProjK["Linear Projection to K"]; Input --> ProjV["Linear Projection to V"]; ProjQ -- Q --> ScaleDotProduct["Scaled Dot-Product Attention"]; ProjK -- K --> ScaleDotProduct; ProjV -- V --> ScaleDotProduct; ScaleDotProduct --> WeightedSum["Weighted Sum (Context Vector Z)"];
-
-
预训练目标: 如掩码语言模型(Masked Language Model, MLM,如BERT,损失函数通常是交叉熵损失 ∑−logP(xi∣X∖i))、下一词预测(Next Token Prediction, NTP,如GPT,损失函数也是交叉熵损失 ∑−logP(xi∣x<i))。通过大规模无标签文本学习通用的语言表示。
-
GPT系列与Llama系列: 通常是Decoder-only架构,擅长文本生成。Llama的改进点(如RMSNorm替代LayerNorm以提升稳定性和效率, SwiGLU激活函数替代ReLU/GELU以提升性能,RoPE旋转位置编码替代绝对/相对位置编码以更好地处理长序列和相对位置信息)也可能被问到。
-
-
-
微调技术:
-
SFT (监督微调): 如何构建高质量的指令数据集?数据清洗、多样性、均衡性如何保证?数据配比对模型效果有何影响?
-
参考答案要点:
-
高质量指令数据集: 清晰的指令、准确的回答、覆盖多样的任务类型和领域。来源可以包括人工编写、开源数据集筛选、用户数据(脱敏后)、利用强模型生成合成数据(如Self-Instruct)。
-
SFT数据处理流程:
graph TD A["原始数据收集 (多来源)"] --> B["数据清洗与去重"]; B --> C["格式转换 (统一为Prompt-Completion格式)"]; C --> D["质量评估与筛选 (人工/自动)"]; D --> E["多样性与均衡性分析"]; E -- "欠采样/过采样/数据增强" --> F["最终SFT数据集"]; F --> G["模型微调 (计算交叉熵损失)"]; -
数据清洗: 去除低质量(如不连贯、事实错误)、重复、有害内容(如偏见、歧视)。格式规范化,去除无关字符。使用启发式规则、分类器或人工审核。
-
多样性与均衡性:
- 指令多样性: 覆盖不同任务类型(问答、摘要、翻译、代码生成、创作等)、不同领域、不同提问方式(疑问句、祈使句)、不同复杂度。
- 回答多样性: 长度、风格、详细程度。
- 均衡性: 避免数据集中某些类别或主题占比过高,导致模型偏向。可以使用欠采样、过采样或数据增强技术(如回译、同义词替换)。
-
数据配比: 不同来源、不同质量、不同任务类型的数据应有合理的比例。例如,高质量人工标注数据可以占比较小但权重较高,通用知识与领域知识的配比也需考量。过多低质量数据或不均衡的配比会影响模型泛化能力和特定任务表现。需要通过实验迭代调整。
-
-
-
对齐技术: RLHF的流程是怎样的?DPO的核心思想是什么,相比RLHF有何优劣?(可能会追问其他偏好优化算法,如GRPO、GAPO,但通常理解前两者即可)。
-
参考答案要点:
-
RLHF (Reinforcement Learning from Human Feedback):
graph TD subgraph "阶段1: 监督微调 (SFT)" SFT_A["预训练LLM"] --> SFT_B["指令数据集"]; SFT_B --> SFT_C["SFT模型 (π_SFT)"]; end subgraph "阶段2: 奖励模型训练 (RM)" RM_A["SFT模型 (π_SFT)"] --> RM_B["为Prompt生成多个回答"]; RM_B --> RM_C["人类标注者对回答进行排序/打分"]; RM_C --> RM_D["偏好数据集"]; RM_D --> RM_E["训练奖励模型 (RM, r_φ)"]; end subgraph "阶段3: 强化学习微调 (RL)" RL_A["SFT模型 (π_SFT) 作为初始策略"] --> RL_B{"RL算法 (如PPO)"}; RM_E -- "奖励信号" --> RL_B; RL_B -- "生成回答" --> RL_C["语言模型 (π_θ^RL)"]; RL_C -- "与SFT模型计算KL散度 (约束)" --> RL_B; RL_B --> RL_D["对齐后的LLM"]; end SFT_C --> RM_A; SFT_C --> RL_A;- SFT阶段: (可选但推荐)初始模型监督微调,使其具备基础的指令遵循能力。
- 奖励模型训练 (Reward Model Training): 从SFT模型或基础模型生成多个回答,收集人类对这些回答的偏好排序数据(如A优于B,或打分),训练一个奖励模型来学习和预测人类偏好。RM的输入是(prompt, response),输出是一个标量奖励值。损失函数通常基于Bradley-Terry模型,最大化偏好回答的奖励高于非偏好回答的奖励的概率: L(ϕ)=−E(x,yw,yl)∼D[log(σ(rϕ(x,yw)−rϕ(x,yl)))]
- 强化学习微调 (RL Fine-tuning): 使用PPO (Proximal Policy Optimization) 等强化学习算法,将语言模型视为策略(Policy),奖励模型提供的奖励作为环境反馈,进一步微调语言模型,使其生成更符合人类偏好的内容。通常会加入KL散度惩罚项,防止RL策略偏离SFT模型太远。
- PPO目标函数(简化): LCLIP+VF+S(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)−c1LtVF(θ)+c2Sπθ]
- rt(θ)=πθold(at∣st)πθ(at∣st) 是概率比率。
- A^t 是优势函数估计 (Advantage estimate)。
- LVF 是价值函数损失 (Value function loss)。
- Sπθ 是策略熵(鼓励探索)。
- PPO目标函数(简化): LCLIP+VF+S(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)−c1LtVF(θ)+c2Sπθ]
-
DPO (Direct Preference Optimization):
-
核心思想: 直接利用人类偏好数据 (x,yw,yl) (yw 是偏好回答,yl 是非偏好回答)来优化语言模型,而无需显式训练一个奖励模型,也避免了复杂的强化学习过程。它通过一个简单的分类损失函数,直接最大化模型生成"选择的回答"相对于"拒绝的回答"的概率。
-
损失函数: LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))] 其中 πθ 是要优化的策略(LLM),πref 是参考策略(通常是SFT模型),β 是一个超参数,控制对参考策略的偏离程度。
-
优势: 流程更简单,训练更稳定,通常需要更少的计算资源。
-
劣势: 可能不如RLHF在探索和优化复杂偏好方面灵活;对偏好数据的质量和形式可能更敏感。
-
DPO与RLHF关系图示:
graph TD subgraph "RLHF" RLHF_A["SFT Model"] --> RLHF_B["Preference Data"]; RLHF_B --> RLHF_C["Train Reward Model (RM)"]; RLHF_A --> RLHF_D{"RL (PPO) Fine-tuning"}; RLHF_C -- "Reward Signal" --> RLHF_D; RLHF_D --> RLHF_E["Aligned LLM"]; end subgraph "DPO" DPO_A["SFT Model (as Reference π_ref)"] --> DPO_B["Preference Data"]; DPO_B --> DPO_C{"Direct Optimization (Loss Function)"}; DPO_A -- "Initial Policy π_θ" --> DPO_C; DPO_C --> DPO_D["Aligned LLM"]; end
-
-
-
-
参数高效微调: LoRA、QLoRA的原理,以及在实际项目中如何选择和应用。
- 参考答案要点:
- LoRA (Low-Rank Adaptation): 在预训练模型的权重矩阵 W0∈Rd×k 旁边引入两个可训练的低秩矩阵 A∈Rr×k 和 B∈Rd×r (其中秩 r≪min(d,k)),微调时只更新 A 和 B 的参数,而 W0 保持不变。模型的前向传播中,对权重的修改为 ΔW=BA。因此,更新后的权重为 W=W0+BA。大大减少了需要训练的参数量。
- QLoRA: LoRA的进一步优化。
- 基座模型量化: 将预训练模型权重 W0 量化到4-bit(如使用NF4 - NormalFloat4数据类型,一种对正态分布数据信息最优的4-bit量化方法)。
- LoRA模块: 在量化后的 W0 之上应用LoRA,即 ΔW=BA 中的 A 和 B 依然以较高精度(如16-bit BFloat16)进行训练和存储。
- 双重量化 (Double Quantization): 对第一步量化产生的量化常数(quantization constants)再次进行量化,进一步节省显存。
- Paged Optimizers: 利用NVIDIA统一内存特性,在GPU显存不足时,将优化器状态(如Adam的动量和方差)分页到CPU内存,使得大模型微调成为可能。
- 选择与应用: 根据可用资源(显存、算力)、模型大小、对性能的要求来选择。QLoRA能用更少资源微调更大模型,但可能略有性能损失。LoRA的秩(rank, r)和alpha(缩放因子,ΔW 通常乘以 α/r)是重要超参,影响微调效果和参数量。
- 参考答案要点:
-
-
Prompt Engineering: 如何设计高效、鲁棒的指令?有哪些关键原则和常用技巧?能否举例说明如何通过迭代优化Prompt提升模型输出质量?
-
参考答案要点:
-
关键原则: 清晰明确(避免歧义)、提供充足上下文(Context)、赋予角色(Persona)、明确输出格式、逐步引导(Decomposition)。
-
常用技巧: Zero-shot, Few-shot (提供示例), Chain-of-Thought (引导模型输出思考步骤), 使用分隔符区分指令和内容, 指定长度/风格/语气, 负向指令(谨慎使用)。
-
迭代优化:
graph TD A["1. 定义任务与初始Prompt"] --> B["2. 构建小批量高质量评估集 (Input-Output Pairs)"]; B --> C["3. 模型生成与评估 (人工/自动指标)"]; C -- "分析Bad Cases" --> D{"4. 诊断问题 (指令模糊? 上下文不足? 格式错误?)"}; D --> E["5. 修改Prompt (调整措辞/结构/示例/参数)"]; E --> C; C -- "达到预期效果" --> F["6. 最终Prompt"];例如,在信息抽取任务中,最初Prompt可能只要求抽取实体,效果不佳后,可以增加对实体类型的明确定义、提供抽取示例、并要求以特定JSON格式输出,从而提升准确率和可用性。
-
-
2. AI智能体 (AI Agent) 设计与开发:
-
Agent框架: 对ReAct、AutoGPT等框架的理解和应用经验。
-
参考答案要点:
-
ReAct (Reason+Act): LLM交替生成思考(Thought)和行动(Action)。思考用于任务分解、策略制定、从过去的行动中学习;行动则是调用工具或与环境交互。通过这种Thought-Action-Observation循环实现复杂任务。
graph TD Start["User Request"] --> A{"LLM (ReAct Prompt)"}; A -- "Generate" --> B["Thought 1: Plan/Analyze Current State"]; B --> C["Action 1: Call Tool_X with params_Y"]; C -- "Execute Tool" --> D["Observation 1: Tool_X Result (or Error)"]; D -- "Append to History/Scratchpad" --> A; A -- "Generate (if task not done)" --> E["Thought 2: Re-evaluate based on Observation 1 ..."]; A -- "Generate (if task done)" --> End["Final Answer to User"]; -
AutoGPT: 更自主的Agent,尝试自我设定目标、规划任务、执行并从结果中学习,通常包含任务队列、短期/长期记忆模块、工具集、自我反思和批评机制。
-
应用经验: 能够描述在项目中如何使用这些框架,遇到了哪些问题(如幻局导致错误规划、陷入循环、工具调用失败处理、token消耗过大),以及如何解决的(如优化Prompt引导、限制思考步数、设计更鲁棒的工具错误处理、引入人工反馈、记忆模块优化)。
-
-
-
多轮对话管理: 如何处理意图识别、澄清式交互、状态跟踪和上下文维护?特别是在长对话或复杂任务场景下。
-
参考答案要点:
-
意图识别: 基于LLM的Zero-shot/Few-shot分类,或微调专门的意图识别模型。复杂场景下可能需要多标签意图或分层意图。
-
澄清式交互: 设计策略让Agent在检测到信息不足或指令模糊时主动提问。例如,当槽位未填满或存在歧义时,生成澄清问题。
-
状态跟踪 (Dialogue State Tracking, DST): 维护一个结构化表示(如JSON对象)来存储对话历史中的关键信息(如用户画像、已确认的槽位、任务进度、历史工具调用结果)。
graph TD A["User Utterance (t)"] --> B{"NLU Module (Intent & Slot Filling)"}; B --> C["Dialogue State (t-1)"]; C --> D{"DST Update Logic"}; B --> D; D --> E["Dialogue State (t)"]; E --> F{"Policy Network / LLM for Response Generation"}; -
上下文维护: LLM的上下文窗口有限。策略包括:
- 滑动窗口: 保留最近N轮对话。
- 摘要: 对较早的对话内容进行摘要(可用另一个LLM完成)。
- 向量记忆 (RAG-like): 将对话历史分块嵌入并存入向量数据库,需要时检索相关历史片段。
- 结构化记忆: 将重要信息存入DST,只将DST和当前轮次对话传入LLM。
-
-
-
工具调用 (Function Calling / Tool Use): 如何设计和实现Agent与外部API、数据库、私有知识库的集成?如何保证调用的可靠性和安全性?
-
参考答案要点:
-
设计与实现(LLM驱动的工具调用流程):
graph TD A["User Request / Current Task"] --> B{"LLM with Tool Descriptions"}; B -- "Decide to use a tool" --> C["LLM Generates Tool Name & Arguments (e.g., JSON)"]; C --> D{"Argument Validation & Security Check"}; D -- "Valid" --> E["Tool Executor"]; E -- "Call External API / DB / Function" --> F["External System"]; F -- "Result / Error" --> E; E --> G["Format Tool Output"]; G --> B; B -- "Decide task is complete or no tool needed" --> H["LLM Generates Final Response"];- 工具定义/Schema: 为每个工具提供清晰的描述(JSON Schema或类似格式),包括名称、功能描述、输入参数(名称、类型、是否必需、描述)、输出格式描述。
- LLM选择与参数生成: LLM根据任务需求和工具描述,选择合适的工具并生成调用参数(通常是JSON对象)。
- Agent执行器: 解析LLM生成的工具调用请求,实际执行API调用或函数执行。
- 结果返回: 将工具执行结果(成功或失败信息)返回给LLM,供其进行下一步思考或生成最终答复。
-
可靠性: 输入参数校验、API调用超时与重试机制、API错误码解析与标准化、工具执行状态监控。
-
安全性: API密钥的安管管理(如Vault)、输入参数清洗(防止注入攻击)、对工具的访问权限控制(RBAC/ABAC)、限制Agent可调用的高风险工具、对LLM生成的代码或参数进行沙箱执行或严格审查。
-
-
3. 专家模型与领域适应:
-
如何针对特定领域(如金融、法律、医疗)进行专家模型微调?如何有效地注入领域知识图谱或行业规则?
-
参考答案要点:
-
专家模型微调(领域自适应流程):
graph TD A["通用预训练LLM"] --> B["1. 领域数据收集 (文本, 指令, KG, 规则)"]; B --> C["2. 数据预处理与清洗"]; C --> D{"3. 继续预训练 (Domain-Adaptive Pretraining, 可选)"}; D -- "在领域文本上继续无监督学习" --> E; A -- "直接进行SFT" --> E; E["4. 监督微调 (SFT) on 领域指令数据"]; E --> F["5. 对齐微调 (RLHF/DPO, 可选) on 领域偏好数据"]; F --> G["领域专家LLM"]; -
注入知识图谱:
- 数据增强: 将KG中的三元组转换为自然语言描述或问答对,加入SFT数据。
- RAG: 将KG作为外部知识源,在推理时检索相关知识增强LLM输入。
- 模型结构修改(较复杂): 如显式地将图嵌入融入模型(如ERNIE)。
-
注入行业规则:
- Prompt约束: 在指令中明确告知模型需要遵守的规则。
- 后处理校验: 对模型输出进行规则校验和修正。
- RLHF/DPO: 在偏好数据中体现对规则遵守的偏好。
- 规则引擎工具: 将规则逻辑化为Agent可调用的工具。
-
-
-
小样本学习、持续学习在LLM领域适应中的应用场景和挑战。
- 参考答案要点:
- 小样本学习 (Few-shot Learning): 当领域数据稀疏时,通过Prompt中提供少量示例让模型快速适应。挑战在于示例的选择和Prompt设计。
- 持续学习 (Continual Learning): 模型在不断接收新数据和新任务时,能够学习新知识而不遗忘旧知识(灾难性遗忘)。方法包括弹性权重巩固(EWC: L(θ)=LB(θ)+∑i2λFi(θi−θA,i∗)2,其中Fi是Fisher信息矩阵对角线元素)、经验回放等。挑战在于平衡新旧知识的学习和计算开销。
- 参考答案要点:
4. 数据与工程能力:
-
Text-to-SQL: 基于自然语言生成多轮数据库复杂查询的技术路径、挑战以及如何处理模糊查询和多轮澄清。
- 参考答案要点:
- 技术路径(Spider等数据集上的典型模型思路):
- Schema Encoding: 将数据库Schema(表名、列名、类型、主外键关系)编码为向量表示。
- Question Encoding: 将自然语言问题编码。
- Schema Linking: 识别问题中提及的列和表。
- SQL Component Prediction: 分别预测SELECT的列和聚合函数,FROM的表,WHERE的条件列、操作符和值,GROUP BY的列,ORDER BY的列和方向等。
- SQL Generation/Decoding: 将预测的组件组合成合法的SQL查询。 LLM可以直接进行端到端生成,但通常也需要有效的Schema表示和Prompt。
- 挑战: Schema的复杂性与多样性、自然语言的歧义性、隐式知识、大型数据库的性能考量、SQL的正确性与安全性。
- 模糊查询处理: LLM进行意图推断,利用数据库的全文检索或模糊匹配功能,或通过澄清式对话引导用户明确查询条件(如 "您是指XX表的YY列吗?")。
- 多轮澄清: Agent记录对话历史和已确认的查询片段,逐步构建SQL查询。当用户提供新信息或修正时,LLM基于当前上下文更新SQL。
- 技术路径(Spider等数据集上的典型模型思路):
- 参考答案要点:
-
MoE (Mixture of Experts): 架构原理、训练阶段的专家负载均衡实现(如辅助损失函数、专家容量限制等具体机制和公式),以及推理优化策略。
-
参考答案要点:
-
架构原理与推理流程:
graph TD Input["Token Representation (x)"] --> Gating["Gating Network G(x)"]; Gating -- "Routing Weights/Probabilities" --> Router{"Router (Select Top-k Experts)"}; subgraph Experts direction LR E1["Expert 1 (E_1)"]; E2["Expert 2 (E_2)"]; EN["... Expert N (E_N)"]; end Router -- "Route token x to selected expert(s)" --> E1; Router -- "Route token x to selected expert(s)" --> E2; Input -- "Pass token x to selected expert(s)" --> E1; Input -- "Pass token x to selected expert(s)" --> E2; E1 -- "Output E_1(x)" --> Combine; E2 -- "Output E_2(x)" --> Combine; Combine["Combine Expert Outputs (Weighted Sum)"]; Combine --> Output["Final Token Representation (y)"];门控网络 G(x) 根据输入 x 计算每个专家的权重或选择概率,通常只激活Top-k个专家(如k=1或2)。输出是所选专家输出的加权和(或直接拼接)。 y=∑i∈TopK(G(x))G(x)i⋅Ei(x)
-
负载均衡(训练阶段):
- 辅助损失函数 (Load Balancing Loss): 确保所有专家得到充分利用。一种常见的形式 (如Switch Transformer): <math xmlns="http://www.w3.org/1998/Math/MathML"> L a u x = α ⋅ N ⋅ ∑ i = 1 N f i ⋅ P i Laux=α⋅N⋅∑i=1Nfi⋅Pi </math>Laux=α⋅N⋅∑i=1Nfi⋅Pi 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>N 是专家数, T 是批次中的token总数, fi=T1∑x∈BatchI(token x is routed to expert i) 是路由到专家 i 的token比例, Pi=∑x∈BatchI(token x is routed to expert i)∑x routed to ig(x)i 是门控网络对路由到专家 i 的token所分配的平均概率(g(x)i 是门控网络输出的专家 i 的概率)。α 是损失权重。
- 专家容量限制 (Expert Capacity): 每个专家在一个批次中能处理的token数量上限 CE: CE=K⋅⌈NT⌉ 容量因子 (K, capacity_factor) 通常 > 1。超出容量的token会被丢弃,不参与专家计算。
-
推理优化: 优化门控网络计算,专家并行化,缓存常用专家,针对特定硬件的算子融合。
-
-
二、项目经验深度剖析
面试的重头戏通常是对过往项目经验的深入挖掘。候选人应能清晰、量化地回答,突出技术深度和解决问题的能力。
(以下针对特定项目类型的回答要点,请候选人结合自身实际项目展开)
1. 企业级AI智能运营助手类项目:
- "更短计划、更少token"的ReAct设计模式:
- 回答要点:
- 实现方式: 可能包括:1. Prompt优化: 引导LLM生成更简洁、直接的思考链,避免不必要的反思或重复规划。2. 规划与执行分离: 先用一个轻量级LLM或规则系统做初步规划,生成高级步骤,再让强大的LLM执行具体步骤。3. 限制思考深度/长度: 设定最大思考步骤或token数。4. 上下文压缩: 对历史Thought-Action-Observation进行摘要,减少传入LLM的上下文。5. 工具描述优化: 使工具描述更精准,LLM能更快选择正确工具和参数。
- 量化效果: 应提供具体指标,如平均任务完成步数减少X%,平均每轮token消耗降低Y%,任务成功率提升Z%。
- 回答要点:
4. 智能文档处理与多模态信息抽取平台类项目 (涉及OCR):
- Structure Output模块与先进分块策略:
- 文档主题识别与完整主题描述生成:
- 回答要点: 可能使用的方法:1. 无监督方法: LDA (P(words∣topics),P(topics∣documents))、NMF等传统主题模型;或基于句子/段落嵌入的聚类(如KMeans + TF-IDF加权)。2. 有监督/半监督方法: 若有标注数据,可训练文本分类模型识别预定义主题。3. LLM直接生成: 使用LLM进行Zero-shot或Few-shot的主题识别和摘要生成。
- 完整主题描述: 基于识别出的主题关键词或代表性文本,再利用LLM生成该主题的连贯描述或摘要。
- 基于主题的分块策略替代滑动窗口:
- 回答要点: 1. 首先进行文档结构分析(章节、标题)和主题识别。2. 以识别出的语义连贯的章节或主题块作为基本分块单元,而不是固定大小的滑动窗口。3. 对于过长的主题块,可再细分为子主题或使用LLM进行摘要后作为一块。4. 关键是保证每个块内部的语义完整性和上下文连贯性,同时块间有清晰的边界。
- 保障RAG信息完整性与上下文连贯性:
- 回答要点: 语义分块使得检索到的上下文更集中于某一特定主题或论点,减少了无关信息的干扰。生成模型能基于更连贯、完整的上下文进行回答,从而提升RAG的准确性和相关性。
- 深度结构化数据与精准度提升:
- 回答要点: 通过主题识别和语义分块,可以构建包含层级结构(文档-主题-段落-实体)的JSON输出。例如,发票中的金额、税额等字段,由于其通常出现在特定的上下文区域(如金额栏、总计栏),在语义分块和结构化识别的辅助下,模型能更准确地定位和抽取这些字段,减少因版面复杂或OCR错误导致的误判。
- 文档主题识别与完整主题描述生成:
三、总结与个人感悟
面试是一个双向选择的过程。除了技术能力的考察,面试官也会关注候选人的学习能力、逻辑思维、解决问题的思路、沟通协作能力以及与团队文化的匹配度。
- 持续学习: 大模型领域技术发展日新月异,保持好奇心和学习热情至关重要。
- 动手实践: 理论结合实践,多动手复现论文、参与开源项目、打磨个人项目,才能真正理解技术细节。
- 深度思考: 对做过的项目要有深度思考和总结,能够清晰地阐述项目的价值、难点和自己的贡献。
- 沟通表达: 清晰、准确、有条理地表达自己的想法非常重要。
希望以上经验能给大家带来一些启发。祝各位面试顺利,拿到心仪的Offer!