【面试真题】字节 AI 应用岗

字节 AI 应用岗:一次挂掉之后的「补洞笔记」

简历里是 法律咨询 RAG + 三工具 Agent demo(搜索、计算器、文档查询)。去之前我以为主战场是八股,结果整场几乎没碰 Transformer,全在问 效果凭什么信、数据怎么切、Agent 错了谁兜底、你对公司产品在用什么颗粒度思考

下面这篇不按面试时间表写——那张表别人已经写烂了。我按 「如果重来,我会怎么准备」 的顺序,把当时没接住的题,补成一份可以对着改的参考答案;只在章节末尾用一两句带一下「当时卡在哪」,避免整篇读起来像流水账复盘。

0. 这类岗实际在筛什么(先立坐标系)

应用向 AI 岗(偏 Agent / RAG / 产品化落地)常见误区是:把「能跑 demo」当成项目深度。面试官心里往往有一条很简单的分水岭:你能不能同时讲清 离线链路(数据→索引→评测)在线链路(路由→工具→失败→观测),并且两边都能 用实验或设计说明白取舍,而不是报一个孤立的 Recall 数字。

下面五块是我事后重排的「准备顺序」:业务与产品感知 → 评测与实验 → Agent 工程 → RAG 与领域文本 → 面试表达与自检。你可以打乱自己的复习顺序,但内容上最好别缺角。

1. 业务与产品:别在最后一题才「现查」

1.1 「字节做 AI 应用最大的瓶颈是什么?」——可以怎么答

空泛答「算力、数据」等于没答。可以选 一条主线 + 两条辅线,把「瓶颈」落到 组织与产品能动作的事 上,例如:

  • 主线:迭代速度与风险控制的张力。 模型能力涨得快,但 上线节奏 往往卡在 内容安全、合规、舆情与责任边界;真正能规模化的是 可复用的评测与灰度机制,而不是多训几个 prompt。
  • 辅线一:端到端成本结构。 长上下文、多轮工具调用、重排与二次生成,延迟和钱 会先把体验压穿;瓶颈可能是 架构侧缓存、检索剪枝、模型级联,而不是单纯「再买卡」。
  • 辅线二:数据闭环。 用户真实 query 分布漂移、bad case 回流是否进 标注与训练管线,决定你能不能 周级迭代;没有闭环时,「数据不够」只是表象。

答的时候不必全塞满,选你真有感触的两点,能举 豆包 / 扣子 / 飞书智能伙伴 里任意一个 你亲手用过的具体痛点(例如插件调试、工作流限流、回答保守导致可用性下降),可信度会高很多。

1.2 「豆包、扣子你用过吗?扣子是 Agent 平台还是工作流平台?」——完整说法

豆包:面向 C 端对话与多模态消费 的产品;面试里适合用来举例 安全对齐、人设、工具开放度与体验取舍

扣子(Coze):更接近 「低代码搭对话应用」:对话、知识库、插件(API)、工作流(可视化编排)、定时任务、多渠道发布。它有 ReAct / 函数调用 这类「Agent 能力」,但产品重心是 可编排、可运营、可发布,不是给研究员手搓一个 完全自主规划、任意改记忆结构 的通用 Agent OS。

和「纯工作流平台」的边界:扣子 强绑定对话与 bot 形态,工作流块常作为 对话中的一步或后台任务;传统意义上的 BPM/ETL 工作流(与企业审批流深度耦合)并不是它的主叙事。和「纯 Agent 框架」的边界:LangGraph、AutoGen 等更偏 代码级状态机与多角色协作;扣子降低的是 搭建与分发成本,牺牲一部分 任意拓扑与可测试性(当然也在进化)。

面试里一句够用的话:「扣子是有 Agent 能力的 对话应用搭建与工作流编排混合体;我会按场景选 对话内轻规划 还是 工作流强约束,而不是默认端到端 ReAct。」

1.3 我当时怎么挂的

业务题答成 填空题,产品只停留在 名字层面,被追问扣子定位时 脑子空白。这一题本质是:你有没有把「投递的公司」当成研究对象用过

2. 评测与实验:Recall@5 = 0.81 凭什么「好」

