NiceOffer

面试面经 · 蔚来

【蔚来】【Agent 开发】【暑期实习HR面】面经(八股+大模型项目+手撕)

蔚来面经Agent 开发实习

蔚来 Agent 开发 暑期实习 HR面 面经

背景:海外一年制硕士,投递方向为车机大模型应用层,非算法岗,偏工程落地。

题目摘要

HR 面整体节奏快,技术深度有限,但覆盖面广,重点考察候选人是否“真做过”而非“背过”。核心考点如下:

  1. Go 语言基础:goroutine 与 channel 的同步机制,sync.WaitGroup 使用场景,以及 slice 的底层扩容策略。
  2. MySQL 八股:索引失效的典型场景(最左前缀、隐式类型转换、LIKE 前置通配符),以及事务隔离级别与 MVCC 的可见性关系。
  3. Redis 八股:缓存穿透/击穿/雪崩的区分与解决方案,重点问到了分布式锁的 Redlock 实现细节。
  4. Agent 项目深挖:RAG 流程中的检索策略、Function Calling 的异常处理、多轮对话上下文窗口管理、推理成本优化方案。
  5. 手撕算法合并 K 个有序链表(力扣 23)。要求先讲思路再写代码,重点考察优先队列(堆)的应用与边界处理。

项目深挖

面试官针对简历中的 Agent 项目连续追问,每一问都要求给出具体技术方案而非概念描述。

追问 1:“你的 RAG 检索结果直接拼进 prompt 吗?如果检索到的文档和问题不相关怎么办?”

参考回答方向:不直接拼接,先做相关性过滤。我采用的是双通道策略——先通过向量检索召回 Top-20,再用轻量级 reranker(如 bge-reranker-base)进行精排,保留 Top-5 进入上下文。对于低分结果,设置动态阈值,低于阈值的文档直接丢弃,避免噪声干扰。同时,在 prompt 中显式标注“以下内容可能无关,请勿强行引用”,降低模型幻觉概率。

追问 2:“Function Calling 在真实场景中经常调用失败,你怎么处理?”

参考回答方向:三层兜底机制。第一层,函数参数校验,在调用前用 JSON Schema 强制校验类型与必填字段,不合规则返回错误提示让模型重新生成参数;第二层,超时与重试,函数执行设置 3s 超时,失败后重试一次,仍失败则返回“当前服务不可用,请告知用户稍后再试”;第三层,降级策略,若所有函数都不可用,模型回退到纯文本对话模式,不报错硬撑。此外,所有函数调用都记录日志,用于后续分析高频失败原因。

追问 3:“上下文窗口有限,多轮对话中你怎么管理历史消息?”

参考回答方向:分层截断策略。短期记忆保留最近 5 轮完整对话,中期记忆用摘要压缩(调用轻量模型对旧对话生成摘要),长期记忆只保留用户偏好与关键实体(通过 NER 抽取)。Token 预算分配上,系统指令占 10%,历史消息占 30%,检索内容与当前用户问题占 60%。如果预算超限,优先压缩历史消息而非检索内容。

准备建议

1. 把项目里的每个技术选型都准备一个“为什么不用 X”的对比回答。 例如:为什么用向量检索而非 BM25?为什么用 bge 而不是 OpenAI embedding?为什么用 Redis 缓存函数调用结果而不是直接查库?面试官喜欢从反面验证你是否真的理解技术权衡。

2. 手撕算法不要只刷 hot 100,重点练习“堆”与“双指针”的变种题。 蔚来这类车企面试偏向工程场景题,合并 K 个有序链表、Top K 高频元素、接雨水这类题出现概率极高。建议把每道题的时间复杂度推导写在代码注释里,展示工程习惯。

3. 准备一个“成本优化”的具体案例。 大模型应用面试必问推理成本,提前算好一笔账:你们的 Agent 单次对话平均消耗多少 token?用缓存命中率提升多少?换小模型(如从 gpt-4o 换成 gpt-4o-mini)后准确率下降多少但成本降了多少?有真实数据支撑的回答会明显拉开与其他候选人的差距。

结果反馈

一面通过,3 天后约了技术二面,面试官明确说“项目部分聊得比较细,后续会考察系统设计能力”。

想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。