先把“会回答”拆成找证据、用工具和验证结果
RAG 与 Agent 的难点不在于画一条漂亮链路,而在于每个中间结果都可能错。这套题把索引、授权检索、证据包、工具提案、执行账本和权威终态拆开,让“没找着、没用对、没权限、结果未知”都能被定位。
先看整套知识的坐标,再逐题理解
这不是背答案清单。先用地图确认概念之间的依赖,再沿“白话直觉 → 核心结论 → 原理与取舍 → 常见误区”阅读每个知识点。
先看关键链路,单个知识点才不会变成碎片
面试官追问的方向,往往就是这张图里的下一根箭头:输入怎样变化、状态存在哪里、哪一步最贵、失败怎样被验证。
换一个关键词,或切回“全部章节”。
检索质量,从文档怎样被切开就已经开始
Embedding 不是把文档“存进模型”,Chunk 也不是越长越完整。知识准备阶段要为后续召回、引用与更新保留结构。
RAG 和模型微调分别适合解决什么问题?#
先用大白话把它讲明白
RAG(Retrieval-Augmented Generation,检索增强生成)在推理时取回外部证据,适合更新频繁、需要来源或按权限读取的知识;但“带权限”不是 RAG 自带能力,访问控制必须在候选进入模型上下文前由可信代码强制执行。
微调改变参数,更适合稳定的行为、术语、风格和任务策略。SFT(Supervised Fine-Tuning,监督微调)能教模型倾向某种 JSON 结构,却不能保证每次都合法;强合同还要靠 Schema 约束、受限解码和服务端验证。当前价格、库存和订单状态通常应查询权威工具,而非写进向量库或权重。
两者可组合:微调教模型如何用证据和何时拒答,RAG 提供版本化事实。长上下文也不是 RAG 的反义词;应按语料规模、更新频率、证据选择稳定性、权限和 token 预算实测。
RAG 提供可更新、可引用的推理时证据,微调更适合稳定行为与模式;当前结构化状态优先查权威工具。权限、合法 JSON 和不幻觉都不能由 RAG 或 SFT 单独保证,分别需要访问控制、Schema/受限解码和分层评测。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
原始 RAG 同时研究 RAG-Sequence 与 RAG-Token:前者整段输出共享一个潜在文档,后者每个 token 可边缘化不同文档,因此一条简化求和式不能冒充所有 RAG 实现。
外部语料可以按内容快照、版本和 ACL(Access Control List,访问控制列表)更新、删除与审计;参数化事实较难逐条定位或及时撤回,但微调仍可能影响知识,不能说它“只学行为”。
RAG-Sequence:p(y|x)≈Σ_{z∈Top-K} pη(z|x)·∏_i pθ(y_i|x,z,y_<i)工程取舍
RAG 增加解析、索引、检索、上下文与权限故障面;微调增加训练、回归与遗忘成本。直接长上下文省去检索器,却可能付出更高输入成本并受证据位置与权限组装影响。
常见误区
“RAG 能保证不幻觉、SFT 能保证合法 JSON”都错误。前者仍会漏召回、取错版本或忽略证据,后者只是概率模型;硬约束要落到系统边界。
面试官可能继续问
追问:价格、制度 PDF 和回答格式分别该进工具、RAG 还是微调?怎样比较 RAG 与长上下文?
Chunk 应该怎样切?为什么固定 500 Token 不是通用答案?#
先用大白话把它讲明白
Chunk 不必同时承担四种角色:索引单元可以短,召回后可扩展父段落,送入上下文时再去重,引用则要精确映射到原文 span。把它们都固定成 500 token,会把实现习惯误当任务规律。
太短会拆开定义、条件或表头;太长可能被截断、混入多个主题并稀释检索信号,但向量模型并不一定在字面上“把内容平均”。切分应尊重标题、段落、函数、表格、页面与阅读顺序,并保存文档字节/内容哈希、版本、章节路径、原文偏移和 ACL。
Overlap(重叠)可覆盖边界,却会制造近重复候选。用目标问题上的 Hit@k/Recall@k、证据覆盖、重复率、引用精度、延迟和最终答案做联合实验;PDF、表格和代码若解析结构先坏掉,Embedding 无法自动恢复。
先分清索引、召回、上下文和引用单元,再按语义结构切并保存原文 span、版本与 ACL。短块可精准命中后扩父段;Overlap 只补边界,也会挤占 Top-k。参数应由目标问题的证据召回、重复率、引用和端到端效果决定。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
Parent-child 是一种工程模式:用子块检索、按父级扩展上下文;它不保证更好,父段过大仍会带入噪声。
固定 token 长度、结构感知解析和表格/代码专用切法属于待比较方案;索引版本必须同时绑定 parser、chunker、embedding 与权限配置,才能重现一次检索。
工程取舍
小 chunk 增加索引条目、融合和拼接成本;大 chunk 保留邻近语境,却可能截断、主题混杂并浪费上下文。更复杂的结构解析提高质量,也增加开发、回填和版本迁移成本。
常见误区
“Overlap 越大召回越好”错误。多个近重复块会占满候选并重复同一证据;是否去重、按文档限额或扩父段都要进入评测合同。
面试官可能继续问
追问:FAQ、代码函数、跨页表格各自怎样定义索引单元与引用单元?
召回负责不漏,Rerank 负责把真正相关的排上来
Dense 与关键词不是互斥流派。用候选生成—融合—精排的分层结构,才能同时覆盖实体词、语义改写和复杂相关性。
Embedding 检索是怎样工作的?Cosine 相似度有什么边界?#
先用大白话把它讲明白
Dense Retrieval(稠密检索)常用双编码器分别处理 query 与 passage。两侧可以是不同参数的 encoder,但输出必须处于可比较的向量空间;向量近只表示模型学到的相关性,不等于事实正确或权限允许。
Cosine Similarity(余弦相似度)看方向夹角。只有向量非零且做了 L2 归一化时,点积数值才等于 cosine;索引距离还要与训练和服务配置一致。编号、罕见实体、精确日期通常仍需 lexical(词法)检索和元数据过滤。
ANN(Approximate Nearest Neighbor,近似最近邻)用近似换搜索速度/计算,不天然节省内存:HNSW 会额外保存多层图边,压缩索引才可能省内存。模型或 pooling 变更通常改变向量空间,应双索引迁移或全量重嵌入,并用同一证据集验证兼容性。
双编码器把 query 与 passage 映射到可比较空间,再用点积或 cosine 做 ANN Top-k;L2 归一化后两者等价。ANN 主要在延迟、Recall 和索引内存间取舍,并非天然省内存。精确实体、数字、ACL 与时效还需词法检索、过滤和重排。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
DPR 使用正 passage、batch 内负项与 BM25 hard negative 训练 query/passage encoder;Hard negative 太易没有学习信号,错误负项又可能惩罚真实相关文档。
HNSW 用分层邻接图加速高召回搜索,图连接本身有内存开销;维度、量化、M、efConstruction 与 efSearch 分别影响容量、构建、延迟和 Recall。
cos(q,d)=(q·d)/(||q||₂||d||₂);若 ||q||₂=||d||₂=1,则 cos(q,d)=q·d工程取舍
高维可能增加表达空间,也线性增加向量存储与传输,效果并不保证更好;更强量化或更小搜索宽度省资源,却可能漏掉证据。迁移期双索引提高安全性,也会暂时翻倍存储和回填成本。
常见误区
“Cosine 0.8 必然相关”没有通用阈值;“ANN 比精确搜索更省内存”也不是通则。阈值和索引参数都要按目标数据、切片与证据召回校准。
面试官可能继续问
追问:DPR 的 hard negative 怎样采?HNSW 的 efSearch 提高时哪些指标变化?Embedding 换版怎样无停机迁移?
为什么生产 RAG 常用 Hybrid Retrieval 和 Reranker?#
先用大白话把它讲明白
关键词/BM25 擅长 ID、术语和罕见词,Dense 擅长同义改写。两路原始分数通常不可直接相加;RRF(Reciprocal Rank Fusion,倒数排名融合)只使用各路排名,或在有标注集时校准加权分数。权限/租户过滤必须来自可信身份并在候选可见前执行,不能让 query rewrite 自己决定。
RRF 中 k_RRF 是平滑常数,不是“取 Top-k 的 k”;rank 应声明从 1 开始。第一阶段候选数、各路配额和 k_RRF 都是待调参数,没有“永远 60”或“永远 100 个候选”。
Reranker(重排器)可以是 cross-encoder、ColBERT late interaction(后期交互)或经过约束的 LLM/listwise 方法,并不由“是否生成式”定义。要冻结候选与配置,用 nDCG/MRR/Recall 等排序指标独立验证,再看端到端答案。
Hybrid 让 lexical 保精确匹配、Dense 保语义召回,再用 RRF 或校准分数融合;Reranker 在较小候选集上做更深相关性判断。先保证不漏、再排准,但权限必须先于候选暴露,融合和重排也要脱离生成器波动单独验收。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
RRF 对文档 d 的各路 1-based rank 求倒数和;平滑常数 k_RRF 减弱个别系统极高排名的异常影响,它与候选截断深度是两件事。
ColBERT 独立编码 query/document token,并以每个 query token 对全部 document token 的最大相似度求和;文档表示可离线算,但 token 级索引、存储和检索仍有成本。
RRF(d)=Σ_{r∈rankers} 1/(k_RRF+rank_r(d));S_ColBERT(q,d)=Σ_i max_j q_i·d_j工程取舍
候选越多,第一阶段召回上限通常越高,也增加重排计算和尾延迟;候选太少,重排无法找回已漏证据。Cross-encoder 交互强但逐对计算贵,late interaction 以更大 token 索引换在线效率。
常见误区
“Reranker 就是再问一次生成模型”错误;反过来,“生成模型绝不能做重排”也过于绝对。关键是固定输入输出合同、相关性 rubric、配置和独立回归。
面试官可能继续问
追问:RRF 的 k_RRF 与候选 Top-k 各控制什么?如何在不运行生成器时量出重排增益?
Query Rewrite、Multi-Query 和 HyDE 各自解决什么?有什么风险?#
先用大白话把它讲明白
Query Rewrite 把代词、历史上下文或内部说法改成独立检索表达;Multi-Query 从多个语义角度发起检索;Query Decomposition 则把多跳问题拆成子问题。三者都可能漂移,原 query 应作为一路保留并记录每个分支的独立增益。
HyDE(Hypothetical Document Embeddings,假想文档嵌入)的原论文让指令模型生成可能含幻觉的“假文档”,再由无监督对比 encoder 编码,去真实语料空间找邻居。论文把 dense bottleneck 解释为过滤虚构细节,但这只是该方法的设计与实验结论,不是事实安全保证。
租户、用户、地域和密级等 ACL 过滤必须由可信认证上下文产生;模型只能提出文本查询,不能增加权限。多路结果还要去重、限额与融合,精确订单号等查询通常先保留原字符串。
Rewrite 补全检索表达,Multi-Query 扩展多个角度,Decomposition 拆多跳,HyDE 用可含错误的假想文档做 dense 检索探针。它们都可能漂移和放大成本,所以保留原 query、让 ACL 独立于模型,并按每个分支的增量 Recall、噪声和延迟验收。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
HyDE 原始实现用 InstructGPT 生成 hypothetical document,再用 Contriever/mContriever 编码;假文档不是证据,最终回答仍要落到真实、授权且版本化的来源。
融合前保存 rewrite lineage(原 query、改写、模型/Prompt 版本、过滤器与候选),用成对证据标注区分“补全成功”和“改写带偏”。
工程取舍
更多查询可能提升覆盖,也线性增加生成、检索、融合和尾延迟,并让无关候选进入重排。可按 query 类型路由:ID 查询禁用创造性扩写,多跳问题才启用拆解或预算更高的探索。
常见误区
“HyDE 先生成了答案,所以不需要知识库”错误。它生成的是可能虚构的检索表示;没有真实语料命中和 claim-support 校验,就没有可引用证据。
面试官可能继续问
追问:怎样用保留原 query 的 paired ablation 监测 rewrite drift?哪些字段绝不能让模型改写?
回答听起来正确,不等于它被检索证据支持
RAG 的端到端分数要拆回组件。引用不是装饰,必须能定位到版本化证据,并区分“没找到”和“找到没用”。
怎样让回答带可验证引用,并处理证据冲突?#
先用大白话把它讲明白
给每个 evidence chunk 一个会话内 ID,同时保存不可变内容快照/哈希、文档版本、页码、原文 span、ACL 和抓取时间。模型只选择 ID,应用层映射链接;URL 会变,单独保存 URL 不能复现旧答案。
先把回答拆成可核验 claim,再判断每条 citation 是否真的蕴含/支持紧邻主张,以及所有需要证据的关键 claim 是否被覆盖。ALCE 把 citation quality 拆成 recall 与 precision;“出现 [1]”只通过格式检查,相关文档也未必支持具体复合句。
冲突解决规则必须由领域定义:法规可能看管辖区与生效期,产品文档可能看版本,医学还需证据等级。系统应展示冲突和规则;无法消歧时拒绝断言。ACL 要在检索前强制,重排/上下文/引用再做防御性复核,且不能泄露越权文档是否存在。
引用链要绑定不可变快照、版本和原文 span;模型只引用证据 ID,应用层映射来源。生成后按 claim 验证支持关系和关键主张覆盖。冲突按业务定义的版本/权威规则处理,无法消歧就显式说明;ACL 在候选进入模型前强制。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
可操作口径是 citation correctness/precision:被评估引用是否支持所附 claim;citation completeness/recall:需要引用的 claim 中有多少获得支持。具体分母、复合 claim 拆法与权重要在 rubric 中固定。
RAGAS 原论文关注 context relevance、answer relevance 与 faithfulness;它不是 ALCE 引用精度/召回的同义来源。Faithfulness 只问回答能否由给定 context 推出,不保证 context 新鲜、权威或有权限。
citation precision=supported citations/evaluated citations;citation recall=supported claims/claims requiring citation工程取舍
逐 claim 校验提高可审计性,也增加拆句、NLI/Judge、人工校准和快照存储成本。关键事实强制引用,闲聊不必堆来源;复合句过度拆分又会损害可读性。
常见误区
“列了来源就 grounded”错误。来源可能只相关、不支持该句,可能版本过期或越权;支持次要细节也不代表关键主张完整覆盖。
面试官可能继续问
追问:网页更新后怎样复现旧引用?一个引用只支持复合句一半时怎样评分?
RAG 应该怎样评测,才能定位到底是哪一层坏了?#
先用大白话把它讲明白
检索层先区分 Hit@k 与 Recall@k:Hit@k 只问至少一个 gold 是否出现;多证据时 Recall@k 是取回 gold 的比例。MRR(Mean Reciprocal Rank,平均倒数排名)只看首个 relevant,multi-hop 还要评完整 evidence set coverage。
生成层要在“给定正确证据”的受控条件下测 faithfulness、任务正确性、完整性、引用 precision/recall 与拒答;端到端再测用户任务、风险、P95、成本。证据充分但没用对是生成/策略问题,证据没进上下文才是检索问题。
测试集必须同时有可回答与不可回答、单证据与多证据、当前与过期冲突,并冻结文档快照、parser/chunker、索引、retriever/reranker、Prompt/模型和 Judge 版本。自动 Judge 要用目标分布人审校准并保留逐样本结果。
RAG 用分层成绩单:检索在有 gold evidence 的可回答题上报告 Hit@k、Recall@k、MRR 与多证据覆盖;无答案题另评误召回、拒答和误答。生成在固定正确证据下评任务正确、faithfulness 与引用,端到端再看成功、风险、延迟与成本。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
令 G_q 为 query q 的 gold evidence 集;对 |G_q|>0 的题,Recall@k(q)=|Top-k∩G_q|/|G_q|。只有每题一个 gold 时,它才与 Hit@k 的 0/1 结果一致;无答案题不能代入分母为 0 的式子。
RAGAS 提供无参考的 context relevance、answer relevance 与 faithfulness 自动评估思路;这些模型指标会随机和偏置,不能替代版本化 gold、代码检查与人工校准。
Hit@k=mean_{q:|G_q|>0} 𝟙[Top-k_q∩G_q≠∅];Recall@k=mean_{q:|G_q|>0} |Top-k_q∩G_q|/|G_q|工程取舍
人工 evidence set 标注昂贵,但能定位组件;自动指标扩展快,却受 Judge、Prompt 和语言变化影响。可用小而严谨的冻结回归集守门,再用滚动挑战集覆盖新文档和新攻击。
常见误区
“Recall@k 就是命中过至少一个 gold 的查询比例”只在单 gold 口径下成立;“Faithfulness 高就是事实正确”也错误,模型可能忠实复述过期或错误证据。
面试官可能继续问
追问:多个等价 gold 文档怎样标注?怎样按 query 做 paired bootstrap,而不把 chunk 当独立样本?
Agent 的价值来自闭环执行,风险也来自真实副作用
Agent 题不以“会规划”结束。工具 schema、协议、状态、重试、权限与最终验证决定它能否从 Demo 走向生产。
ReAct Agent 的基本循环是什么?为什么不能无限循环?#
先用大白话把它讲明白
原始 ReAct(Reasoning and Acting,推理与行动协同)交错生成 reasoning trace、Action 与 Observation:模型提出动作,环境返回新观察,再更新下一步。现代生产系统未必暴露或保存私有思维文本,但仍可保留“提案—执行—结构化结果—状态更新”的闭环。
循环可能重复相同动作、在错误 observation 上扩散或耗尽 token。系统需要最大步数、墙钟/成本预算、重复与无进展检测,以及四类终止:目标终态已验证、明确业务拒绝、转人工、预算/安全硬停。
评测不能只看最终一句“完成了”。Transcript/trajectory 检查调用与策略,outcome 从权威环境读取真实终态;多次 trial 还要区分至少一次成功的 pass@k 与连续可靠性的 pass^k。
ReAct 的核心是 Action 与 Observation 反复闭环,原论文使用显式 reasoning trace,但现代系统不必暴露私有 CoT。生产上用硬预算和状态机终止,记录结构化提案、权限、调用、结果与终态;评测同时看 trajectory 和权威 outcome,而不是模型自报。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
工具结果应区分 success、transient/retryable、business rejection 与 unknown;自然语言“好像成功”不能驱动状态机。计划只是下一步假设,每一步都应有可验证完成条件。
Anthropic 的 Agent eval 指南区分 transcript/trajectory 与 outcome,并指出 pass@k 衡量 k 次中至少一次成功,pass^k 衡量 k 次全部成功;用户侧可靠性不能只报更容易上升的 pass@k。
pass@k=P(k 次中至少一次成功);pass^k=P(k 次全部成功)工程取舍
更多步骤可能发现新证据和恢复,也增加延迟、费用与错误累积。Plan-and-Execute 减少局部迷路但计划会过期;ReAct 响应观察更快,却更容易短视循环,需按任务实测。
常见误区
“让模型多想几步一定更可靠”错误。没有新 observation 或确定性检查时,额外循环可能只是重复猜测;漂亮 trajectory 也不等于外部状态正确。
面试官可能继续问
追问:怎样检测无进展?何时看 pass@k,何时必须看 pass^k?终态由谁读取?
工具调用协议要包含什么?MCP 解决了什么、没解决什么?#
先用大白话把它讲明白
工具合同至少有稳定 name/description、inputSchema、结构化结果/错误、权限对象、副作用和执行语义。MCP 2025-11-25 是基于 JSON-RPC 的 Host—Client—Server 协议:Server 可暴露 tools/resources/prompts,Client 还可协商 roots、sampling、elicitation 等能力,不只是单向“模型调函数”。
MCP 中 Resource 是 application-controlled 的上下文,Tool 是 model-controlled 的可调用能力;这描述控制层,不代表模型拥有最终权限。inputSchema 是必需的,outputSchema 可选;readOnly/destructive/idempotent 等 ToolAnnotations 只是 hint,官方明确要求不能从不可信 Server 的注解直接做工具决策。
模型只产生调用提案。宿主/服务端仍要认证、对象级授权、业务校验、参数绑定审批、最小凭据和审计。重试安全不能只按“读/写”名字或注解猜:仅对明确可重试的瞬态失败按服务合同退避;副作用调用需幂等 key 绑定规范化参数,timeout/断线进入 unknown 并对账。
MCP 标准化 Host—Client—Server 的能力协商与 tools/resources/prompts 交换,但不替代 Agent、授权或副作用安全。Schema 和 annotations 都只是合同输入;可信执行层要独立鉴权、校验和审批。重试依据真实执行语义,写操作用 key+fingerprint 与结果对账,不能把 readOnlyHint 当安全证明。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
MCP Tool 要求 name 与 inputSchema,可选 outputSchema;annotations 的 readOnlyHint、destructiveHint、idempotentHint、openWorldHint 全是提示,不保证行为真实。语义规则如“退款不超过可退金额”仍须服务端执行。
幂等键只有在同租户/操作域、同规范化参数下复用才安全;同 key 异参数应冲突。确认只确认绑定的具体动作,也不能替代当前身份、对象权限和业务策略。
工程取舍
工具太细会增加规划步数与中间失败,太粗会把多个权限和不可逆动作藏在一次调用里。标准协议降低适配成本,也扩大供应链与信任面,需要 Server allowlist、版本固定和隔离。
常见误区
“用了 MCP 就是 Agent/就安全”错误。MCP 是互操作协议;何时调用、能否执行、怎样重试与恢复仍由 Host、业务服务和策略系统决定。
面试官可能继续问
追问:Resource 与 Tool 谁控制?为什么 idempotentHint 不能直接允许自动重试?如何绑定审批参数?
Agent 的记忆、可靠性与 Prompt Injection 应怎样一起设计?#
先用大白话把它讲明白
先分三类状态:workflow state 记录步骤和 operation ID;对话上下文服务当前 turn;长期记忆保存经选择的用户事实/偏好。长期写入要绑定主体/租户、来源、时间、权限、用途/同意、置信度、TTL、替代关系和删除能力,不能把每段聊天或网页自动永久化。
网页、邮件、文件和 RAG chunk 都是不可信数据,可能携带 indirect prompt injection(间接提示注入)或污染记忆。把“数据”和“指令”分层有帮助但不是充分防线;真正边界是最小凭据、工具 allowlist、参数/输出校验、隔离、确定性策略和对具体动作的审批。人工确认仍不能替代授权。
副作用调用的 timeout 代表结果 unknown,不代表失败。用稳定 operation ID/idempotency key 和参数 fingerprint 查询原收据或权威业务状态;单纯读到“最终已有一个订单”不一定能证明由哪次请求创建。无法消歧时等待、转人工或补偿,不能盲目重放。
把工作流状态、当前对话和长期记忆分开;长期记忆带主体、来源、权限、TTL、同意和可删除性。外部内容始终按不可信数据处理,靠最小权限与确定性执行门限制注入影响。副作用超时进入 unknown,用 operation ID/收据对账,绝不把 checkpoint 或重试当 exactly-once。
展开原理与工程取舍FORMULA · TRADE-OFF · FOLLOW-UP
原理拆解
MemGPT 提出受操作系统分层内存启发的 virtual context management;它证明一种研究架构,不自动提供隐私、ACL、正确性或生产记忆治理。记忆写入本身也要防注入和错误固化。
OWASP LLM01:2025 同时列出直接与间接 Prompt Injection,并明确 RAG/微调不能完全消除风险。AWS 也指出 replay 与 retry 都可能重复副作用,at-most-once per retry 仍不等于整个工作流 exactly-once。
工程取舍
更多长期记忆可改善连续性,也放大隐私、过期、投毒与跨租户泄露风险;更强自动化降低人工成本,却扩大凭据和副作用半径。高风险动作应缩权限、提高审批与对账强度。
常见误区
“系统 Prompt 更强、有人点确认、再加 idempotency key,就能安全重试任何动作”错误。模型规则、确认和 key 分别不能替代授权、参数绑定与 unknown 结果对账。
面试官可能继续问
追问:第一次调用超时后如何确认原请求是否执行?哪些记忆允许自动写,哪些必须审批或禁止?