2.1 面试官真正想听的是什么

他们想听的是:指标定义是否自洽、样本是否有代表性、对比基线是否公平、结论是否可复现。单点 0.81 没有 参照系分层,在工程语境里接近无效。

2.2 评测集:100 条够不够?分布怎么设计

够不够取决于 置信区间与决策粒度。100 条手工标注在 早期对比两种 chunk 策略谁更好 时可能够用;若声称「上线级可靠」,通常要 扩量 + 分层 + 时间切片验证(避免全在同一天标的同质化)。

分布建议(法律咨询 RAG 举例)

维度 为什么要分
问法长度 短问(关键词)vs 长问(事实叙说)检索行为不同
是否需要多跳 单法条 vs 跨条/跨文档推理(若你系统不支持多跳,要在分布里标出来)
文档类型 法条、司法解释、合同模板、判例摘要
难度 直述条号 vs 口语化同义表述
时间/修订 是否容易检索到 已废止 版本(安全类 bad case)

构造方法:从真实日志 分层抽样 + 主动挖掘(低相似度点击、用户改写 query)+ 对抗样本(易混淆条号、近义词条款)。

2.3 Baseline 矩阵(至少能画这张表)

方案 作用
A. 无 RAG,直接生成 幻觉率、法条引用错误;作「天花板伤害」对照
B. 全文 BM25 / 稀疏检索 only 验证 向量是否真带来增益;很多法条场景 BM25 很强
C. 向量检索,无 rerank 隔离 embedding + chunk 的贡献
D. + cross-encoder rerank 看 precision 是否换得来延迟
E. hybrid(稀疏+稠密 + RRF) 工业界常见默认之一

解读 0.81:要在同一评测集、同一 k、同一 query 预处理 下报告 A~E 的曲线;若 BM25 已经 0.78,向量拉到 0.81 未必值得上线上成本

2.4 指标别只报 Recall@k

  • 检索侧:Recall@k、MRR、nDCG@k(若有多级相关性标注);Hit@k 与 「首条是否命中」 对法务场景有时更敏感。
  • 生成侧引用一致性(生成中的条号/款号是否出现在上下文)、拒答是否合理(无依据时是否乱编)。可 人工 rubric(几分制 + 细则),或 LLM-as-judge(必须写清:评委模型偏见、与人工相关性、仅作辅助)。
  • 端到端:可分 「检索对但生成错」「检索错」,否则你只知道一个总分,无法指导迭代。

2.5 迭代闭环怎么说才像「做过产品」

准备 bad case 台账:每条记录 query、gold 文档 id、top5、根因标签(切分碎、别名、向量语义漂移、rerank 误杀等)→ 对应改法(改 parser、加同义词表、上 hybrid、调 temperature 等)→ 回归评测。面试里 念三条真实形态的 bad case 比背指标定义加分得多。

2.6 我当时怎么挂的

没有 baseline、没有分层、只有一个 Recall@5。补全上面任意两层,同一轮对话质量会完全不一样。

3. Agent:工具、路由、反思失败三次之后

3.1 「用 ReAct 让模型自己选工具」不够,还要补哪几层

(1)意图与路由(减方差)

  • 轻量:规则 + 关键词 + 小型分类器(甚至embedding 最近邻)先粗分「要不要走计算器 / 是否必须查档」。
  • 重一点:结构化输出(JSON schema)强制 tool_name 在枚举内;参数校验(数字格式、日期范围)在 调用前 由代码校验,不交给模型「自觉」。

(2)执行层:超时、重试、幂等

  • 搜索类:超时、HTTP 重试、结果条数上限、敏感词过滤。
  • 计算器:沙箱或白名单运算,避免代码注入。
  • 文档查询:权限与租户隔离(面试里点到为止也很加分)。

(3)Reflection 到底检什么

要说清:检 工具是否选对参数是否合理证据是否支持结论 中的哪几项;每多一轮反思 延迟与 token 成本 多少,有没有 早停条件

3.2 「反思失败三次以后怎么办?」——一份可直接说的 状态机

