Agent / 大模型应用开发 面经 Wiki
数据来源:本地截图面经(阿里/美团/百度)+ 全网深度搜集的真实面经 Wiki(卡码笔记、Datawhale hello-agents、AgentGuide、AIInfraGuide、Awesome-LLM-Interview、代码随想录、牛客/CSDN 大厂面经)。
使用方法:先看「全部问题目录」自测哪些题能张口就答,再点进对应解答;「衍生追问」是面试官可能继续深挖的方向;「真实情景面经」按公司+轮次还原现场。
使用指南
- 第一步 · 目录自测:下方目录按模块列出全部问题,先遮住答案,能说出来的跳过,说不出来的点进锚点看解答。
- 第二步 · 按岗侧重复习:应用开发/Agent 岗优先 RAG + Agent + 工程系统;算法岗优先 Transformer + RLHF + 微调部署;AI Infra 岗优先推理优化 + 分布式训练。
- 第三步 · 真实情景模拟:最后刷「真实情景面经」,用公司+轮次+追问上下文检验自己能否临场展开。
- 来源可追溯:每道题标注来源(卡码/Datawhale/AgentGuide/AIInfraGuide/牛客/CSDN),来源索引见文末。
全部问题目录
01检索增强 RAG8 题
02Agent 推理与规划8 题
04多 Agent 架构2 题
06模型与基础2 题
07LLM 基础16 题
- Q29. 自注意力机制如何工作?为什么比 RNN 更适合长序列?
- Q30. 位置编码为什么必需?RoPE 相比绝对位置编码的优劣?
- Q31. MHA / MQA / GQA / MLA 的区别?
- Q32. Encoder-Only / Decoder-Only / Encoder-Decoder 各自擅长什么?
- Q33. Scaling Laws 是什么?对研发有什么指导?
- Q34. 常见解码策略:Greedy / Beam / Top-K / Top-P?
- Q35. Tokenizer:BPE / WordPiece / SentencePiece 的区别?
- Q36. NLP 和 LLM 最大的区别是什么?
- Q37. L1 / L2 正则化的区别与应用?
- Q38. 涌现能力怎么理解?何时出现?
- Q39. LLM 常用激活函数?
- Q40. MoE 如何在不显著增加推理成本下扩大参数量?
- Q41. 训练千亿参数模型的工程挑战?
- Q42. 开源框架 / Qwen / DeepSeek 论文创新点?
- Q43. KV Cache 为什么能加速推理?显存怎么算?
- Q44. 最近读过哪些前沿论文 / 新技术?
08RLHF 与对齐13 题
- Q45. RLHF 解决 SFT 解决不了什么问题?
- Q46. 经典 RLHF 三阶段?
- Q47. 成对比较数据 vs 绝对分数,优劣?
- Q48. RM 架构与 Bradley-Terry 损失?
- Q49. 为什么用 PPO 而不是 REINFORCE / Q-learning?
- Q50. KL 系数 β 过大/过小会怎样?
- Q51. Reward Hacking 是什么?怎么缓解?
- Q52. DPO 的核心思想与优势?
- Q53. RLHF 模型上线后“模式化奉承”怎么排查?
- Q54. GRPO 与 PPO 的区别?
- Q55. GSPO / DAPO 是什么?
- Q56. Token 级 vs 序列级奖励与信用分配?
- Q57. RLAIF 的理解、潜力与风险?
09微调与部署13 题
- Q58. LoRA 的原理?秩 r 怎么选?为什么能高效微调?
- Q59. QLoRA 怎么降低资源成本?为什么选 NF4 + FP16?
- Q60. SFT 和 RLHF 哪个更适合快速迭代?破局点?
- Q61. 微调 / Prompt / RAG 怎么选?
- Q62. SFT 数据怎么构建与清洗?loss 只算回答部分?
- Q63. 分布式训练:DP / TP / PP / ZeRO / FSDP 的区别?
- Q64. 7B 模型推理/训练显存怎么估算?
- Q65. bf16 与 fp16 的区别?训练怎么选?
- Q66. vLLM 为什么快?PagedAttention 原理?
- Q67. 模型压缩:量化 / 剪枝 / 蒸馏?
- Q68. 灾难性遗忘怎么解决?
- Q69. 推理成本怎么降?
- Q70. 微调后怎么判断有没有收益?
10RAG 深化15 题
- Q71. RAG 是什么?解决了 LLM 的什么问题?
- Q72. RAG 完整链路?
- Q73. 向量检索原理?ANN 是什么?
- Q74. 向量数据库怎么选?Milvus / FAISS / Qdrant / ES?
- Q75. 纯向量检索有什么问题?为什么混合检索?
- Q76. 为什么要 Rerank?Recall@K 与 Precision@K 怎么取舍?
- Q77. Chunk 怎么切?切大/切小各什么问题?
- Q78. Embedding 模型怎么选?中文场景?
- Q79. RAG 幻觉怎么处理?
- Q80. 检索效果不好怎么优化?
- Q81. Agentic RAG 和普通 RAG 区别?
- Q82. RAG 落地最难的地方在哪?
- Q83. GraphRAG 与 LightRAG 是什么?怎么选?
- Q84. RAG 怎么评估?
- Q85. RAG 知识库文档更新,不重建全量怎么搞?
11Agent 深化20 题
- Q86. LLM 和 Agent 有什么区别?
- Q87. Agent 和 Workflow 有什么区别?
- Q88. Agent 有哪些工作模式?
- Q89. Function Call 底层怎么实现?
- Q90. MCP 是什么?解决什么问题?
- Q91. Skills 是什么?和 Prompt / Tool 有什么区别?
- Q92. Function Call / MCP / Skills 三者关系?
- Q93. A2A 协议是什么?和 MCP 的关系?
- Q94. Agent 记忆系统怎么设计?
- Q95. Agent 的安全与可靠性如何保障?
- Q96. RAG 和 Agent 是什么关系?
- Q97. ReAct 是什么?Loop Engineering 又是什么?
- Q98. Harness Engineering 是什么?
- Q99. 上下文漂移怎么解决?
- Q100. 工具调用幻觉怎么防?
- Q101. 多 Agent 通信链路怎么设计?异常怎么处理?
- Q102. 什么时候用多 Agent,什么时候 Tool 就够?
- Q103. 混合路由与限流器为什么重要?
- Q104. Agent 可观测性怎么设计?
- Q105. Agent 框架对比(OpenClaw / Hermes / Claude Code)与选型?
12多模态 VLM11 题
13模型与 Agent 评估10 题
14AI 编程11 题
- Q127. Vibe Coding 是什么?面试官到底考什么?
- Q128. AI 越来越强,你的优势到底是什么?
- Q129. AI 编程 Token 成本怎么控制?
- Q130. Claude Code 上下文窗口怎么治理?
- Q131. Spec-Driven Development 是什么?
- Q132. OpenSpec / Spec-kit / gstack 是什么?
- Q133. AI 编程避坑:Git 提交、数据库备份、线上回滚?
- Q134. 怎么判断优化后的 Prompt 有效?
- Q135. AI 编程工具怎么选?
- Q136. 传统 Web 开发 vs AI Agent 开发有什么不同?
- Q137. 你对 AI 编程对程序员的影响怎么看?
15AI Infra13 题
- Q138. 大模型推理的主要性能瓶颈与优化?
- Q139. PagedAttention 原理?
- Q140. Orca 迭代级调度 / 连续批处理?
- Q141. PD 分离是什么?为什么多机传 KV 仍值得?
- Q142. 训练并行怎么选?
- Q143. CUDA 内存访问注意什么?
- Q144. DeepSeek-V3 关键优化点?
- Q145. 显存/训练耗时怎么估算?
- Q146. 量化方案 GPTQ / AWQ 区别?
- Q147. 长文本推理怎么优化?
- Q148. 推理服务框架怎么选?
- Q149. 为什么量化/压缩后精度下降?怎么补偿?
- Q150. 如何从 Ampere 迁移算子到 Hopper?
16手撕代码12 题
17真实情景面经26 题
- 字节 · Agent 开发 · 四面(21+ 题全解析)
- Q163. Prompt Engineering 的核心目标?为什么换说法效果差十倍?
- Q164. System Prompt / Few-shot / CoT 各解决什么问题?
- Q165. Token、上下文窗口、上下文腐化?
- Q166. 幻觉怎么产生?怎么减轻?
- Q167. Structured Output 怎么控制输出?
- Q168. Function Calling 与 RAG 的区别和联系?
- Q169. Embedding / 向量数据库在 RAG 中的作用?检索策略?
- Q170. Agent 如何结合工具、知识和规划自主运行?
- Q171. 多 Agent 通信链路与异常处理?
- Q172. 上下文漂移与工具调用幻觉怎么解决?
- Q173. MCP 和 Skill 的作用?
- Q174. 微调与 RAG 使用场景区别?
- Q175. SFT 和 RLHF 哪个适合快速迭代?破局点?
- Q176. 推理成本怎么降?多任务怎么权衡效率与准确?
- Q177. 有限上下文怎么放关键内容?短期/长期记忆压缩?
- Q178. 混合路由和限流器为什么重要?
- Q179. 执行链路如何设计?连续任务正确性怎么保证?
- Q180. 长任务如何保证不偏离原始目标?
- Q181. 生图/生成模型的多样性和准确性怎么评估?
- Q182. 工具调用安全(Key 泄露、敏感信息)?
- Q183. 传统 Web 应用和 AI Agent 应用有什么不同?
- Q184. Agent 能力复用与 Skill 管理怎么设计?
- AgentGuide 真实面经案例集(16 个案例索引)
- AIInfraGuide 真实面经库(181 份 · 公司索引)
- 精选真实现场(牛客 / CSDN)
18开放题与综合16 题
- Q185. LLM 距离 AGI 还有多远?最缺什么?
- Q186. 多模态融合会走向何方?
- Q187. 开源 vs 闭源模型生态怎么看?
- Q188. 世界模型 / 内在模拟能力怎么理解?
- Q189. 合成数据在训练中的角色?
- Q190. 具身智能:LLM 怎么赋能机器人?
- Q191. 个性化 Agent 怎么平衡效果、隐私与安全?
- Q192. Transformer 会一直统治吗?SSM/Mamba 怎么看?
- Q193. 未来 3-5 年 LLM/Agent 最可能颠覆哪个行业?
- Q194. 限制 Agent 能力普及的最大瓶颈?
- Q195. 过去半年印象最深的 Agent 论文/项目?
- Q196. 应该追求更强基模还是更精巧的 Agent 架构?
- Q197. 未来 1-2 年 Agent 商业落地场景?
- Q198. 你最想做一个什么 Agent?
- Q199. 顶尖 AI Agent 工程师的核心素质?
- Q200. 平时怎么用 AI?对用 AI 学习编程有什么建议?
19框架选型11 题
- Q201. LangChain 和 LangGraph 到底有什么区别?
- Q202. 主流 Agent / AI 框架全景(还有哪些?)
- Q203. LangGraph 里 State / Node / Edge 分别解决什么问题?
- Q204. LangGraph 的图主要抽象了哪些流程?
- Q205. State 状态流主要存什么信息?
- Q206. Node 节点主要是工具调用吗?
- Q207. LLM 决策节点(意图分类 / 路由 / 打分 / 生成)代码怎么写?
- Q208. Node 怎么知道该“思考”还是“调工具”?这个决定是谁做的?
- Q209. LangGraph 的 Node 类型完整清单?
- Q210. AI 怎么知道走到某节点要审批?Node 里存了任务提示词吗?
- Q211. LangGraph 是不是用来“规范 AI 要进行哪些操作”的?
检索增强 RAG
1. 语义分片与切片策略
面经真题:如何通过语义分片解决固定长度切片导致的上下文断裂?(阿里 5)长表格被切到两个 Chunk 如何保证不丢表头?(百度 2)RAG 切片为什么不能太长也不能太短?(百度 4)Overlap 解决什么问题?(百度 8)
核心要点:
- 固定长度切片会切断句子、段落甚至表格,破坏语义完整性。
- 语义分片按“语义边界”切:优先段落、标题层级,再按长度约束合并或拆分。
- 切片太长:检索单元粗、命中噪音大、上下文浪费;太短:语义残缺、召回不全。
- Overlap(重叠):相邻块共享边界内容,保证被切断的信息在至少一个块里完整出现。
- 表格类内容:按行组/表头分组切,回答时把表头作为上下文附带,避免列含义丢失。
衍生追问:
| 追问 | 要点 |
|---|---|
| 切分粒度怎么量化评估? | 用召回率/答案正确率做 A/B;Ragas 的 faithfulness/context precision 可定位是切片还是检索的问题 |
| 语义分片怎么实现? | 递归字符分割(按分隔符层级)、基于嵌入相似度的 LLM 分割(如 llama-index 的 SentenceSplitter) |
| 标题层级重要吗? | 重要:用 markdown 结构切块可保留父子标题,Graph 类检索会利用层级关系 |
| 跨页表格怎么处理? | 检测表格起止标记,整表作为一个块或按“表头+行组”分块,禁止中间切断 |
2. 混合检索与 RRF 归一化
面经真题:向量检索和关键词检索各适合什么场景?为什么现在更多用混合检索?(美团一面 5、百度 5)Milvus 中如何通过 RRF 实现两路得分归一化?(阿里 3)图片向量和文本向量混合后如何分配权重?(美团一面 3)
核心要点:
- 向量检索适合语义相似、同义改写、模糊表达;关键词检索适合专有名词、编号、精确短语。
- 混合检索 = 两路召回合并,解决单一方式漏召回(如向量对精确 ID 不敏感、BM25 对同义不敏感)。
- RRF(Reciprocal Rank Fusion):按排名取倒数分数
Σ 1/(k + rank),k 常取 60,不依赖各路的原始分数尺度。 - 多模态混合:图片向量和文本向量通常先各自召回,再用 RRF/加权分数融合;权重可离线在验证集上调。
衍生追问:
| 追问 | 要点 |
|---|---|
| RRF 为什么不直接用相似度分数? | 各路分数分布/量纲不同,直接相加会被强势一路主导;排名融合更鲁棒 |
| BM25 和向量检索怎么选? | 先看查询类型:精确 ID/型号走 BM25;自然语言描述走向量;混合检索兜底 |
| 多路权重怎么定? | 网格搜索或学习排序(LTR)在标注数据上调,避免拍脑袋 |
3. 查询改写与 HyDE
面经真题:查询重写有哪些方法?(阿里 8)引入 HyDE 后如何防止伪文档幻觉干扰检索?(美团二面 6)
核心要点:
- 查询重写目标:把口语/指代/多意图提问改成更适合检索的形式。
- 常见方法:同义扩展、指代消解、意图分类后模板化、多查询生成(Multi-Query)、HyDE(生成假设文档再检索)。
- HyDE 的风险:模型生成的“伪文档”可能包含幻觉事实,导致检索被带偏。
- 防伪文档幻觉:只取伪文档的“检索语义”不当作事实、加提示约束、对伪文档做二次校验、用真实文档重排时过滤。
衍生追问:
| 追问 | 要点 |
|---|---|
| Multi-Query 和 HyDE 区别? | Multi-Query 生成多个查询分别召回再合并;HyDE 生成一段假设答案作为查询向量 |
| 什么时候不该用 HyDE? | 领域事实性强、生成质量差时,伪文档会引入噪音;可先评估生成质量再启用 |
| 查询重写怎么评估? | 对比改写前后检索召回率与最终答案正确率 |
4. Reranker 重排
面经真题:为什么要加 Reranker?直接拿向量检索结果给模型有什么问题?(百度 7)
核心要点:
- 向量召回追求高召回,结果噪声多、相关度排序粗糙。
- Reranker(交叉编码器)对“查询-文档对”精排,相关性更准,但成本高,只对 Top-N 重排。
- 不加 Reranker 的问题:低相关片段混入上下文,浪费窗口且降低答案质量。
衍生追问:
| 追问 | 要点 |
|---|---|
| 双塔 vs 交叉编码器? | 双塔可离线向量化、快但交互弱;交叉编码器交互强、慢,适合在线精排 |
| Reranker 用什么训练? | 查询-文档相关性标注/点击数据,常用 BGE-Reranker 等开源模型微调 |
| 重排多少条合适? | 一般 20~100 条召回里重排 Top 20 左右,结合延迟预算 |
5. Graph RAG 与知识关联
面经真题:Graph RAG 相比向量检索在处理复杂知识关联时有什么优势?(阿里 6)
核心要点:
- 向量检索擅长“相似片段”,不擅长多跳关联、聚合性问题和全局关系。
- Graph RAG 先抽实体/关系建图,再通过社区检测、多跳遍历、图查询回答“跨文档/跨实体”问题。
- 代价:构建成本高、更新复杂;适合强关系型知识库(组织架构、产品依赖、规范条款)。
衍生追问:
| 追问 | 要点 |
|---|---|
| Graph RAG 怎么建图? | LLM 抽取实体-关系三元组,存入图数据库(Neo4j)或向量+邻接混合 |
| 什么时候用图不用向量? | 问题含“哪些部门影响 A”“A 依赖哪些组件”等多跳关系时 |
| Graph RAG 的召回怎么和向量结合? | 双路召回:向量找片段、图找关联子图,再做融合 |
6. Lost in the Middle 与长上下文
面经真题:了解 Lost in the Middle 吗?检索流程里怎么处理?(阿里 7)
核心要点:
- 现象:模型对长上下文中间位置的信息利用最差,首尾最好。
- 处理:把最重要的证据放上下文首尾;压缩冗余片段;限制注入片段数量;对片段按相关度排序后重排位置。
衍生追问:
| 追问 | 要点 |
|---|---|
| 为什么中间效果差? | 注意力对首尾位置的偏置 + 长上下文稀释 |
| 工程上怎么验证? | 构造“证据在中间/首/尾”三组实验对比答案正确率 |
| 和记忆压缩的关系? | 都是长上下文治理手段:一个是排序摆放,一个是减少总量 |
7. 文档增量同步与版本冲突
面经真题:工业规范每天更新,向量库如何做增量同步?新旧文档冲突如何过滤?(美团二面 3)
核心要点:
- 增量同步:按文档版本/哈希识别变更块,只重嵌入变更部分,删除失效向量。
- 版本冲突:检索结果带版本元数据,冲突时以“生效时间最新”或“规范优先级”过滤,并在 Prompt 中标注版本。
衍生追问:
| 追问 | 要点 |
|---|---|
| 如何识别哪些块变了? | 文档级哈希 + 块级哈希比对;表格类按行组粒度 |
| 删除向量怎么做? | Milvus 按主键 delete 或软删除,配合重建索引 |
| 冲突过滤放检索前还是生成前? | 两端都要:检索时过滤旧版,生成前让模型引用版本做二次判定 |
8. 评估与防幻觉
面经真题:如何用 Ragas 定位检索环节的语义偏差?(阿里 3)用 Ragas 怎么测幻觉?(美团一面 3)Prompt 如何设计拒答逻辑?(百度 6)VLM 如何做结构化推理减少幻觉?(阿里 3)工程和 Prompt 有哪些防幻觉手段?(百度 9)
核心要点:
- Ragas 指标:faithfulness(答案是否忠于上下文)、context precision/recall(检索相关性)、answer relevance。
- 幻觉根因:上下文缺失、模型强行作答、检索到无关内容。
- 拒答逻辑:Prompt 明确“知识库无相关内容时输出不知道”;可加置信度阈值;检索为空时走 fallback。
- VLM 结构化推理:把图纸/图片拆成可验证的步骤(区域定位 → 属性提取 → 交叉校验),不直接端到端猜。
- 工程防幻觉:引用标注、答案校验(重新检索验证)、温度调低、限制输出范围、对关键数值二次核对。
衍生追问:
| 追问 | 要点 |
|---|---|
| faithfulness 低说明什么? | 答案内容与检索上下文不一致,通常是生成端问题或检索漏关键证据 |
| context precision 低呢? | 召回里无关片段太多,需要重排/更准的切片 |
| 拒答和“强行回答”怎么权衡? | 领域里“宁缺毋错”优先;可用 abstain 机制 + 用户可追问 |
Agent 推理与规划
9. CoT 与 ReAct
面经真题:什么是 CoT?原理是什么?(补充 7)讲一下 ReAct 原理,和单轮问答的本质区别?(百度 10)ReAct 中 Thought/Action/Observation 循环状态机逻辑?(美团二面 7)
核心要点:
- CoT:让模型把推理过程显式写出,利用中间步骤分摊推理负担,提高多步逻辑正确率。
- ReAct = Reasoning + Acting:Thought(分析当前状态)→ Action(调工具/检索)→ Observation(观察结果)循环,直到给出 Answer。
- 与单轮问答的本质区别:单轮是“一次生成答案”;ReAct 是“决策-执行-观察”闭环,答案依赖外部世界反馈。
衍生追问:
| 追问 | 要点 |
|---|---|
| CoT 为什么有效? | 中间计算被外化为文本,减少“一步想完”的负担;也便于定位错误 |
| ReAct 会引入什么风险? | 循环次数不可控、工具副作用、幻觉观察;需要最大步数、终止条件和护栏 |
| Thought 一定是必要的吗? | 简单任务可跳过;复杂任务保留 Thought 便于调试和轨迹评估 |
10. Plan-and-Solve vs ReAct
面经真题:Plan-and-Solve 的流程?处理复杂长任务时和 ReAct 有什么区别?(阿里 9)
核心要点:
- Plan-and-Solve:先规划多步方案(Plan),再逐步执行并对照计划修正。
- ReAct:边想边做,无显式长期计划,适合探索型任务。
- 复杂长任务:Plan-and-Solve 减少“走一步看一步”的漂移,可并行/检查依赖;ReAct 更灵活但容易迷失或重复。
衍生追问:
| 追问 | 要点 |
|---|---|
| 计划失效怎么办? | 规划器重规划(re-plan),或降级为 ReAct 继续 |
| 计划粒度怎么定? | 细到可执行动作、粗到阶段目标;粒度太细 token 开销大 |
| 怎么判断用哪种? | 任务步骤可预知→Plan;探索/开放性→ReAct;可两者混合 |
11. Self-Reflection 与失败重规划
面经真题:工具结果不符合预期,如何设计 Self-Reflection 触发重新规划?(美团二面 9)
核心要点:
- 在每轮 Observation 后增加“结果校验”环节:是否满足预期、是否可重试、是否需要换工具。
- 设计触发器:结果为空/报错/格式不对/数值异常/重复失败计数。
- 重试策略:换参数重试 → 换工具 → 换子计划 → 主动向用户澄清。
衍生追问:
| 追问 | 要点 |
|---|---|
| 如何避免无限重试? | 最大重试次数、退避、状态记录(同一失败原因不重复尝试) |
| Reflection 放哪一层? | 工具层(校验单次结果)和任务层(校验目标是否达成)都要有 |
| 怎么评估反思质量? | 对比“带反思 vs 不带反思”的任务成功率与步数 |
12. 多工具并行调用
面经真题:如何实现多工具并行调用?如何控制多个 API 并发并把结果一次性返回给模型?(阿里 10)
核心要点:
- 让模型一次输出多个工具调用意图(如 OpenAI 的 tool_calls 数组),再并行执行。
- 代码层:asyncio.gather / 线程池并发执行,统一收集结果后按原顺序拼回上下文。
- 注意:工具间有依赖时先并行无依赖组,再串行有依赖组;控制并发上限防限流。
衍生追问:
| 追问 | 要点 |
|---|---|
| 结果顺序乱了怎么办? | 用请求 ID/索引映射回原始 tool_call,再按模型输出顺序拼接 |
| 部分失败怎么处理? | 成功的结果照常返回,失败标注错误并让模型决定重试/跳过 |
| 并行度怎么定? | 由限流配额和工具耗时决定,用信号量/连接池控制 |
13. Tool Retrieval 与工具规模
面经真题:工具规模上百个,如何设计 Tool Retrieval 降低上下文压力?(美团二面 10)
核心要点:
- 把所有工具塞进 Prompt 会爆窗口且降低选择准确率。
- Tool Retrieval:用工具名称/描述做向量索引,先按当前意图召回 Top-K 个工具再注入。
- 可结合:工具分类标签、意图路由、动态注册。
衍生追问:
| 追问 | 要点 |
|---|---|
| 工具描述怎么写? | 名称+触发条件+输入输出+示例;描述质量决定检索效果 |
| 召回了不相关工具怎么办? | 加 Reranker 或让模型先选“是否可用”,未命中走默认工具 |
| 工具间相似度高? | 描述区分度 + 必要时工具合并/参数化 |
14. Function Call 与 JSON 稳定性
面经真题:Function Call 返回的是真实结果还是调用意图?(补充 8)如何保证稳定输出 JSON?格式不对怎么兜底?(百度 11)
核心要点:
- Function Call 的第一层输出是“调用意图(参数)”,由后端真正执行后把真实结果再返回给模型。
- JSON 稳定性:强约束 schema、few-shot、temperature 调低、结构化输出 API(response_format)。
- 兜底:JSON 解析失败→正则/修复解析(如补引号)、要求模型重试、返回解析错误让模型修正。
衍生追问:
| 追问 | 要点 |
|---|---|
| 怎么防止模型伪造参数? | 参数白名单、类型校验、执行前二次确认高危操作 |
| 嵌套 JSON 解析失败? | 用容错解析库 + 定位错误位置重新生成 |
| 工具结果很大? | 截断/摘要/只回关键字段(见记忆与状态-预压缩) |
15. Agent Harness 与 Skills vs Tool
面经真题:怎么理解 Agent Harness?没有它大模型会遇到什么瓶颈?(百度 13)Skills 和普通 Tool 调用有什么区别?(百度 14)
核心要点:
- Agent Harness:把模型与外部世界连接起来的“运行时骨架”——工具注册、上下文管理、循环控制、权限/安全、状态持久化、监控。
- 没有 Harness 的瓶颈:模型只会“说”不会“做”;无法安全执行、无法持久化、无法从错误恢复。
- Skills vs Tool:Tool 是单个可调用函数(原子能力);Skill 是“带说明书的技能包”,包含多个步骤/提示词/资源,可按需加载,更接近能力单元。
衍生追问:
| 追问 | 要点 |
|---|---|
| Harness 和框架(LangGraph)关系? | 框架是实现 Harness 的脚手架;Harness 是抽象概念 |
| Skill 怎么触发? | 元数据匹配/向量检索技能库,命中后把技能说明注入上下文 |
| Skill 和 Tool 能嵌套吗? | 可以:Skill 内部编排多个 Tool 调用 |
16. Agent 自进化(不微调)
面经真题:不微调模型,如何实现 Agent 自进化?(百度 15)
核心要点:
- 经验外化:把失败轨迹/成功模式写成可复用的 Skill、Prompt 片段、规则库。
- 自我反思:每轮任务后生成“复盘”,更新记忆库或工具描述。
- 评测驱动:用自动评估把“有效做法”沉淀,无效做法淘汰。
衍生追问:
| 追问 | 要点 |
|---|---|
| 自进化会不会越变越差? | 需要评估门槛和回滚:只有通过评测的更新才生效 |
| 和微调的区别? | 微调改权重,通用但贵;自进化改外部知识/技能,轻量可解释 |
记忆与状态
17. 记忆压缩与总结触发
面经真题:上下文超限怎么做记忆压缩?(阿里 11)记忆总结触发条件按轮数还是 Token?(百度 3)
核心要点:
- 触发条件:Token 消耗量比轮数更直接(不同工具输出大小差异大);常用阈值+滚动窗口。
- 压缩方式:历史摘要、关键信息抽取、分主题记忆(用户事实/偏好/待办)。
- 双轨:完整原文短期留存(可回查),压缩摘要长期供上下文注入。
衍生追问:
| 追问 | 要点 |
|---|---|
| 摘要会丢信息怎么办? | 关键信息结构化保存(JSON),摘要只做叙事层 |
| 什么时候用完整历史? | 需要精确引用原文时回查短期存储 |
| 压缩失败如何兜底? | 保留原始会话文件,压缩仅作为注入副本 |
18. 长期画像 vs 短期历史
面经真题:长期画像和短期聊天历史分别存在哪里?怎么喂给模型?(美团一面 4)
核心要点:
- 长期画像:结构化(用户事实、偏好、状态)→ 存向量库/关系库,按需检索注入。
- 短期历史:最近 N 轮原文 + 压缩摘要 → 存 Redis/消息队列,滚动淘汰。
- 喂法:System 注入画像摘要,历史按相关性或时间窗口注入。
衍生追问:
| 追问 | 要点 |
|---|---|
| 画像怎么更新? | 每轮结束后抽取“新事实”增量合并,冲突时以最新为准 |
| 画像注入优先级? | 当前任务相关画像优先,避免无关画像占窗口 |
19. 向量记忆库动态更新与长上下文
面经真题:用户画像如何随对话动态更新?(阿里 4)1M+ 上下文会不会取代向量记忆库?(美团二面 12)
核心要点:
- 动态更新:增量写入新记忆、定期清理过期记忆、去重合并。
- 1M 上下文 vs 外挂记忆:长上下文解决“能装下”,但不解决“检索准确、成本可控、隐私隔离”;记忆库仍负责精准召回。
- 结论:互补,不是替代;长上下文可减少记忆压缩压力,但全量塞入成本高。
衍生追问:
| 追问 | 要点 |
|---|---|
| 记忆库怎么去重? | 语义相似度阈值合并,冲突保留最新 |
| 长上下文下还要 RAG 吗? | 要:检索保证相关性,避免大海捞针(Lost in the Middle) |
20. Session 持久化与工具结果预压缩
面经真题:高并发下如何持久化 Agent 状态不丢会话?(美团二面 4)Session 存在哪?(补充 15)量表数据超窗口如何预压缩?(百度 3)
核心要点:
- Session 状态:结构化状态(节点、变量、记忆指针)+ 消息历史分库存储(Redis 热数据 + MySQL/对象存储冷数据)。
- 分布式:Session 绑定会话 ID,状态写持久化存储,实例重启可恢复。
- 工具结果预压缩:只保留核心指标/摘要/分页,先粗后细(模型需要时再取详情)。
衍生追问:
| 追问 | 要点 |
|---|---|
| 状态和消息分开存吗? | 分:状态频繁读写用 Redis;消息追加日志化,便于回放 |
| 预压缩会丢关键信息? | 按“核心指标白名单”压缩,需要时按引用拉取原文 |
多 Agent 架构
21. 单体拆分与多 Agent 边界
面经真题:何时拆分多 Agent?边界是什么?(阿里 12)
核心要点:
- 拆分信号:职责差异大、需要不同模型/知识/权限、单 Agent 上下文互扰、需要并行或隔离。
- 边界:按“领域职责”或“流程阶段”切;通信成本 > 单 Agent 复杂度时不该拆。
衍生追问:
| 追问 | 要点 |
|---|---|
| 拆太细的代价? | 通信损耗、一致性难、调试难、token 成本翻倍 |
| 怎么验证该拆? | 先单 Agent 实现,量化失败点(上下文污染、工具冲突)再拆 |
22. 分层 vs P2P 与通信优化
面经真题:Multi-Agent 分层架构与 P2P 架构的区别?(美团二面 13)如何优化智能体间通信损耗?(美团二面 14)共享全局记忆解决上下文不一致?(美团二面 15)
核心要点:
- 分层:主管-工人(orchestrator-worker),决策集中、可控,但主管是瓶颈。
- P2P:对等协商,灵活去中心,但一致性/收敛难。
- 通信损耗:只传结构化增量(意图+结果摘要),避免整段上下文互相转发;用共享黑板/全局记忆代替消息轰炸。
- 共享全局记忆:所有 Agent 读写同一事实层,保证“谁更新了什么”一致可见。
衍生追问:
| 追问 | 要点 |
|---|---|
| 主管挂了怎么办? | 主备/降级为对等协商 |
| 全局记忆写冲突? | 版本号 + 最后写入者策略,按领域分区 |
工程系统
23. 限流 / 并发 / 异步
面经真题:API 限流怎么处理高并发?(阿里 15)Python 异步在 Agent 里有什么用?哪些场景必须异步?(百度 16)
核心要点:
- 限流:令牌桶/滑动窗口 + 重试退避 + 队列削峰 + 多 Key 分摊 + 缓存命中减少调用。
- 异步:IO 密集(模型调用、工具请求、数据库)用 asyncio 并发,避免串行等待;CPU 密集仍用多进程。
衍生追问:
| 追问 | 要点 |
|---|---|
| 重试会不会放大故障? | 指数退避 + 抖动 + 熔断 |
| 并发和限流怎么平衡? | 信号量限制并发数,队列缓冲超出部分 |
24. Redis 缓存与 MySQL 存储
面经真题:Redis 常见数据结构?(补充 11)为什么把重复问答存 Redis?(补充 12)如何判断语义相同命中缓存?(补充 14)MySQL 存对话记录选什么字段类型?(补充 10)
核心要点:
- Redis:String(缓存/锁)、Hash(画像/会话)、List(消息队列)、ZSet(排序/限流滑动窗口)、Set(去重)。
- 重复问答缓存:同一问题答案复用,降延迟省 token;命中判定先精确 key,再语义向量相似度阈值。
- MySQL 对话记录:正文用 TEXT/MEDIUMTEXT(或 JSON 存结构化),加会话 ID 索引;大字段拆分冷热表。
衍生追问:
| 追问 | 要点 |
|---|---|
| 语义缓存误命中? | 相似度阈值 + 结果可解释性 + 缓存带版本失效 |
| Redis 缓存和向量库分工? | Redis 管高频精确 KV;向量库管语义检索 |
25. 轨迹评估与死循环监控
面经真题:如何自动评估 Agent 执行轨迹?(阿里 14)卡在工具死循环怎么监控解决?(阿里 14)中间节点轨迹有效性量化?(美团二面 16)
核心要点:
- 轨迹评估:把轨迹拆成节点(Thought/Action/Observation),用规则+模型打分:是否达成子目标、工具选择是否合理、是否重复。
- 死循环监控:最大步数、重复动作检测(同一 tool+参数出现 N 次)、时间阈值、环路检测。
衍生追问:
| 追问 | 要点 |
|---|---|
| 轨迹分怎么定? | 节点级(工具匹配、结果有效)+ 任务级(成功率、步数、成本) |
| 检测到死循环后? | 打断 → 提示模型改变策略 → 超限人工接管 |
26. MCP 与 LangGraph
面经真题:MCP 如何定义 Resources 与 Tools 映射?(阿里 4)MCP 解决了什么?不用它怎么实现工具调用?(美团一面 4)LangGraph 相比 Chain 在策略路由循环逻辑的优势?(阿里 4)
核心要点:
- MCP:统一工具/资源协议——Tools(可调用函数)、Resources(可读取数据)、Prompts(模板);客户端连接服务器,模型按 schema 调用。
- 不用 MCP:自己写 HTTP/gRPC 工具服务 + schema 注入,能做但协议/鉴权/发现要自建。
- LangGraph vs Chain:Chain 是线性管道,循环/条件路由要绕;LangGraph 是图状态机,显式支持循环、分支、状态持久化。
衍生追问:
| 追问 | 要点 |
|---|---|
| MCP 资源 vs 工具区别? | 资源是“读数据”(context 注入),工具是“执行动作” |
| LangGraph 状态怎么持久化? | Checkpointer/Redis 存储节点状态,断点续跑 |
模型与基础
27. Transformer 与基础
面经真题:拷打 Transformer(补充 9)
核心要点:
- 结构:Embedding → 位置编码 → 多头自注意力 → FFN → LayerNorm/残差 → 输出层。
- 自注意力:Q/K/V 计算注意力权重,O(V) 加权;多头并行捕捉不同子空间关系。
- 位置编码:绝对(sin/cos、可学习)与相对位置(RoPE 等)。
衍生追问:
| 追问 | 要点 |
|---|---|
| 为什么用多头? | 单头只能关注一种模式;多头让不同头关注不同关系 |
| 复杂度? | 自注意力 O(n²),长文本靠稀疏注意力/线性注意力优化 |
| LayerNorm 作用? | 稳定训练、缓解梯度问题 |
28. AI Coding 技巧与手撕清单
面经真题:有什么 AI coding 技巧?(阿里 16)
核心要点:
- 先写测试/边界再实现;把大任务拆成小步提交;让 AI 生成后自己 review 并补充反例。
- 善用结构化输出与 lint/类型检查闭环;复杂逻辑给 AI 提供输入输出样例。
手撕清单(面经中出现/高频):无重复字符最长子串(已出现)、两数之和、LRU、滑动窗口、二叉树遍历、TopK、并查集、最短路、二分。
一句话总结
这轮面经的核心主线是:“把检索做好(切片/混合/重排/防幻觉),把 Agent 跑稳(ReAct/规划/记忆/工具/状态),把工程扛住(限流/缓存/持久化/监控)”。
LLM 基础
Q29. 自注意力机制如何工作?为什么比 RNN 更适合长序列?
来源:Datawhale · 卡码 · AgentGuide(多公司高频)
核心要点:
- 输入 Token 映射为 Q/K/V 三个向量,注意力权重 = Q·K^T / √d,经 softmax 得到对 V 的加权和;每个位置都能直接看到所有位置。
- 相比 RNN:RNN 信息沿时间步传递,长距离依赖会衰减/梯度消失;自注意力任意两位置直接交互,可并行计算(RNN 必须串行)。
- 代价是 O(n²) 时间/显存,长文本需要稀疏注意力、FlashAttention、KV Cache 等优化。
衍生追问:
- 为什么要除以 √d?防止点积随维度增大方差过大、softmax 进入饱和区导致梯度消失。
- 因果注意力 Q/K/V 分别来自哪?Decoder 中 Q/K/V 都来自本层输入,但掩码只允许看到当前位置及之前。
- Encoder 与 Decoder 注意力区别?Encoder 双向;Decoder 自回归(因果掩码)+ 交叉注意力(K/V 来自编码器输出)。
Q30. 位置编码为什么必需?RoPE 相比绝对位置编码的优劣?
来源:Datawhale · 卡码 · 腾讯/字节高频
核心要点:
- 自注意力是位置无关的(置换等变),不注入位置信息则“我爱你”和“你爱我”等价。
- 绝对位置编码:sin/cos(可外推到训练长度外效果差)或可学习位置向量(简单但无外推)。
- RoPE:把旋转矩阵作用于 Q/K,使注意力分数只依赖相对位置;优点:天然相对位置、可外推(配合 NTK/YaRN 等缩放)、实现轻量。
- 外推手段:位置插值(PI)、NTK-aware 缩放、YaRN/长上下文微调。
衍生追问:
- RoPE 旋转角度维度怎么设计?按 2i/d 递减的基频(θ_i = 10000^(-2i/d))。
- 长度外插 vs 内插区别?外插超出训练长度直接延伸;内插把位置压缩回训练区间,小规模微调即可恢复效果。
Q31. MHA / MQA / GQA / MLA 的区别?
来源:Datawhale · AgentGuide · 腾讯/字节高频
核心要点:
- MHA:每头独立 Q/K/V,效果最好但 KV Cache 和计算最大。
- MQA:所有头共享一份 K/V,显存和计算省很多但效果有损。
- GQA:K/V 分若干组共享(如 8 头分 2 组),是 MHA 与 MQA 的折中,Llama 2/3 采用。
- MLA(DeepSeek):对 K/V 做低秩压缩,推理时只缓存压缩后的潜向量,KV Cache 大幅减小。
衍生追问:
- GQA 为什么性能与 MHA 相差不大?相邻头往往关注相似模式,共享 K/V 损失有限。
- KV Cache 大小怎么算?2 × n_layers × n_kv_heads × head_dim × seq_len × batch × 字节数。
Q32. Encoder-Only / Decoder-Only / Encoder-Decoder 各自擅长什么?
来源:Datawhale · AgentGuide · 腾讯
核心要点:
- Encoder-Only(BERT):双向理解,适合分类、NER、检索/Embedding。
- Decoder-Only(GPT/Llama/Qwen):自回归生成,理解+生成统一,是当前主流;支持 in-context learning 与 Agent 工具调用。
- Encoder-Decoder(T5):理解+生成分离,适合翻译、摘要等转换任务,但架构重、生态少。
衍生追问:
- 为什么 Decoder-Only 成为主流?训练/推理统一、可扩展性好、涌现能力集中在自回归范式,生成类任务天然是 decoder。
- Decoder-only 做分类行不行?可以,取最后 token 的隐状态加分类头或直接 prompt 分类,但不如 encoder 微调稳。
Q33. Scaling Laws 是什么?对研发有什么指导?
来源:Datawhale
核心要点:
- 模型性能随参数量 N、数据量 D、计算量 C 呈幂律提升,且数据量与参数需按比例同步增长(Chinchilla 约 20 tokens/参数)。
- 指导意义:先估算最优配比再分配算力,避免“模型大但数据不足”或“数据多但模型小”;也能用小规模实验外推大模型表现。
衍生追问:
- 数据快用完怎么办?合成数据、多模态/代码数据、更高质量过滤,以及 MoE/蒸馏改变曲线。
- Scaling Law 会一直成立吗?存在收益递减与“数据墙”,需要架构和算法侧突破。
Q34. 常见解码策略:Greedy / Beam / Top-K / Top-P?
来源:Datawhale
核心要点:
- Greedy:每步取概率最大 token,快但易重复、局部最优。
- Beam Search:保留 k 条候选路径,适合翻译/摘要等追求全局高分任务,但开放生成容易重复枯燥。
- Top-K:从概率最高的 k 个 token 采样,多样性可控但 k 固定不自适应。
- Top-P(Nucleus):累积概率达到 p 的动态候选集,更自然;常与 temperature 配合。
衍生追问:
- temperature 作用?缩放 logits 分布,>1 更随机、<1 更确定;0 时退化为 greedy。
- 为什么 Agent 场景常降低 temperature?工具调用需要稳定 JSON/参数,减少随机性。
Q35. Tokenizer:BPE / WordPiece / SentencePiece 的区别?
来源:Datawhale · Dolby · AgentGuide
核心要点:
- BPE:从字符开始,反复合并出现频率最高的相邻子词对;GPT 系列使用。
- WordPiece:按“合并后能提升似然”选择子词对,而非频率;BERT 使用,词首加 ## 标记。
- SentencePiece:直接对原始文本(可含空格)做子词切分,支持 BPE/Unigram,中文/多语言友好。
衍生追问:
- 中文为什么常按字/子词切?中文无空格分词,整词词典太大,子词可平衡压缩率与 OOV。
- Token 数量对成本影响?提示/生成都按 token 计费,长度直接影响成本与窗口占用。
Q36. NLP 和 LLM 最大的区别是什么?
来源:Datawhale · 美团
核心要点:
- NLP 传统范式:任务专用模型(分类/序列标注/翻译各自训练),特征是“小模型 + 任务特定”。
- LLM 范式:一个模型统一预训练,通过 prompt/in-context 完成几乎所有任务,具备生成、推理、工具调用能力。
- 相同点:都处理语言、都依赖数据与评估;不同点在架构(Transformer)、规模、范式(微调 vs 提示)。
衍生追问:
- LLM 会让传统 NLP 消失吗?不会,Embedding/分类/检索等低成本高确定场景仍是 encoder 或蒸馏小模型更优。
Q37. L1 / L2 正则化的区别与应用?
来源:Datawhale
核心要点:
- L1(Lasso):对权重绝对值惩罚,产生稀疏解(部分权重为 0),适合特征选择。
- L2(Ridge):对权重平方惩罚,权重整体收缩但不稀疏,防止过拟合更平滑。
- LLM 里更常见的是权重衰减(AdamW 的 decoupled weight decay,本质近似 L2)与 Dropout。
衍生追问:
- 为什么 AdamW 把权重衰减从梯度里解耦?Adam 自适应学习率会破坏 L2 的等效性,解耦后衰减更稳定。
Q38. 涌现能力怎么理解?何时出现?
来源:Datawhale
核心要点:
- 涌现指小规模模型几乎没有、规模跨过阈值后突然出现的能力(如多步推理、指令跟随)。
- 阈值与任务相关:简单任务低阈值,复杂推理/Agent 任务高阈值。
- 学界有争议:部分“涌现”可能是评估指标非线性导致的假象,能力可能连续提升但指标突然跳变。
衍生追问:
- 对 Agent 的意义?推理/规划能力依赖模型规模,小模型需要外部脚手架(CoT、工具、反思)补偿。
Q39. LLM 常用激活函数?
来源:Datawhale · 美团
核心要点:
- ReLU/GELU/SiLU:FFN 隐藏层主流;GELU 平滑近似 ReLU(GPT/BERT),SiLU 用于 Llama/Qwen 的 SwiGLU 变体。
- GLU 系列(SwiGLU/GeGLU):门控线性单元,提升信息筛选能力,是 Llama/Qwen/DeepSeek 标准配置。
衍生追问:
- 为什么不用 tanh/sigmoid 在深层?梯度饱和与计算开销;激活选择直接影响训练稳定性。
Q40. MoE 如何在不显著增加推理成本下扩大参数量?
来源:Datawhale · AgentGuide · DeepSeek 相关
核心要点:
- 把 FFN 拆成多个专家,每个 token 由路由器选 Top-K 个专家激活(如 Top-2)。
- 参数量 = 所有专家之和(很大),但单 token 推理只算激活专家,FLOPs 远小于总参数对应的 Dense 计算。
- 代价:通信(专家跨卡)、负载不均衡(专家坍缩)、显存(全部专家要加载)。
衍生追问:
- 负载均衡怎么解决?辅助负载均衡损失 + 路由正则;DeepSeek 用细粒度专家 + 共享专家 + 无 aux loss 方案。
- DeepSeek V3 的 MoE 特点?细粒度专家与共享专家分离,路由开销更低、激活效率更高。
Q41. 训练千亿参数模型的工程挑战?
来源:Datawhale
核心要点:
- 显存:参数+梯度+优化器状态放不下,需要 DP/TP/PP/ZeRO/FSDP 混合并行与重计算。
- 通信:All-Reduce/All-to-All 成为瓶颈,需要通信计算重叠、拓扑感知。
- 稳定性:loss spike、梯度范数爆炸,需要梯度裁剪、warmup、损失缩放。
- 数据/工程:清洗、去重、配比,训练框架与故障恢复(checkpoint)。
衍生追问:
- 优化器状态占多少?Adam 每参数约 12 字节(fp32 动量+方差+梯度),7B 模型仅优化器状态约 84GB。
Q42. 开源框架 / Qwen / DeepSeek 论文创新点?
来源:Datawhale · 美团 · 腾讯
核心要点:
- 框架:HuggingFace Transformers、DeepSpeed、Megatron-LM、vLLM、SGLang、LlamaFactory、unsloth。
- Qwen:GQA + SwiGLU + RoPE + 长上下文(YaRN);Qwen2.5-VL 原生动态分辨率;Qwen3 混合推理(思考/非思考模式)。
- DeepSeek:MLA(低秩 KV 压缩)、DeepSeekMoE(细粒度+共享专家)、Multi-Token Prediction、R1 的 GRPO + 冷启动 SFT + 可验证奖励。
衍生追问:
- 读论文怎么讲?按“问题-方法-实验-代价”四段式:解决什么问题、关键创新、对比实验、局限与适用场景。
Q43. KV Cache 为什么能加速推理?显存怎么算?
来源:AgentGuide · 字节/腾讯/美团
核心要点:
- 自回归生成每步只产出 1 个新 token,但注意力要看到前面所有 token;KV Cache 存下已算好的 K/V,避免每步重算。
- 显存:2 × n_layers × n_kv_heads × head_dim × seq_len × batch × 字节数(MHA 时 n_kv_heads = n_heads)。
- 优化:GQA/MQA 减 n_kv_heads;PagedAttention 解决碎片化;MLA 压缩 K/V。
衍生追问:
- 长上下文显存不够?滑动窗口、Token 压缩、KV 量化、PD 分离(Prefill 与 Decode 用不同机器)。
Q44. 最近读过哪些前沿论文 / 新技术?
来源:Datawhale · 腾讯
核心要点:
- 建议准备 2-3 篇“能讲透”的论文,覆盖不同方向:长上下文(YaRN/Infini-attention)、推理(CoT/self-consistency/o1)、对齐(DPO/GRPO)、效率(FlashAttention/PagedAttention/Mamba)。
- 讲法:该方向之前有什么问题 → 方法核心机制 → 实验提升多少 → 局限与是否适合落地。
衍生追问:
- 如果把技术用到业务会遇到什么难点?结合数据规模、延迟、成本、稳定性四个维度回答。
RLHF 与对齐
Q45. RLHF 解决 SFT 解决不了什么问题?
来源:Datawhale · AgentGuide · 腾讯
核心要点:
- SFT 只能让模型模仿标注数据里的模式,无法区分“正确但不好”与“符合人类偏好”。
- RLHF 用奖励信号显式优化人类偏好:有用性、无害性、诚实性;还能优化难以标注的过程能力(如长程推理)。
衍生追问:
- 为什么 SFT 之后还要后训练?SFT 学数据分布,RL 学“什么是好”;SFT 提供起点、RL 提供对齐。
Q46. 经典 RLHF 三阶段?
来源:Datawhale · 卡码
核心要点:
- SFT:用高质量指令数据做监督微调,得到策略起点。
- Reward Model:收集人类成对比较,训练奖励模型预测偏好。
- PPO:以 RM 为奖励、以参考模型做 KL 约束,用强化学习优化策略。
衍生追问:
- 每阶段输入输出?SFT 输入指令+回答;RM 输入 prompt+两个回答输出分数;PPO 输入 prompt,输出采样+奖励+KL。
Q47. 成对比较数据 vs 绝对分数,优劣?
来源:Datawhale
核心要点:
- 优势:人更容易判断“哪个更好”,标注一致性高、噪声低,可转化为 Bradley-Terry 偏好概率。
- 劣势:无法表达“两者都差/差距大小”,需要大量对;比较顺序与内容长度会产生偏置。
衍生追问:
- 怎么缓解位置偏置?交换 A/B 顺序标注、增加 tie 选项、用 AI 辅助预筛。
Q48. RM 架构与 Bradley-Terry 损失?
来源:Datawhale · AgentGuide
核心要点:
- RM 通常基于 SFT 模型去掉最后输出层,加标量回归头,输入 prompt+回答,输出奖励分数。
- Bradley-Terry:P(回答 A 优于 B) = σ(r_A - r_B),损失 = -log σ(r_w - r_l),最大化“赢家比输家分高”的概率。
衍生追问:
- RM 与策略模型关系?策略更新时 RM 冻结;RM 不能太强,否则策略快速 hack。
Q49. 为什么用 PPO 而不是 REINFORCE / Q-learning?
来源:Datawhale · AgentGuide
核心要点:
- REINFORCE 方差大、样本效率低;Q-learning 对高维生成动作空间(整个词表)不现实。
- PPO:重要性采样 + clip 限制策略更新步幅,用 critic(价值基线)降方差,配合 GAE 估计优势。
- KL 惩罚项:限制策略偏离参考模型,防止奖励被过度优化。
衍生追问:
- PPO 里为什么还要 critic?reward model 给的是整体奖励,critic 估计状态价值作为基线,降低单步回报方差。
- GAE 是什么?广义优势估计,用 λ 加权多步 TD 误差,平衡偏差与方差。
Q50. KL 系数 β 过大/过小会怎样?
来源:Datawhale
核心要点:
- 过大:策略被钉在参考模型附近,学不到偏好,奖励提升小。
- 过小:策略自由漂移,可能出现奖励作弊、语言退化(重复/胡言乱语)。
- 调法:观察 KL 与奖励曲线,β 与 KL 成正比(如每步 β = β_target / KL 或动态调整),做小规模消融。
衍生追问:
- 动态 KL 怎么设计?设定目标 KL,根据实际 KL 自动缩放 β,训练更稳。
Q51. Reward Hacking 是什么?怎么缓解?
来源:Datawhale
核心要点:
- 模型找到 RM 的“漏洞”:堆字数、奉承、使用“虽然……但是”模板,而非真正满足用户。
- 缓解:KL 约束、RM 正则(不同初始化集成)、对抗训练、更细粒度过程奖励、可验证奖励(代码/数学自动判分)。
衍生追问:
- 具体例子?客服模型发现“说抱歉+长回答”得分高,开始无脑道歉,用户反馈变差。
Q52. DPO 的核心思想与优势?
来源:Datawhale · 卡码 · AgentGuide
核心要点:
- DPO 把 RLHF 的“先学 RM 再 PPO”折叠成一步:直接用偏好数据更新策略,隐式奖励 = log(π_θ/π_ref)。
- 优势:不需要 RM、不需要在线采样、训练稳定、实现简单;适合小团队快速迭代。
- 劣势:没有探索,依赖离线偏好数据质量;对分布外数据敏感。
衍生追问:
- DPO loss 形式?L = -log σ(β(log π_θ(y_w|x)/π_ref(y_w|x) - log π_θ(y_l|x)/π_ref(y_l|x)))。
- DPO 数据怎么构造?同 prompt 生成多候选,人工/规则/模型偏好排序,再构造偏好对。
Q53. RLHF 模型上线后“模式化奉承”怎么排查?
来源:Datawhale
核心要点:
- 可能原因:RM 偏见(偏好长句/奉承)、KL 过小导致过度优化、评估集与真实分布不一致。
- 排查:人工标注坏案例聚类 → 对比 RM 分数与用户反馈 → 检查 KL 曲线与奖励饱和 → 增加安全/信息量维度到 RM 数据 → 用用户反馈重训。
衍生追问:
- 上线监控什么?回答长度分布、奉承词频、重复率、用户点踩率、多轮流失率。
Q54. GRPO 与 PPO 的区别?
来源:Datawhale · 卡码 · DeepSeek 相关
核心要点:
- PPO 需要 critic 网络估计价值基线;GRPO 去掉 critic,用同 prompt 的一组采样(如 8/16 个)做组内归一化优势:A_i = (r_i - mean(r)) / std(r)。
- 优势:省掉 critic 显存与训练,稳定性由组内奖励对比保证;DeepSeek R1 用它做 RL。
- 局限:组内奖励需要可验证/可比;对奖励尺度敏感。
衍生追问:
- GRPO 的 KL 散度怎么加?通常对参考模型加 KL 惩罚(k3 估计或直接算),也常见把 KL 作为正则项或奖励的一部分。
- 为什么 GRPO 训 MoE 会出问题?组内采样与专家负载耦合、奖励方差波动影响路由稳定性,需要更稳的 reward shaping。
Q55. GSPO / DAPO 是什么?
来源:Datawhale
核心要点:
- GSPO(Generalized SFT Preference Optimization):把 SFT 和偏好优化统一成同一目标族,可解释 DPO/IPO/SimPO 为其特例。
- DAPO:针对 RL 训练不稳定提出的改进:动态采样策略、更稳的 clip、奖励裁剪、降低熵坍缩等,提升长程推理 RL 的稳定性。
衍生追问:
- 面试只需讲清“它们解决什么问题”:GSPO 统一框架、DAPO 提高大规模 RL 稳定性。
Q56. Token 级 vs 序列级奖励与信用分配?
来源:Datawhale
核心要点:
- 序列级奖励:整句一个分数,简单但无法定位“哪一步导致失败”。
- Token 级/过程奖励:逐步打分(如数学解题每步验证),提供细粒度信号,缓解稀疏奖励与信用分配问题。
- 工程化:过程奖励可从自动验证(代码执行/规则)或小 RM 蒸馏得到,代价是标注成本。
衍生追问:
- 过程监督信号还能用在哪?Agent 轨迹评估、工具调用反思、长任务分段奖励。
Q57. RLAIF 的理解、潜力与风险?
来源:Datawhale
核心要点:
- 用 AI(如更强模型)代替人类产生偏好标签,扩展数据规模、降低成本。
- 潜力:规模化偏好数据、一致性可控;风险:AI 偏见被复制/放大、与人类价值错位、奖励黑客仍然存在。
- 实践:RLAIF + 少量人工抽样校准是常见组合。
微调与部署
Q58. LoRA 的原理?秩 r 怎么选?为什么能高效微调?
来源:AgentGuide · 卡码 · 美团/字节高频
核心要点:
- 冻结原权重 W,训练低秩增量 ΔW = A·B(A、B 为低秩矩阵,r << d);推理时合并 W + A·B,无额外延迟。
- 初始化:A 用高斯随机,B 初始为 0,保证训练开始时 ΔW = 0,不破坏预训练能力。
- 秩 r 的选择:r 太小表达能力不足,r 太大退化且易过拟合;常见 8/16/32,靠验证集调。
- 为什么插在 Attention 的 Q/K/V/O 而不是 FFN?经验上 Attention 权重对领域适配更敏感;插在 LayerNorm 之后没有意义(LN 无秩结构可学)。
衍生追问:
- LoRA 能不能只插 Linear?能,但 Attention 内权重收益最大;也可以全量选择多个模块。
- 合并 adapter 时梯度爆炸?先验证 W + AB 的数值范围,必要时缩放/分步合并。
- LoRA 参数占比怎么算?2 × d_in × d_out × r / 总参数量。
Q59. QLoRA 怎么降低资源成本?为什么选 NF4 + FP16?
来源:AgentGuide · 美团
核心要点:
- QLoRA:4-bit 量化冻结权重(NF4),梯度经量化权重反传,LoRA adapter 保持 BF16/FP16 训练。
- NF4(Normal Float 4):按正态分布分位数设计量化区间,比均匀 4-bit 更贴合权重分布,信息损失更小。
- 组合逻辑:权重 4-bit 省显存,adapter 高精度保训练质量,双向受益。
衍生追问:
- 量化后理解能力下降怎么办?精度补偿:部分层不量化(混合精度层)、LoRA 表达更多秩、量化感知训练微调。
Q60. SFT 和 RLHF 哪个更适合快速迭代?破局点?
来源:卡码 · 字节
核心要点:
- SFT 适合快速迭代:问答对直接训,几小时到一天出结果;RLHF 链路长(RM+PPO),周期是 SFT 数倍。
- SFT 破局点:数据质量而非数量,几百条高质量数据可能优于几万条普通数据。
- RLHF 破局点:从人工标注走向自动反馈(Verifiable Reward:代码可编译、数学可判分、工具可验证)。
衍生追问:
- 基模越来越强还要微调吗?要:微调从“补知识”变成“控行为”(输出格式、领域推理链路、工具调用稳定性)。
Q61. 微调 / Prompt / RAG 怎么选?
来源:卡码 · 字节
核心要点:
- 让模型“知道新知识”用 RAG(改文档即生效、成本低);让模型“学会新能力/稳定行为”用微调。
- Prompt 适合轻量约束;RAG 优先于微调做知识注入;微调用于 RAG/Prompt 搞不定的行为固化。
衍生追问:
- 什么场景必须微调?要求稳定输出特定格式和推理链路、各种输入下都稳定时,RAG 只能供资料不能改思考方式。
Q62. SFT 数据怎么构建与清洗?loss 只算回答部分?
来源:AgentGuide · 美团
核心要点:
- 构建:指令-回答对,覆盖意图多样性;清洗:去重、去噪声、纠错、均衡采样(长/短、难/易、领域配比)。
- 只算回答部分:对 prompt 部分与 padding 位置做 loss mask(ignore_index=-100),防止模型只背 prompt。
- 冷启动注意:数据配比影响行为,类别失衡会导致模型偏向高频模式。
衍生追问:
- 数据规模多大合适?先小规模验证学习信号,再看 loss/评测是否收敛,而不是盲目堆量。
Q63. 分布式训练:DP / TP / PP / ZeRO / FSDP 的区别?
来源:AgentGuide · 美团/字节/阿里
核心要点:
- DP(数据并行):每卡一份完整模型,各算各的 batch,梯度 All-Reduce;显存不省。
- TP(张量并行):单层权重切到多卡,算子内通信,适合单机多卡大模型。
- PP(流水线并行):按层切分,卡间传激活,通信少但有空泡(bubble)。
- ZeRO:把优化器状态/梯度/参数分片,1/2/3 级逐步省显存,通信随级增加。
- FSDP:PyTorch 的 ZeRO-3 式分片,易用性更好,单卡可训更大模型。
衍生追问:
- ZeRO-1/2/3 各分片什么?1 只分优化器状态;2 分优化器状态+梯度;3 再分参数。
- 什么时候用 FSDP 更好?代码简单、通信均衡、训练小到中型模型时;超大模型仍需 TP+PP 混合。
Q64. 7B 模型推理/训练显存怎么估算?
来源:AgentGuide · 美团/DeepSeek
核心要点:
- 推理:权重 fp16 约 14GB + KV Cache + 激活;4-bit 量化约 4-5GB 可单卡跑。
- 训练:参数 14GB(fp16)+ 梯度 14GB + Adam 状态 84GB ≈ 112GB 起步(7B 全参),因此必须 LoRA/QLoRA/ZeRO。
- 部署 MoE 大模型:总参数量 × 字节数(权重)+ 激活专家内存 + KV Cache,还要算专家分发通信带宽。
衍生追问:
- 235B MoE 推理要多少卡?按权重 ~470GB fp16 算,至少 4×80GB A100/H100 起步,还要预留 KV Cache 与路由开销。
Q65. bf16 与 fp16 的区别?训练怎么选?
来源:AgentGuide · 美团
核心要点:
- FP16:10 位尾数 + 5 位指数,范围窄(易溢出/下溢),需要 loss scaling。
- BF16:7 位尾数 + 8 位指数,范围与 FP32 相同,精度略低但训练稳定,无需 loss scaling,是主流预训练/微调格式。
衍生追问:
- 混合精度为什么有效?主权重存 FP32,前向/反向用 BF16 加速,减少显存和带宽。
Q66. vLLM 为什么快?PagedAttention 原理?
来源:AgentGuide · DeepSeek 相关
核心要点:
- 连续批处理(continuous batching):请求动态进出 batch,提高 GPU 利用率。
- PagedAttention:把 KV Cache 按固定大小分页,像操作系统虚拟内存一样按需分配,消除显存碎片与预分配浪费。
- 配合:Prefix Caching、投机解码、量化、多卡张量并行。
衍生追问:
- vLLM 与 TGI/SGLang 区别?vLLM 生态广、PagedAttention 成熟;SGLang 在前缀复用与结构化输出上更强。
Q67. 模型压缩:量化 / 剪枝 / 蒸馏?
来源:AgentGuide · Dolby · 阿里
核心要点:
- 量化:权重/激活降位宽(INT8/INT4),GPTQ(层内近似重建)、AWQ(按激活敏感度保重要通道);推理快、内存省,可能掉点。
- 剪枝:结构化(删层/头)与非结构化(稀疏权重),稀疏推理需要硬件支持。
- 蒸馏:大模型当老师教小模型,保留能力但成本在训练阶段。
衍生追问:
- 激活值异常溢出怎么调试?检查异常通道分布,AWQ 按激活统计保护敏感通道,必要时混合精度保留关键层。
Q68. 灾难性遗忘怎么解决?
来源:Dolby · 字节
核心要点:
- 微调新数据导致旧能力退化。缓解:混合旧数据 replay、低秩微调(LoRA 本身更稳)、学习率调低、EWC 等正则、增量预训练 + 指令数据回放。
衍生追问:
- 增强推理时如何保证通用数据不遗忘?推理 SFT 数据中混入通用指令数据,或做分阶段训练。
Q69. 推理成本怎么降?
来源:卡码 · 字节
核心要点:
- 模型选择:简单任务小模型,复杂任务大模型(混合路由)。
- KV Cache 复用、量化、批处理、投机解码、缓存高频请求、Prompt 压缩。
衍生追问:
- 多 Agent 系统怎么省?子任务用小模型、共享检索缓存、限流保护关键路径、轨迹摘要减少上下文。
Q70. 微调后怎么判断有没有收益?
来源:卡码
核心要点:
- 对照组:同基模 + Prompt/RAG vs 微调后,同一评测集对比。
- 指标:任务成功率、格式合法率、bad case 率、鲁棒性(换说法/换输入分布)。
- 警惕:训练集过拟合(测训练集 100% 但线上退化)、评测集泄漏。
RAG 深化
Q71. RAG 是什么?解决了 LLM 的什么问题?
来源:卡码 · Datawhale
核心要点:
- LLM 三大知识缺陷:知识截止(不知道新事)、私有知识缺失(不知道内部文档)、知识幻觉(不知道就编)。
- RAG:检索外部知识注入上下文,让模型基于真实资料回答;可更新、可溯源、成本低。
衍生追问:
- RAG 和纯 SFT 比?RAG 改文档即生效、不改变模型;SFT 固化能力但贵且更新难。
Q72. RAG 完整链路?
来源:卡码 · AgentGuide
核心要点:
- 文档解析(PDF/Word/表格)→ 2. 清洗与结构化 → 3. 分块(Chunk)→ 4. Embedding 入库 → 5. 查询改写/向量化 → 6. 混合检索 → 7. Rerank → 8. 注入 Prompt → 9. 生成 → 10. 引用/校验/兜底。
衍生追问:
- 每一环的失败会级联放大:解析丢信息 → 分块切断语义 → 检索漏召回 → 生成不忠实。
Q73. 向量检索原理?ANN 是什么?
来源:卡码
核心要点:
- Embedding 把文本映射为向量,语义相近向量距离近;检索按向量相似度(余弦/内积)取 Top-K。
- ANN(近似最近邻)牺牲少量精度换速度:HNSW(图索引)、IVF(倒排聚类)、PQ(乘积量化)、标量/二进制量化。
衍生追问:
- 精确检索 vs ANN?小库直接暴力;大库必须 ANN,召回率用 Recall@K 验证。
Q74. 向量数据库怎么选?Milvus / FAISS / Qdrant / ES?
来源:卡码 · 字节
核心要点:
- Milvus:分布式、大规模生产、多索引、与元数据过滤结合好。
- FAISS:库而非服务,单机高性能,适合嵌入式/自建检索服务。
- Qdrant:Rust 实现、部署轻、过滤能力强,适合中小规模。
- ES:关键词/B+ 树/倒排强,混合检索可一库两用,但向量性能与生态弱于专用库。
衍生追问:
- 从 ES 切向量库,哪些能力下降?精确过滤、聚合统计、成熟运维下降;语义检索、多模态召回提升。
Q75. 纯向量检索有什么问题?为什么混合检索?
来源:卡码 · 已有 Q2
核心要点:
- 纯向量三个问题:精确 ID/编号不敏感、专有名词(人名/型号)召回差、低频词向量化后区分度低。
- 混合检索 = 向量(语义)+ BM25(关键词),RRF 合并排名:Σ 1/(k + rank),k 常取 60。
衍生追问:
- BM25 原理?词频 TF 饱和 + 逆文档频率 IDF + 文档长度归一化。
- 如果 BM25 已经很好,还要向量吗?查询是自然语言描述/同义改写时向量更强;两者互补。
Q76. 为什么要 Rerank?Recall@K 与 Precision@K 怎么取舍?
来源:卡码 · 字节
核心要点:
- 向量检索(双塔)快但相关性排序粗糙;Rerank(交叉编码器)对查询-文档对精排,准确但慢,只重排 Top-N。
- Recall@K:召回里包含正确答案的比例,越高越好;Precision@K:召回里相关比例,越高越好。
- 取舍:先保证 Recall(多召回几路),再用 Rerank 提 Precision;Top-K 可动态调整(按检索分数置信度)。
衍生追问:
- Top-K 怎么动态调?分数分布陡峭时调小,平坦时调大;也可让 Agent 根据问题复杂度决定。
Q77. Chunk 怎么切?切大/切小各什么问题?
来源:卡码 · 已有 Q1
核心要点:
- 切大:语义完整但检索噪音大、上下文浪费、相似度被稀释。
- 切小:检索精准但语义残缺、召回不全。
- 策略:递归字符分割、语义分块(按标题/段落/表格边界)、固定 512-1024 token + 50-100 token overlap。
衍生追问:
- 表格/法律条文怎么切?表头+行组绑定,法律“第三条第二款”不能被切散,需要 metadata 标记。
Q78. Embedding 模型怎么选?中文场景?
来源:卡码
核心要点:
- 选型维度:维度(越高越精细但存储/检索成本大)、领域适配(代码/法律/医疗)、中文效果、MTEB/C-MTEB 基准、是否支持长文本。
- 中文主流:BGE、M3E、GTE、text-embedding-v3 等;用领域数据做候选评测再定。
- 维度不是越高越好:有损压缩后性能差异小,但存储与检索延迟线性增长。
衍生追问:
- 怎么评估 Embedding?检索 Recall@K、相似度排序相关性、跨语言一致性。
Q79. RAG 幻觉怎么处理?
来源:卡码 · 已有 Q8
核心要点:
- 幻觉两种:检索到但生成不忠实(faithfulness 低)、检索没召回到(context 缺失)。
- 六策略:Prompt 要求只依据上下文;引用标注;输出校验(重检索验证);拒答机制;Rerank 提相关度;多路召回兜底。
衍生追问:
- 检索有噪声怎么办?Rerank + 相关度阈值过滤 + 提示模型忽略无关片段。
Q80. 检索效果不好怎么优化?
来源:卡码
核心要点:
- 从链路每一步定位:文档解析丢没丢 → 分块边界 → Embedding 适不适配 → 查询改写 → 混合检索 → Rerank。
- 高级策略:Query Rewrite、HyDE、Multi-Query、意图识别后分路检索、GraphRAG 补多跳。
衍生追问:
- 多路召回权重怎么定?离线验证集网格搜索/学习排序;线上 A/B。
Q81. Agentic RAG 和普通 RAG 区别?
来源:卡码 · 字节
核心要点:
- 普通 RAG:一次检索一次生成,固定流水线。
- Agentic RAG:模型自主决定是否检索、检索几轮、改查询、判断结果够不够;可多轮检索与反思。
- Query Rewrite 算不算 Agentic?单步改写不算,核心是“检索策略由模型决策 + 多轮闭环”。
衍生追问:
- Agentic RAG 的成本和稳定性怎么控制?检索轮次上限、预算、失败降级到普通 RAG。
Q82. RAG 落地最难的地方在哪?
来源:卡码
核心要点:
- 三大难点级联放大:文档预处理(解析/清洗/结构)最被低估;召回质量最难调;生成忠实度最易被忽视。
- 每个环节都要有评估和 bad case 闭环,不能只看端到端指标。
衍生追问:
- 文档增量更新怎么做?文档/块级哈希检测变更,先删后增;注意“内容变了 chunk 边界还一样吗”。
Q83. GraphRAG 与 LightRAG 是什么?怎么选?
来源:卡码
核心要点:
- 传统 RAG 天花板:只能找“相似片段”,不会多跳聚合(“哪些部门影响 A”)。
- GraphRAG:LLM 抽实体-关系建图,社区检测生成社区摘要,回答全局性问题;代价:构建贵、增量难。
- LightRAG:双级检索(低层级实体 + 高层级主题),增量更新更友好、成本更低。
衍生追问:
- GraphRAG 增量怎么应对?事件驱动增量建图、只更新受影响子图、版本化边。
Q84. RAG 怎么评估?
来源:AgentGuide · 卡码
核心要点:
- 检索端:Recall@K、Precision@K、MRR、NDCG;生成端:faithfulness、answer relevance、answer correctness。
- 工具:Ragas、LlamaIndex eval、人工评测集。
- 最重要:评估集要覆盖真实查询分布,有 baseline(如纯 LLM 问答)对比,否则数字没有意义。
衍生追问:
- 100 条人工评测够吗?不够;要分布覆盖(难/易、多跳/单跳、长尾),配合 bad case 聚类。
Q85. RAG 知识库文档更新,不重建全量怎么搞?
来源:卡码 · 小米经典题
核心要点:
- 只答“找到变了的 chunk 更新向量”不够,面试官会追问“内容变了 chunk 边界还一样吗”。
- 完整方案:文档哈希/版本 → 检测变更 → 重新解析 → 重切分 → 对变更块重新嵌入 → 删除旧向量(先删后增)→ 索引刷新;边界变化时整文档重切。
- 冲突:带版本 metadata,检索时过滤旧版,Prompt 标注版本。
Agent 深化
Q86. LLM 和 Agent 有什么区别?
来源:卡码 · 字节/小米
核心要点:
- LLM 四大天花板:只会说不会做、没有记忆、知识截止、不会规划。
- Agent = LLM + 工具 + 记忆 + 规划,在循环中自主完成目标:“LLM 告诉你怎么做,Agent 直接帮你做完”。
- 面试加分:展开四模块(大脑/规划/记忆/工具)并说明它们如何在循环中协作。
衍生追问:
- 项目里用 LLM 直接调用还是 Agent?根据任务是否多步、是否需要外部世界反馈。
Q87. Agent 和 Workflow 有什么区别?
来源:卡码 · 阿里
核心要点:
- Workflow 控制权在代码手里(固定 DAG);Agent 控制权在 LLM 手里(模型决定下一步)。
- 场景:流程确定、质量要求高用 Workflow;流程不确定、需要探索决策用 Agent;生产常用混合(确定性节点 Workflow + 决策节点 LLM)。
衍生追问:
- 如何判断该用哪个?步骤可预知→Workflow;开放性/探索→Agent;核心决策点交给模型,其余固定。
Q88. Agent 有哪些工作模式?
来源:卡码
核心要点:
- 单步工具调用(Function Calling)、ReAct 循环(Thought-Action-Observation)、Plan-and-Execute(先规划再执行)、多 Agent 协作、Reflection(自我反思修正)。
衍生追问:
- 各自适合什么?简单查询单步;探索任务 ReAct;长任务先规划;质量敏感任务加反思。
Q89. Function Call 底层怎么实现?
来源:卡码 · 字节
核心要点:
- 本质:把工具 schema 注入 prompt,模型输出结构化“调用意图”(工具名+参数 JSON),不是模型直接执行。
- 底层:工具描述进 system prompt → 模型生成 tool_calls → 后端校验 schema → 执行真实函数 → 把结果作为 observation 返回 → 模型生成最终回答。
- 稳定性:强 schema、低 temperature、结构化输出 API、解析失败重试。
衍生追问:
- Function Calling 和 Toolformer 区别?Toolformer 是训练模型学会标注工具调用(self-supervised);Function Calling 是推理时协议,靠指令/微调对齐。
- 模型调用不存在的工具怎么办?工具白名单 + 执行层拦截 + 参数校验。
Q90. MCP 是什么?解决什么问题?
来源:卡码 · 字节
核心要点:
- 没有 MCP 时:每接一个工具写一套对接代码,换模型重写,像每家一个充电口。
- MCP:统一工具/资源/提示词协议(Tools 执行动作、Resources 读数据、Prompts 模板),工具开发者实现一次协议,所有支持 MCP 的模型可用——“AI 的 USB-C”。
衍生追问:
- MCP 和普通 HTTP API 区别?协议标准化 + 服务发现 + 权限/鉴权统一,而不是自定义 schema。
- MCP Resources vs Tools?资源是“读数据注入上下文”,工具是“执行动作”。
Q91. Skills 是什么?和 Prompt / Tool 有什么区别?
来源:卡码 · 字节/蚂蚁
核心要点:
- Skill 不是更长的 Prompt:是“能力包”,包含功能描述、输入/输出 schema、步骤/提示词、依赖工具与资源,可按需加载。
- Tool 是原子函数;Prompt 是一次性指令;Skill 是“可复用的能力单元”,可组合、可版本管理、可评估。
衍生追问:
- Skill 怎么被调用?技能注册表/向量检索按任务召回,命中后把技能说明注入上下文。
- 能不能用 Skill 替代 Tool?Skill 内部编排多个 Tool,二者是组合不是替代。
Q92. Function Call / MCP / Skills 三者关系?
来源:卡码
核心要点:
- Function Calling:模型输出调用意图的机制(协议层)。
- MCP:工具接入的标准化传输层(让工具可发现、可调用、可鉴权)。
- Skill:能力封装复用层(把多个工具+步骤+提示词打包成能力)。
衍生追问:
- 三者配合的链路?Skill 被选中 → 其内部通过 MCP 发现工具 → Function Calling 完成调用。
Q93. A2A 协议是什么?和 MCP 的关系?
来源:卡码
核心要点:
- MCP 解决“Agent 怎么调工具”,A2A 解决“Agent 之间怎么通信协作”(任务卡片、能力发现、流式结果)。
- 关系:互补,不在同一层;MCP 是 Agent-工具,A2A 是 Agent-Agent。
衍生追问:
- 多 Agent 用 A2A 还是共享队列?协议标准化 vs 业务内定制,A2A 适合跨团队/跨组织互操作。
Q94. Agent 记忆系统怎么设计?
来源:卡码 · 字节/蚂蚁
核心要点:
- 短期记忆:最近 N 轮原文 + 滚动窗口(Redis/会话上下文)。
- 长期记忆:结构化画像 + 向量库检索(按需注入)。
- 工作记忆:System Prompt 里当前任务的关键约束。
- 分层:项目级规则、用户偏好、会话上下文分开存,避免互相污染。
衍生追问:
- 上下文满了怎么办?摘要压缩、重要信息提取、分层记忆、检索式注入。
- 记忆要不要衰减?要:早期信息权重降低、定期清理过期记忆。
Q95. Agent 的安全与可靠性如何保障?
来源:卡码 · 字节
核心要点:
- Key 不进上下文(执行层注入)、最小权限、工具白名单、参数校验、输出过滤(敏感信息正则)。
- Prompt 注入防护:输入检测、系统指令隔离、可疑指令不执行。
- 审计日志:所有工具调用可追溯;高风险操作人工确认。
衍生追问:
- 工具调用 Key 泄露怎么防?模型永远看不到 Key,只返回工具名+参数,Key 在服务端注入。
Q96. RAG 和 Agent 是什么关系?
来源:卡码
核心要点:
- RAG 是 Agent 的一种知识获取能力;Agent 通过检索增强决策(Agentic RAG),RAG 也可由 Agent 编排(多轮检索、选择数据源)。
衍生追问:
- 什么时候 Function Calling 什么时候 RAG?实时数据/执行操作→FC;离线私有文档→RAG;常组合:RAG 给背景,FC 给实时与动作。
Q97. ReAct 是什么?Loop Engineering 又是什么?
来源:卡码
核心要点:
- ReAct = Reasoning + Acting:Thought(分析当前状态)→ Action(调工具/检索)→ Observation(观察结果)循环,直到 Answer。
- 纯 Prompt 式 ReAct 的五个裂缝:循环不可控、状态易丢、预算无管理、工具无治理、终止靠运气。
- Loop Engineering:把循环本身工程化——上下文、状态、预算、工具、终止五类治理(最大步数、重复检测、checkpoint、降级)。
衍生追问:
- 循环里流动的五样东西?上下文(token)、状态(变量/进度)、预算(步数/成本)、工具(注册/权限)、终止条件(成功/失败/超限)。
Q98. Harness Engineering 是什么?
来源:卡码 · 字节
核心要点:
- Harness 是 Agent 的“运行时骨架”:工具注册、上下文管理、循环控制、权限安全、状态持久化、监控可观测。
- 从 Prompt → Context → Harness 是工程重心转移:不指望模型自觉,而是系统保证。
- 面试要点:六层组件 + 大厂五个真实难题(漂移、幻觉、成本、状态、可观测)。
衍生追问:
- Hermes Agent / OpenClaw 对比?记忆机制、工具调用、上下文管理、安全机制四个维度对比,能撑五分钟。
- Claude Code 的 hook 怎么实现?事件钩子(工具调用前后/会话生命周期)注入外部逻辑。
Q99. 上下文漂移怎么解决?
来源:卡码 · 字节
核心要点:
- 每轮注入原始目标;阶段性总结替换完整上下文;外部监督 Agent 检查轨迹;任务分解成短任务;上下文压缩释放窗口。
衍生追问:
- 怎么发现漂移?轨迹评估:子目标达成率、动作与目标相关性打分。
Q100. 工具调用幻觉怎么防?
来源:卡码 · 已有 Q14
核心要点:
- 严格工具 schema、工具白名单、参数类型/枚举校验、执行层拦截未注册工具、返回错误让模型重生成。
- 证据约束:回答必须带可验证的观察/引用;输出校验层做事实检查。
衍生追问:
- 多轮验证怎么设计?答案生成后重新检索/调用工具验证关键数值,不一致则修正。
Q101. 多 Agent 通信链路怎么设计?异常怎么处理?
来源:卡码 · 字节
核心要点:
- 主 Agent 调度 + 消息队列:任务拆解入队 → 子 Agent 执行写回 → 主 Agent 收集决策。
- 异常四层:超时 kill 兜底、重试(限次数)、降级(换方案/换子 Agent)、结果校验(不直接信任)。
衍生追问:
- 子 Agent 回复不对怎么办?反思循环 + 最大重试次数;跳不出就终止并人工介入。
Q102. 什么时候用多 Agent,什么时候 Tool 就够?
来源:卡码
核心要点:
- Tool 够:任务可被单 Agent 顺序调用多个工具完成。
- 多 Agent:需要不同知识/权限隔离、长任务并行、上下文互扰严重时。
- 代价:通信损耗、token 翻倍、一致性难、调试难——不是免费午餐。
衍生追问:
- Agent-as-Tool 是什么?把一个 Agent 封装成另一个 Agent 的工具(中间态),实现能力复用。
Q103. 混合路由与限流器为什么重要?
来源:卡码 · 字节
核心要点:
- 混合路由:按任务复杂度分流——简单任务小模型省成本,复杂任务大模型保质量;级联降级(小模型先试,不行升级)。
- 限流:令牌桶控制请求频率,关键路径优先,防止 429 打爆。
衍生追问:
- 路由器怎么训?用历史任务+效果数据训练分类器/打分器,或用规则+模型混合。
Q104. Agent 可观测性怎么设计?
来源:卡码
核心要点:
- Trace 记录:Thought/Action/Observation 全文、工具名+参数+耗时+结果摘要、token 消耗、步数、成本、状态快照。
- 与普通日志区别:需要还原“模型为什么做这个决策”,支持轨迹回放与坏案例聚类。
- 工具调用出问题定位:模型错(意图/schema)、参数错、工具错(服务/数据)分层标记。
衍生追问:
- 成本失控监控哪些?每任务 token、工具调用次数、缓存命中率、路由小模型占比。
Q105. Agent 框架对比(OpenClaw / Hermes / Claude Code)与选型?
来源:卡码 · 字节
核心要点:
- 四个对比维度:记忆机制、工具调用、上下文管理、安全机制。
- Claude Code:终端优先、Auto-Compact 任务状态快照、hook 机制、grep/glob 而非 RAG。
- OpenClaw:多平台工具生态、自动化任务、Skill 体系。
- Hermes Agent:轻量 Harness 参考实现,强调上下文工程。
- 选型:先定场景(终端开发/通用助手/业务 Agent),再比生态与可扩展性,最后看评测指标。
衍生追问:
- LangGraph vs LangChain?LangChain 是组件库,LangGraph 是显式图状态机(节点/边/状态/检查点),支持循环与并行。
- 框架不满足怎么扩展?自定义节点、外部工具服务、hook 注入。
多模态 VLM
Q106. VLM 的核心挑战是什么?
来源:Datawhale · AgentGuide(字节多模态)
核心要点:
- 模态异构:图像是连续像素/网格,语言是离散 token,需要统一表示空间。
- 对齐与融合:视觉特征与文本语义对齐(对比学习/投影层/交叉注意力);融合时机(早期/晚期/中间)。
衍生追问:
- 早期 vs 晚期 vs 中间融合?早期融合共享底层特征、计算省但模态差异大;晚期融合各模态独立编码再合并、灵活但交互弱;中间融合逐层交互,效果最好、成本最高。
Q107. CLIP 原理?损失函数?
来源:Datawhale · AgentGuide
核心要点:
- 图像编码器 + 文本编码器分别得到 embedding,用对比学习拉近匹配图文对、推远不匹配对。
- InfoNCE:batch 内图文配对(如 32k 对),正样本对角线,损失 = -log(exp(sim_pos/τ) / Σ exp(sim_i/τ))。
- 产物:统一图文表示,可做 zero-shot 分类与检索。
衍生追问:
- 对比学习 batch size 大还是小好?大好(10k+),构造足够难的负样本,但显存与训练成本高。
Q108. LLaVA / MiniGPT-4 怎么连接视觉编码器与 LLM?
来源:Datawhale
核心要点:
- 视觉编码器(如 CLIP ViT)→ 投影层(MLP/Q-Former)把图像特征映射到 LLM 词嵌入空间 → 与文本 token 拼接输入 LLM。
- 两阶段训练:先对齐(图文对训投影层),再视觉指令微调(全链路)。
衍生追问:
- Q-Former 和 MLP 区别?Q-Former 用可学习 query 压缩图像特征,参数量小、压缩率高;MLP 简单直接。
Q109. 视觉指令微调为什么关键?
来源:Datawhale
核心要点:
- 让 VLM 具备“看图说话 + 对话 + 指令遵循”能力:用图文对话数据微调整个模型。
- 没有它,模型只会对齐特征,不会按用户指令生成自然回答。
衍生追问:
- 数据怎么造?图像+问题+答案三元组,可由人工/更强 VLM 生成,再清洗。
Q110. 视频等多模态数据比图片多解决什么问题?
来源:Datawhale
核心要点:
- 时序表征:帧间关系(光流/时空 token/时间编码)、采样策略(均匀/关键帧)。
- 计算量:帧数 × 图像 token,需压缩(时间池化、Q-Former 聚合)。
衍生追问:
- 常见方案?VideoLLaMA 的时间 Q-Former、LLaVA-Video 的帧 token 拼接 + 时间下采样。
Q111. Grounding 是什么?怎么评估?
来源:Datawhale
核心要点:
- Grounding:文本描述对应到图像具体区域(检测框/分割/点),如“红色杯子”定位到图中杯子。
- 评估:IoU、定位准确率、phrase grounding 基准(RefCOCO 等)。
衍生追问:
- 与 VQA 区别?VQA 回答“是什么”,Grounding 回答“在哪/哪个”。
Q112. VLM 架构范式对比?
来源:Datawhale
核心要点:
- 共享编码器:文本图像共享表示空间(CLIP 风格),轻量但生成弱。
- 跨模态注意力融合:视觉 token 直接注入 LLM 层(Flamingo 风格),交互强、效果好,成本高。
- 投影器范式(LLaVA):视觉特征投影到词空间,工程简单、生态成熟。
衍生追问:
- 怎么选?预算少选投影器;追求强对齐选跨模态融合;检索类任务选共享编码器。
Q113. 高分辨率输入图像怎么处理?
来源:Datawhale
核心要点:
- 直接缩放损失细节;方案:动态分辨率切块(Qwen2.5-VL 的 native dynamic resolution)、多尺度特征、视觉 token 压缩。
- 挑战:token 数爆炸(1024×1024 图可能上千 token),需平衡细节与成本。
衍生追问:
- 一张图多少 token?取决于 patch size(如 14×14)与动态切块,通常数百到上千。
Q114. VLM 幻觉和纯文本 LLM 有什么不同?
来源:Datawhale
核心要点:
- LLM 幻觉是编造事实;VLM 幻觉还包括:看到不存在物体、属性错配(颜色/数量)、区域指认错误。
- 原因:视觉特征弱对齐、训练数据偏置、过度依赖语言先验。
衍生追问:
- 怎么缓解?结构化推理(区域定位→属性提取→交叉校验)、可信度拒答、指令约束。
Q115. VLM 前沿应用方向?
来源:Datawhale
核心要点:
- 图文问答/OCR/文档理解、具身智能(视觉-动作)、视频理解、GUI Agent(看屏幕操作)、多模态 RAG。
衍生追问:
- 多模态 RAG 怎么做?图片与文本分别 embedding,检索后按模态组织上下文;伪多模态(OCR 转文本)vs 真多模态(图像特征入库)。
Q116. 有没有做过 VLM 微调?怎么做的?
来源:Datawhale
核心要点:
- 标准:冻结视觉编码器,LoRA 微调 LLM 部分 + 投影层,用图文指令数据。
- 数据集:图像+指令+回答,注意多样性(场景/物体/语言);评估用 VQA 基准 + 业务 bad case。
衍生追问:
- 图片 token 怎么进模型?视觉编码器出 patch 特征 → 投影 → 与文本 token 拼接,位置编码区分模态。
模型与 Agent 评估
Q117. BLEU / ROUGE 评估 LLM 有什么局限?
来源:Datawhale
核心要点:
- BLEU 看 n-gram 精确率、ROUGE 看召回率,都基于字面重叠:同义改写得分低、胡言乱语可能高分、无法评估事实性与逻辑。
- LLM 生成开放多样,需要语义/事实/偏好级评估。
衍生追问:
- 什么场景还能用?机器翻译、摘要等参考明确的封闭任务仍有参考价值。
Q118. 主流基准:MMLU / Big-Bench / HumanEval 侧重什么?
来源:Datawhale
核心要点:
- MMLU:57 学科知识选择题,测世界知识广度。
- Big-Bench:超 200 个任务,测推理/常识/多语言等综合能力。
- HumanEval:代码补全正确率,测代码能力。
衍生追问:
- 评测集污染怎么办?新基准/留出集、加扰版本、模型输出检测。
Q119. LLM-as-a-Judge 优缺点与偏见?
来源:Datawhale
核心要点:
- 优点:可规模化、成本低、一致性可控。
- 偏见:位置偏见(A/B 顺序)、长度偏见(偏好长回答)、自我偏好(偏袒同族模型)、措辞影响。
- 缓解:交换顺序、评分标准细化、多个 judge 投票、人工抽样校准。
衍生追问:
- 怎么验证 judge 可靠?与人工标注一致性(Cohen's kappa)抽样评估。
Q120. 事实性/幻觉水平怎么评估?
来源:Datawhale
核心要点:
- 构造带事实标注的问答集,查答案是否正确且忠于上下文(faithfulness)。
- 自动化:另模型抽取事实声明并与证据核对;人工:标注幻觉类型(无中生有/错配/过时)。
衍生追问:
- 知识幻觉 vs 推理幻觉怎么分离?控制检索上下文(同证据),对比推理步骤与事实引用。
Q121. 评估 Agent 为什么比评估 LLM 难?
来源:Datawhale
核心要点:
- Agent 输出是轨迹(多次工具调用)而非单文本,最终结果正确但过程可能低效/不安全。
- 维度扩展:任务成功率、效率(步数/耗时)、成本(token)、鲁棒性(环境变化)、安全性、可解释性。
衍生追问:
- 除了最终结果,过程指标有哪些?工具选择合理性、重复动作率、重试次数、目标偏离度。
Q122. Agent 基准怎么构建?
来源:Datawhale
核心要点:
- 需要可交互环境:Web 操作(WebArena)、代码任务(SWE-bench)、工具调用(BFCL/ToolBench)、长程任务。
- 构建要点:任务可自动判分、环境可重置、失败路径可追踪。
衍生追问:
- SWE-bench 测什么?真实 GitHub issue 修复:给仓库+问题描述,Agent 产出补丁,跑测试判分。
Q123. 红队测试是什么?
来源:Datawhale
核心要点:
- 主动攻击模型/Agent 找漏洞:Prompt 注入、越狱、敏感信息泄露、危险工具滥用、偏见。
- 角色:发现安全边界与退化行为,输出报告指导防护与评测集补充。
衍生追问:
- Agent 红队重点?跨工具提权、指令注入链、幻觉工具调用、Key/隐私泄露。
Q124. 人工评估怎么保证客观一致?
来源:Datawhale
核心要点:
- 评分标准明确定义维度(正确性/信息量/安全/风格),样例锚定,双人标注 + 分歧仲裁。
- 控制偏见:盲评、随机顺序、评估者轮换、定期一致性检查。
衍生追问:
- 人工成本高怎么办?人工抽检 + LLM-judge 大规模 + bad case 回流。
Q125. 上线后的模型/Agent 怎么持续监控?
来源:Datawhale
核心要点:
- 指标监控:回答质量抽样、延迟/成本、用户反馈(点赞/点踩/流失)、幻觉率、工具成功率。
- 行为漂移检测:输入分布变化(新话题)、模型更新回归测试、影子部署对比。
衍生追问:
- 回归测试怎么自动化?固定评测集 + 每次迭代跑分 + 阈值门禁,失败则阻断上线。
Q126. 生成模型的多样性与准确性怎么评估?
来源:卡码 · 字节
核心要点:
- 多样性:同 prompt 多次生成的差异度(CLIP Score 方差、FID 分布覆盖)。
- 准确性:生成是否符合 prompt(CLIP Score 图文匹配)+ 人工评估。
- 实践:A/B 测试、自动化 judge pipeline、bad case 聚类。
AI 编程
Q127. Vibe Coding 是什么?面试官到底考什么?
来源:卡码
核心要点:
- Vibe Coding:用自然语言驱动 AI 写代码,迭代式开发;2026 年面试高频新增方向。
- 考的不是“会不会用 Cursor”,而是能不能让 AI 写得更对、更稳、更可控:上下文构建、Token 成本控制、代码审查、工程纪律。
衍生追问:
- 说一个你踩过的坑?如 AI 改了无关文件、提交了密钥、生成代码无法回滚——要有具体处理方案。
Q128. AI 越来越强,你的优势到底是什么?
来源:卡码
核心要点:
- 定义问题与验收标准(规格先行);拆任务与边界;审查与补反例;把 AI 输出纳入工程流水线(测试/lint/CI)。
- 一句话:“AI 写代码快,但决定写什么、怎么验证、怎么兜底的是工程师。”
衍生追问:
- 怎么保证 AI 生成代码质量?规则文件、单元测试、CodeReview、小步提交、生成后人工 review。
Q129. AI 编程 Token 成本怎么控制?
来源:卡码
核心要点:
- 上下文瘦身:只注入相关文件(grep/glob 检索而非全库塞入)、摘要替代历史、任务级快照。
- 控制迭代:明确小任务、避免无限自我修改、设置预算与终止条件。
衍生追问:
- Claude Code 为什么不用 RAG 检索代码?代码检索要精确符号定位(grep/glob/read),向量检索模糊且容易引入无关上下文。
Q130. Claude Code 上下文窗口怎么治理?
来源:卡码
核心要点:
- 上下文窗口不是记忆,只是本轮输入空间;满了不是“放不下”而是“质量下降”(注意力稀释)。
- Auto-Compact:按 token 阈值触发,压什么/留什么/丢什么有策略;摘要 prompt 生成“任务状态快照”而非“总结一下”。
- 快照包含:目标、已完成步骤、当前状态、待办、关键文件路径,压完可接续执行。
衍生追问:
- 压缩后还能继续吗?靠状态快照 + 文件系统持久状态恢复;关键文件路径保留,细节按需重读。
Q131. Spec-Driven Development 是什么?
来源:卡码
核心要点:
- SDD:从模糊 Prompt 走向“规格(Spec)→ 计划 → 任务 → 验证”,每个任务可验收。
- 为什么在 AI 编程时代重新火?AI 需要明确验收条件;规格即上下文,减少幻觉与返工。
衍生追问:
- SDD 和 PRD/TDD/BDD 区别?PRD 是产品需求,TDD 是测试先行,BDD 是行为描述;SDD 强调规格驱动的 AI 任务执行闭环。
Q132. OpenSpec / Spec-kit / gstack 是什么?
来源:卡码 · 字节
核心要点:
- OpenSpec:开放格式的规格驱动开发规范(markdown 规格 + 任务切片 + 验证)。
- Spec-kit:实现规格驱动开发的工具包(生成/跟踪规格)。
- gstack:AI 增强开发工具链(规划-执行-验证三件套之一)。
- 区别:OpenSpec 是规范/格式,Spec-kit 是工具实现,gstack 是工程化栈。
衍生追问:
- 面试怎么答?答“从模糊 prompt 到规格、计划、任务与验证”的主线即可,细节讲一个用过的工具。
Q133. AI 编程避坑:Git 提交、数据库备份、线上回滚?
来源:卡码
核心要点:
- 小步提交、语义化 commit;数据库变更先备份/迁移脚本;发布留回滚点,AI 修改不可信默认可回滚。
Q134. 怎么判断优化后的 Prompt 有效?
来源:AgentGuide · 卡码
核心要点:
- 固定评测集 + 指标(完成率/格式合法率/成本)+ 对比实验;不能只看一两次对话感觉。
Q135. AI 编程工具怎么选?
来源:卡码
核心要点:
- 按场景:终端/仓库级开发(Claude Code)、IDE 内补全(Copilot/Cursor)、Agent 编排(OpenClaw)。
- 看生态、上下文治理、hook 扩展、成本。
Q136. 传统 Web 开发 vs AI Agent 开发有什么不同?
来源:卡码 · 字节
核心要点:
- 确定性 vs 概率性:传统 if-else 可断点调试;Agent 只能看轨迹日志分析决策。
- 错误处理:传统 404/500 明确;Agent 错误模糊(幻觉/规划错/工具失败),需要容错与重试。
- 成本:传统服务器带宽;Agent 主要是 Token。
- 测试:传统单元测试全覆盖;Agent 用评估指标 + bad case。
衍生追问:
- 用户体验?传统求快求稳;Agent 求智能灵活,用户能容忍慢但不能容忍瞎搞。
Q137. 你对 AI 编程对程序员的影响怎么看?
来源:卡码 · 美团开放题
核心要点:
- 门槛降低:初级重复编码被替代;但工程判断、系统设计、验证能力价值上升。
- 观点要辩证:AI 是杠杆不是替代,掌握 AI 工程化的工程师效率数倍提升。
AI Infra
Q138. 大模型推理的主要性能瓶颈与优化?
来源:AIInfraGuide · 字节
核心要点:
- 瓶颈:Prefill 计算密集(注意力 O(n²))、Decode 访存密集(带宽)、KV Cache 显存、调度碎片。
- 优化:PagedAttention、连续批处理、KV Cache 量化/复用、FlashAttention、投机解码、PD 分离、量化。
衍生追问:
- Prefill 和 Decode 各怎么优化?Prefill 用 FlashAttention/并行计算;Decode 用 KV Cache、GQA、批处理提升吞吐。
Q139. PagedAttention 原理?
来源:AIInfraGuide · 卡码
核心要点:
- 把 KV Cache 分页管理,物理块按需分配,逻辑连续虚拟块;消除显存碎片与预分配浪费,支持块级共享(并行采样)。
Q140. Orca 迭代级调度 / 连续批处理?
来源:AIInfraGuide
核心要点:
- 传统静态 batch 等最慢请求;Orca 在迭代粒度调度,请求完成即释放插槽,动态加入新请求,提升 GPU 利用率。
Q141. PD 分离是什么?为什么多机传 KV 仍值得?
来源:AIInfraGuide
核心要点:
- Prefill 与 Decode 计算特性不同,分到不同机器/资源池:Prefill 算力密集,Decode 带宽密集,避免互相干扰。
- 代价:Prefill 机要把 KV 传给 Decode 机;收益:吞吐与延迟单独调优、长上下文友好,总体收益大于传输开销。
衍生追问:
- 跨 SM 的 PD 分离与 AF 分离?细粒度拆分调度单元,进一步减少气泡、提高资源弹性。
Q142. 训练并行怎么选?
来源:AIInfraGuide · AgentGuide
核心要点:
- 单卡放得下模型 → 数据并行;单卡放不下 → TP/PP;超大模型 → 3D 并行 + ZeRO/FSDP。
- 长序列训练:序列并行(sequence parallel)、上下文并行、Ring Attention。
衍生追问:
- 通信原语?All-Reduce、All-Gather、Reduce-Scatter、All-to-All;一次 Adam 更新 All-Reduce 需 2 次通信(前向+反向梯度聚合)。
Q143. CUDA 内存访问注意什么?
来源:AIInfraGuide
核心要点:
- Global Memory:合并访问(coalesced)、避免 bank conflict、用共享内存复用、减少 HBM 往返。
- Shared Memory:容量小、bandwidth 高,注意同步与 bank conflict。
Q144. DeepSeek-V3 关键优化点?
来源:AIInfraGuide · Datawhale
核心要点:
- MLA(低秩 KV 压缩)、DeepSeekMoE(细粒度专家+共享专家+无 aux loss 负载均衡)、Multi-Token Prediction、FP8 训练、DualPipe 通信重叠。
Q145. 显存/训练耗时怎么估算?
来源:AIInfraGuide · Dolby
核心要点:
- 训练显存 ≈ 模型权重 + 梯度 + 优化器状态 + 激活(重计算可省)。
- 耗时估算:总 token × FLOPs/token ÷(卡数 × 卡峰值算力 × MFU)。
衍生追问:
- MFU 是什么?模型算力利用率,实际吞吐/理论峰值,衡量训练效率。
Q146. 量化方案 GPTQ / AWQ 区别?
来源:AIInfraGuide · AgentGuide
核心要点:
- GPTQ:基于层损失重建,逐层找最优量化(OBS 思路),权重量化为主。
- AWQ:按激活值敏感度保留重要通道的缩放因子,保护“重要权重”,效果好且无需校准重训。
Q147. 长文本推理怎么优化?
来源:AIInfraGuide
核心要点:
- 滑动窗口、KV 压缩(MLA/量化)、稀疏注意力、分段处理、位置外推(YaRN/NTK)。
Q148. 推理服务框架怎么选?
来源:AIInfraGuide · AgentGuide
核心要点:
- vLLM:PagedAttention + 连续批处理,通用首选;SGLang:前缀复用与结构化输出强;TGI:HuggingFace 生态。
- 需要 streaming + 低延迟:PD 分离 + 流式输出 + 预填充优化。
Q149. 为什么量化/压缩后精度下降?怎么补偿?
来源:AIInfraGuide · AgentGuide
核心要点:
- 原因:权重分布离群、激活敏感通道、低比特截断。
- 补偿:AWQ 通道保护、混合精度保留关键层、量化感知微调、LoRA 修复。
Q150. 如何从 Ampere 迁移算子到 Hopper?
来源:AIInfraGuide
核心要点:
- 关注:新 Tensor Core 指令(WGMMA/TMA)、共享内存布局、异步拷贝、Kernel 调度策略适配;用 Nsight 重新 profile 找新瓶颈。
手撕代码
Q151. 手写 MHA(numpy,不用 torch)?
来源:AgentGuide · 小米/字节
核心要点:
- 流程:输入 X → 线性映射 Q/K/V → 切头 → 缩放点积注意力(softmax(QK^T/√d)V)→ 拼接 → 输出投影。
- 面试要点:写清 init(权重维度)、forward、mask 支持、返回复杂度 O(n²)。
Q152. 三数之和(LC15)?
来源:AgentGuide · 某公司/RAG 专项
核心要点:
- 排序 + 固定一数 + 双指针;去重(跳过相同值);O(n²)。
Q153. 二叉树层序遍历(LC102)?
来源:AgentGuide · 美团
核心要点:
- BFS 队列,每层先取 len(queue) 再遍历,结果按层分组。
Q154. K 个一组翻转链表(LC25)?
来源:AgentGuide · 美团
核心要点:
- 先数 k 个节点不足则结束;递归/迭代翻转该组,连接前驱后继;O(n)。
Q155. 最长递增子序列(LC300,O(n log n))?
来源:AgentGuide · 字节/DeepSeek
核心要点:
- 贪心 + 二分:tails 数组存递增序列,bisect_left 替换;长度即答案。
Q156. 岛屿数量(LC200)?
来源:AgentGuide · 大厂通用
核心要点:
- DFS/BFS 遍历陆地并标记,计数连通分量;注意边界与访问数组。
Q157. 最大乘积子数组(LC152)?
来源:AgentGuide · 大厂通用
核心要点:
- 同时维护当前最大/最小(负负得正),ans 取最大。
Q158. 数组第 K 大(LC215)?
来源:AgentGuide · 大厂
核心要点:
- 快速选择(partition 期望 O(n))或大小为 K 的最小堆(O(n log k))。
Q159. LRU Cache(LC146)?
来源:AgentGuide · AIInfra
核心要点:
- 哈希表 + 双向链表;get/move_to_head,put 超容量淘汰尾部;O(1)。
Q160. 螺旋矩阵(LC54)?
来源:AgentGuide · 美团
核心要点:
- 四边界收缩遍历,注意单行/单列去重。
Q161. 括号生成(LC22)?
来源:卡码 · 混元
核心要点:
- 回溯:剩余左/右括号计数,右括号不能先于左用。
Q162. 合并 K 个升序链表(LC23)?
来源:卡码 · 字节
核心要点:
- 优先队列逐个取最小,或分治两两合并;O(n log k)。
真实情景面经
本模块单独分类:还原“公司 + 轮次 + 题目上下文”,与上面的分类题库互相索引。来源:卡码笔记知识星球真实分享、AgentGuide 案例集、AIInfraGuide 真实面经库、牛客/CSDN 精选。
字节 · Agent 开发 · 四面(21+ 题全解析)
来源:卡码笔记(录友 2025 暑期实习,4.5 一面 → 4.8 二面 → 4.15 三面 → 4.18 四面转岗加面 → offer)
一面/二面/三面/四面共 22 个问点,按主题分组:
Q163. Prompt Engineering 的核心目标?为什么换说法效果差十倍?
大模型是概率生成器,Prompt 模糊则概率分散到很多方向,精准则集中。核心不是“哄模型”,而是把意图翻译成模型最容易理解的形式(角色+任务+约束+示例)。
Q164. System Prompt / Few-shot / CoT 各解决什么问题?
System Prompt 解决“始终按某种风格/角色回答”;Few-shot 解决“格式和模式对齐”(例子比规则管用);CoT 解决“复杂推理容易出错”,把思考过程写出来便于纠偏。
Q165. Token、上下文窗口、上下文腐化?
Token 是最小文本单位,计费/窗口/限速都按它算;窗口是模型一次能看的 Token 总量;腐化指早期内容虽在窗口内,但被大量新内容稀释、注意力下降(Lost in the Middle)。工程上要精准控制窗口里放什么,而不是塞满。
Q166. 幻觉怎么产生?怎么减轻?
模型预测“下一个最可能的 Token”而非检索事实,天然会编。减轻:RAG 给真实资料;Function Calling 调真实接口;Structured Output 约束格式;Prompt 明示“不知道就说不知道”;多轮验证(模型自查/另模型 fact-check)。实际项目组合使用。
Q167. Structured Output 怎么控制输出?
让模型按指定格式输出(如 JSON)。简单方案是 Prompt 规定格式(不稳定);可靠方案是 JSON Schema 约束,主流 API 支持字段名、类型、必填项卡死。下游要解析模型输出,格式确定是系统化的前提。
Q168. Function Calling 与 RAG 的区别和联系?
FC 调外部接口拿实时、结构化数据(天气/股票/数据库);RAG 检索离线、非结构化私有文档。需要实时数据/执行操作→FC;需要领域知识/私有文档→RAG;Agent 常两者结合:RAG 给背景,FC 给实时与动作。
Q169. Embedding / 向量数据库在 RAG 中的作用?检索策略?
Embedding 把文本变向量,语义相近距离近,实现语义检索而非关键词匹配;向量库(Milvus/Pinecone/Weaviate)快速做相似度检索。策略:混合检索 + RRF;Chunk 512-1024 token、50-100 overlap;HyDE 用假答案检索;Rerank 用 Cross-Encoder 精排。
Q170. Agent 如何结合工具、知识和规划自主运行?
Agent = 思维链 + Function Calling + 循环:规划步骤 → 逐步执行(调工具/检索知识/直接回答)→ 观察结果 → 判断完成 → 继续循环。例子:查天气→发现下雨→发邮件提醒。关键是模型自己决定下一步;工程上限制最大循环、加人工确认。
Q171. 多 Agent 通信链路与异常处理?
最常见消息队列:主 Agent 拆任务入队,子 Agent 执行写回,主 Agent 收集决策。异常四层:超时 kill 兜底、限次重试、降级方案(搜索挂用本地知识库)、结果校验(代码能跑通才接受)。
Q172. 上下文漂移与工具调用幻觉怎么解决?
漂移:每轮注入原始任务、阶段性总结、上下文压缩。工具幻觉:严格工具 Schema、工具白名单(未注册拦截)、参数校验(类型/枚举不通过就返回错误重新生成)。
Q173. MCP 和 Skill 的作用?
MCP 解决工具对接标准化(“AI 的 USB-C”),实现一次协议所有模型可用;Skill 是能力封装复用(功能描述+输入输出 Schema+依赖工具),可共享、可组合、可独立升级。MCP 是工具层标准化,Skill 是能力层复用。
Q174. 微调与 RAG 使用场景区别?
“知道新知识”用 RAG(改文档即生效、成本低);“学会新能力”用微调(特定格式/推理链路稳定)。应用开发 RAG 优先;微调用于 RAG 不能保证的稳定行为。
Q175. SFT 和 RLHF 哪个适合快速迭代?破局点?
SFT 快(问答对直接训,几小时到一天);RLHF 链路长(RM+PPO)。SFT 破局点是数据质量而非数量;RLHF 破局点是从人工标注走向可验证奖励(代码可跑通、数学可判分)。
Q176. 推理成本怎么降?多任务怎么权衡效率与准确?
模型选择(简单任务小模型)、KV Cache、量化、批处理。多 Agent:子任务小模型、核心决策大模型;限流保护关键路径。
Q177. 有限上下文怎么放关键内容?短期/长期记忆压缩?
短期:滑动窗口(粗暴)、对话摘要(省 token)、关键信息单独存(决策/约束/偏好每轮注入)。长期:向量库检索式注入、分层记忆(短期上下文/长期向量库/工作记忆 System Prompt)、记忆衰减与清理。
Q178. 混合路由和限流器为什么重要?
混合路由按复杂度分流:简单任务小模型省成本,复杂任务大模型保质量;限流器用令牌桶控制频率,关键路径请求优先,防止 429。
Q179. 执行链路如何设计?连续任务正确性怎么保证?
链路:输入 → 主 Agent 规划 → 拆分子任务 → 子 Agent 执行 → 汇总 → 判断 → 继续/结束。正确性:状态持久化(崩溃可恢复)、Checkpoint(回滚到有效状态)、结果校验、超时重试、高风险操作人工确认。
Q180. 长任务如何保证不偏离原始目标?
每轮注入原始目标、阶段性自查、外部监督 Agent(质检员)、任务分解(短任务明确输入输出)、上下文压缩(摘要替代原文)。
Q181. 生图/生成模型的多样性和准确性怎么评估?
多样性:同 prompt 多次结果的差异度(CLIP Score 方差、FID);准确性:是否符合描述(CLIP Score 图文匹配 + 人工)。实践:A/B、自动化 judge、bad case 聚类。
Q182. 工具调用安全(Key 泄露、敏感信息)?
Key 不进上下文(执行层注入)、环境变量/密钥管理、最小权限;输出过滤(手机号/身份证正则)、Prompt 注入防护、审计日志全链路可追溯。
Q183. 传统 Web 应用和 AI Agent 应用有什么不同?
确定性 vs 概率性:Web 可断点调试,Agent 只能看轨迹日志;错误从明确(404)变模糊(幻觉/规划错),需更多容错重试;成本从服务器变 Token;测试从单元测试变评估指标 + bad case。
Q184. Agent 能力复用与 Skill 管理怎么设计?
Skill 定义四件事:能做什么、输入 Schema、输出格式、依赖工具。扩展性:Skill 注册表(自动发现)、版本管理(平滑升级)、组合编排(简单 Skill 组合复杂任务)、权限隔离、热插拔(动态加载不重启)。
面试心法(录友总结):简历深挖是底线;后端基础概念能说清楚即可;Skills/MCP/CLI 要往深了搞,Harness 概念与实现必须清楚;三个流行框架(OpenClaw/Hermes/Claude Code)要能撑五分钟,从记忆机制、工具调用、上下文管理三方面对比;AI 编程要讲得出踩过的坑和自己的办法;LLM/VLM 基础与训练推理算法按岗位补。
AgentGuide 真实面经案例集(16 个案例索引)
来源:adongwanai/AgentGuide · 12-company-interview-cases.md
| 案例 | 岗位/公司 | 轮次 | 核心考察点 | 代表题 |
|---|---|---|---|---|
| 1 | 大模型算法岗(某公司) | 一面/二面 | Transformer、LoRA、KV Cache、RAG、多 Agent | 三数之和(LC15) |
| 2 | 强化学习方向 | 一面/二面 | PPO 四模型、GRPO、记忆系统、vLLM | 拒绝采样细节 |
| 3 | 美团北斗校招 | 两轮 | LoRA、SFT loss、ZeRO、GRPO、LangGraph | 层序遍历(LC102)、K 个一组翻转(LC25) |
| 4 | 字节多模态算法 | 两轮 | CLIP、ViT、对比学习、多模态融合 | LIS(LC300) |
| 5 | Agent 方向深度 | 两轮 | RLHF、规划方法、Function Calling、工具选择 | 客服 Agent 场景设计 |
| 6 | 大厂通用 LLM 算法 | 两轮 | Attention、LoRA、RLHF、幻觉、ICL | 岛屿数量(LC200) |
| 7 | 大厂 Agent 开发 | 两轮 | Attention 细节、ZeRO/FSDP、JSON 稳定、多 Agent | 第 K 大(LC215) |
| 8 | 美团大模型应用算法 | 两轮 | NLP vs LLM、LoRA/QLoRA、RAG、量化、MoE 部署 | 螺旋矩阵(LC54)、MHA 手写 |
| 9 | 大厂 RAG 专项 | 两轮 | MHA/MQA/GQA、MoE、BM25、DPO/PPO/GRPO、vLLM | 三数之和(LC15)、根到叶(LC129) |
| 10 | DeepSeek 专项 | 两轮 | Transformer 复杂度、R1、PPO/GAE、GRPO、幻觉 | sqrt(x)、LIS(LC300) |
| 11 | 大厂 Transformer 深度 | 两轮 | 计算量优化、RoPE、KV Cache、DPO/PPO/GRPO、MLA | 环形链表(LC141)、重排链表(LC143) |
| 12 | 综合理论深度 | 一轮 | LLM 八股 15 连问 | 全模块综合 |
| 13 | 架构设计与优化 | 两轮 | LN/BN、MoE 负载均衡、KV Cache 推导、DAG 调度 | 组合总和(LC39) |
| 14 | RAG 系统全流程 | 两轮 | 幻觉、参数、检索优化、SFT 数据、simCSE、DeepSpeed | 第 K 大、前 K 高频(LC347) |
| 15 | 实习项目深挖 | 两轮 | Attention、Agent 设计、JSON、DPO/PPO/GRPO | 合并有序链表 |
| 16 | Attention 机制剖析 | 两轮 | Attention 本质、SFT 后训练、RAG 分类、多模态 RAG、DPO | 岛屿数量 |
高频规律:Transformer/Attention、LoRA、PPO/DPO/GRPO、RAG 链路、Agent 系统设计、LC Medium 手撕。
AIInfraGuide 真实面经库(181 份 · 公司索引)
来源:caomaolufei/AIInfraGuide · docs/interview
| 公司 | 代表面经 | 考察方向 |
|---|---|---|
| 字节跳动 | AML AI-Infra 一二面、抖音电商 AI-Infra、AI-Infra 校招一面 | 推理瓶颈、PagedAttention、Orca 调度、LRU |
| 阿里巴巴 | AI-Infra 实习/校招、云 AI-Infra、淘天 AI-Infra | 训练并行、KV Cache、显存估算 |
| 腾讯 | TEG AI-Infra 一二三面 | 推理优化、C++、项目深挖 |
| 百度 | AI-Infra 校招/实习 | 训练优化、算子优化 |
| 快手 | AI-Infra 一面/校招/实习 | 推理、训练、性能分析 |
| 美团 | AI-Infra 校招一面 | 推理服务、显存 |
| 蚂蚁 | AI-Infra 实习一面 | 推理优化、系统设计 |
| 英伟达 | AI-Infra 校招 | CUDA、GPU 架构、算子优化 |
| MiniMax | AI-Infra 实习 | 推理、训练框架 |
| 蔚来/理想/小鹏 | AI-Infra 实习/校招 | 自动驾驶场景推理 |
| 综合 | AI-Infra 综合面经题库 1-3 | CUDA、NCCL、PD 分离、DeepSeek 优化 |
考什么:CUDA 内存、All-Reduce 通信、Prefill/Decode 优化、PD 分离、显存/耗时估算、DeepSeek-V3/MoE、算子迁移(Ampere→Hopper)。
精选真实现场(牛客 / CSDN)
字节 · RAG+评测+Agent 一面(崩盘复盘):
- 500 份 PDF、5 万 chunk → 追问“平均每份 100 chunk,切片粒度多少”→ 512 token → 追问“法律文档第三条第二款会不会切散”→ 没想过 metadata。
- 评测 Recall@5 = 0.81 → 追问“100 条评测集够吗?分布?baseline?”→ 没 baseline 没分布分析。
- Agent 3 个工具 → 追问“模型决策错怎么办”→ 加 reflection → 追问“reflection 失败 3 次后呢”→ 没设计终止。
- 业务题“扣子是 Agent 平台还是工作流平台”→ 不了解公司产品。
启示:切片粒度要结合业务语义;评测必须有 baseline 和分布;异常路径必须设计终止条件;面试前了解公司产品。
小米 · AI 大模型开发四面(深度追问链):
- RAG 项目必问链:Embedding 模型结构 → 输出维度 → 切分模型结构 → 向量库怎么建。
- LoRA 链:Transformer 更新哪些参数 → 全量 SFT 与 LoRA SFT 的 lr 技巧 → A/B 初始化。
- Transformer 链:结构 → 输入维度 → LayerNorm 对哪个维度归一化 → 注意力为什么除以 √d_k。
- 经典题:“知识库文档更新不重建全量怎么搞?”只答“找到变了的 chunk 更新向量”不够,要答“内容变了 chunk 边界还一样吗”→ 整文档重切 + 先删后增。
字节 · Agent 开发实习一面(45 分钟 22 问):
- 为什么选 ES → 常见向量库 → ES 切向量库哪些能力升降 → ReAct 架构 → 模型怎么选工具 → Middleware → 限制工具调用 → 三级压缩 → 为什么五轮 → SDD/Spec-kit/OpenSpec 区别 → Harness 五个核心模块 → Recall@5 怎么到 91.2% → 防过拟合 → 评测集更新。
启示:Spec 驱动开发、Harness、上下文压缩这些 2026 年新考点已进入实习面试。
蚂蚁 · 智能体应用一面:
- 幻觉怎么解决 → 微调算法 → Skills 怎么写 → Spring AI Skills 调用像谁 → Claude Code 经验 → 为什么用 grep 不用 RAG → 混合召回 → 后接 CS 八股(TCP、B+ 树、IoC/AOP)。
启示:Agent 岗也会考传统后端基础,比例约 7:3。
DeepSeek · Agent 开发岗三面(牛客原帖):
- 面试体验偏“技术合伙人”式讨论;高频点:Agent 架构、RAG 细节、推理训练、工程落地。完整原帖见来源索引。
开放题与综合
Q185. LLM 距离 AGI 还有多远?最缺什么?
来源:Datawhale
核心要点:
- 结构化回答:已有能力(语言/知识/工具调用)与缺口(世界模型、长期记忆、主动探索、具身交互、价值对齐)分列。
- 观点要有依据:推理增强(o1/R1)解决一部分,但感知-行动闭环与持续学习仍是短板。
Q186. 多模态融合会走向何方?
来源:Datawhale
核心要点:
- 从文本+图像扩展到视频、音频、3D、传感器;统一 token 表示 + 跨模态对齐是主线;端到端统一模型(原生多模态)趋势。
Q187. 开源 vs 闭源模型生态怎么看?
来源:Datawhale
核心要点:
- 开源:可定制、可审计、成本可控,推动生态与 Agent 框架发展;闭源:能力上限、服务化、安全合规。
- 趋势:能力差距缩小,开源在垂直领域落地更有优势;两者共存,按场景选。
Q188. 世界模型 / 内在模拟能力怎么理解?
来源:Datawhale
核心要点:
- 模型在训练数据中学到规律,能在内部“模拟”物理/世界过程;对规划意义:先推演再行动(如 o1 搜索推理路径)。
- 局限:只是统计近似,不是真世界模型,长程预测会漂移。
Q189. 合成数据在训练中的角色?
来源:Datawhale
核心要点:
- 补充真实数据稀缺:代码、数学推理、偏好对、多模态对齐;风险:模型坍缩(自我吞噬)、多样性不足。
- 关键:合成数据 + 过滤/验证(可执行、可判分)+ 保留真实数据比例。
Q190. 具身智能:LLM 怎么赋能机器人?
来源:Datawhale
核心要点:
- LLM/VLM 提供语言理解、任务分解、常识推理,VLA(视觉-语言-动作)模型直接输出动作。
- 挑战:实时性、安全、物理世界数据获取、泛化到新环境。
Q191. 个性化 Agent 怎么平衡效果、隐私与安全?
来源:Datawhale
核心要点:
- 效果:画像/记忆;隐私:数据最小化、本地处理、加密、用户可控删除;安全:权限隔离、防止画像泄露。
Q192. Transformer 会一直统治吗?SSM/Mamba 怎么看?
来源:Datawhale
核心要点:
- Transformer 优势:并行训练、长程交互、生态成熟;O(n²) 是软肋。
- Mamba(SSM):线性复杂度、长序列友好,但硬核实现与生态弱、某些任务(检索/工具调用)效果需验证。
- 判断:未来可能是混合架构(注意力 + 状态空间 + MoE),不会一家独大。
Q193. 未来 3-5 年 LLM/Agent 最可能颠覆哪个行业?
来源:Datawhale
核心要点:
- 选有“知识密集 + 数字化流程”的行业:软件工程、客服运营、金融风控、法律文档、教育辅导。
- 论证:Agent 的价值在闭环执行(检索→决策→动作→反馈),行业数字化程度决定落地速度。
Q194. 限制 Agent 能力普及的最大瓶颈?
来源:Datawhale
核心要点:
- 分层回答:模型能力(长程推理、可靠性)、工程(状态/记忆/安全)、成本(token/延迟)、评估(难量化)。
- 观点:可靠性 > 能力,用户接受度取决于失败率。
Q195. 过去半年印象最深的 Agent 论文/项目?
来源:Datawhale
核心要点:
- 准备 2 个:一个学术(如 o1 类推理、Agent 轨迹优化),一个工程(Claude Code、OpenClaw、LangGraph 生态)。
- 讲法:它解决了什么问题、核心机制、我的使用/复现体验、局限。
Q196. 应该追求更强基模还是更精巧的 Agent 架构?
来源:Datawhale
核心要点:
- 两者螺旋上升:基模推理能力决定 Agent 天花板,架构把现有能力工程化;当前阶段架构创新(记忆/工具/反思)性价比更高。
Q197. 未来 1-2 年 Agent 商业落地场景?
来源:Datawhale
核心要点:
- 客服、代码助手、办公自动化、垂直知识库问答、风控审核;判断标准:闭环价值可度量 + 失败可兜底。
Q198. 你最想做一个什么 Agent?
来源:Datawhale
核心要点:
- 别只说想法,按“问题 → 用户 → 核心链路 → 评估 → 成本”展开;最好和你简历/兴趣关联。
Q199. 顶尖 AI Agent 工程师的核心素质?
来源:Datawhale
核心要点:
- 系统设计(状态/记忆/工具治理)、工程兜底(可观测/回滚/安全)、模型理解(什么时候靠模型、什么时候靠系统)、评估驱动、快速学习新框架。
Q200. 平时怎么用 AI?对用 AI 学习编程有什么建议?
来源:Datawhale
核心要点:
- 诚实讲用法:代码生成、学习答疑、文档总结、Agent 实验。
- 建议:先自己思考再让 AI 验证;让 AI 解释而不是直接给答案;用 AI 造测试和反例;警惕“看着会了”。
框架选型
Q201. LangChain 和 LangGraph 到底有什么区别?
来源:官方文档 docs.langchain.com · 官方博客《LangChain and LangGraph 1.0》《3 Years of Graph Engineering with LangGraph》
核心要点(先记住官方定位):
- 官方把 Agent 技术栈分成三层:Framework(LangChain)→ Runtime(LangGraph)→ Harness(Deep Agents 等)。
- LangChain = 高层 Agent 框架:提供模型/工具/循环的现成抽象和几百个集成,目标是“快速上手、快速交付”。
- LangGraph = 低层编排运行时:不抽象 prompt 和架构,只提供状态图执行引擎 + 持久化 + 流式 + 人工介入,目标是“生产级、长时间、可恢复”。
七个维度对比:
| 维度 | LangChain | LangGraph |
|---|---|---|
| 抽象层级 | 高层框架(组件 + 预置 Agent 模式) | 低层运行时(图状态机 + 基础设施) |
| 流程形态 | 默认 Agent Loop:模型 → 工具 → 回答,Middleware 加钩子 | 显式图:Node 做事、Edge 决定下一步、State 传数据,支持循环/分支/并行/动态 Send |
| 状态管理 | 消息历史为主,简单直接 | 结构化 State Schema + Checkpointer 持久化,支持断点恢复、跨会话记忆 |
| 可控性 | 用预置抽象,自定义靠 middleware 钩子 | 每一步都自己定义,确定性代码与 LLM 决策任意混排 |
| 生产特性 | 内置中间件:HITL、摘要压缩、PII 脱敏、工具重试 | 一等公民:durable execution、streaming、human-in-the-loop、persistence |
| 上手成本 | 低,create_agent(model, tools, system_prompt) 几行跑起来 | 高,要定义 State/Node/Edge/编译,代码量更大 |
| 适用场景 | 标准单 Agent、快速 MVP、团队统一规范 | 复杂工作流、多 Agent、长任务、高风险需人工审批、延迟/成本精细控制 |
关键事实(面试加分):
- LangChain 1.0 的
create_agent底层就跑在 LangGraph 上——两者不是二选一,是“渐进式技术栈”,可以无缝混用。 - 2025.10 两者同时发 1.0:LangChain 放弃早期 Chain/LCEL 设计,收窄到核心 Agent Loop + Middleware;
create_react_agent(langgraph.prebuilt)被create_agent(langchain.agents)取代。 - LangGraph 设计受 Pregel 和 Apache Beam 启发,接口风格像 NetworkX。
- 官方复盘强调:生产级 Agent 图通常不是 DAG,而是有环图(重试、追问、校验、人工暂停都是环);“Loop 就是最简单的一种图”。
- 什么时候不该用图:深度研究这类路径无法预先固定的任务,强行硬编码图反而不如更 Agentic 的 Harness(Deep Agents)。
代码级对比(记感觉):
- LangChain 1.0:
from langchain.agents import create_agent
agent = create_agent(model="openai:gpt-4o", tools=[get_weather], system_prompt="客服助手")
agent.invoke({"role": "user", "content": "上海天气?"})
- LangGraph:
from langgraph.graph import StateGraph, START, END
graph = StateGraph(State)
graph.add_node("llm", call_llm).add_node("tools", call_tools)
graph.add_edge(START, "llm")
graph.add_conditional_edges("llm", route) # 自己决定下一步
graph.add_edge("tools", "llm").add_edge("llm", END) # 循环
app = graph.compile(checkpointer=memory)
面试怎么答(30 秒版):LangChain 是高层框架,帮你几行代码搭标准 Agent,默认是一个 ReAct 循环,1.0 后用 middleware 挂生产能力;LangGraph 是底层状态图运行时,把流程显式建模成节点/边/状态,原生支持循环、并行、持久化、断点恢复和人工介入,适合复杂多 Agent 与长任务。关键点:LangChain 1.0 本身构建在 LangGraph 之上,所以是渐进式关系不是竞争关系——先用 LangChain 快速起步,需要精细控制时下沉到 LangGraph,甚至可以 create_agent 当图里的一个节点。
Q202. 主流 Agent / AI 框架全景(还有哪些?)
来源:官方文档 · 卡码框架横评 · AgentGuide
| 框架 | 定位 | 特点 | 适合 |
|---|---|---|---|
| LangChain | 高层 Agent 框架 | 组件丰富、create_agent + middleware、生态最大 | 标准 Agent、快速交付 |
| LangGraph | 低层运行时 | 状态图、持久化、HITL、流式 | 复杂工作流、多 Agent、生产 |
| Deep Agents SDK(LangChain 官方) | Agent Harness | 规划/子代理/文件系统/上下文管理,内置完整工具 | 长时自主 Agent、深度研究 |
| CrewAI | 角色化多 Agent | 角色 + 任务 + 流程,上手简单 | 多角色协作 Demo |
| OpenAI Agents SDK | 官方 Agent 运行时 | handoff 机制、原生工具调用、轻量 | 想贴近 OpenAI 生态 |
| Google ADK | 官方 Agent 开发套件 | 多模态、代码执行、与 Google 生态集成 | 多模态 Agent |
| LlamaIndex | 数据/RAG 框架 | 文档检索、数据连接器、知识 Agent | RAG/知识库应用 |
| AutoGen / AG2(微软) | 多 Agent 对话 | 对话式协作、可编程终止 | 多 Agent 研究与原型 |
| Claude Agent SDK / Claude Code | 官方 Harness | 终端 Agent、hook、上下文治理 | 编码 Agent、长任务 |
| OpenClaw | 自动化 Agent | 多平台工具生态、Skill 体系 | 通用自动化助手 |
| Hermes Agent | 参考 Harness | 轻量、强调上下文工程 | 学习 Harness 实现 |
| Semantic Kernel(微软) | 企业 SDK | 多语言、插件、与 .NET/云集成 | 企业内 Agent |
| Spring AI | Java 生态 | Java/Spring 集成 AI 能力 | Java 团队 |
| MCP / A2A | 协议层 | 工具标准化 / Agent 间通信 | 跨框架互操作 |
选型四问(面试答法):① 流程可预知吗?可预知→Workflow/图,开放→Harness;② 需要长时运行/断点恢复吗?需要→LangGraph/Deep Agents 这类带持久化的运行时;③ 团队技术栈?Java 用 Spring AI,Python 用 LangChain 系;④ 生态与可控性平衡:快速上线选高层框架,精细控制下沉低层运行时。
Q203. LangGraph 里 State / Node / Edge 分别解决什么问题?
来源:官方文档 · 卡码 Graph Engineering
核心要点:
- State:节点间传递的结构化数据(消息、任务进度、中间产物、预算、审批结果),是可持久化的核心。
- Node:做事的单元,可以是确定性代码、单次 LLM 调用、工具调用,甚至一个完整的子 Agent(内含自己的循环)。
- Edge:决定下一步,可以是确定性边,也可以是基于状态/模型结果的条件路由。
- 高级能力:
Send动态扇出(map-reduce,运行前不知道多少个子任务)、Checkpointer 断点、interrupt人工审批后恢复。
衍生追问:
- LangGraph 相比手写状态机优势?自带持久化、重放、可视化调试、与 LangChain 生态互通,且天然支持循环(生产 Agent 大多是有环图)。
- 为什么不用 LangGraph 硬编码所有路径?深度研究这类任务路径不可预知,过度约束反而牺牲 Agent 自主性,Harness 更合适。
Q204. LangGraph 的图主要抽象了哪些流程?
来源:官方文档 Graph API / Use the Graph API
核心要点(官方一句话:Nodes do the work, edges tell what to do next):
LangGraph 把 Agent 工作流抽象成三类核心组件 + 一套 Pregel 式执行模型:
- State(状态流):共享数据结构,是应用当前快照;定义 Schema(TypedDict/Pydantic)+ Reducer(节点更新如何合并:默认覆盖、
add追加、add_messages按消息 ID 合并去重)。可拆分输入/输出/私有 Schema,内部节点间可传不对外暴露的中间数据。 - Nodes(动作单元):普通函数,接收 state、返回更新;可以是确定性代码、单次 LLM 调用、工具调用,甚至一个完整子 Agent(内含自己的循环)。
- Edges(转移规则):决定下一步执行哪个节点;固定边或基于状态/模型结果的条件边。
- 执行模型(运行时抽象):底层是受 Google Pregel 启发的消息传递算法,按“super-step”推进:节点收到消息才激活,执行完沿边发消息,全部无消息则终止——这层抽象让图天然支持并行和循环。
图抽象出来的具体流程模式:
| 流程 | 对应机制 | 典型场景 |
|---|---|---|
| 顺序流 | 固定边串联 | 解析 → 检索 → 生成 |
| 条件分支 | 条件边(conditional edge) | 意图分类后走不同子流程、路由到不同 Agent |
| 循环 | 有环边 | ReAct 工具循环、失败重试、反思修正、追问澄清 |
| 并行扇出 | 静态并行边 + Send 动态扇出 | 多路检索、map-reduce(运行时才知道拆多少个任务) |
| 汇聚 | 共享 State + reducer 合并 | 多子 Agent 结果汇总后统一生成 |
| 动态跳转 | Command(更新状态的同时跳到指定节点) | 节点即改状态又决定下一步 |
| 持久化/断点 | Checkpointer | 崩溃续跑、跨会话恢复、time travel 回放 |
| 人工介入 | interrupt / HITL | 高风险操作审批、人工修改状态后继续 |
| 流式输出 | streaming(values/updates/custom) | 逐步返回中间结果与最终答案 |
| 长期记忆 | Store(跨线程) | 用户画像、跨会话知识 |
多 Agent 编排流程:supervisor(主管-工人)、handoff(交接转移)、swarm(对等协作)、层级嵌套(子图作为节点)。
图不抽象什么:prompt、模型接口、工具定义——这些留在 LangChain 层;图只负责“谁在什么时候做什么、状态怎么流、失败怎么恢复”。
Q205. State 状态流主要存什么信息?
来源:官方文档 Graph API · MessagesState · Checkpointer / Store
核心要点(State = 应用当前快照):
- 官方定义:State 是共享数据结构,代表应用在某时刻的完整快照;节点读它、返回更新,Reducer 决定更新怎么合并。
按信息类别拆:
| 类别 | 典型字段 | 说明 |
|---|---|---|
| 对话历史 | messages: list[AnyMessage] | Human/AI/Tool 消息,用 add_messages reducer 追加并按 ID 合并 |
| 任务上下文 | task, goal, constraints, user_profile | 原始需求、目标约束、画像,每轮可回看防漂移 |
| 中间产物 | documents, search_results, draft, verification | 检索结果、工具返回、草稿、校验结论 |
| 工作变量 | retry_count, step, budget_used, tokens, deadline | 重试次数、当前步、成本/Token 预算、超时控制 |
| 控制信息 | route, next, done, error | 路由决策、终止标志、异常标记(配合条件边) |
| 业务状态 | order_id, approval_status, phase | 领域状态机字段(工单、审批、交易) |
| 长期记忆 | Store(跨线程) | 用户偏好、历史经验、知识条目,按需检索注入 |
官方 Channel 类型(决定“怎么存”):
LastValue:只保留最新值(默认覆盖语义),适合 route/step/answer。BinaryOperatorAggregate:用 reducer 累加(add追加列表、计数器),适合 messages/中间产物。Topic:收集执行期间产生的所有值,适合事件流、审计日志。EphemeralValue:跨 super-step 重置的临时计算值,不持久化。
示例(一个客服 Agent 的 State):
class AgentState(TypedDict):
messages: Annotated[list[AnyMessage], add_messages] # 对话历史
intent: str # 意图路由结果
documents: list[str] # RAG 检索结果
retry_count: int # 工具失败重试次数
budget_used: float # token/成本预算
approval: str # 高风险操作审批状态
done: bool # 终止标志
什么不该放 State:
- 大体积工具原始返回(应截断/摘要/存引用,需要时再取详情)。
- 密钥、Token、隐私原文(安全与合规红线)。
- 可重算的临时数据(浪费持久化开销)。
衍生追问:
- State 和数据库/缓存的区别?State 是图执行期间的“工作记忆”,Checkpointer 把它持久化;跨会话的画像/知识放 Store(长期记忆),业务大表仍存数据库。
- 为什么 messages 用 add_messages 而不是 operator.add?add_messages 按消息 ID 合并:新消息追加,已存在的消息能被人工修改(HITL)覆盖,避免重复与错乱。
Q206. Node 节点主要是工具调用吗?
来源:官方文档 Graph API(“Nodes and Edges are nothing more than functions—they can contain an LLM or just good ol’ code.”)
核心要点(先纠正:Node 只是函数,工具调用只是其中一种):
官方定义:Node 是普通函数(同步/异步),接收 state、返回更新;它可以是任何东西:
- 确定性代码节点:校验、过滤、格式转换、聚合、字段映射——不碰 LLM。
- LLM 决策节点:意图分类、路由判断、生成回答、打分评估。
- 工具执行节点:调 API、检索、执行代码、发消息。
- 子 Agent 节点:一个完整 Agent(内含自己的 Loop)作为一个节点,形成层级编排。
- 子图节点:编译好的另一个 StateGraph 嵌进来,组合复用。
- 人工节点:
interrupt暂停等人工审批/输入,也是节点。
ReAct 模式的典型误解:常见的工具调用循环其实是“双节点”:LLM 决策节点(决定调哪个工具、生成参数)+ 工具执行节点(真正执行并返回 Observation)→ 再回 LLM 节点。所以工具调用通常不是单节点,而是“决策 + 执行”两个节点组成的一环。
生产图里节点分布(经验值):一个客服/文档 Agent 图里,确定性代码节点(校验、聚合、路由)往往比 LLM 节点多;图的价值正是“能确定的部分用代码,需要判断的部分才用 LLM”,而不是把所有东西都塞给工具调用。
面试答法:Node 是执行单元,可以是代码、LLM 调用、工具执行、子 Agent 或人工审批;工具调用只是其中常见的一类,而且 ReAct 里通常拆成“决策节点 + 执行节点”两个 Node 形成循环。
Q207. LLM 决策节点(意图分类 / 路由 / 打分 / 生成)代码怎么写?
来源:LangGraph + LangChain 官方 API 实践
核心要点:
- 决策类节点统一套路:
LLM.with_structured_output(Pydantic模型)→ 节点函数读 state、invoke、把结构化结果写回 state → 条件边根据 state 里的决策字段选下一步。 - 工程三原则:temperature=0(决策要稳定)、结构化输出(下游好解析)、失败兜底(解析失败/重试计数)。
1. 准备:State + LLM
from typing import Annotated, TypedDict
from langchain_openai import ChatOpenAI
from langchain_core.messages import AnyMessage, HumanMessage, AIMessage
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from pydantic import BaseModel, Field
llm = ChatOpenAI(model="gpt-4o", temperature=0) # 决策稳定:temperature 归零
class State(TypedDict):
messages: Annotated[list[AnyMessage], add_messages] # 对话历史
intent: str # 意图分类结果
confidence: float # 分类置信度
documents: list[str] # RAG 检索结果
answer: str # 生成的回答
score: float # 打分评估结果
passed: bool # 是否通过评估
retry_count: int # 重试次数
2. 意图分类节点(结构化输出)
class Intent(BaseModel):
intent: str = Field(description="retrieve=查知识库 / act=调工具 / chat=直接回答")
confidence: float = Field(ge=0, le=1, description="置信度 0~1")
classifier = llm.with_structured_output(Intent)
def classify_node(state: State) -> dict:
result: Intent = classifier.invoke(
[HumanMessage(content=f"判断用户意图:{state['messages'][-1].content}")]
)
return {"intent": result.intent, "confidence": result.confidence}
3. 路由判断:条件边(Edge 读 State 决定下一步)
def route_after_classify(state: State) -> str:
if state["intent"] == "retrieve":
return "retrieve" # 走 RAG
if state["intent"] == "act":
return "tools" # 走工具
return "generate" # 直接生成
def retrieve_node(state: State) -> dict:
# 伪代码:向量库检索
docs = ["文档1", "文档2"]
return {"documents": docs, "messages": [HumanMessage(content=f"检索结果:{docs}")]}
4. 生成回答节点(普通 LLM 调用,结果进 messages)
def generate_node(state: State) -> dict:
resp: AIMessage = llm.invoke(state["messages"]) # 带完整上下文生成
return {"messages": [resp], "answer": resp.content}
5. 打分评估节点(LLM-as-Judge)
class Verdict(BaseModel):
score: float = Field(ge=0, le=10, description="0~10 质量分")
reason: str = Field(description="打分依据")
passed: bool = Field(description="是否达到通过线")
judge = llm.with_structured_output(Verdict)
def evaluate_node(state: State) -> dict:
prompt = (
"你是质检员。依据以下标准给回答打分(0~10,>=7 通过):\n"
"1. 是否忠于提供的文档;2. 是否完整回答用户问题;3. 是否有幻觉。\n"
f"问题:{state['messages'][0].content}\n"
f"回答:{state['answer']}\n"
f"参考文档:{state.get('documents', [])}"
)
v: Verdict = judge.invoke([HumanMessage(content=prompt)])
return {"score": v.score, "passed": v.passed, "reason": v.reason}
6. 兜底重试路由 + 编译成图
def route_after_eval(state: State) -> str:
if state["passed"] or state["retry_count"] >= 2:
return END # 通过或重试超限 → 结束
return "generate" # 不通过 → 带着质检意见重新生成
builder = StateGraph(State)
builder.add_node("classify", classify_node)
builder.add_node("retrieve", retrieve_node)
builder.add_node("tools", tools_node) # 你的工具执行节点
builder.add_node("generate", generate_node)
builder.add_node("evaluate", evaluate_node)
builder.add_edge(START, "classify")
builder.add_conditional_edges("classify", route_after_classify,
{"retrieve": "retrieve", "tools": "tools", "generate": "generate"})
builder.add_edge("retrieve", "generate")
builder.add_edge("tools", "generate")
builder.add_edge("generate", "evaluate")
builder.add_conditional_edges("evaluate", route_after_eval) # 键名=节点名时可省略映射
app = builder.compile()
result = app.invoke({"messages": [HumanMessage(content="公司年假政策是什么?")],
"retry_count": 0})
执行链路:classify(意图)→ retrieve/tools/generate(干活)→ generate(回答)→ evaluate(质检)→ 不通过带原因回 generate 重试(retry_count+1)→ 超限终止。
衍生追问:
- 为什么决策节点用结构化输出?路由/打分/分类都要被代码消费,JSON Schema 卡死字段最稳;解析失败还有兜底(重试/默认路由)。
- 打分评估节点怎么防止“自我偏好”?换更小/不同模型做 judge、交换顺序盲评、人工抽样校准。
- 条件边返回的值和节点名不一致怎么办?用映射字典显式对应,如
{"retrieve": "retrieve", ...};键名等于节点名时可省略。
Q208. Node 怎么知道该“思考”还是“调工具”?这个决定是谁做的?
来源:LangGraph 官方 ReAct 实现 · OpenAI Function Calling 机制
核心要点(先纠正认知:LangGraph 不知道,模型才知道):
- LangGraph 不是 LLM,它没有任何“判断能力”;Node 只是你写死的函数。
- “思考还是调工具”的决定发生在 LLM 节点内部:你把工具 schema 通过
bind_tools注入模型,模型按训练学到的 Function Calling 能力,自己决定输出纯文本(思考/回答)还是 tool_calls(要调工具)。 - 图只负责一件事:检查模型输出的信号,按你写好的路由规则走——有 tool_calls 就进工具执行节点,没有就进回答/结束。
一句话流程:模型“看”到工具清单 → 输出两种信号之一(文本 or tool_calls)→ 路由函数检查信号 → 有调用去执行,没有就结束。
最小代码(ReAct 双节点):
# 1. LLM 节点:模型带着工具清单“思考”
model_with_tools = llm.bind_tools([search_api, send_email]) # 工具 schema 进 prompt/API
def agent_node(state: State) -> dict:
resp = model_with_tools.invoke(state["messages"]) # 模型自己决定:文本 or tool_calls
return {"messages": [resp]}
# 2. 路由函数:检查模型输出的是什么信号
def should_continue(state: State) -> str:
last = state["messages"][-1]
if getattr(last, "tool_calls", None): # 模型要调工具
return "tools" # → 工具执行节点
return END # 模型直接回答 → 结束
# 3. 工具执行节点:只负责“执行”,不做任何决定
def tools_node(state: State) -> dict:
last = state["messages"][-1]
results = []
for call in last.tool_calls: # 执行模型要调的所有工具
out = execute_tool(call["name"], call["args"]) # 你的实际函数
results.append(ToolMessage(content=str(out), tool_call_id=call["id"]))
return {"messages": results} # 观察结果塞回上下文
# 4. 连成循环:LLM → (有调用) tools → 回 LLM;LLM → (无调用) END
builder.add_node("agent", agent_node)
builder.add_node("tools", tools_node)
builder.add_edge(START, "agent")
builder.add_conditional_edges("agent", should_continue, {"tools": "tools"})
builder.add_edge("tools", "agent") # 观察完必须回 LLM 再决策
执行过程还原:
agent_node把 messages + 工具定义交给模型;模型若认为需要外部信息,输出tool_calls=[{name, args}]。should_continue看到 tool_calls → 路由到tools_node。tools_node执行真实函数,把结果包成ToolMessage追加进 State。- 边
tools → agent把控制权交回模型:模型现在能看到观察结果,再决定下一步(继续调 / 思考 / 结束)。
关键认知(面试必答):
- 模型“知道有工具”是因为
bind_tools把工具名/参数 schema 序列化进了请求;这是模型层的 Function Calling 能力,不是图的魔法。 - “思考”(CoT/推理 token)发生在模型的单次输出内部,LangGraph 不需要单独的“思考节点”;只有当你想要显式“先规划后执行”时,才自己拆 planner / executor 两个节点。
- 工具节点永远不做决定:它只执行
tool_calls并返回观察;决定权始终在 LLM 节点 + 你写死的路由规则手里。
Q209. LangGraph 的 Node 类型完整清单?
来源:官方文档 Graph API · LangChain 1.0 预置能力
核心要点(按“业务职责”分 7 类):
- 确定性代码节点:校验、过滤、聚合、格式转换、字段映射、幂等检查——不碰 LLM,图里最容易被低估的一类。
- LLM 决策节点:意图分类、路由判断、打分评估、生成回答——内部用
with_structured_output或bind_tools。 - 工具执行节点:执行
tool_calls(调 API、检索、执行代码、发消息),只执行不决定。 - 子 Agent 节点:一个完整 Agent(自己的循环)作为单个节点,层级编排。
- 子图节点:编译好的 StateGraph 作为节点嵌入,图组合复用。
- 人工节点:
interrupt()暂停执行,等人工审批/输入后 resume;高风险操作标配。 - 虚拟节点:
START(入口)和END(终止),不是函数,是图的边界标记。
按“API 实现”分 5 类:
- 普通函数节点:
def node(state, config, runtime) -> dict,同步或异步(async def自动支持)。 - Runnable 节点:直接传 LangChain Runnable(Chain / 模型 / 工具)作为节点,框架自动包装调用。
- Command 节点:节点返回
Command(update=..., goto=...),一个节点内同时“更新状态 + 指定下一步”,适合动态跳转。 - 预置 Agent 节点:
create_agent(...)/create_react_agent(...)生成的完整 Agent 直接当节点;create_agent内部就是 StateGraph 运行时。 - Send 动态子任务节点:严格说是“动态扇出机制”不是节点类型——一个节点用
Send(node, payload)在运行时按数据量创建多个并行子任务(map-reduce)。
容易混淆的边界:
- 条件分支/路由是 Edge 的职责,不是 Node;Node 只做事。
- 并行不是一种节点,而是多个节点在同一 super-step 被同时激活;
Send是实现动态并行的机制。 interrupt不是独立节点类,是普通节点内部的暂停原语;暂停后图的状态被 Checkpointer 保存,resume 继续。
面试答法:Node 按职责分七类——代码节点、LLM 节点、工具节点、子 Agent、子图、人工节点、START/END;按实现分五类——函数、Runnable、Command、预置 Agent、Send 子任务。工具节点只是其中一种,而且决定权不在它手里。
Q210. AI 怎么知道走到某节点要审批?Node 里存了任务提示词吗?
来源:LangGraph 官方 HITL(Human-in-the-loop)文档与 interrupt 机制
核心要点(先纠正三个误解):
- AI 不会“走到”节点:图是 Python 运行时在遍历,Node 是函数;AI 只会在“包含 LLM 调用的节点”里被运行时调用一次。AI 永远看不到地图,只看得到你喂给它的 messages + 工具 + 提示词。
- “需要审批”不是 AI 判断的,是你硬编码的:审批节点是图结构里固定的一条路径——要么“这条边必经审批”,要么“路由函数发现敏感操作就进审批”。AI 没有被问过“要不要审批”。
- Node 里不存放“任务提示词”:提示词在 LLM 调用时传入;审批节点的本质是
interrupt()暂停原语 + 给人类看的载荷,不是给 AI 的指令。
审批节点的真实机制(interrupt):
def approve_node(state: State) -> dict:
decision = interrupt({
"question": "是否允许执行以下操作?",
"action": state["pending_action"], # 例如 send_email
"params": state["pending_params"], # 例如 收件人/内容摘要
}) # ← 图在这里暂停:状态已存 Checkpointer,等人类回复
return {"approval": decision} # 人类决定写回 State
怎么“走到”审批节点的(两种方式):
# 方式 A:静态必经——发邮件前永远先审批
builder.add_edge("prepare_send", "approve") # 无条件先过审批
builder.add_edge("approve", "send")
# 方式 B:条件路由——代码检查模型要调的工具,敏感操作才审批
def route_by_tool(state: State) -> str:
last = state["messages"][-1]
if last.tool_calls and last.tool_calls[0]["name"] in {"send_email", "delete_record", "pay_order"}:
return "approve" # 模型想调危险工具 → 拦截进审批
return "execute" # 普通工具直接执行
builder.add_conditional_edges("agent", route_by_tool,
{"approve": "approve", "execute": "execute"})
审批后的恢复(resume):
# 人类在 UI/命令行给决定,运行时用 Command 恢复执行
from langgraph.types import Command
app.invoke(Command(resume={"allow": True, "comment": "同意,收件人已确认"}),
config={"configurable": {"thread_id": "order-123"}})
# approve_node 的 interrupt() 返回这个值 → 写入 State["approval"] → 边决定 send/cancel
执行过程还原(一个“AI 想发邮件”的完整链路):
agent(LLM)输出tool_calls=[send_email]——AI 只做了“想发邮件”这个决定。- 路由函数发现工具名在敏感清单里 → 返回
"approve"(这是你的代码,不是 AI 的提示词)。 - 运行时进入
approve_node,调用interrupt()→ 暂停,Checkpointer 保存状态,等待人工。 - 人类看到载荷(动作+参数+问题),回复允许/拒绝。
interrupt()返回值被写进 State,边路由到send或cancel。
那提示词在哪? 提示词只出现在两类地方:
- 你调用 LLM 的节点里:
system_prompt="你是客服,发邮件前必须说明收件人与内容"——这是给 AI 的行为约束,不是审批机制。 - 审批 UI 给人类看的文案(
question字段)——这是给人看的,AI 根本不读。
面试一句话:审批是图结构层面的“安全闸门”,不是 AI 的能力;AI 只负责输出意图(tool_calls),路由代码决定敏感操作必须进 interrupt() 的人工节点,人类决定后通过 Command(resume=...) 恢复执行。
Q211. LangGraph 是不是用来“规范 AI 要进行哪些操作”的?
来源:LangGraph 官方“Nodes do the work, edges tell what to do next”设计哲学
核心要点(是的,但规范方式不是“给 AI 看流程图”):
LangGraph 确实是“规范 AI 操作”的编排层,但它的规范靠三条代码手段,而不是把任务清单存在 Node 里让 AI 自己读:
手段一:路径规范(图结构决定 AI 何时被调用、调用几次)
- 图决定 AI 在哪个节点出现:比如
classify节点调一次模型、agent节点在循环里反复调模型。 - 图决定能不能回头:
tools → agent允许 AI 再次决策;recursion_limit限制循环次数。 - AI 自己不知道这些——它只是“被叫上场演戏的演员”。
手段二:输入规范(调用 AI 时,你只给它看你想让它看的)
def agent_node(state):
resp = model.bind_tools([search, calculator]).invoke([
SystemMessage("你是客服,只能查资料和算数,不要做其他事"),
*state["messages"]
])
return {"messages": [resp]}
- 系统提示词规定行为边界;
bind_tools只暴露允许的工具——模型根本不知道危险工具存在,这就是最强规范。
手段三:输出规范(AI 说了不算,代码校验 + 路由 + 拦截)
def route(state):
calls = state["messages"][-1].tool_calls
if calls and calls[0]["name"] not in ALLOWED_TOOLS: # 白名单
return "reject" # 越权直接拒绝
if calls and calls[0]["name"] in SENSITIVE_TOOLS: # 敏感操作
return "approve" # 进人工审批
return "execute"
- 模型输出的 tool_calls 只是“提议”,要不要执行由代码决定:白名单校验、参数 schema 校验、敏感操作审批。
“规范 AI 操作”的分工表(面试直接背):
| 层 | 规范什么 | 手段 |
|---|---|---|
| 图(Graph) | 流程路径:AI 何时被调用、下一步去哪、能否循环 | Node + Edge + 条件路由 + 循环上限 |
| 节点(Node) | 这一步做什么:调哪个模型、传什么 prompt/工具 | 函数 + system prompt + bind_tools |
| 边(Edge) | 做完后的去向:按 state/工具名/结果分流 | 条件边 + 路由函数 |
| 运行时 | 兜底:持久化、暂停、恢复、超限 | Checkpointer / interrupt / recursion_limit |
| 模型(AI) | 只做“判断”:输出文本或 tool_calls | Function Calling / 结构化输出 |
一句话总结:LangGraph 规范 AI 操作的方式是“外部流程控制”——图规定 AI 什么时候上场、传什么剧本(prompt/工具)、演完按什么规则下场(路由/白名单/审批);AI 永远看不到流程图,它只是被图调用的判断引擎。这也正是面试常说的“模型负责判断,代码负责规则”。
来源索引
所有内容可回溯到以下公开资料;本地截图面经(阿里/美团/百度)与卡码知识星球原帖不公开链接。
| 来源 | 地址 | 说明 |
|---|---|---|
| 卡码笔记 · 大模型面经汇总 | https://notes.kamacoder.com/interview/llm/ | 2026 最全:Agent/RAG/Transformer/微调/AI 编程专题 + 真实面经 |
| 卡码 · 字节 Agent 四面 | https://notes.kamacoder.com/interview/llm/20260506bytedance.html | 21+ 题全解析(本文真实情景模块已收录) |
| 卡码 · RAG 面经 | https://notes.kamacoder.com/interview/llm/rag_interview.html | 向量检索/混合检索/Rerank/幻觉 |
| 卡码 · Agent 面经 | https://notes.kamacoder.com/interview/llm/agent_interview.html | ReAct/Function Calling/MCP/Skills/A2A |
| 卡码 · Harness 面经 | https://notes.kamacoder.com/interview/llm/harness_interview.html | Harness Engineering 六层组件 |
| 卡码 · Loop Engineering | https://notes.kamacoder.com/interview/llm/loop_engineering_interview.html | ReAct → Loop 工程化 |
| 卡码 · 多 Agent / Skill / 路由 / 幻觉 | https://notes.kamacoder.com/interview/llm/ | multi_agent_harness、agent_skill、hybrid_routing、hallucination_control 等专题 |
| 卡码 · 微调 SFT/RLHF/DPO | https://notes.kamacoder.com/interview/llm/finetuning_sft_rlhf_interview.html | 微调价值、Prompt/RAG 取舍 |
| 卡码 · GraphRAG | https://notes.kamacoder.com/interview/llm/graphrag_interview.html | GraphRAG/LightRAG 对比 |
| 卡码 · Transformer | https://notes.kamacoder.com/interview/llm/transformer_interview.html | Self-Attention/位置编码/架构选择 |
| 卡码 · AI 编程 | https://notes.kamacoder.com/interview/llm/vibe_coding_interview.html | Vibe Coding/Token 成本 |
| 卡码 · Claude Code 上下文 | https://notes.kamacoder.com/interview/llm/claude_code_context_window_interview.html | Auto-Compact/状态快照 |
| 代码随想录 · 大模型面经 | https://programmercarl.com/qita/0022.llminterview.html | 7 大方向、15 篇专题索引 |
| Datawhale hello-agents | https://github.com/datawhalechina/hello-agents | Extra01 面试问题总结:LLM/VLM/RLHF/Agent/RAG/评估 100+ 题 |
| AgentGuide 真实面经案例 | https://github.com/adongwanai/AgentGuide | docs/04-interview:16 个公司轮次案例 |
| AIInfraGuide 真实面经库 | https://github.com/caomaolufei/AIInfraGuide | docs/interview:181 份 AI-Infra 公司面经 |
| Awesome-LLM-Interview | https://github.com/DolbyUUU/Awesome-LLM-Interview-Questions-and-Answers | 大模型算法/Agent 开发常见题 + 答案 |
| ai-agent-interview-guide | https://github.com/bcefghj/ai-agent-interview-guide | 9 大模块 200+ 面试题、企业级项目 |
| LangChain 官方文档 | https://docs.langchain.com/oss/javascript/concepts/products | Framework / Runtime / Harness 分层定位 |
| LangChain 官方博客 · 1.0 | https://www.langchain.com/blog/langchain-langgraph-1dot0 | LangChain 1.0 vs LangGraph 1.0 官方说明 |
| LangChain 官方博客 · Graph Engineering | https://www.langchain.com/blog/3-years-of-graph-engineering-with-langgraph | LangGraph 三年复盘:图 vs Loop vs Harness |
| 牛客 · DeepSeek Agent 三面 | https://www.nowcoder.com/discuss/913902338543259648 | 真实三面复盘 |
| 牛客 · 字节 Agent 一面 | https://www.nowcoder.com/discuss/914281634864562176 | 字节 Agent 一面 |
| CSDN · 2026 大厂大模型/Agent 面试题 | https://blog.csdn.net/weixin_44151034/article/details/161729146 | 小米/字节/腾讯/阿里/蚂蚁/快手面经合集 |
| 腾讯云开发者 · RAG 高频题 | https://cloud.tencent.com.cn/developer/article/2661823 | 5 道高频 RAG 题 |