连环追问题
真实面试不会只问一个点。面试官经常从一个概念开始,连续追到实现、失败、成本和安全。这份文件按“追问链”训练。
使用方法
从“为什么要做 RAG”开始,面试官可能连续追问 chunk、权限、引用、无答案、成本和回滚。练习时每回答一层都留下一个可验证的工程动作,别只换一组术语继续说。
每条追问链都要练到能连续讲 3-5 分钟。不要每题单独背,要把它们串成一条故事线。
追问链 1:从 RAG 问到上线
Q1:RAG 是什么?
RAG 是把外部知识检索进生成过程的系统链路,用来降低知识过时和事实幻觉风险。
Q2:为什么不能直接把所有文档塞进 prompt?
成本高、噪声大、上下文可能爆,而且引用和权限不好追踪。
Q3:chunk 怎么切?
按文档结构和语义切。政策按条款,FAQ 按问答对,技术文档按标题和段落。chunk 太小丢上下文,太大噪声多。
Q4:召回差怎么办?
先查入库,再查 chunk,再查 query 改写、embedding 模型、top_k、混合检索和 rerank,不要一上来改 prompt。
Q5:答案没证据怎么办?
应该明确说知识库没有找到足够依据,不能让模型硬编。可以建议用户换关键词、指定范围或转人工。
Q6:怎么评估?
检索层看 recall@k、MRR,生成层看答案正确率、引用准确率、无答案识别率,系统层看成本、延迟、权限违规率。
Q7:上线后最怕什么?
最怕权限过滤做晚、文档更新不同步、引用不支持结论、用户把无答案问题逼成确定答案。
追问链 2:从 Agent 问到 tool loop
Q1:什么是 Agent?
Agent 是围绕目标做多步决策,并调用工具获取信息或影响外部系统的工程体。
Q2:Agent 和 Chatbot 区别是什么?
Chatbot 偏单轮生成,Agent 偏多步执行。Agent 有工具、状态、循环、终止条件和日志。
Q3:tool loop 怎么写?
用户输入进入 messages,模型判断 tool call,代码校验并执行工具,工具结果按 tool_call_id 回传,模型继续判断,直到 final answer 或触发停止条件。
Q4:为什么不能直接执行模型生成的参数?
模型输出不是可信输入。必须做类型校验、权限校验、范围校验和危险动作确认。
Q5:怎么防止死循环?
最大轮数、重复调用检测、预算限制、错误阈值和人工介入。
Q6:怎么知道 Agent 哪一步错了?
看 trace:每轮模型输入摘要、tool call、工具参数、工具结果、usage、latency、error 和最终输出。
追问链 3:从工具调用问到 MCP
Q1:工具调用解决什么问题?
让模型把实时查询、计算、写操作和外部系统交给代码执行。
Q2:工具 schema 怎么写?
工具要窄,参数明确,required 清楚,描述里写什么时候用和什么时候不要用。
Q3:工具多了怎么办?
做工具路由和动态裁剪,不要一次性把所有工具都塞给模型。
Q4:MCP 解决什么问题?
把外部工具和资源用统一协议暴露给模型应用,方便接入、复用和管理。
Q5:MCP 能替代权限校验吗?
不能。MCP 是接入协议,不是安全边界。权限、参数校验和审计仍要在工具服务侧做。
追问链 4:从多 Agent 问到冲突处理
Q1:什么时候用多 Agent?
任务能清晰拆分、子任务可验收、上下文需要隔离、并行能提升效率时。
Q2:为什么多 Agent 不一定更好?
协调成本、延迟、冲突和调试难度都会上升。
Q3:Agent 之间传什么?
传结构化结果:任务目标、证据编号、已确认结论、未确认项、下游动作。不要传完整聊天记录。
Q4:结论冲突怎么办?
要求双方给证据,比较来源权威性、更新时间和任务目标,必要时保留不确定性。
Q5:同一个文件多个 Agent 都要改怎么办?
单写者原则。其他 Agent 只提交 patch 或评论,patch 带 base version,应用前检查版本,冲突由主管或人工合并。
追问链 5:从成本问到缓存
Q1:一次 Agent 任务成本怎么算?
按每轮 input、cached input、cache write、output 分开算,再加 embedding、rerank、搜索、工具和重试成本。
Q2:为什么不能 total_tokens 乘单价?
因为输入、输出、缓存命中、缓存写入价格可能不同,reasoning tokens 也可能属于输出侧细分。
Q3:cached_tokens 一直是 0 怎么办?
看前缀是否稳定、长度是否足够、是否混入时间戳/request_id、工具列表顺序是否变化、cache key 是否切太碎。
Q4:怎么提高缓存命中率?
稳定内容放前面,动态内容放后面,工具定义和示例顺序固定,同类请求复用稳定 key。
Q5:缓存命中率越高越好吗?
通常是好事,但不能牺牲正确性。不能为了命中缓存把个性化或权限相关内容错误地移到后面。
追问链 6:从评估问到回归
Q1:怎么评估 Agent?
看结果、过程、成本和安全。结果看成功率,过程看工具调用,成本看 token 和延迟,安全看越权和注入。
Q2:eval set 怎么设计?
覆盖正常、边界、无答案、工具错误、安全攻击、多轮任务和长尾样本。
Q3:LLM-as-Judge 怎么用?
用明确 rubric 评开放任务,再做人类抽检校准。能规则判断的不要交给 judge。
Q4:prompt 改了怎么防回归?
固定 eval set 跑前后对比,看成功率、引用准确率、成本、延迟和安全样本是否退化。
Q5:线上发现质量下降怎么办?
先看 prompt version、model version、tool version、knowledge base version 和 trace,不要只凭感觉改 prompt。
追问链 7:从安全问到权限
Q1:Prompt Injection 是什么?
攻击者通过用户输入、网页或检索内容诱导模型忽略系统指令或执行危险动作。
Q2:怎么防?
外部内容当数据不当指令,工具执行前做权限和参数校验,危险动作确认,输出脱敏,日志审计。
Q3:为什么权限过滤要在检索前?
因为如果无权限内容进入 prompt,就已经泄露到模型流程里了。输出后脱敏只是最后一道防线。
Q4:哪些动作必须确认?
删除、退款、支付、发外部消息、修改权限、导出敏感数据、覆盖文件。
Q5:安全能不能靠 system prompt?
不能。system prompt 是软约束,真实安全靠代码权限、工具边界、审计和人工确认。
追问链 8:从模型选型问到部署
Q1:模型越大越好吗?
不一定。大模型能力强但贵、慢。分类、抽取、路由可以用小模型,复杂推理和长上下文任务再用大模型。
Q2:模型路由怎么做?
按任务类型、复杂度、成本、延迟和风险路由。小模型做预判,大模型处理关键步骤。
Q3:量化有什么用?
降低显存和部署成本,可能提升吞吐,但可能损失质量,需要评估。
Q4:batching 有什么影响?
提高吞吐,但可能增加单个请求等待时间。高并发服务要在吞吐和延迟之间平衡。
Q5:为什么长上下文影响并发?
长上下文增加 KV cache 占用,显存压力变大,可同时服务的请求数下降。
追问链 9:从代码审查 Agent 问到误报控制
Q1:代码审查 Agent 看什么?
优先 correctness、安全、数据丢失、并发、事务、测试缺口,再看可维护性和风格。
Q2:只看 diff 够吗?
通常不够。需要补相关函数、类型、测试、规范和接口约束。
Q3:怎么减少误报?
补上下文、只输出高置信问题、限制评论数量、不确定时标为疑问、用人工反馈回流。
Q4:能不能自动改代码?
默认不直接改。生成补丁要基于明确版本,应用前检查文件变化,跑测试并人工确认。
追问链 10:从客服 Agent 问到转人工
Q1:客服 Agent 主要模块是什么?
意图识别、知识库、业务工具、权限确认、人工接管、监控评估。
Q2:读操作和写操作怎么区分?
读操作如查政策、查订单状态,可以自动化。写操作如退款、改地址、取消订单,需要确认和审计。
Q3:用户很生气怎么办?
先承接情绪,再给事实和下一步;涉及投诉、高价值客户或模型不确定时转人工。
Q4:模型乱承诺怎么办?
承诺类内容加口径检查,退款赔付等敏感动作由工具和规则控制,超出政策转人工。
追问链 11:从模型输出问到结构化可靠性
Q1:为什么不能直接把模型输出写进数据库?
因为输出即使是合法 JSON,也可能字段值错误、缺少必要条件或违反业务规则。模型输出只是候选决策,必须经过解析、schema 校验、业务校验、权限检查和必要的人工确认。
Q2:Structured Output 能保证正确吗?
不能。它主要约束结构,不保证事实和语义。比如 amount: 100 结构正确,但用户账户可能没有这笔订单。后端仍需校验资源归属、状态和金额。
Q3:工具调用为什么要设计幂等键?
因为网络超时无法说明请求是否执行成功,客户端或 Agent 可能重试。幂等键让服务端把同一业务动作识别为同一次请求,避免重复退款、重复发信或重复创建任务。
Q4:哪些错误能重试?
网络超时、连接重置、明确的 429/503 通常可以指数退避重试;参数错误、权限拒绝、资源不存在不能原样重试;写操作超时要先查询幂等键或业务状态,再决定是否重试。
Q5:如果工具执行成功但模型没收到结果怎么办?
服务端要根据 request ID 查询执行记录,补发结果或恢复任务,而不是让模型再次盲目执行。对不可恢复的情况应给用户明确状态,并提供人工处理入口。
追问链 12:从 Agent 问到生产运行时
Q1:一个 Agent 运行时最少要保存什么?
任务 ID、当前状态、用户目标、阶段、消息或摘要、工具调用记录、预算、重试次数、版本信息、错误和下一步状态。长期记忆与一次任务状态要分开存。
Q2:为什么不能只把完整聊天记录存起来?
完整记录适合审计和回放,但直接全部塞回上下文会带来 token 成本、噪声和上下文腐化。运行时要保留原始记录,同时生成结构化任务状态、摘要和按需检索的记忆。
Q3:checkpoint 解决什么问题?
它在关键节点持久化状态,使任务可以暂停、恢复、人工审核或从失败步骤继续。checkpoint 不是简单保存最后一条消息,还应包含状态版本、已完成副作用和可恢复边界。
Q4:恢复时如何避免重复执行工具?
记录每次工具调用的幂等键、参数摘要和执行状态。恢复后先查调用记录:已成功就复用结果,进行中就查询状态,失败且可重试才重试。不能根据“模型还没看到结果”推断工具没执行。
Q5:什么时候需要人工接管?
高风险副作用、权限异常、证据冲突、连续失败、预算即将耗尽或用户明确要求人工时接管。接管时要给人工完整摘要、证据、待确认动作和审计记录,而不是只把一堆原始消息丢过去。
追问链 13:从多模态问到工程落地
Q1:多模态 Agent 和文本 Agent 的主要差异是什么?
输入不再只有文本,还要处理图片、音频、视频、版面、时间戳和坐标;输出也可能需要引用页码、框选区域或生成文件。因此要增加媒体存储、转码、OCR、内容安全和结果定位。
Q2:什么时候用 OCR,什么时候直接用视觉模型?
固定文档、批量处理和需要精确文本检索时,OCR 加结构化解析更稳定、成本更可控;复杂版面、表格、图表、签章和视觉关系需要视觉模型复核。生产系统经常两者组合,不把一个模型当万能解析器。
Q3:多模态结果怎么评估?
除了答案正确率,还要看 OCR 字段准确率、页码/坐标定位准确率、表格结构恢复率、音频转写错误率、跨模态引用支持率和不同分辨率下的鲁棒性。
Q4:图片或文件里的恶意指令怎么处理?
OCR 文本、图片文字、文件元数据都视为不可信数据,不能改变系统指令。工具权限和外部动作仍由代码控制,图片解析结果要经过内容安全和敏感信息检查。
Q5:文件很大时怎么控制成本?
先做页级或时间段级路由,定位候选区域,再对相关片段做高质量视觉理解;缓存 OCR 和中间结果,限制总页数、分辨率、帧率和最大 token。需要全篇审阅时也要异步化并提供进度。