面试官:你的Agent怎么不跑飞?我:4道防线

0 阅读14分钟

👔面试官:(翻开简历)「你之前写了五年 Go 后端,现在面我们 AI 应用开发,那你做的 Agent 怎么保证它不自己跑飞?」

🙋‍♂️我:(心里咯噔一下)「跑飞」这词太狠了,但确实是生产里最怕的事。我深吸一口气,把压箱底的几道防线甩了出去。

兄弟们,见字如面,我是王中阳。

今天这篇不是我编的。是咱们一个老学员,写了五年 Go 后端、今年硬转 AI 应用开发,面字节 AI 应用开发岗的真实复盘。整场面试就三条线:Agent 架构、RAG 工程化、系统稳定性。面试官不考你背概念,专挑你落地里的坑问。

我让这个学员把每一题都按「面试官怎么问 → 怎么答 → 阳哥点评」拆开写。下面 12 道题,一道一道来。照着准备,比刷一百道八股管用。


一、Agent 怎么不跑飞,核心模块怎么拆 💡

面试官怎么问:你做的 Agent,怎么保证它不会自己越界、胡乱调工具、或者陷入死循环?

怎么答:先说清楚我对 Agent 的理解,它和 chatbot 的本质区别就一句话。

chatbot 是「你问我答」,一锤子买卖。Agent 是「能自己决定调什么工具、执行、看结果、再决定下一步」的循环系统。所以它必须被框在一个安全的边界里,我一般上四道防线:

  1. 能力边界:System Prompt 里写死「你能调哪些工具、绝对不能碰什么」。比如不能执行高危写操作、不能泄露密钥。
  2. 决策准则:什么场景调哪个工具,写明确规则,别让模型自由发挥。
  3. 终止条件:最大轮次(我一般设 10 轮)+ 模型主动输出 finish 信号,到顶必须停。
  4. 执行兜底:工具调用失败,让模型看到错误自己决定重试、换策略还是降级,而不是无限重试烧钱。

自主性是双刃剑。给太多权,模型可能做出不可预期的操作;给太少,又退化成 chatbot。工程挑战就在设计这个边界。

阳哥点评:加分项是你能说出「安全边界」这四个字,而不只是罗列组件。坑在于很多人把 Agent 当成调 API 的壳,面试官一追问边界和终止条件就露怯。


二、Tool 怎么设计才稳 💡

面试官怎么问:设计 Tool 你遵循哪些原则?入参 Schema 和错误码体系怎么定?

怎么答:Tool 设计我抓三个原则:单一职责、入参强约束、错误可恢复。

什么样的能力该抽成 Tool?一个动词、一个明确副作用,就值得成为一个 Tool。比如「查订单」「创建退货单」,不要搞一个「处理售后」的大杂烩。

入参 Schema 我用 JSON Schema 写死字段类型和必填项,让模型没空子钻。错误码我专门做一套枚举,而不是只抛一个 error string:

// Tool 统一返回结构
type ToolResult struct {
    Code    int    `json:"code"`    // 0=成功 非零=业务错误
    Message string `json:"message"` // 人读错误信息
    Data    any    `json:"data"`    // 业务数据
    Retryable bool `json:"retryable"` // 是否可重试
}

// 错误码体系(按域分段,避免和 HTTP 码混)
const (
    ErrParamInvalid  = 1001 // 入参校验失败,不可重试
    ErrUpstreamTimeout = 2001 // 上游超时,可重试
    ErrUpstreamBadData = 2002 // 上游返回脏数据,不可重试
)

最关键的一条:返回的 error 必须带 retryable 标记,Agent 循环才知道该重试还是该降级。这是生产稳定性里最值钱的设计。

阳哥点评:加分项是错误码带「可重试」语义,坑是很多人 Tool 一失败就让模型无脑重试三次,结果一个注定失败的请求烧了十几刀还让用户等两分钟。