用文字描述即可,不必背代码:

  1. 第 1~2 次失败:缩小搜索空间——改写 query强制换工具(例如从「通用搜索」切到「仅法规库」)、或 降低模型温度 再试。
  2. 第 3 次仍失败:进入 降级策略(择一或组合,面试前选好你的「默认套餐」):
    • 只检索不生成:返回引用片段列表,让用户自己读;
    • 固定安全话术:「当前材料不足以结论,建议咨询执业律师」;
    • 转人工 / 工单:带 session id 与工具调用 trace
    • 硬熔断MAX_STEPS 到达即停,避免死循环烧预算。
  3. 全程结构化日志(每步 thought、tool、args、observation hash)便于离线复现。

3.3 伪代码级参考(面试白板够用)

state = INIT
fail_reflect = 0
while steps < MAX_STEPS:
    plan = model.plan(messages, allowed_tools=TOOL_ENUM)
    if not validate(plan): 
        messages.append(correction_hint); continue
    obs = execute(plan)  # with timeout / sandbox
    if reflection_ok(plan, obs):
        return finalize(obs)
    fail_reflect += 1
    if fail_reflect >= 3:
        return degrade_modes[FALLBACK_POLICY]  # 检索列表 / 固定话术 / 人工

关键是 FALLBACK_POLICY 是你设计过的,而不是沉默。

3.4 我当时怎么挂的

只会说 ReAct + reflection,被追问 第三次失败 时没有 可执行兜底,等于控制流 未定义

4. RAG 与法律文本:「第三条第二款」和「第三条之二」

4.1 问题本质

固定 512 token 滑窗,极易在 款、项、引用条文 处切断;条号相似 还会导致检索 近邻混淆。面试官问的不是 token 数字,而是:你有没有把「法条是一个结构化对象」写进索引设计

4.2 切片:从「字符窗」到「法条对象」

(1)结构解析优先

  • 利用 PDF 书签/目录Word 样式标题;扫描件则 OCR + 版面分析(标题块、正文块)。
  • 正则 + 状态机 识别常见中式条号:第\\s*\\d+\\s*条第[一二三四五六七八九十百]+款([一二三四五六七八九十]+) 等(按你语料微调)。

(2)层级 chunk 策略(推荐叙事)

  • 父块:以「条」或「节」为父单元,保留完整语义,用于 粗检索给模型拼上下文
  • 子块:超长条再按 款/项固定 token 二次切,用于 细检索;子块 metadata 必须带父 id 与条号
  • overlap:放在 同条内部 做滑动,尽量避免跨 不同条 的大 overlap;若必须跨条,用 较小 overlap + 检索后按条号重组

(3)检索与呈现

  • Hybrid:条号、专有名词走 稀疏;语义改写走 稠密
  • Rerank:cross-encoder 对「问句—候选块」重排,缓解条号相近干扰。
  • 生成约束:要求 引用条号必须在上下文出现;检索结果先 按章节/条号排序 再进 prompt,减少模型「自由发挥」。

(4)metadata 最小集合示例

doc_id, law_name, chapter, article_no, clause_no, effective_date, version, source_page, is_abolished

4.3 被问到「扫描件一团糟」怎么答

坦诚 噪声上限:先 抽样人工质检 条号识别准确率;错误率超阈值的文档 整本降权或人工预处理;对高敏场景 拒答优于胡编。面试要的是 诚实 + 工程分级,不是假装 OCR 万能。

4.4 我当时怎么挂的

承认会切散之后,没有成体系的设计,只能用 metadata 现编。把 4.2 背成 自己的默认方案 即可。

5. 面试里怎么「串」起来说(短,不重复流水账)

  • 自我介绍:各 30 秒 讲清 场景痛点、你的职责、离线/在线各一条最强结果(带 baseline 对比)。
  • 项目深挖:主动交代 chunk 哲学 + 评测分层 + Agent 兜底状态机,让对方少费力气追问。
  • 反问:问 团队当前最大技术债在检索还是工具生态评测如何接入发布流水线,比问「加班多不多」更能暴露你是同行。

