带了个应届生准备 Agent 面试,追到第三轮他就说不出话了
- 2026-11-14 17:09:48
上周六下午,我给带的一个学弟做模拟面。
他 26 届,双非本科,计算机科班,没有实习经历,秋招主投 Agent 开发。简历上两个项目,关键词一个不落:LangGraph、RAG、MCP、工作流编排、记忆系统——凡是这两年热门的,都在上面。🔧
第一轮聊得挺顺。我让他挑一个项目讲,三分钟讲完:知识库怎么建的、工具怎么接的、链路怎么串的,条理比很多工作两年的人还清楚。
第二轮我开始往细节里钻。
"你那份文档,是按什么粒度切的?"
"就……按字数切的,每 500 字一段。"
"为什么是 500?为什么不是按标题、按段落,或者按语义切?"
他停了几秒。
第三轮,他基本就剩下三句话了:
"这块是参考网上一个开源方案改的。" "工具调用那部分,我当时主要负责对接接口。" "具体细节我记不太清了。"
——这三句话,去年我自己面试的时候,在心里默念过无数遍。😮💨
我不是想说他不行。
恰恰相反,他学东西比我当年快太多了。RAG 的原理、LangGraph 的节点怎么编排、MCP 解决的是什么问题,讲起来头头是道,新框架出来也跟得上。
问题出在另一个地方:项目写成了生产系统的样子,讲出来却只有一条 Demo 的流程。⚠️
很多同学都卡在这一步。不是没做,是做的时候从来没想过"这东西真上线会怎么坏"。所以面试一被往深了追,就只能一路往回退。
下面这四层,是我带他复盘时逐条过的内容。你简历上要是也写了 Agent 项目,可以照着对一遍。
一、先说 RAG:四问里有三问答不上,项目就等于白做
他的第一个项目是"基于 RAG 的售后知识库问答"。我按面试官的习惯问了四个问题。
第一问:文档怎么清洗、怎么切的?为什么按固定字数,而不是按标题、段落或语义?
他答的是"直接 RecursiveCharacterTextSplitter,500 字一段,重叠 50"。
这就是典型的"跑通了,但没想过为什么"。
实际做的时候,光清洗这一步就得花掉一半时间:PDF 转出来的页眉页脚、目录页、"详见第 X 章"这种只有指向没有内容的句子、被拆散的表格行、乱码——这些东西不清干净,后面切得再漂亮也没用。
切分更不能一刀切。他的知识库是 Markdown 写的帮助文档,正确的做法是按标题层级切:一个二级标题下的一整块内容是一个完整语义单元;遇到代码块和表格整体保留,实在太长再二次切,切的时候把标题路径拼在 chunk 前面,这样召回的时候模型知道这段出自哪个章节。
按 500 字硬切会发生什么?一条完整的"退换货流程"被从中间劈开,前半段在 chunk A,后半段在 chunk B。用户问"七天无理由怎么退",召回只召回了一半,模型拿半份流程去回答——你还会觉得这是模型的问题吗?
第二问:检索效果不好,你怎么判断是召回的问题、重排的问题,还是生成的问题?
他愣住了。
这是最好用的一道题,因为它考的不是知识点,是你有没有排查过。
我的排查顺序是这样的:先攒一个几十条的小测试集,人工标注每条问题对应的正确 chunk。
正确 chunk 根本没出现在 top-K 里 → 召回段的问题,去查切分粒度、embedding 模型、要不要加 BM25 混合检索;
正确 chunk 在 top-K 里但排在后面 → 排序段的问题,上 rerank;
正确 chunk 排在第一位,答案还是错的 → 生成段的问题,去改 Prompt、改输出约束,或者老实承认这条就是模型的锅。
三个段的优化手段完全不同。不分青红皂白地说"加个 rerank",在面试官耳朵里跟"我上网抄了个方案"没有区别。
第三问:用户问到知识库里没有的内容,系统是硬着头皮答,还是有兜底?
他答:"应该会回答吧,模型自己会判断。"
这句话在面试里说出来,基本就是给自己判了死刑。🎯
模型不会"自己判断不知道",它只会给你编一段看起来很合理的答案。所以必须显式兜底:给相似度设阈值,低于阈值就不走生成,直接返回"知识库里没有这部分内容",同时把最相近的几个条目入口列出来,或者一键转人工。
在问答类场景里,"我不知道"不是缺陷,是功能。
第四问:有没有记过 Bad Case?优化前后的指标分别是多少?
他一条都没记过。
这一步是最容易补、也最容易被忽略的。他后来花了一周,攒了 60 条真实问题做成测试集,每次改完跑一遍,把四个数记下来:命中率、拒答率、答案可用率、平均响应耗时。
改了切分策略之后,命中率从 61% 到 84%;加了拒答阈值之后,答案可用率从 58% 到 87%。
没有这两组数字,前面所有的优化都叫"我感觉变好了"。
二、再说工具调用:别只说"模型能调天气和搜索接口"
他简历上写的是"Agent 自动调用订单、物流、库存接口完成任务"。
我只问了一个场景:你给我讲一次它调用失败的真实经历。
这四个追问,你至少要能答上三个👇
模型生成的参数不符合 schema,怎么办?
不能只靠 Prompt 里写一句"请输出合法 JSON"。要用 JSON Schema 或 Pydantic 把参数结构显式声明出来,模型输出之后先校验,校验不过就把报错信息回传给模型让它重试一次,还不过就终止这次调用。
下游服务超时,重试几次?
他的答案是"失败了就重试"。这就是没做过线上的人说的话。
无脑重试会把下游打崩——尤其是下游本身就在抖动的时候,你重试得越勤,它恢复得越慢。合理的做法是错误分类:网络抖动、5xx、限流这三类可以重试;参数错误、权限不足、业务校验失败这三类重试一万次也是错的,直接返回。可重试的走指数退避(1s、2s、4s),设重试上限(一般 2-3 次)。
连续重试还是失败,是返回默认结果,还是转人工?
这题考的是业务判断。查优惠券规则失败,可以降级成"当前优惠信息获取失败,请以下单页为准";查库存失败,绝对不能返回"有货"——那会造成超卖。涉及金额和承诺的操作,一律转人工,并且把前面已经拿到的上下文一起带过去,别让用户从头讲一遍。
工具执行成功了,但返回字段缺失,后面的模型会不会继续编?
这是最隐蔽的一个坑。工具返回 {"order_status": null} 或者干脆少一个字段,模型拿到残缺的结构,会非常自然地帮你"补"一个合理的值出来。
所以返回之后一样要校验:必填字段在不在、类型对不对、值在不在枚举范围内。缺了就明确告诉模型"这个字段没拿到,不要用推测值",而不是让它自己脑补。
一个能落地的工具调用,标准配置是这么一串:参数校验 → 错误分类 → 超时控制 → 指数退避 → 重试上限 → 降级 → 人工兜底。
他原来的答案只有一句"加个 try-except"。
我直接跟他说了:try-except 只能证明你的代码没当场崩,证明不了这个系统可靠。面试官问的是后者。⚙️
三、然后是记忆:很多同学写了"做过多轮记忆",却说不清上下文为什么失效
他项目里接了一个 memory 模块,我问他:用户聊到第十三轮,前面说过的"我是学生,没有企业邮箱"被模型忘了,你觉得是哪一步出的问题?
他答:"应该是上下文太长了。"
只对了一种可能。实际情况要分四种排查:
- 上下文窗口被塞满
,早期的关键信息被挤出去了;
- 历史消息没有做摘要压缩
,十几轮闲聊把窗口全占了;
- 长期记忆没有分层
,什么都往一个池子里丢,召回的时候一起涌进来;
- 召回策略有问题
,把无关的历史片段拉了进来,反而把关键信息挤掉了。
面试的时候,把记忆拆成三层讲, instantly 就不一样:
短期记忆:只放当前任务这一轮在做什么、已经拿到哪些中间结果;摘要记忆:放这一路对话里已经被确认过的关键信息,滚动压缩;长期记忆:只放稳定、可复用的用户事实,比如身份、偏好、历史订单特征。
然后主动补三句,基本就没人能挑出毛病:
- 哪些不该记
:一次性验证码、情绪化的抱怨、这一轮的中间推理过程,全都不进记忆;
- 什么时候更新
:用户明确纠偏时立刻覆盖,一轮任务结束时批量落摘要;
- 召回之后怎么控长度
:摘要层设 token 上限,长期记忆按相关性只回 Top-N 条事实,不要全量拼接。
讲完这三条,面试官就知道你不是"调了一个 memory 接口"。🧠
四、最后是工作流与工程稳定性
他最后一个项目用了工作流编排。我问他:Agent 反复调用同一个工具停不下来,你怎么处理?
他说"设了最大步数"。
最大步数是最后一道保险,不是解决方案。真正的做法是:
记录每一次工具调用的工具名、参数哈希和执行结果,检测到相同的调用连续出现两次,直接打断这一步,让模型换个思路或者转人工——不然它能在那绕二十轮,最后烧掉你一大笔 Token。
关键节点要有日志。一个请求进来,走到哪一步、调了哪个工具、耗时多少、消耗多少 Token、最终走了哪条分支,全都要能查。出了问题要能把整条异常链路重放一遍,不然线上事故你根本定位不了。
每次优化都要留下 Bad Case。改了切分就记一条"这条之前召不回,现在召回了";改了 Prompt 就记一条"这条之前会编造,现在会拒答"。攒够几十条,你的项目就有了"证据链"。
我跟他讲:面试官不在乎你用了几个框架,他在乎的是你能不能讲清楚——一次失败、一次排查、一次优化。
后来他照着这四层,把项目从头到尾重做了一遍。清洗脚本重写了,切分改成按标题层级,加了混合检索和 rerank,四个工具全补上了参数校验和退避重试,记忆拆成三层,最后接了一套简单的调用日志。
一个月后他去面携程的 Agent 开发岗,回来跟我说:面试官问的问题,几乎全在模拟面里出现过。最后拿到了 offer,base 25K×15。🎉
面试前,按这四层把项目重新整理一遍
数据层:数据从哪来?怎么清洗、怎么切分?切完之后怎么评估好坏?工具层:参数错了怎么办?接口超时怎么办?连续失败是降级还是转人工?返回字段缺失会不会导致模型编造?记忆层:上下文怎么压缩?关键信息怎么召回?什么该记、什么不该记?工程层:日志怎么打?重试怎么控?成本怎么算?兜底和 Bad Case 怎么做?
你不需要把所有框架都塞进简历。真正能拉开差距的,从来不是框架清单的长度,而是你能不能把一次失败、一次排查、一次优化讲清楚。
别再只准备"项目是怎么做出来的"。
还要准备"它为什么会出错,以及你是怎么修好的"。🔥
我自己也是 25 届双非,去年这个时候被追问得下不来台。现在在职做 Agent 开发,业余带了几个准备校招的同学——他们踩的坑,跟我去年踩的一模一样。
如果你现在也卡在这一步,不知道该补哪块,可以说句"路线清单"📩,我把应届生 Agent 面试的高频追问、项目拆解模板和学习路线整理成一份清单,面试前照着逐项补齐,比再刷十个教程有用。
微信扫一扫 · 添加人工客服
QQ扫一扫 · 添加人工客服