三、Memory 分几类,怎么存怎么清 💡

面试官怎么问:Memory 一般分为哪几类?短期和长期记忆工程上怎么存储、过期清理、去重?

怎么答:我按时间维度分三层:

层级存什么存储介质生命周期
上下文窗口内最近 3 轮原文直接拼进 prompt本轮对话
短期记忆近期对话摘要KV 存储(Redis)按 TTL 过期
长期记忆用户画像、历史知识向量库(按 chunk 存)持久,定期去重

清理和去重我这么干:短期记忆设 TTL 自动过期;长期记忆入库前先算内容 hash,重复 chunk 直接跳过,避免向量库膨胀和召回噪声。

有个实战细节:用户说「我叫小王,做电商」,这句话要写进长期记忆,但下轮他又说一遍,就得靠 hash 去重,不然召回一堆重复废话。

阳哥点评:加分项是你能说出「长期记忆也要去重」,坑是很多人把万轮对话全塞进上下文,context 直接爆掉,token 烧穿还答非所问。


四、ReAct 和 Plan-and-Execute 怎么选 💡

面试官怎么问:ReAct 和 Plan-and-Execute 分别适合什么场景?怎么防 Agent 陷入无限循环、多个 Agent 互相甩锅?

怎么答:本质区别就四个字:边想边干 vs 先想后干

  • ReAct:适合任务路径不确定、要边看结果边调。比如「帮我挑个性价比高的显示器」,搜一轮看结果再决定筛选条件。灵活,但容易跑偏。
  • Plan-and-Execute:适合步骤清晰、依赖明确的确定性任务。比如「分析上周销售数据出报告」,步骤固定:查数据、分析、写报告。省 token、可控。

防循环我上三招:最大轮次硬上限、模型主动 finish 信号、工具失败最多重试 1 次就降级。

防甩锅是多 Agent 的坑,靠任务归属唯一 + 状态共享:每个子任务明确认领人,结果写进共享状态,没人认领的任务有超时兜底自动回收,不让它在 Agent 之间空转。

阳哥点评:加分项是你能点出「生产级一般混着用,大步骤 Plan、子步骤 ReAct」。坑是有人吹 ReAct 万能,结果一个三步任务跑了十二轮,没用还烧钱。


五、多 Agent 协作怎么设计 💡

面试官怎么问:要搭一套多 Agent 协作系统,整体怎么设计?Agent 之间通信和共享状态怎么落地?

怎么答:多 Agent 我按「角色分工 + 消息总线 + 共享黑板」来搭。

  • 调度 Agent:负责把用户意图拆成子任务,路由给专职 Agent(检索 Agent、写代码 Agent、审核 Agent)。
  • 通信机制:Agent 之间不直接耦合,走消息总线(我用 Kafka 或内部队列),发任务、收结果都是消息。
  • 共享状态:落一个「黑板」(共享 KV 或短期记忆库),谁干到哪了、产出了什么,都写上去,别的 Agent 来读,避免各自为战。

关键点:任务要有唯一 ID 和状态机(pending / doing / done / failed),失败的任务由调度 Agent 决定重试还是换人,绝不让它悬空。

阳哥点评:加分项是你用「消息总线解耦 + 黑板共享状态」代替硬编码调用链。坑是新手爱把 Agent 写成互相直接函数调用,一扩展开就成毛线团,谁调谁都理不清。


六、把 RAG 从入库到生成完整讲一遍 💡

面试官怎么问:请完整讲一遍 RAG 从文档入库到生成答案的全流程。

怎么答:RAG 我把全流程拆成两条线:离线入库在线问答

离线入库

  1. 文档解析:PDF、Word 转 Markdown,表格和公式要单独处理(这是高频痛点)。
  2. 切分:按章节或固定长度切块,带重叠区间。
  3. 向量化:用 Embedding 模型把 chunk 转向量。
  4. 入库:向量写向量库,原文和元数据写关系库,一一对应。

