阿里国际agent开发岗,我跪了!!!
刚面完阿里国际的agent开发岗趁热把面试题记下来。说实话面完那一刻我有点懵——不是题难是那种“你会但差一点点”的遗憾感最难受。下面是我还记得的问题有些答得好有些答得不好都写出来给大家参考。一、LangChain和LangGraph到底有啥区别面试官问的第一个技术问题就是这个。我说LangChain像是一个工具箱里面有各种链、各种工具、各种模板帮你快速搭一个单Agent应用。你写代码的时候思路是线性的用户输入 → 调一个工具 → 调LLM → 输出。LangGraph不一样。它是在LangChain基础上做的图结构编排框架。你的任务可以分叉、可以循环、可以有条件跳转。比如一个场景先让AgentA规划然后AgentB执行执行完让AgentC检查检查不通过就回到AgentA重新规划。这种逻辑在LangChain里写起来特别别扭但在LangGraph里就是加一条边的事。面试官追问了一句“那你觉得哪个更好”我说没有更好看场景。简单任务用LangChain够用复杂协作必须上LangGraph。面试官点了点头没继续追问。二、LangGraph踩过什么坑这个问题我回答得不太好因为项目里踩的坑太多一时不知道说哪个。我选了最疼的一个状态管理。LangGraph里每个节点都能读写一个共享的state对象但不同节点是并发执行的。有一次我发现两个节点同时修改state里同一个字段后执行的直接把先执行的覆盖了完全没有警告。解决方式是在节点里做“合并写”不要直接覆盖而是判断一下这个字段是不是已经被别的节点改过了。面试官听完说“这是LangGraph的已知问题你能自己发现并解决说明真的用过。”三、RAG原理和Embedding模型怎么选的先说原理。RAG就是先搜后读。用户问一个问题先去知识库里找相关的段落然后把问题和这些段落一起丢给大模型让它照着搜到的信息回答。Embedding模型。我项目里用的是text-embedding-3-small主要原因是便宜且够用。但我也对比过两个方案方案优点缺点text-embedding-3-small成本低、速度快中文语义理解一般BAAI/bge-large-zh中文效果好需要自己部署延迟高混合检索EmbeddingBM25召回最稳实现复杂两套系统最后选了small因为项目对成本敏感而且业务场景对召回率要求没那么极端。面试官追问“你说embedding模型对比过具体怎么对比的”我说做了一个小测试集人工标注了50个问题和对应的正确答案段落然后算每种方案的Hit Rate召回率。small是82%bge是89%差7个百分点但small的API调用成本是bge自部署的1/10所以选了small。四、上下文压缩怎么做各有什么优劣这是RAG里的经典问题。检索回来的段落可能很长直接塞进prompt会超过token限制所以需要压缩。我试过三种方式方式一截断直接取每段的前500个字。简单粗暴但可能丢掉后面的关键信息。方式二重排序截断先让一个轻量模型给每个段落打分把分数高的放前面然后截断。这样至少保证重要的内容在前面不会被切掉。方式三LLM摘要压缩把每个段落单独丢给小模型生成一句话摘要然后把这些摘要拼起来。优点是信息密度高缺点是会丢失细节而且多一次LLM调用增加延迟。面试官问“你觉得哪种最好”我说看业务。客服场景用户问“怎么退货”细节很重要截断可能把“需要订单号”这条信息切掉所以我用重排序截断。如果是做新闻摘要用LLM压缩效果更好。五、Fallback怎么做的大模型调用不可能100%成功所以必须有降级方案。我设计的fallback分三层第一层重试。网络抖动导致的失败重试一次就能好。第二层换模型。主模型用的是GPT-4如果一直超时就切到Claude或者本地部署的Qwen。虽然效果差一点但至少能返回结果。第三层兜底话术。如果所有模型都挂了返回“系统繁忙请稍后再试”。这个话术虽然没用但比报错好。面试官追问“你怎么判断‘失败’超时还是返回空”我说两个都算。超时阈值设的30秒超过就算失败。返回空或者返回“我不确定”这种无效回答也算失败会触发fallback。六、AgentState的作用是什么为什么不用全局变量这个问题我在LangGraph踩坑那部分已经提过面试官专门拎出来细问了。AgentState是一个贯穿整个graph的共享对象每个节点都能读和写。# 伪代码示例class AgentState(TypedDict): messages: List[BaseMessage] current_step: str intermediate_results: dict为什么不用全局变量三个原因第一全局变量在多线程环境下不安全。LangGraph的节点可能是并发执行的两个节点同时修改同一个全局变量结果不可预测。第二全局变量没法回溯。你改完就改完了没有历史记录。但AgentState每次更新都可以保存快照方便调试和重放。第三全局变量不支持图结构特有的“条件恢复”。比如你的图执行到一半挂了从上一个checkpoint恢复时全局变量的状态已经丢了但AgentState可以从序列化的快照里原样恢复。面试官听完说了句“不错”没有继续追问。七、整体的失败重试机制怎么设计的这个问题范围比较大我把三个层面的重试都说了一遍。Node层每个节点执行失败会重试3次间隔2秒、4秒、8秒递增。3次都失败就标记这个节点为“失败”整个graph暂停发告警。RAG链层检索失败比如向量数据库超时会降级到关键词检索BM25。BM25也失败的话返回空召回集让模型用自身知识回答。Tool层工具调用失败比如调天气API返回500会重试2次。还失败就返回“工具暂时不可用”并且把这个信息写回给LLM让LLM告诉用户“查不了天气”。面试官问“你有没有考虑过部分失败的情况比如RAG召回了3段其中1段对应的文档源挂了”我说这个场景没考虑到真要处理的话可以给每段召回加一个“可用性”标记不可用的段落直接丢掉不参与后续生成。面试官说这是个好方向可以想想。八、Transformer原理和多头注意力这部分问得比较基础但也细。Transformer简单说就是“Attention is all you need”那篇论文提出的架构。它不依赖RNN的循环结构全靠注意力机制捕捉序列中不同位置的关系。多头注意力可以理解为让模型从多个角度观察同一段文本。举个例子。“他打篮球打得好但他受伤了”这句话里的两个“他”指向同一个人。一个注意力头可能关注“篮球”和“打”的关系另一个头关注“受伤”和“他”的关系。多个头并行计算最后把结果拼在一起。面试官没再追问应该是觉得基础过关了。九、实习IM项目的实现一个即时通讯系统的后端支持单聊、群聊、已读回执、离线消息。我负责的是消息可靠性保证核心是两件事消息不丢、消息不重。消息不丢靠“先存后发”。用户发消息服务器先写进数据库状态标记为“发送中”然后再推给接收方。接收方收到后回一个ack服务器再把状态改成“已送达”。消息不重靠客户端生成的唯一消息ID服务端用这个ID去重。同一个ID的消息如果收到两次第二次直接忽略。面试官问“群聊的已读回执怎么做的1000人的群每人读一下你都要存吗”我说存但是存的是“最后已读位置”。每个用户只记录自己读到了哪条消息而不是记录每条消息的已读状态。这样已读回执的存储量从O(M×N)降到了O(N)。十、实习Agent客服项目的RAG与回答生成这个项目是把RAG用在了电商客服场景。RAG实现知识库是商品FAQ、退货政策、优惠券规则这些文档。用户问“这个手机能7天无理由退货吗”先检索“7天无理由退货条件”相关的文档段落然后把这些段落拼进prompt让大模型生成回答。回答生成不只是把检索结果直接贴给用户。检索回来的可能是“7天无理由退货适用于未激活的商品”但用户问的“这个手机”是不是已经激活了需要从对话历史里找。所以生成阶段有两步判断用户问题里是否缺少关键信息比如是否激活如果缺少反问用户而不是瞎回答面试官问“你怎么判断‘是否缺失关键信息’”我用了最笨但有效的办法写规则。把每个业务场景的必需字段列出来比如退货场景必须有“订单号商品状态”缺一个就触发反问。当然这个方案不够智能但电商场景业务清晰规则够用。十一、魔改LangGraph项目的记忆系统设计这是我个人项目里最花时间的一块。LangGraph原生支持短期记忆通过AgentState传messages但长期记忆需要自己搞。我设计的记忆系统分三层工作记忆当前会话的所有对话存在内存里会话结束就清空。情景记忆用户的历史行为比如“上次问过空调怎么清洗”、“之前点过外卖到某个地址”。存在向量数据库里按用户ID分桶。语义记忆从情景记忆里总结出来的抽象知识比如“用户偏好便宜的商品”、“用户不喜欢等太久”。这个是定期用LLM从情景记忆里抽取的。记忆的写入时机不是每轮都写而是当LLM判断“这条信息未来可能有用”时才写。判断逻辑是用一个轻量模型打分超过阈值才存储。面试官追问“你怎么解决记忆过时的问题”我说加了一个衰减机制。每条记忆有个权重每次会话如果没用到它权重就衰减一点。权重低于阈值就删掉。比如用户半年前说“喜欢黑色”但最近三个月都在买白色那条“喜欢黑色”的记忆就会被淘汰。最后的手撕代码二叉树蛇形遍历leetcode第103题。两分钟写出来了核心逻辑就是层序遍历翻转奇数层。但面试官让我自己构造一棵二叉树来跑测试我脑子短路了——怎么new节点、怎么挂左右子树居然卡住了。# 我能写出来的是这个def zigzagLevelOrder(root): if not root: return [] res [] queue [root] left_to_right True while queue: level_size len(queue) level [] for _ in range(level_size): node queue.pop(0) level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) if not left_to_right: level.reverse() res.append(level) left_to_right not left_to_right return res# 但构造二叉树我写不出来 面试官说“没事算法思路是对的”但我感觉这里扣分了。出来复盘才发现构造二叉树不就是递归吗def build_tree_from_list(arr, i): if i len(arr) or arr[i] is None: return None root TreeNode(arr[i]) root.left build_tree_from_list(arr, 2*i1) root.right build_tree_from_list(arr, 2*i2) return root可惜面试的时候就是没想到。0 AI行业迎来前所未有的爆发式增长从DeepSeek百万年薪招聘AI研究员到百度、阿里、腾讯等大厂疯狂布局AI Agent再到国家政策大力扶持数字经济和AI人才培养所有信号都在告诉我们AI的黄金十年真的来了在行业火爆之下AI人才争夺战也日趋白热化其就业前景一片蓝海我给大家准备了一份全套的《AI大模型零基础入门进阶学习资源包》包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。有需要的小伙伴可以V扫描下方二维码免费领取人才缺口巨大人力资源社会保障部有关报告显示据测算当前****我国人工智能人才缺口超过500万****供求比例达1∶10。脉脉最新数据也显示AI新发岗位量较去年初暴增29倍超1000家AI企业释放7.2万岗位……单拿今年的秋招来说各互联网大厂释放出来的招聘信息中我们就能感受到AI浪潮比如百度90%的技术岗都与AI相关就业薪资超高在旺盛的市场需求下AI岗位不仅招聘量大薪资待遇更是“一骑绝尘”。企业为抢AI核心人才薪资给的非常慷慨过去一年懂AI的人才普遍涨薪40%脉脉高聘发布的《2025年度人才迁徙报告》显示在2025年1月-10月的高薪岗位Top20排行中AI相关岗位占了绝大多数并且平均薪资月薪都超过6w在去年的秋招中小红书给算法相关岗位的薪资为50k起字节开出228万元的超高年薪据《2025年秋季校园招聘白皮书》AI算法类平均年薪达36.9万遥遥领先其他行业总结来说当前人工智能岗位需求多薪资高前景好。在职场里选对赛道就能赢在起跑线。抓住AI风口轻松实现高薪就业但现实却是仍有很多同学不知道如何抓住AI机遇会遇到很多就业难题比如❌ 技术过时只会CRUD的开发者在AI浪潮中沦为“职场裸奔者”❌ 薪资停滞初级岗位内卷到白菜价传统开发3年经验薪资涨幅不足15%❌ 转型无门想学AI却找不到系统路径83%自学党中途放弃。他们的就业难题解决问题的关键在于不仅要选对赛道更要跟对老师我给大家准备了一份全套的《AI大模型零基础入门进阶学习资源包》包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。有需要的小伙伴可以V扫描下方二维码免费领取