面经 | AI Agent / Automation | 🔥🔥 | TikTok
北美(San Jose)· AI Agent and Automation 软件工程师 · 全职 · 官网投递 · Recruiter Screen 约 25 分钟 → 技术面 约 55 分钟 → 挂了。
官网投的。recruiter 电话改过一次时间,然后只面了一轮技术面,55 分钟,之后就是拒信。所以这篇不长,一个电话加一轮技术面,能想起来的都写下面了。
Recruiter 电话
25 分钟左右。自我介绍、为什么 TikTok、毕业时间和入职时间,还问了一下 LLM 这块我到底上线过什么,不是看过什么。我把之前那个内部自动化项目讲了个短的,就约技术面了。
技术面
55 分钟,一个人。没有单独的设计轮,设计的东西都是从项目和 harness 里问出来的。下面的顺序记得不一定准。
项目
先让我讲简历上第一个项目:架构、我负责哪块、为什么用这套技术栈。然后他一直问状态归谁——一个 run 的状态归谁,两个 worker 同时碰到同一个 run 怎么办。我说同一时间只有一个 owner,状态转换由拿着 run 的那个人写,工具调用带 run id,所以重试不会多出一个 run。他接着问 owner 中途死了呢。我说会被接管,从最后一个提交过的 step 接着跑。有副作用的那个调用不能重放,这块是最麻烦的。
Harness
然后问 agent harness engineering,生产上的 harness 要管哪些。我大概按这个顺序讲的:
- 调度:哪些 run 能拿到槽位,并发上限多少
- 单个工具的 timeout 和熔断
- 上下文注入:每一步给模型看什么、给多少
- 可观测性
- 错误隔离,一次工具调用挂了不能把 worker 一起带下去
他问具体采什么。我说 run 和 tool call 各一层 trace,每步的 token 数和成本,工具成功失败和延迟,再留一份能复现现场的输入输出。内部工单的数据不能直接发给第三方模型,这块要么先脱敏,要么用一个有权限看的模型来判。
执行控制
这题我答得不行。他问:Agent 一直在调工具,但没有任何进展,怎么办。
我说限制步数。他又问,如果步数给得很宽,而 Agent 每次做的都略微不同呢。我说那得对轨迹做重复检测,不是对文本做。然后就没话了——拿什么去 hash 我说不出来,"换个说法其实没动"和"真的往前走了"怎么区分也说不清。这题是我最想重答的。
工具注册和描述漂移
MCP 的 tool 和 skill,注册、版本、schema 兼容、描述怎么治理,避免描述一变就把模型路由到错的工具上。
大概是这么几点:
- 注册表当唯一来源,每个工具都有 owner
- 发出去的版本不动,改 schema 或者改描述都出新版本,中间过一遍兼容性检查;加可选参数没事,删掉或者改名就是 breaking
- 描述当 prompt 来评审,因为它本来就是 prompt
- 每个工具配一小撮标注过的请求做路由评估,描述改歪了在灰度之前就能发现
- 给模型看的只放当前任务要用的那部分,不是平台里所有工具
后面还问了成本。我说简单步骤走便宜的模型、重复请求做语义缓存、上下文该裁就裁、答案定了就提前停,另外给每个 run 一个预算,超了就停,别只做看板。
Coding:折扣券
价格数组,k 张券,每张把某个物品的当前价格减半,同一个物品可以反复用,求最小总成本。
思路就是用贪心,每次把券用在当前最贵的物品上。最大堆,弹出堆顶,减半,放回去,重复 k 次,最后求和。
follow-up 改成减固定金额,而且价格不能低于 0。堆还是能用,但"每次减半"那套不成立了,得改成每次用在省得最多的地方,也就是 min(金额, 当前价格),减到 0 就不能再减。这里我绕了一下才定下来。