在线问答

  1. 用户提问 → 向量化。
  2. 检索:向量召回 topK,必要时混合关键词召回。
  3. 重排:Rerank 模型把最相关的结果顶上来。
  4. 拼上下文:把 top 结果塞进 prompt。
  5. LLM 生成:带引用来源,降低幻觉。

整套链路最怕「文档更新就全量重建」,正确做法是 hash 检测变更、增量先删后增。

阳哥点评:加分项是你能把离线和在线分开讲,还提到「增量更新」。坑是很多人背完流程就完事,面试官一问「表格怎么切」「更新怎么办」直接卡壳。


七、Chunk 大小怎么定,重叠区间怎么设 💡

面试官怎么问:文档切分的 Chunk 大小依据什么定?重叠区间怎么设?你实测过吗?

怎么答:Chunk 大小没有银弹,看内容类型:

  • 代码类:256 到 512 token,代码语义局部性强,切太大反而稀释。
  • 文档类:512 到 1024 token,段落完整度更重要。
  • 表格/公式:尽量别切断,按结构切。

重叠区间我一般设 chunk 大小的 10% 到 20%,作用是避免一句话被切两半导致召回不全。但这玩意必须实测:重叠太大,召回重复、噪声多;太小,边界信息丢失。

我真实踩过的坑:一开始重叠设 30%,结果同一个知识点在三个 chunk 里各出现一次,Rerank 前都进 topK,答案啰嗦还互相打架。调到 15% 才稳。

阳哥点评:加分项是「我实测过,重叠 30% 翻车,调到 15%」。面试官最吃这一套,因为大多数人只背理论没真跑过。坑是张嘴就「按 512 切」,被追问依据就虚。


八、向量召回不理想,按什么顺序排查 💡

面试官怎么问:向量召回结果不理想时,你通常按什么顺序排查?做过混合召回吗?

怎么答:召回差我按这个顺序往下查,从最容易翻车的开始:

  1. 切分问题:chunk 太碎或切断语义,召回的自然是碎片段。
  2. Embedding 匹配度:查询和文档用词体系不一样(用户口语、文档书面),向量空间里离得远。
  3. 检索策略:只向量召回,漏了关键词精确匹配。

第三点我必上混合召回:向量召回负责语义,关键词(BM25)负责精确术语,两者结果用 Rerank 统一排序。比如用户搜「OOM 怎么排查」,向量可能召回一堆泛泛内存文,BM25 能精准命中带 OOM 字样的文档。

阳哥点评:加分项是你能给出排查顺序而不是瞎试。坑是很多人召回一差就猛换 Embedding 模型,其实八成是切分和没做混合召回的锅。


九、Rerank 怎么实现,特征权重怎么分 💡

面试官怎么问:Rerank 环节一般怎么实现?重排时各项特征权重怎么分配?

怎么答:Rerank 我直接用跨编码器(cross-encoder)模型,它把「查询 + 候选文档」拼一起过一次模型,打分比向量内积准得多。业界常用 Cohere Rerank 或自研 cross-encoder。

特征融合我一般这么分权重(经验值,要按业务调):

特征权重说明
语义相关性(cross-encoder 分)0.6主攻,决定大方向
关键词命中(BM25 分)0.25精确术语兜底
新鲜度 / 业务权重0.15新文档、权威源加权

权重不是写死就完事,要拿点击日志做离线评估,看 NDCG 有没有涨。我踩过的坑是语义分权重拉到 0.9,结果用户搜产品名这种硬术语时,反而被语义相近的干扰文档挤下去。

阳哥点评:加分项是「权重要拿日志回测,不是拍脑袋」。坑是把 Rerank 当银弹,召回层一塌糊涂,Rerank 再强也救不回来。


十、System Prompt 怎么写才不失效 💡

面试官怎么问:Agent 的 System Prompt 怎么写?为什么容易失效,怎么提高鲁棒性?

