AI 应用 / Agent 开发工程师
2026 面试题库与学习路线
2026 年大厂 Agent 岗的考核已从"你知不知道 Agent 是什么"升级为"你能不能设计一个不崩的 Agent 系统"。 本手册基于字节、阿里、腾讯、小米、美团、蚂蚁等公司 2026 年真实面经,按 推理框架、Agent 架构、工具与协议、RAG、工程化、安全评估、模型基础、手撕代码八大模块整理高频真题与答题要点, 并给出一条"先懂它会怎么坏、再学框架怎么填坑"的四阶段学习路线。
00 · 面试全景:面试官到底在考什么
综合 2026 年春招至暑期的面经,Agent 岗面试题目虽分散在 RAG、工具调用、多智能体、记忆、评测等方向, 但所有追问都指向同一件事:你有没有真的搭过、调过、在线上踩过坑。 背概念只能过前三分钟,能把"非确定性的概率程序"讲成"带确定性安全阀的工程系统"才是通过线。[2]
| 维度 | 核心考点 | 区分度 |
|---|---|---|
| ① 推理框架 | CoT → ReAct → ToT 的递进;ReAct 消息格式(think / tool_call / observation 的角色分配);Action 失败处理 | 基础必过 |
| ② Agent 架构 | Agentic Loop;记忆三层(工作 / 短期 / 长期);任务规划与 DAG;上下文压缩;多智能体编排 | 工程落地 |
| ③ 工具与协议 | Function Calling 机制与局限;MCP 五大原语、Server-First;MCP 与 A2A 的分层关系;Skills 封装 | 2026 必考 |
| ④ 系统设计 | 死循环三层防御;多工具依赖 / 超时 / 熔断;并行编排;状态持久化与恢复;成本(Prompt Caching) | 核心区分度 |
| ⑤ 安全与评估 | Prompt Injection 四层防御;高危操作防呆;幻觉治理;检索 / 生成 / Agent 三层评测指标 | 加分 → 必考 |
| 公司 | 侧重点 |
|---|---|
| 字节跳动 | 技术密度最高,深挖工程细节并层层追问:ReAct 细节、工具调用死循环处理(迭代限制 / 循环检测 / 降级)、上下文压缩策略[1] |
| 阿里 / 蚂蚁 | 最全面:必问 Agent / Workflow / 工具调用差异,要求画出"路由—管理—执行"三层架构,强调落地瓶颈与务实方案;RAG 评测指标(召回率、忠实度)抠得很细[1] |
| 腾讯 | 偏生态与协议:Workflow 与 Agent 的区别、MCP / A2A 多智能体协作、记忆系统设计[1] |
| 小米 | 项目"极深挖":Embedding 模型结构与输出维度、切片策略、LoRA 更新参数、RAG 文档增量更新,外加 Transformer 原理与手撕代码[1] |
| 美团 | Agent 循环 + 后端基本功组合拳:Java 线程、锁、缓存一致性、TCP、Redis 分布式锁都可能问[1] |
| 模型厂商(混元 / Kimi / MiniMax) | 追问模型底层:MoE vs Dense、对齐方法(RLHF / DPO / GRPO)、推理优化、模型能力边界[1] |
Agent 基础与推理框架
第一道分水岭。不要背定义,要讲清"为什么需要它"以及在真实项目里踩过什么坑。
Q1. Agent 和传统 LLM Chatbot 的本质区别是什么?
参考回答
Chatbot 是"用户输入 → LLM 推理 → 输出文本"的单轮映射;Agent 是"推理 → 决定用什么工具 → 执行 → 观察结果 → 决定下一步 → 循环直到达成目标"的自主系统,具备感知(Perception)、规划(Planning)、行动(Action)、记忆(Memory)四种能力。
加分点:自主性是双刃剑——给太多自主权可能产生不可预期操作,给太少就退化成 Chatbot;真正的工程挑战是设计"安全的自主边界"。[2]
Q2. 什么是 Agentic Loop?请描述 Think→Act→Observe 循环。
参考回答
Agentic Loop 是 Agent 的工作流水线。以"帮我退掉上周五买的书"为例:模型先判断要查订单(Think)→ 调用订单查询工具(Act)→ 发现书已发货不能直接取消(Observe)→ 再查退货政策 → 确认符合条件后创建退货单,每一步都在思考—行动—观察的循环中推进,直到目标达成。[2]
回答时最好在纸上画出循环图,并指出循环必须有终止条件(目标达成 / 最大轮次 / 熔断)。
Q3. ReAct 的核心循环和消息格式怎么设计?<tool_call> 用 user 还是 assistant 角色?
参考回答
ReAct = Reasoning + Acting,把推理(Thought)和行动(Action)交错,用 Observation 回灌结果。消息格式是工程落地的核心:
- 模型在
assistant消息中输出结构化的工具调用请求(如<tool_call>或 OpenAI 的 tool_calls 字段); - 程序解析后执行真实函数,结果以
tool角色(或约定的<tool_response>/ observation 消息)回传; - 再把拼好的消息数组发回模型继续推理,形成闭环。
关键点:LLM 并不会真的执行工具,它只是按 schema 输出一段 JSON/结构化文本,执行与回灌完全由你的代码控制——角色与格式必须严格匹配各模型 API 的协议,否则模型会"失忆"或重复调用。[2][4]
Q4. CoT、ReAct、ToT 的递进关系是什么?为什么要从 CoT 升级到 ReAct?
参考回答
- CoT(思维链):让模型写出逐步推理过程,解决"推理能力",但只能想、不能做;
- ReAct:推理与行动交错,解决"推理 + 行动",能与外部世界交互;
- ToT(思维树):同时探索多条推理路径并评估择优,解决"多路径探索",代价是 token 与延迟显著上升。
升级动因:真实任务需要调用工具、获取外部信息,CoT 只在文本空间推理,会出现"想得很好但什么都没做"。可补充 ReAct 在 ALFWorld 等基准上相对纯推理有约 34% 的成功率提升。[2]
Q5. ReAct 循环有哪些典型失败模式?
参考回答(四类)
- 死循环:Observation 不满足预期就反复重试同一工具;
- 上下文爆炸:循环轮次过多,历史塞满上下文窗口;
- 早停:未拿到关键信息就判定"任务完成";
- 过度思考:推理模型开启 extended thinking 后在 Thought 阶段消耗大量 token 钻牛角尖——生产中需设置
thinking.budget_tokens上限,简单任务用reasoning_effort: minimal。[4]
Q6. Agent 和 Workflow 的区别是什么?哪些节点该用确定性工作流、哪些交给 LLM?
参考回答
Workflow 的路径是预先编排好的(确定性 DAG),LLM 只填某个节点;Agent 的路径由模型在运行时动态决策(调哪个工具、何时结束)。工程原则:能用确定性工作流就不要交给模型决策——规则明确、可枚举的步骤(如固定格式转换、审批路由)用 Workflow;需要语义理解、开放域判断的节点才交给 LLM。
对"扣子(Coze)是 Agent 平台还是工作流平台"的稳妥回答:它两者都支持,大量实际应用以可视化 Workflow 为主、在关键节点挂载 LLM 决策,属于低代码 Agent / Workflow 混合平台。[1]
Agent 架构:记忆 / 规划 / 多智能体
从"面经型回答"切换到"工程型回答":每个组件怎么落地、怎么调参、怎么兜底。
Q7. 多轮对话里的 Memory 怎么设计?为什么不能"全塞进去"?
参考回答(三层记忆)
- 工作记忆:当前任务状态与中间变量(如 DAG 执行状态);
- 短期记忆:会话内上下文,用 messages + 滑动窗口 + 自动摘要(参考 Claude Code 的
/compact),并分层——项目级规则、用户偏好、会话上下文分开存储; - 长期记忆:跨会话持久化,主流方案是向量库 + 时间衰减 + 重要性加权(Mem0 / Zep 等封装),辅以 SQLite 全文索引。[2][4]
不能全塞的原因:长上下文存在 Lost in the Middle(中段信息利用率低)与 Context Rot(无关内容越多准确率越低),且延迟与成本随长度暴涨——主动剪枝比无脑堆砌效果好。
Q8. 上下文过长导致性能下降怎么处理?讲一下你的压缩策略。
参考回答
- 分层压缩:早期轮次只保留摘要,近期轮次保留原文;工具返回结果先结构化提取再入库;代码 / 日志类只留 diff 与错误栈;
- 触发条件按 token 水位分级(如 50% 触发摘要、75% 触发激进剪枝),不同层压缩内容不同;
- 压缩必须保留任务目标、已做决策、未完成事项(handoff 三要素);
- 异常兜底:压缩后若模型表现下降(如工具选择错误率升高),应能回滚到未压缩版本或对关键段落"解压重取",并通过离线评测监控压缩损失。[1]
Q9. 复杂任务的 Plan 怎么做?动态重规划如何实现?
参考回答
规划模块负责任务拆解与动态重规划:把复杂任务拆成有依赖关系的子任务,用 DAG 管理执行顺序;每个子任务执行后做状态校验,失败或发现新信息时触发重规划(Replan),而不是死守原计划。可用 Planner Agent 出计划、Executor Agent 执行、Critic 校验结果的结构,并为计划设置最大重规划次数。
Q10. 多 Agent 如何分工、通信和终止?如何避免互相扯皮 / 死循环?
参考回答
- 分工:按能力边界拆(如 Planner / Research / Code / Summary),每个子 Agent 有独立系统提示与工具集,避免工具重叠导致抢任务;
- 通信:通过共享状态(黑板模式)或结构化消息传递,只传结论 / 摘要而非全量上下文;
- 终止:由 Orchestrator 依据完成条件统一裁决,设全局最大轮次与预算;
- 防扯皮:DAG 去环、共享状态锁、调用链监控(检测 A→B→A 重复模式即熔断)。[2]
Q11. LangGraph 和 LangChain 的区别?State / Node / Edge 各解决什么?为什么选 LangGraph 而不是 AutoGen / CrewAI?
参考回答
LangChain 是链式调用的组件库(模型、提示、检索器等),擅长线性流程;LangGraph 是面向有状态、可循环 Agent 的图编排框架——Node 是执行单元(一次 LLM 调用或工具执行),Edge(含条件边)决定流转路径,State 在节点间传递并合并的共享状态,配合 Checkpoint 实现持久化、断点恢复与人机协同(Human-in-the-loop)。
选型理由:业务需要循环、分支、回滚、人工审批等图结构时 LangGraph 更可控、可调试;AutoGen 偏多 Agent 对话、CrewAI 偏角色协作模板,灵活性与可控性各有取舍。务实回答还应包括"框架不满足时用自定义 Node / 直接手写状态机扩展",并知道 2026 年厂商 SDK(Claude Agent SDK、OpenAI Agents SDK)也在崛起。[1][4]
工具调用与协议:Function Calling / MCP / A2A
2026 年最硬核的考点:MCP 已从"加分题"变成"必答题"。
Q13. Function Calling 的完整落地流程是怎样的?模型真的"调用"了函数吗?
参考回答
- 用 JSON Schema 向模型声明工具(名称、描述、参数类型、枚举、示例);
- 模型根据意图输出结构化调用请求(函数名 + 参数 JSON)——它没有执行任何代码;
- 客户端解析 JSON、做参数校验,调用真实函数;
- 把执行结果以 tool 角色消息回填,模型继续推理或给最终答复。
schema 质量直接决定调用质量:描述含糊→选错工具;类型 / 枚举不全→参数错误。2026 年主流模型均支持并行工具调用(一次返回多个 tool_use 块,并发执行后批量回填,链路延迟可降至 1/N)。[4]
Q14. 你怎么设计 Tool Calling?参数错误、调用失败、危险工具分别怎么兜底?
参考回答
- Schema 设计:工具命名无歧义、职责单一不重叠;参数给类型、枚举、必填约束与 few-shot 示例;
- 参数错误:服务端用 Pydantic 等强校验,校验失败把具体错误信息结构化回传给模型自我修正(而非抛异常中断);
- 执行失败:工具内 try-catch,返回
{"status":"failed","error_type":"Timeout","retry_after":5}这类结构化错误;设硬超时(如 15s)与重试上限; - 危险工具:不直接暴露给模型,高危操作经服务端策略层 / 人工确认;工具做分级权限与只读 / 写入隔离;
- 架构:工具经服务端统一注册与分发,不把内部接口裸暴露给模型,便于审计与限流。[1]
Q15. MCP 相比传统 Function Calling 最大的改进是什么?
参考回答
传统 Function Calling 有三大绝症:厂商绑定(各家工具定义语法不同)、静态配置(新增工具要改代码、重新部署)、无执行标准(超时、错误处理全靠硬编码)。
MCP(Model Context Protocol)把工具描述与执行分离:工具定义统一存在 Server 端,Client 通过标准协议动态发现并调用,LLM 只负责决策。更深一层的价值:把工具调用从"一次性编码"变成"可复用资产"——MCP Server 写一次,所有 Agent、项目、模型都能用,治理集中、审计可追溯,集成复杂度从 O(N×M) 降到 O(N+M)。
应能说出五大原语:Tools / Resources / Prompts / Sampling / Roots;并知道它已是 OpenAI、Google、Cursor 等全面采纳的事实标准。[2][4]
Q16. MCP 和 A2A 是什么关系?
参考回答
二者是分层协作而非竞争:MCP 是垂直连接——Agent 如何调用外部工具与数据(解决"我能用什么");A2A(Agent-to-Agent)是水平连接——Agent 之间如何互相发现、委托任务、交换结果(解决"我能和谁合作")。一个完整系统里 A2A 负责任务在 Agent 间流转,每个 Agent 再通过 MCP 去落地具体工具操作。[2]
Q17. MCP 有什么安全风险?如何防御?
参考回答
致命缺陷之一是 Context Poisoning(上下文投毒):工具描述会被全量注入 Agent 上下文,恶意指令可借工具元数据操纵模型推理,OWASP 已将其列为 LLM 应用头号风险;有基准显示超 50% 的 agentic 任务存在注入漏洞。
三大攻击面:Context Manipulation(篡改工具描述)、Server-Side Injection(恶意 Server 注入)、Cross-Server Compromise(跨 Server 扩散)。
生产级防御:工具描述入库前审计与签名、权限最小化(默认只读、按需授权)、MCP 隧道加密、第三方 Server 白名单与沙箱隔离、敏感凭证不进 Agent 上下文而在网络边界注入。[2]
RAG 系统设计与优化
面试官不问"什么是 RAG",只问"检索质量差怎么办、上线后怎么维护、你怎么证明它有效"。
Q18. 完整描述 RAG 的流程,以及每个环节的关键决策。
参考回答(离线索引 + 在线问答两阶段)
- 解析与清洗:PDF / Word / 网页 Loader,去页眉页脚、表格 / 图片特殊处理,剔除冗余;
- 切分(Chunking):按语义结构切而非只按固定 token,控制块大小与重叠(overlap),保留标题 / 条款编号等 metadata;
- 向量化与入库:Embedding 模型 + 向量库(Milvus / Qdrant / Faiss 等);
- 检索:Query 向量化做 ANN 召回,常配 Query 改写、混合检索;
- 增强:召回片段拼接 Prompt,控制顺序(关键信息放头尾)与长度;
- 生成:LLM 基于上下文作答,带引用出处与"不知道就说不知道"的约束。[3]
Q19. 你的 Embedding 模型结构是什么?输出维度多少?切片模型 / 策略怎么选的?
参考回答
必须能说清自己项目用的模型:例如 BGE-M3 / Qwen3-Embedding / text-embedding-3-large 等基于 Transformer Encoder(双塔 Bi-Encoder),输出固定维度向量(如 768 / 1024 / 3072),维度越高表达力越强但存储与检索成本越高,需按召回效果与成本权衡。
切片要结合业务语义:法律文档中"第三条第二款"与"第三条之二"含义不同,固定 512 token 切分会切断条款——应按标题层级 / 条款边界切,块间加 overlap,并把条款号、文档来源写进 metadata 用于过滤与溯源。[1]
Q20. 检索质量差怎么优化?为什么要加 Rerank?
参考回答(按收益排序)
- 混合检索:BM25(关键词精确匹配,对专有名词、编号友好)+ 向量语义检索,结果融合(RRF);
- 两阶段召回 + Rerank:先用双塔 Bi-Encoder 粗排取 Top-20~50,再用 Cross-Encoder 交叉编码 Query 与文档精排取 Top-3~5——精度更高但计算贵 10–100 倍,所以只对小候选集做;Rerank 被普遍认为是成本最低、收益最高的优化手段;[5]
- Query 侧:改写、扩展、HyDE(假设答案嵌入)、多查询并行召回;
- Chunk 侧:调整块大小与 overlap、父子索引(小块检索、大块喂模型)、metadata 过滤;
- Top-K 动态化:按问题复杂度或相似度阈值动态决定取几条,避免噪声片段稀释上下文。
Q21. RAG 知识库上线后文档更新了怎么办?每次重建全量吗?
参考回答(增量更新)
- 给每个文档 / chunk 存内容 hash 与版本号,更新时计算 hash 比对,只处理变更部分;
- 关键坑点:文档内容变化后 chunk 边界会漂移,不能只"替换变化 chunk 的向量"——稳妥做法是以文档为单位"先删后增"(删除旧版本全部 chunk,重新切分入库),或用稳定的语义锚点切分降低边界漂移;
- 删除与写入放在同一事务 / 带版本切换(蓝白索引),避免更新中间态被检索到;
- 配套版本控制与回滚:错误文档入库后可按版本撤回,并保留操作审计。[1]
Q22. 不同文档内容冲突、用户问题超出知识库范围,分别怎么处理?
参考回答
- 内容冲突:用 metadata 记录来源、生效时间、权威等级;检索后做冲突检测,优先高权威 / 最新版本,在答案中并列展示分歧而不是让模型私自裁决;
- 超范围问题:设置相关性阈值,召回分数过低则走"拒答 / 澄清 / 转人工"分支;可让模型先判断是否需要补充信息并向用户反问;多轮澄清仍无法解决则升级人工,而不是硬编答案。[1]
Q23. Agentic RAG 和传统 RAG 有什么区别?检索失败后怎么办?
参考回答
传统 RAG 是固定的"检索一次 → 生成"管线;Agentic RAG 让 Agent 自主决定是否检索、检索几次、怎么改写查询、是否切换数据源 / 工具,形成多轮检索与策略调整闭环。Query Rewrite 本身只是固定增强,只有当"是否改写、如何改写"由 Agent 根据中间结果动态决策时才算 Agentic。
检索失败的策略:换关键词 / 子查询分解重试 → 切换数据源(向量库→BM25→联网搜索)→ 放宽过滤条件 → 仍失败则如实告知并澄清问题。代价是 token 与延迟上升,需要设置检索轮次上限与成本监控。[1]
Q24. 你怎么评估 RAG 有没有效果?Recall@K / 忠实度怎么定义,baseline 是什么?
参考回答(三层评测)
- 检索层:Recall@K(标注的相关文档是否出现在前 K,分子=命中相关文档数、分母=全部相关文档数)、Precision@K、MRR、Hit Rate、NDCG;
- 生成层:忠实度 / Faithfulness(答案是否忠于检索内容、有无外在幻觉)、答案相关性、上下文利用率;可用 RAGAS 等框架或 LLM-as-Judge;
- 端到端:标准答案匹配、人工评分、业务指标(解决率、转人工率)。
关键纪律:评测集要够量且按问题类型 / 难度分层抽样;必须有 baseline(朴素切片 + 单路向量检索)作对照,每次改动报相对提升,而不是只丢一个"Recall@5 = 0.81";判断 LLM-as-Judge 本身的可靠性要看评委模型的一致性 / 与人工标注的吻合率。[1][6]
Q25. RAG 和 GraphRAG 在多跳推理上的根本差异?
参考回答
向量 RAG 按"局部语义相似"召回孤立片段,跨多个实体的关系链容易断;GraphRAG 先从语料抽取实体与关系构建知识图谱,多跳问题可沿图的边做结构化遍历与社区摘要汇总,擅长"A 和 B 通过 C 有什么关系"这类全局 / 关联推理,代价是构建与维护成本高。工程上常做混合:向量召回实体入口,再沿图谱扩展邻域。[1]
工程化与系统设计
2026 年面试的核心区分度:概念人人会背,工程细节讲得清的人极少。
Q26.【明星题】你的 Agent 调了三个工具就死循环了,异常处理在哪写?
参考回答(三层防御)
- 工具层硬隔离:每次调用包 try-catch + 硬超时,返回结构化错误(错误类型、是否可重试、retry_after),而不是一段 error 字符串;
- 推理层熔断:同一工具连续失败 N 次(如 3 次)、或检测到"调用→失败→再调用"重复模式 / 超过最大迭代次数,强制中断当前推理链;
- 规划层自修正:失败后让 Agent 反思原因(参数错?工具选错?),换参数或换工具重试,即 Reflection Pattern;仍失败则降级(转人工 / 告知用户)。[2]
Q27. LLM 一次要调多个工具,如何保证顺序、依赖清晰,且单个超时不拖垮全局?
参考回答(拆成三个问题)
- 依赖管理:无依赖的工具并行调用(利用模型一次返回多个 tool_use 块,客户端并发执行后统一回填);有依赖的编码为 DAG,按拓扑序执行;
- 超时控制:每个工具调用前设定硬超时阈值(MCP 生态通常期望 7–10 秒返回,可设 15s),超时立即中断并返回结构化超时信息;
- 异常熔断:连续失败达阈值或检测到重复调用模式即熔断;整体采用异步编排 + 资源调度,单工具失败走降级分支而不是让整轮对话崩溃。[2]
Q28. Agent 的状态怎么保存和恢复?会话中断后如何续跑?
参考回答
把对话消息、任务状态(DAG 各节点状态)、中间产物与 checkpoint 持久化到数据库;基于 LangGraph 等框架的 Checkpointer 可在每个节点后落盘,恢复时从最近 checkpoint 重建 State 继续执行,支持断点续跑、时间旅行调试与人机审批后恢复。长任务用事件溯源(event log)记录每步动作,保证可重放、可审计。
Q29. 如何解决大模型 API 的响应延迟与高并发?成本怎么压?
参考回答
- 流式输出(SSE)降低首字延迟 TTFT;
- Prompt Caching:system prompt、工具定义、长文档前缀开启 KV Cache 持久化,命中后延迟可降约 80%、成本降约 90%;注意缓存前缀里不要放时间戳 / 随机 ID;[4]
- 模型分级:简单节点用小模型、复杂节点才用大模型 / reasoning,按任务设置 reasoning_effort;
- 并行与缓存:工具并行、语义结果缓存;
- 服务化:FastAPI + vLLM / SGLang 自托管开源模型,配合 K8s 弹性扩缩、限流与排队;
- 预算控制:每会话 / 每任务设 token 与轮次预算。
Q30. 系统设计:为电商场景设计一个支持退换货的客服 Agent。
参考回答(端到端分层,建议边画边讲)
- 接入层:意图识别与权限校验,区分咨询 / 查询 / 办理类意图;
- 编排层:确定性流程(订单状态机:下单→发货→签收→售后期)用 Workflow;开放问答与异常分支交给 Agent 决策;
- 工具层:订单查询、退货政策 RAG、退货单创建、物流查询、优惠券发放等,写操作分级并要求确认;
- 数据层:政策知识库 RAG(含版本与生效时间)、用户画像与订单系统;
- 记忆:会话短期记忆 + 用户历史长期记忆;
- 安全与兜底:退款等高风险动作二次确认 / 规则引擎拦截,失败转人工;
- 评测:意图准确率、工具成功率、任务完成率、转人工率、CSAT 与成本 / 延迟看板。
Q31. 手机端 / 端侧 Agent 的整体架构怎么设计?
参考回答
分层讲:端侧小模型负责意图理解、隐私敏感数据处理与离线兜底;云端大模型负责复杂规划与推理;工具层打通系统能力(通讯录、日历、支付等)并做权限沙箱;通过统一的任务调度与状态同步层连接端云。重点回答功耗、延迟、隐私(敏感数据不出端)、弱网降级与跨 App 动作的授权确认。[1]
安全、幻觉与效果评估
从"加分项"变成必考项:Agent 有了手和脚,安全就是生死线。
Q32. Prompt Injection 为什么难防?架构层面如何防御?
参考回答
根源是 Context Mixing:单一上下文窗口里模型无法可靠区分系统指令、用户指令与不可信外部数据,所以它比 SQL 注入更难,防御必须建在模型外部。四层体系:
- 前置隔离:采用 Execute-Only 等架构,尽量不让 LLM 直接接触不可信数据(对外部内容先净化 / 沙箱处理);
- 工具调用审查:在工具执行边界部署独立的语义审计层,拦截异常调用;
- 影响溯源:标记并追踪不可信内容如何传播到最终决策(数据流标签);
- 权限最小化:静态最小权限 + 凭证移出 Agent,改为网络边界注入。[2]
Q33. AI 要执行"删库 / 高危操作"时如何防呆?
参考回答(四层,不是"加个确认弹窗")
- 确认层:高危操作执行前经独立安全分类器审查(分类器脱离 Agent 上下文运行,只看用户消息与调用请求,不看工具结果,防止被注入带偏);
- 规则层:PreToolUse Hook 做确定性规则匹配,
DROP TABLE、kubectl delete等直接拒绝,不经过 AI 判断; - 权限层:Agent 不持有生产凭证,敏感凭证经 MCP 隧道在网络边界注入、按需短时授权;
- 治理层:全量审计操作日志,异常行为实时熔断与告警。[2]
Q34. 幻觉分哪两类?有哪些治理手段?
参考回答
- 内在幻觉:检索结果里有正确信息,但生成内容与之矛盾(如检索是 91%,答成 95%);
- 外在幻觉:生成了检索结果中根本不存在的内容。
治理组合拳:Prompt 强约束("仅依据给定材料、无依据就说不知道"、要求引用出处);提升检索质量与上下文组织;输出校验(事实比对、结构化约束、自检);温度调低;必要时用微调让模型学会该领域的拒答边界;上线后用忠实度指标持续监控 Badcase 并回流。[7]
Q35. 怎么评估一个 Agent 的好坏?
参考回答(过程 + 结果 + 成本三维)
- 结果指标:任务成功率(端到端)、目标达成率、答案正确率;
- 过程指标:工具选择准确率、参数正确率、平均调用轮数、死循环 / 熔断率、人工干预率;工具调用能力可对标 BFCL(Berkeley Function-Calling Leaderboard);
- 效率指标:平均延迟、token 消耗与单任务成本;
- 方法:构造贴近真实分布的评测集(τ-bench 式多轮工具调用场景)、离线回归 + 线上灰度、LLM-as-Judge + 人工抽检、轨迹级评估(trajectory eval)而不只看最终答案。[4]
Q36. 模型不听指令 / Badcase 怎么定位:是 Prompt 问题还是模型能力问题?
参考回答
建立可复现的最小样例与消融实验:固定输入逐个变量排查——换更强模型若问题消失→能力问题;同一模型改提示 / 示例 / 输出 schema 后稳定改善→指令遵循问题;再看是工具描述歧义、上下文噪声还是参数约束缺失。修复手段按成本排序:Prompt / few-shot → 结构化输出与后处理校验 → 流程约束(不让模型做该决策)→ 微调。每次修复必须用评测集给出前后对比数据,避免"感觉变好了"。[1]
大模型基础八股(应用 / Agent 岗也会问)
应用岗对推导要求低于算法岗,但高频原理题必须能用自己的话讲清楚,反感背书。
| 题目 | 答题要点 |
|---|---|
| Transformer 基本结构 / 自注意力 | Encoder-Decoder(或 Decoder-only);自注意力 Q·Kᵀ/√dₖ 后 softmax 加权 V;多头并行捕捉不同子空间关系;残差 + LayerNorm + FFN。[1] |
| 为什么除以 √dₖ? | dₖ 大时点积方差变大,softmax 进入饱和区梯度趋近 0;除以 √dₖ 把方差缩回 1 附近,稳定训练。[1] |
| LayerNorm 对哪个维度归一化? | 对每个 token 的特征维(hidden dimension)做归一化;能区分 LayerNorm / BatchNorm、Pre-Norm / Post-Norm 及可学习参数 γ、β 更佳。[1] |
| 位置编码 | 绝对位置编码 vs RoPE 旋转位置编码;RoPE 通过对 Q/K 旋转实现相对位置依赖;长度内插与外推(外扩)的区别。[1] |
| MHA / GQA / MQA / MLA | 优化目标都是降低 KV-Cache 显存与带宽:MHA 每头独立 K/V;MQA 所有 Q 头共享一组 K/V;GQA 分组共享(效果与效率折中);MLA 是 DeepSeek 的低秩压缩方案。[1] |
| KV-Cache 为什么能加速推理 | 自回归生成时缓存历史 token 的 K、V,每步只算新 token,避免重复计算;代价是显存占用,故有量化、PagedAttention、PD 分离等优化。[1] |
| LoRA 原理与细节 | 冻结原权重 W,旁路加低秩矩阵 BA(W+BA,B 初始化为 0 保证起步等价),只训练少量参数;常作用于 Attention 的 Q/K/V/O;LoRA 学习率通常比全参 SFT 高。能对比 P-Tuning / Adapter / 全参微调。[1] |
| SFT 与 RLHF 区别;DPO/GRPO | SFT 用示范数据教模型"怎么答";RLHF 用偏好奖励对齐"答得好不好"(RM + PPO);DPO 直接用偏好对做优化、免显式 RM;GRPO 用组内相对奖励、去掉价值网络(DeepSeek-R1 采用)。[1] |
| MoE vs Dense | MoE 每次只激活部分专家,参数量大但单 token 计算量低,收益是容量 / 成本比,代价是路由负载均衡、通信与训练稳定性问题。[1] |
| 量化 / 推理加速 | GPTQ、AWQ 等权重量化降低显存;vLLM(PagedAttention)、SGLang、TensorRT-LLM;投机解码;长文本显存优化。[1] |
手撕代码与项目深挖
代码以 LeetCode Medium 为主,Agent 岗会额外考核心机制手写;项目追问是真正的胜负手。
手撕代码高频清单
- 常规算法:反转链表、合并两个有序链表、二叉树层序遍历、最长回文子串、编辑距离、括号生成、最长连续递增子序列、0/1 矩阵路径判断(DFS/DP);难度以 Medium 为主,偶有 Hard 二选一。[1]
- 硬核手写:仅用 NumPy 手写多头自注意力(init + forward)、手写位置编码;
- 工程手写:不依赖框架手写 50 行 minimal Agent(手动解析 tool_use、拼 messages、实现计算器 + 搜索两个工具、加超时与重试)。[4]
代码样例:不用框架的最小 ReAct Agent 长什么样?
面试白板伪代码(Python)
def run_agent(user_msg, tools, max_steps=5):
messages = [{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_msg}]
fail_count = {}
for _ in range(max_steps): # ② 推理层:最大迭代
resp = llm.chat(messages, tools=tools) # 模型只输出决策
if not resp.tool_calls:
return resp.content # 终止条件
messages.append(resp.raw)
for call in resp.tool_calls:
try:
result = execute_with_timeout( # ① 工具层:硬超时
call, timeout=15)
except ToolError as e: # 结构化错误回灌
result = {"status": "failed",
"error_type": e.type, "retry_after": 5}
fail_count[call.name] = fail_count.get(call.name, 0) + 1
if fail_count[call.name] >= 3: # ② 熔断
return escalate_to_human(messages)
messages.append(tool_result_message(call.id, result))
return "已达最大步数,转人工处理" # 终局兜底
这段代码天然对应 Q26 的三层防御,面试时可直接边写边讲。
项目深挖:你必须提前量化好的数字
- RAG 项目:文档量级、chunk 总数与平均长度、Embedding 模型与维度、向量库与索引参数、混合检索 / Rerank 前后的 Recall@K 对比、评测集规模与分层、延迟与成本;
- Agent 项目:为什么这样拆流程?哪些节点确定性、哪些交给 LLM?失败分支与重试机制?状态如何保存恢复?多 Agent 如何分工 / 通信 / 终止?
- 每个优化都要能答:问题现象 → 定位方法 → 解决方案 → 评测数据证明有效 → 有无副作用。
09 · 四阶段学习路线:先懂它会怎么坏,再学框架怎么填坑
多数路线的错误是"顺序错":一上来学一堆框架 API,demo 能跑、一遇真实场景就崩,且不知道为什么崩。 2026 年推荐顺序为:底层机制(含 Prompt Caching / MCP)→ LangGraph + 厂商 SDK → 工程深度(MCP / BFCL / 评测)→ 能讲清"精度 / 延迟 / 成本"三维数据的项目。 全职学习者约 8–12 周走完前三阶段,在职可按 2–3 个月拉长。[4][8]
目标:不用任何框架跑通 LLM 调用与工具闭环,理解 Agent"会怎么坏"。
学习内容
- Python 工程强化:类型注解、异步 asyncio、FastAPI、Pydantic
- Prompt 工程:结构化系统提示、Few-shot、输出格式约束
- 手写 Function Calling 全流程:schema → 解析 JSON → 执行 → 回灌
- ReAct 循环与四大失败模式;并行工具调用
- 上下文窗口物理限制:Lost in the Middle、Context Rot
- Prompt Caching:缓存前缀设计、TTL、cache breakpoint
配套动作
- 先用 Dify / Coze 搭一个知识库 Agent 建立整体认知
- 再手写 50 行 minimal Agent(计算器 + 搜索)
- 给它加上超时、重试、最大步数与 Prompt Caching
- 刻意制造死循环并观察 token 增长
目标:掌握主流编排框架与生产级 RAG 管道,完成第一个完整应用。
学习内容
- LangChain 组件 → 重点 LangGraph:State / Node / Edge / Conditional Edge / Checkpoint
- 了解厂商 SDK:Claude Agent SDK、OpenAI Agents SDK,知道与 LangGraph 的取舍
- RAG 全链路:解析清洗、语义切分、Embedding、Milvus/Qdrant
- 混合检索(BM25 + 向量 + RRF)、Rerank(Cross-Encoder)、Query 改写 / HyDE
- RAG 评测:Recall@K、MRR、Faithfulness、RAGAS、LLM-as-Judge
配套动作
- 做一个垂直领域知识库问答(法律 / 客服 / 内部文档)
- 建立 ≥100 条、分层抽样的评测集与 baseline
- 每次优化记录 Recall / 忠实度 / 延迟 / 成本对比表
- 实现文档增量更新(hash 检测 + 先删后增 + 版本回滚)
目标:从"能跑的 demo"进化为"不崩的系统",拿下 2026 必考协议与工程考点。
学习内容
- MCP:五大原语、自己写一个 MCP Server、动态发现与权限设计
- A2A 多智能体协作;Skills 封装与渐进式披露
- 可靠性:三层防御(硬隔离 / 熔断 / 自修正)、DAG 依赖、超时与降级
- 记忆分层:滑动窗口 + 摘要、Mem0/Zep、上下文压缩管线
- 可观测性:Langfuse / LangSmith 全链路 trace、token 与成本看板
- 安全:Prompt Injection 防御、高危操作 Hook、OWASP Agentic AI 风险
- 部署:Docker、FastAPI 流式接口、vLLM 自托管、限流与 K8s 基础
配套动作
- 把阶段二的 Agent 接入自建 MCP Server 替换裸函数调用
- 加入人机协同审批节点与 Checkpoint 断点恢复
- 用 BFCL 风格的用例集评测工具调用成功率
- 做一次 Prompt Injection 红队测试并加固
目标:用公开基准讲出"精度 / 延迟 / 成本"三维数据,形成可被追问十层的简历项目。
推荐项目方向(2026 有故事性)
- Code Agent on SWE-Bench Verified(500 题人工核验子集)
- 客服 Agent on τ-bench(多轮工具调用)
- Text2SQL Agent on BIRD-SQL
- Browser Agent on WebArena / VisualWebArena
- GUI Agent on OSWorld[4]
求职动作
- GitHub 开源:README 写清架构图、评测集、三维数据
- 用"问题→方案→量化收益"结构打磨 2 个核心项目
- 刷牛客 / 脉脉最新面经,按本手册八模块自测
- LeetCode Hot 100 保持手感,准备手写 MHA 与 minimal Agent
10 · 实战项目与简历写法
2026 年简历只写"准确率提升"已经不够,面试官会追问成本与延迟——能同时讲清 accuracy / latency / cost 才是合格的 Agent 工程师。[4]
| 梯度 | 项目 | 证明的能力 |
|---|---|---|
| 入门保底 | 垂直领域知识库问答(RAG + Rerank + 评测集 + 增量更新) | RAG 全链路与评测纪律 |
| 进阶主力 | 多工具业务 Agent(LangGraph + MCP Server + 熔断/审批/记忆 + 可观测) | 工程化落地与系统设计 |
| 冲刺亮点 | SWE-Bench / τ-bench / BIRD-SQL 基准项目,报三维数据 | 技术深度与科研式优化能力 |
11 · 避坑清单与 30 天冲刺
五个高频误区
- Multi-Agent 不要早学:单 Agent + Workflow 优先,状态同步与循环依赖在单 Agent 没吃透前全是坑;[4]
- 不要迷信推理模型:简单任务开 thinking 更慢更贵,按
reasoning_effort: minimal/low/medium/high分级; - 不要堆框架:简历列 LangChain+LlamaIndex+AutoGen+Dify+Coze+MCP+A2A 会显得都没深用过,专精 1–2 个并讲清选型理由;
- 不要绕过 Prompt Caching:生产环境不开缓存等于烧钱,这个细节一问就扣分;
- 不要只报准确率:必须同时准备成本、延迟数据与 baseline 对比。
30 天冲刺清单(在职版,每天 1.5–2 小时)
- 第 1 周:手写 minimal Agent + ReAct,整理 messages 协议与四大失败模式笔记
- 第 2 周:LangGraph 官方教程走通,做带条件分支与 Checkpoint 的小应用
- 第 3 周:RAG 项目补评测集、baseline、Rerank 与增量更新;手写一个 MCP Server
- 第 4 周:按本手册八模块逐题口述录音,重点练 Q26/Q27/Q32/Q33 系统题;每天 2 道 LeetCode Medium
- 贯穿全程:把目标公司近期 AI 产品(如豆包、扣子、腾讯元器等)逐一体验并形成观点