牛马打工人在线内推 level
阿里巴巴_淘宝_前端 identity
获赞
732
粉丝
270
关注
17
看过 TA
4908
武汉大学
2024
前端工程师
IP属地:江苏
Call of Silence
私信
关注
这周公司实习招聘开启,我一直在等简历,但说实话,投递量远没达到预期。后台翻了一遍,很多人还在观望,或者还在纠结自己背景够不够、简历要不要再改改。说句真心话:别犹豫了,AI 研发这个方向,现在就是先到先得。部门正在做的智能客服和智能编程产品,是目前淘天 AI 应用落地的核心战场。业务 HC 真的给得很大方,但因为面试要求偏向工程化落地,很多同学还没反应过来,还在纠结要不要投。为什么找我内推最稳?1. 简历直达部门:你还在等系统公海捞人,找我投递的简历已经直接摆在带教桌上了。2. 拒绝石沉大海:我们部门目前流程反馈很快,只要你投了,我会帮你盯着状态,流程卡住了我直接去问 HR,这种效率是海投比不了的。3. 1v1 避坑:很多同学简历没过,是因为项目写得太“调包”。如果你能找我,我直接告诉你怎么把“工程能力”和“AI 模型”结合起来写,命中率起码提升 50%。我们需要什么样的候选人?主前端、后端、算法均可投递。不需要你是 AI 专家,但你需要有扎实的基础。比如:你是如何通过工具调用优化 Agent 逻辑的?你是如何处理模型上下文冲突的?分享一道我们部门最近面试的经典题,大家可以对照自测:“在构建一个复杂任务规划的 Agent 时,如果模型在多步执行中出现逻辑偏移,你会优先从 Prompt 优化、RAG 检索,还是工具调用闭环这三个维度排查?你的排查思路是什么?”行动建议:简历先甩过来。不用担心什么背景不匹配,只要你基础过硬,重度使用 AI 编程工具,我们都欢迎。投递方式:私我简历或者扫码投递现在是招聘初期,机会最多,HC 最富裕,这时候进来,无论是实习体验还是后续转正,容错率都是最高的。别等到大家都面试完了才想起来投,到时候 HC 没了,我也帮不上你。
0 点赞 评论 收藏
分享
03-18 10:30
已编辑
阿里巴巴_淘宝_前端
// 淘天 27 届暑期实习生正在招聘 各方向都有海量 HC 欢迎看我置顶帖子投递最近在帮部门看简历,发现不少同学在做项目时都挂了 Agent 的标签。但在面试过程中,很多同学对这个方向的理解还停留在调用API的层面,稍微深挖一下架构设计就接不住了。整理了一个最近面试中比较高频的Agent技术问题,大家可以先试着回答一下,看看基础扎不扎实:---一面 | AI Agent 架构设计面试题:请设计一个支持多工具调用的 ReAct Agent,说明其核心循环、工具调度策略、以及如何处理多步推理中的错误恢复。---参考答案一、ReAct 核心循环ReAct 的本质是一个 思考 → 行动 → 观察的迭代循环。Agent 在每一步先进行推理(Thought),分析当前状态和已有信息,决定下一步该做什么;然后执行行动(Action),选择一个工具并传入参数;最后获取观察结果(Observation),把工具返回的信息追加到上下文中,进入下一轮循环。直到 Agent 判断已经获得足够信息,输出最终答案。与纯 Chain-of-Thought 的核心区别:CoT 是闭卷考试,Agent 是开卷——每一步推理都可以与外部世界交互,用真实数据修正推理方向,而不是纯靠模型内部知识"硬猜"。二、工具注册与调度工具如何让 LLM "认识":每个工具以结构化方式注册,包含名称、功能描述、参数定义(类型、是否必填、含义说明)。这些信息会被注入到系统提示词中,LLM 通过理解这些描述来决定何时调用哪个工具、传什么参数。工具描述的质量直接决定了 Agent 的调度准确率——描述模糊,模型就会选错工具。三种调度策略:- 串行调用:每次只调一个工具,等到结果后再决定下一步。适合步骤之间有依赖关系的场景,比如"先查订单号,再根据订单号查物流"。- 并行调用:一次推理中输出多个工具调用,并发执行。适合多个独立子任务,比如"同时查北京天气和上海天气"。- 规划-执行分离:先让 LLM 生成一个完整的多步计划,再逐步执行每一步。适合复杂任务需要全局视角的场景。生产环境通常是混合策略:Agent 动态判断当前步骤是否有可并行的操作,有则并行,否则串行。三、错误恢复机制工具执行失败:核心原则是**不要在工程侧硬编码恢复逻辑**。工具失败后,应该把错误信息作为 Observation 原样返回给 LLM,让模型自己决定下一步——是重试、换个工具、还是换一种思路绕过。这恰恰是 Agent 相比传统程序的核心优势:用 LLM 的推理能力应对非预期情况。当然,对于网络超时这类瞬时错误,工程侧可以做有限次数的自动重试,但逻辑层面的恢复应该交给模型。推理陷入死循环:Agent 可能反复执行相同的操作却期待不同结果。需要一个循环检测机制:对比最近几步和之前几步的行为模式,如果工具调用和参数完全重复,就往上下文中注入一条引导信息,提示模型"你在重复相同操作,请尝试不同方法"。同时设置全局最大迭代次数作为硬性兜底。上下文窗口溢出:这是多步推理中最现实的工程问题。每一轮循环都会往上下文里追加 thought + action + observation,几轮下来就可能撑爆窗口。常用解法:对早期步骤做摘要压缩只保留关键结论,对过长的工具返回结果先截断或提取摘要再存入历史,以及每隔几步让 LLM 自己总结"到目前为止的关键发现"。四、生产级可观测性上线不是终点。一个可靠的 Agent 系统需要:完整的 Trace 记录(每一步的推理、行动、观察),Token 消耗监控(防止成本失控),任务维度的成功率和平均步数统计,以及超过最大步数后降级到人工处理的兜底机制。---追问 Q&AQ1:多 Agent 协作时,如何设计 Agent 之间的通信和协调机制?A:主流有两种模式。Supervisor 模式(中心化):一个"主管 Agent"负责接收任务、拆解子任务、分配给专项 Agent,然后汇总各 Agent 的结果做最终决策。好处是流程可控、容易调试,缺点是主管 Agent 成为单点瓶颈,它的推理能力决定了整个系统的上限。去中心化消息传递:多个 Agent 通过共享的消息总线或黑板系统通信,每个 Agent 监听自己关心的消息类型,处理后将结果发回总线。好处是扩展性强、不存在单点瓶颈,缺点是调试困难、消息顺序和冲突处理复杂。实际工程中更常见的是分层混合架构:顶层用 Supervisor 做任务编排,底层的子任务内部允许 Agent 之间点对点通信。这样兼顾了全局可控性和局部灵活性。一个经常被忽略的关键设计点是共享上下文管理:多个 Agent 看到的"世界状态"如何保持一致?通常会设计一个共享的 State 对象,所有 Agent 只能通过定义好的接口读写状态,避免并发冲突。---Q2:Agent 的短期记忆和长期记忆应该如何设计和配合?A:本质上对应两种不同的信息需求。短期记忆就是当前对话的上下文窗口,存放的是本次任务的推理过程和中间结果。它的特点是时效性强但容量有限。核心挑战前面说过——窗口溢出管理。长期记忆是跨会话持久化的知识,通常用向量数据库实现。每次对话结束后,把值得记住的信息(用户偏好、历史决策、领域知识)向量化后存入。下次对话开始时,根据当前问题做相似性检索,把相关的长期记忆注入到系统提示词中。两者的配合策略:Agent 在每一轮推理前,先从长期记忆中检索与当前任务相关的历史经验("上次处理类似问题时用了什么方法"),注入到上下文中作为参考。短期记忆负责当前任务的连贯推理,长期记忆负责跨任务的知识积累。一个常见的坑是记忆污染:把错误的推理结论写入了长期记忆,导致后续任务反复犯同样的错。所以写入长期记忆前需要有质量校验机制,比如只有任务成功完成时才写入,或者由另一个 LLM 评估该记忆是否值得保留。---Q3:如何防止 Prompt Injection 导致 Agent 执行恶意工具调用?A:这是 Agent 安全中最核心的问题。攻击面在于:Agent 处理的用户输入或工具返回的外部数据中,可能嵌入了恶意指令,诱导 LLM 执行非预期操作。防御需要多层:第一层:输入隔离。 用户输入和系统指令必须在提示词中明确分隔,使用结构化标记区分"这是系统指令"和"这是用户数据"。避免用户输入被模型当作指令执行。第二层:工具权限分级。不同风险等级的工具设置不同的调用条件。只读查询类工具可以自由调用,但涉及写入、删除、发送等不可逆操作的工具,需要额外的确认机制——比如二次 LLM 审核(用另一个独立的模型判断"这次调用是否合理"),或者直接要求人工确认。第三层:输出过滤。工具返回的外部数据在进入 Agent 上下文前,先做清洗,去除可能被解释为指令的内容。第四层:行为监控。对 Agent 的工具调用模式做异常检测。比如一个处理客服问题的 Agent 突然开始调用文件系统工具,这明显异常,应该立即阻断并告警。没有银弹,必须纵深防御。---Q4:如何评估一个 Agent 系统的效果?和评估单次 LLM 调用有什么区别?A:区别很大。单次 LLM 调用的评估是静态的——给输入、看输出、算指标。但 Agent 是一个多步动态过程,同一个最终结果可能有完全不同的路径质量。Agent 评估需要看三个维度:结果维度:任务是否完成、最终答案是否正确。这和评估普通 LLM 类似。过程维度:用了几步完成(效率)、有没有冗余操作(比如查了不需要的信息)、有没有走弯路后自我纠正(鲁棒性)。两个 Agent 都答对了,但一个用了 3 步另一个用了 15 步,质量完全不同。成本维度:总 Token 消耗、工具调用次数、端到端延迟。在生产环境中,这直接决定了系统是否可用。评估方式上,通常会构建一个 benchmark 数据集,包含不同难度的任务和标准答案。让 Agent 跑一遍,同时记录完整 trace。然后用自动化指标(完成率、平均步数、Token 消耗)加人工评审(推理路径是否合理)综合打分。
查看5道真题和解析
0 点赞 评论 收藏
分享
2025-08-14 16:01
阿里巴巴_淘宝_前端
-----------------------------------------------------------------------------------------前端策略1. 使用表格/列表的虚拟化(virtualization/windowing):仅渲染可见区域的行,常用库如 React 的 react-window/react-virtualized、TanStack Table 的虚拟化、Vue 的 vue-virtual-scroller 等。2. 实现“分块加载 + 懒加载”:按页或按区间加载数据,已经加载的分页缓存起来,滚动时按需请求新页。3. Skeleton 占位与渐进渲染:未加载的数据占位,提升感知性能。4. DOM 节点稳定性:为 virtualization 提供稳定的行高,避免重新计算布局。5. 数据最小化传输:仅请求和渲染当前可视区域所需的数据字段,减少 JSON 体积。6. 状态与缓存策略:本地缓存已加载的页,避免重复请求;考虑 prefetch 下一个或相关页以提升连贯性。-----------------------------------------------------------------------------------------除了此方法,还可以使用时间分片可以把“时间分片”的思想落地到大数据场景里,核心是在渲染和数据处理上把一次性工作拆成小块,让浏览器在多帧之间慢慢完成,确保页面交互始终保持响应。落地要点两层分片数据加载分片:服务端分页/游标分页,只拉当前需要的页块,后台可以提前在空闲时间拉取下一批页。渲染分片:将需要渲染的行在若干帧内逐步渲染完毕,避免一次性渲染造成帧率下降。浏览器协作机制使用 requestAnimationFrame(或 requestIdleCallback 的替代方案)进行逐帧工作,给每帧设定一个时间预算(如 8–16ms)。若使用 React 18 等并发特性,可结合 startTransition/useTransition、useDeferredValue 等进一步让用户交互不被阻塞。虚拟化 + 时间分片组合虚拟化确保只渲染可见区域的行,时间分片确保在可见区域更新时,后台舍入走,避免 UI 阻塞。失败兜底提供加载占位、错误重试、离线缓存等策略,确保极端网络状况下仍有良好体验。实现思路(React 风格,若你用 Vue/Angular 可对应替换库)数据层服务端走游标分页或分页接口,初始加载页大小如 50–200 条,预加载下一页在后台分片进行。渲染层维护一个 visibleItems 的缓存区、以及一个待渲染的索引指针 idx。使用时间分片逐步把 data 中的项推到 visibleItems,单位时间只处理少量数据,并在超过预算时暂停到下一帧继续。用户体验显示总条数、已加载进度、加载中状态、遇到错误时的重试入口。----------------------------------------------------------------------以上是一道面试题重点 重点 重点大家可以到我置顶帖子看看淘天 今年 HC 很多 ,填写内推码,全程跟进,可以帮优化简历
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务