怎么答:Agent 的 System Prompt 不是聊天那套,它要同时承担三件事:工具使用说明书、决策逻辑、输出格式约束。我的结构固定六块:角色、能力边界、决策准则、输出格式、安全规则、错误处理。

为什么容易失效?三个真因:

  • 指令冲突:又写「优先用工具 A」又写「确保快」,模型纠结。
  • Lost in the Middle:三千字 prompt,中间规则遵循率只有六成,开头结尾有八成五。
  • 场景漂移:覆盖九成场景,用户偏落那一成。

提鲁棒性我三招:关键规则放首尾、多用「不要做什么」的反例、输出双层约束(prompt 写一遍 + 代码 schema 校验一遍)。

阳哥点评:加分项是你知道「Lost in the Middle」这个现象,坑是新手把 prompt 写得又长又全,以为越全越好,结果中间全被模型忽略。


十一、Token 成本怎么省 💡

面试官怎么问:LLM 应用怎么控制成本?Prompt Caching 怎么做?

怎么答:省 token 我抓三块:

  1. 上下文压缩:每轮工具返回结果先摘要再进 context,设最大轮次定期 compact,别什么都往里塞。
  2. Prompt Caching:System Prompt、工具定义这些不变的内容,主流模型支持缓存前缀,命中后单价能砍到十分之一。关键是把「不变的部分放前面、变的部分放后面」,缓存才命中。
  3. 选型分层:简单任务用小模型,复杂决策才上大模型,别所有环节都烧旗舰模型。

举个实在的数:一个客服 Agent,System Prompt 加工具定义大概两千 token,每轮都重发,一天十万轮就是两千万 token 白烧。开了 caching,这部分基本只算一次。

阳哥点评:加分项是你能说出「不变内容前置才能命中缓存」。坑是很多人优化模型选型卷半天,却忘了 System Prompt 每轮重发这个大头。


十二、你靠什么渠道跟进展,用哪些 AI 编程工具 💡

面试官怎么问:你平时通过哪些渠道跟进大模型与 Agent 的最新进展?写代码用什么 AI 辅助工具?

怎么答:这块我实话实说,不装。

跟进渠道我就三处:arXiv 的 Agent / RAG 新论文、几个大厂工程师的技术博客、还有阳哥(哈哈,肯定不能这么说,开个玩笑)我们训练营的内部分享。真落地还是靠自己跑 demo 验证,论文看完不跑等于没看。

AI 编程工具我日常用 Copilot 写样板代码,复杂重构让 Claude Code 这类 Agentic 工具上,但生产代码我一定自己 review,不盲信生成结果。我之前就踩过生成代码漏了 context 取消的坑,goroutine 泄漏线上才暴露。

说到底,AI 工具是加速器,不是替你思考。转 AI 这条路上,底层工程能力(Go、并发、系统设计)反而是你的护城河,别因为追新把老本丢了。

阳哥点评:加分项是你不迷信工具、强调自己跑 demo 和 review。面试官最怕那种「我只看科普号」的候选人。坑是吹自己全靠 AI 写代码,一听就知道没真干过。


────🎯 阳哥总结────

2026 年的 AI 应用开发面试,考的已经不是「你会不会调大模型 API」。

它考的是:你能不能把一个会自己决策、自己调工具的系统,稳稳地框在安全边界里跑起来。

Agent 架构、RAG 工程化、成本控制、稳定性,四条线串起来,就是企业愿不愿意为你的能力买单。照着上面 12 题准备,比刷一百道八股管用。


────📚 面试突击资料────

✅ 免费路线图:后端转 AI 学习路线图 wangzhongyang.com

✅ 领资料:加阳哥微信 wangzhongyang1993,备注「面经」,免费送你《后端转 AI 高薪岗知识地图》


👇 你面 AI 岗时被哪道题问住了?最刁钻的一题是什么?评论区聊聊,让兄弟们一起准备。