Skip to content

面试高频问题


一、基础原理类

1. Transformer 的自注意力机制是什么?为什么比 RNN 好?

自注意力让每个位置都能直接关注序列中所有其他位置,通过 Q/K/V 矩阵计算注意力权重 -> 比RNN好在并行计算、长距离依赖处理更好、可扩展性强 -> 理解 Transformer 的核心创新

2. GPT 是 Encoder 还是 Decoder?为什么?

GPT 是 Decoder-only 架构 -> 自回归方式逐个生成 Token,天然适合文本生成任务,In-Context Learning 能力强 -> 理解 GPT 的设计选择

3. Token 是什么?一个汉字大概对应几个 Token?

Token 是模型处理文本的最小单位 -> 一个汉字大约 1-2 个 Token,取决于 Tokenizer -> 中文场景下 Token 消耗需要重点评估

4. Temperature 调高调低分别有什么效果?

调高增加随机性和创造性,调低增加确定性和一致性 -> 分类任务建议 0,对话建议 0.7 -> 根据任务类型选择合适的 Temperature

5. 什么是幻觉?怎么缓解?

模型生成看似合理但不符合事实的内容 -> RAG 提供事实依据、Prompt 引导"基于给定信息回答"、输出后做事实核查 -> 多层防御降低幻觉率

6. Embedding 是什么?有什么用?

将文本转换为固定维度的向量表示,捕获语义信息 -> 用于语义搜索、文本相似度计算、RAG 检索 -> 是向量数据库和检索系统的基础

7. 预训练和微调的区别是什么?

预训练用大规模数据从零训练模型学习通用语言能力,微调在预训练模型基础上用特定任务数据训练适配具体场景 -> 两者分工明确,预训练成本高但通用性强 -> 微调成本低但依赖预训练质量


二、Prompt 类

1. 什么是 Few-shot 提示?和 Zero-shot 的区别?

Few-shot 在 Prompt 中提供几个示例引导模型输出,Zero-shot 不提供示例直接指令 -> Few-shot 更适合格式控制和特定风格任务 -> 示例选择要注重代表性、多样性、顺序性

2. Chain-of-Thought 提示为什么有效?

它让模型展示推理过程,将复杂问题分解为多个简单步骤 -> 每步的概率预测比直接预测最终答案更容易正确 -> 适用于数学推理、逻辑判断、多步骤问题

3. 如何设计一个结构化的 Prompt?

包含角色设定、任务描述、输出格式、约束条件、示例五个要素 -> 越具体越好,用 Few-shot 锚定输出 -> 需要设计、测试、迭代,不是一次性写的

4. Prompt 注入是什么?怎么防御?

用户通过输入恶意指令绕过系统约束 -> 防御:输入输出分离、输入校验、多层防护、最小权限 -> 分层防御是关键,不要只依赖单一手段


三、RAG 类

1. RAG 的完整流程是什么?

文档加载 -> 文本切分 -> Embedding -> 向量存储 -> 检索 -> 重排序 -> 生成 -> 每个环节都需要精细调优 -> 切分策略和检索策略是关键

2. 文档切分有哪些策略?怎么选?

固定长度、递归切分、语义切分、按标题切分 -> 一般用递归切分,chunk_size 500-1000 字符 -> 根据文档类型选择合适的策略

3. 什么是混合检索?为什么比纯向量检索好?

结合稠密检索(语义匹配)和稀疏检索(BM25 关键词匹配) -> 互补了语义理解和精确匹配两种能力 -> alpha 通常 0.5-0.7

4. 什么是重排序?为什么需要?

用 Cross-Encoder 对检索结果做精细打分 -> 初始检索用双塔模型速度快但不够精确,重排序提供更精准的排序 -> 检索 Top-K 再重排序取 Top-N

5. RAG 和微调怎么选?

需要实时更新知识用 RAG,需要改变模型行为风格用微调 -> 多数场景 RAG 优先,两者可结合 -> 按业务需求灵活选择技术路线


四、Agent 类

1. Agent 和普通对话的区别是什么?

Agent 能自主调用外部工具、多步推理、观察结果并自我修正 -> 是感知-推理-行动循环 -> 普通对话只是输入到输出的单轮映射

2. Function Calling 是怎么工作的?

应用层定义工具 Schema -> 模型根据意图输出工具调用请求(名称+参数) -> 应用层执行工具后将结果返回模型 -> 模型基于工具结果生成最终回答

3. ReAct 范式是什么?

Reasoning + Acting 循环 -> 每一步先推理(Thought),再行动(Action),然后观察结果(Observation),直到得出最终答案 -> 推理和行动交替避免盲目行动

4. Agent 为什么容易陷入循环?怎么解决?

工具描述不清、没有终止条件、错误反馈不正确 -> 设最大步数、优化工具描述、明确终止条件、加错误重试 -> 工程手段保障可控性


五、工程化类

1. 流式输出怎么实现?

后端用 SSE(Server-Sent Events),FastAPI 的 StreamingResponse 逐块返回数据 -> 前端用 fetch + ReadableStream 逐块读取并更新 UI -> Nginx 需要关闭 proxy_buffering

2. Token 成本怎么控制?

语义缓存、模型路由、Prompt 压缩、对话摘要、异步处理 -> 建立 Token 用量监控和预算告警 -> 成本控制要提前设计,不是事后补救

3. 怎么设计监控告警体系?

监控延迟(P50/P95/P99)、错误率、Token 消耗、成本 -> 设阈值告警,覆盖系统指标和业务指标 -> Prometheus + Grafana 是常见方案

4. 模型服务挂了怎么做降级?

准备备用模型(小模型)、设定超时和重试 -> 超过阈值切换降级响应 -> 关键路径加人工兜底


六、微调类

1. LoRA 的原理是什么?

在原始权重旁加低秩分解矩阵(A*B),只训练这两个小矩阵,原始权重冻结 -> 参数量减少 90%+ 但效果接近全量微调 -> 是性价比最高的微调方式

2. 什么时候需要微调?什么时候不需要?

需要特定输出风格/格式、特定领域效果不够、需要减少 Prompt 长度降低成本时微调 -> 通用任务、知识密集型任务用 RAG -> 90% 的场景 Prompt + RAG 就够了

3. 量化是什么?有哪些量化方法?

将模型权重从高精度(FP16)转换为低精度(INT8/INT4),减少显存和推理延迟 -> 方法有 GPTQ、AWQ、GGUF 等 -> INT4 量化通常只损失 1-3% 精度

基于 VitePress 构建