6. 自检清单(开考前自己怼自己)

  1. 切分:法条跨 chunk 时,用户看到的最小引用单位是什么?
  2. 评测:拿掉向量,BM25 掉多少?100 条里 最难的 10 条 分别卡在哪?
  3. Agent第三次反思失败 后用户看到什么?日志能否复现
  4. 业务扣子 / 豆包 你各完成过哪条 用户路径(注册—搭建—发布或调试)?
  5. 安全:法规 废止版本地域适用 你怎么提示或过滤?

附录:现场碎片(仅供对照,不必按此顺序准备)

同一小时里还穿插了:500 份 PDF / 5 万 chunk 与 512 token 是否自洽Recall@5 有无对照实验三工具 demo 的路由逻辑 等;时间线谁先谁后已记不清,考点已全部拆进上文各节。部门与结果已脱敏。

个人经历与补全笔记,非官方题解;产品能力以各产品当前版本为准。

全部评论

相关推荐

xdm&nbsp;早上喝奶茶差点喷出来。事情是这样的,我们班有个哥们儿,简称&nbsp;L,去年秋招拿了字节sp,专业方向是后端。我们当时都震惊:这哥们儿平时课上从来不发言,期末小组作业基本是划水的那种,刷题平台&nbsp;commit记录我点进去看过,绿格子稀稀拉拉。但他面试一路绿灯。一面二面三面&nbsp;hr&nbsp;面,全过,给的还是sp。当时班级群里恭喜他的、问他经验的、约饭的,热闹了一周。他说自己"运气好,准备充分"。我们都信了,直到三月初他入职。入职第二周开始,班里另一个进字节的同学W(在隔壁组的)开始跟我他的不对劲。一开始是写代码慢,后来写不出来,再后来是组里&nbsp;mentor&nbsp;让他fix&nbsp;一个简单&nbsp;bug&nbsp;都搞了一下午没动静。最离谱的是上周。W&nbsp;说他们大部门搞了个新人分享会,让新人讲一下自己负责模块的设计思路。L&nbsp;上去讲了&nbsp;20分钟,全程念稿子,问答环节别人随便问一个"那你这里为什么用&nbsp;Redis&nbsp;不用&nbsp;Memcached",他直接卡&nbsp;30秒说"这个我回去再确认一下"。会后他&nbsp;mentor&nbsp;直接找&nbsp;leader&nbsp;谈,leader&nbsp;找&nbsp;hr&nbsp;谈,hr调出了他面试录像,全程对比口型和回答节奏,发现他二三面有大量时长在偷偷看屏幕外(推测开了双机位&nbsp;AI&nbsp;答题)。(这段是&nbsp;W后来转述给我的,他自己也是听他组里同事八卦来的)昨天下班前,W&nbsp;告诉我L&nbsp;被辞退了,让他自己走,不走就走仲裁但会发函到学校。L&nbsp;现在已经回学校了,朋友圈仅三天可见。我说真的,我不是个心眼小的人,但是我看到这个消息的时候真的有种"嗯,挺好"的感觉。去年秋招我投字节后端,简历挂。我准备了八个月,背&nbsp;八股&nbsp;+&nbsp;刷&nbsp;500&nbsp;题&nbsp;+项目改了三版,连面试机会都没拿到。班里这哥们儿凭着一个外挂上岸,最后还是被甩出来了。不是说作弊就一定会被发现,但是当面试拿到的&nbsp;offer远远超出真实能力的时候,迟早会有这一天。试用期三个月不是给你过家家的,是真的要写代码、要在会议上回答问题、要扛需求的。我现在反而有点同情他。同情他相信"上岸就是终点"。发出来不是为了嘲笑谁,就是想说给那些正在被身边作弊上岸的同学搞得很&nbsp;emo&nbsp;的&nbsp;uu&nbsp;们听——别急,回旋镖很长,但它一定会回来。你继续刷你的题,写你的项目,背你的八股。该是你的迟早是你的,不是你的早晚还得还回去。xdm&nbsp;共勉。
牛客12588360...:我不想评论面试方式,作弊是绝对不对的,但是你八股加刷题也不过是个做题小子,他穿帮纯粹是他菜,你也没有高明到哪里去
点赞 评论 收藏
分享
评论
1
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务