主题
第 23 周 · Day 2:生产工程 20 题,Agent 工程师和「调 API 的」差距就在这
对应手册任务:学习「工程八股:死循环/超时/成本/安全」,动手「刷 20 道工程题,整理"分层防御"话术」,当日产出「八股笔记 v2」。本篇只解决一个问题:Day 1 的 20 题考的是懂不懂 Agent,这 20 题考的是能不能把 Agent 送上生产。调 API 的人关心功能怎么跑通,工程师关心它挂了怎么办、超时怎么办、钱花超了怎么办、被人攻击怎么办。这四个"怎么办",就是面试官区分两类候选人的探针。
使用方法
老规矩,三条:
- 先遮住答案自己说,每题控制在 3 句话以内。说不满 3 句是没想清,说超过 3 句是没抓住主干,都算不过。
- 答案给的是骨架,面试时必须往骨架上挂自己的数字:你的项目首 token 超时设的多少、recursion_limit 撞过几次、单租户月成本封顶多少。没有数字的工程答案是背诵,有数字的才是经历。
- 20 题分五组:稳定性(01–04)、成本(05–07)、流量与接入(08–12)、可观测(13–16)、安全(17–20)。每组对应生产事故的一个类别,最后一节把五组收拢成一个万能作答框架。
二十题
第一组:稳定性(01–04)
01|Agent 死循环怎么防?说出四层防御。
答:四层分别是图引擎硬上限(recursion_limit 到数强制终止,兜住最坏情况)、资源预算(token、费用、总时长任一超限即熔断)、行为检测(识别连续相同的工具调用签名并打断)、人工兜底(异常任务转人处理而非直接丢弃)。生产的答案是四层全要,任何单层都会被打穿。加分点:说明硬上限只是保底,频繁撞限说明图设计有问题,要回头查环。
02|LangGraph 的 recursion_limit 默认多少?生产怎么取值?
答:默认 25,计的是超级步(一轮节点执行)数,不是 token 数。生产按图的实际深度乘上分支和重试余量评估,常见 50 到 100。关键态度:撞限的第一反应不该是调大数字,而是排查图里有没有环或重复决策。
03|工具连续失败,怎么设计自愈?
答:分四步走:可重试错误(网络、限流)用指数退避加抖动重试;连续失败到阈值就熔断快速失败,保护下游;同时备好降级路径(备用工具、缓存结果、转人工);最后把结构化错误信息作为观察喂回模型,让它自己换路。注意只有幂等操作可直接重试,写操作要先补偿再重试。
04|LLM 调用超时为什么要分级?怎么分?
答:LLM 延迟是长尾分布,一刀切超时要么误杀慢请求、要么拖死网关。至少分四级:连接超时几秒、首 token 超时 10 到 30 秒、相邻 chunk 间隔超时 5 到 10 秒、整请求总超时按场景 60 到 180 秒,图之上再加任务级 deadline。分级的目的就一个:快速失败和耐心等待并存。
第二组:成本(05–07)
05|token 成本怎么计量到租户?
答:在网关或编排层统一采集,读 API 返回的 usage 字段而不是自己估算,乘以模型单价并区分缓存命中词元(更便宜)。每条用量记录打上租户、Agent、用户、场景标签,进异步管道聚合出账单和看板。计量要和配额联动:预算在入口预检,超额限流或降级到便宜模型。
06|模型路由和级联策略是什么?
答:路由是按任务类型和难度把请求分给不同价位的模型,简单分类走小模型、复杂推理走大模型;级联是先试便宜模型,校验失败或置信度低再升级贵模型重试。收益来自多数请求简单这一统计事实,风险是升级链路拉高尾部延迟,必须配质量回评。
07|语义缓存怎么设计命中与失效?
答:命中靠向量相似度,请求关键部分嵌入后相似度超过阈值才返回缓存答案,阈值一般 0.95 以上才安全。失效要管四件事:知识库更新、prompt 或模型版本变更、TTL、租户隔离,前两者用版本号做强失效。阈值是双刃剑,调低命中率高但会答非所问,线上从高往低调。
第三组:流量与接入(08–12)
08|限流四大算法?Agent 平台要限哪两个维度?
答:固定窗口、滑动窗口、漏桶、令牌桶;固定窗口有临界突刺,滑动窗口平滑,漏桶整形恒速输出,令牌桶允许突发,网关层最常用令牌桶。Agent 平台要限双维度:租户/用户维度防单户打爆预算,模型/API 维度保护配额和下游,两个轴交叉出精细策略。
09|幂等键怎么设计?
答:客户端为每次操作意图生成唯一键随请求带上,服务端执行前先查键,已存在直接返回上次结果,不重复执行副作用。作用域限定到用户加操作类型,存储带 TTL 覆盖重试窗口。Agent 场景里下单、发邮件这类写操作工具必须幂等,否则一次重试风暴就是资损事故。
10|SSE 和 WebSocket 怎么选?
答:SSE 单向服务器推、跑在普通 HTTP 上、自带断线重连、过网关和 CDN 零成本,token 流式输出首选。WebSocket 双向且开销低,语音实时对话、协作编辑、多 Agent 双向通信才真正需要。默认 SSE,明确出现双向低延迟需求再上 WebSocket,别为了技术感选它。
11|Nginx 做流式代理有什么坑?
答:经典坑是默认 proxy_buffering 会攒够缓冲区再发,用户盯着空白半天,一次性吐完。SSE 路径要显式 proxy_buffering off(或让后端发 X-Accel-Buffering: no 响应头),同时关代理缓存、拉长 proxy_read_timeout,还要留意 gzip 中间件同样会攒数据。验收标准一条:curl 直连和过 Nginx 的首 token 时间应基本一致。
12|优雅关闭时在途任务怎么办?
答:收到 SIGTERM 先把 readiness 置为不就绪摘掉流量,新请求拒掉,在途请求给一个排空窗口(如 60 秒)跑完。跑不完的长任务靠状态落盘:LangGraph 的 checkpointer 已把每步状态持久化,新实例加载 checkpoint 恢复执行,K8s 的 terminationGracePeriodSeconds 必须大于排空窗口。流式连接要发明确的结束事件再断,别让客户端挂着傻等重试。
第四组:可观测(13–16)
13|可观测三支柱怎么靠 Trace ID 缝合?
答:日志、指标、链路三支柱,缝合靠同一个 trace_id 贯穿:每条日志带 trace_id 和 span_id,指标用 exemplar 指回具体链路,一次请求从入口到每个工具调用就能串起来看。LLM 应用要额外打模型名、token 用量、延迟分解(首 token、生成段)、脱敏后的 prompt 与响应摘要。缝合的价值是分钟级定位:慢在哪一段、贵在哪一次、错在哪一跳。
14|LangSmith 和 Langfuse 怎么选?数据合规怎么看?
答:LangSmith 与 LangChain 生态集成最深、评估和数据集体验好,但以 SaaS 为主,不支持真正的自部署。Langfuse 开源可自部署(v3 起底层用 ClickHouse),追踪走 OpenTelemetry 协议,语言无关。合规红线很简单:金融、医疗、政企或要求数据不出域的业务选 Langfuse 自部署;快速验证、要生态便利就 LangSmith。
15|OpenTelemetry 的 GenAI 语义约定现在什么状态?
答:gen_ai 一组语义约定(请求参数、token 用量、提示与补全内容等属性)仍处于开发阶段,属性名还在迭代,未到 stable。但它已被 Langfuse、主流框架和多家厂商采纳为导出格式,事实标准的方向明确。面试口径:押注 OTel 做追踪层不会错,但别假设一套约定无缝跑通所有厂商,版本要对齐。
16|健康检查为什么要三层?
答:liveness 判断进程要不要重启,readiness 判断要不要接流量,startup 保护慢启动(模型加载、缓存预热)完成前不被误杀。Agent 服务的关键决策是下游模型可用性放哪:强依赖(自建推理)进 readiness,弱依赖(第三方 LLM)不进 readiness,走熔断降级,否则别人抖一下,你的实例被全量摘光。
第五组:安全(17–20)
17|间接提示注入的攻击面有哪五个入口?
答:爬取或浏览的网页内容、文件附件(PDF、邮件正文)、工具返回值(搜索结果、API 响应)、多 Agent 系统里其他 Agent 的消息、长期记忆里已被污染的历史。共同点是数据被当成指令执行,防的核心是内容与指令隔离:外部数据永远标注来源、进隔离上下文、不直接获得权限。
18|OWASP Agentic Top 10 抽三条精讲:ASI01、ASI04、ASI06。
答:ASI01 目标劫持(Agent Goal Hijack),注入内容把 Agent 从用户目标带偏,典型是隐藏指令诱导助手外泄数据(微软 EchoLeak 事件),防法是内容指令隔离加高危动作二次确认。ASI04 代理供应链风险(Agentic Supply Chain),MCP 服务器、插件、第三方 Agent 运行时被投毒或偷偷变更(GitHub MCP 提权案例),防法是固定版本、维护 AIBOM 清单、准入扫描。ASI06 记忆与上下文投毒(Memory & Context Poisoning),攻击一次污染长期记忆、影响后续所有会话(Gemini Memory 攻击),防法看下一题。
19|记忆污染是什么?怎么防?
答:攻击者在网页或文件里埋指令,诱导 Agent 把恶意内容写进长期记忆,之后每次会话都带着毒上下文运行,一次攻击长期生效。防护组合拳:记忆写入走审核(来源标注、敏感内容过滤)、系统记忆与用户记忆分权、写记忆的工具不给普通用户直接调用权、定期审计清理异常记忆。记忆既是资产也是攻击面,读写都要当敏感操作对待。
20|多租户隔离上线前查什么?给一份检查清单。
答:数据层查所有查询强制带 tenant_id 过滤(行级安全或库、schema 分级隔离),跨租户 ID 用不可枚举的 UUID。上下文层查缓存键、会话、记忆、向量库全部按租户分区加前缀,prompt 模板渲染时校验租户变量。运营层查配额和 API key 按租户独立,日志和追踪带租户标签且脱敏可审计,回放导出按租户过滤;三段缺一段就是事故预定。
收尾:分层防御总话术模板
20 题刷完,把它压进一个万能框架。面试官问任何"XX 怎么防、XX 怎么保障",死循环也好、注入也好、成本失控也好,都用四层作答,每层一句话,先给结构再给细节:
- 入口层(事前拦):输入校验、内容与指令隔离、鉴权限流、预算预检。目标是把大部分威胁挡在系统外。
- 执行层(事中控):最小权限、沙箱隔离、高危动作人工确认、超时与迭代硬上限、熔断降级。假设入口漏了,执行层也不让损失扩大。
- 数据层(资产护):租户隔离、加密脱敏、审计日志、记忆与缓存的分区清理。就算执行层被打穿,资产还有一道墙。
- 监控层(事后兜):告警、Trace 串联回放、异常行为检测、定期红队,复盘结论反哺前三层。没有监控的防御等于装了门没装摄像头。
一句话版本,面试收尾直接用:"入口拦一道,执行控一道,数据护一道,监控兜一道,每层都假设前一层会失守。"这套结构昨天 Day 1 的 20 题同样适用,把"防死循环"换成"防幻觉"照样四层展开,这就是框架的价值。
自测
合上文章,口头回答以下六问:
- recursion_limit 默认值是多少?它计的是什么数?
- 超时四级分别是哪四级,各自量级多少?
- 限流四算法各用一句话说特点,Agent 平台限流要限哪两个维度?
- ASI01、ASI04、ASI06 分别对应什么风险,各举一个公开事件?
- 间接注入的五个入口,30 秒内数完?
- 默写分层防御四层框架和那句话收尾版本。
六问全过,八股笔记 v2 才算成形;哪问卡壳,回哪组重刷。
延伸
- 今日产出:把 20 题答案整理成八股笔记 v2,与 Day 1 的 v1 合并成一份总题库,标注哪些题你挂上了自己的数字、哪些还空着,空着的周末补。
- 明日预告:Day 3 系统设计模拟,45 分钟白板设计短链接或排行榜,工程题里的限流、幂等、优雅关闭全会成为设计素材。
- 复盘线索:回到本周总览对照手册任务查漏;若是新读者,可从第 1 周看这套学习路线的起点。