小厂 Agent 岗一面:Harness、BM25 与 RAG 评测追问
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 谈谈 Agent 的发展与你的看法,为什么使用 Agent?
- ReAct 设计
- 对 Harness 的理解
- 为什么加入 BM25?
- RAGAS 测评中出现 NaN 的情况
- 发给模型两段冲突的 chunk 怎么选?
- 模型出现幻觉怎么解决?
- 设计一个写毕设的 Agent
- 当前项目有什么缺陷,后续如何优化?
- 使用 AI 写项目的时候遇到最困难的地方是什么?
- 更新知识库时怎么判断之前的内容失效了?
《参考解析》
ReAct 与 Harness 的关系:ReAct 是一种把推理与行动交替起来的范式:模型先产出 Thought,再决定 Action(调用哪个工具、参数是什么),系统执行后把 Observation 拼回上下文,循环直到给出最终答案或触发终止条件。它的价值在于让模型用外部工具补足自身无法完成的事(检索、计算、执行代码),代价是每多一轮就多一次模型调用与上下文增长,所以必须设步数上限、重复动作检测与超时。Harness 则是模型之外的整套运行时骨架:提示与上下文组装、工具注册与调用、循环与终止控制、状态与记忆、权限与沙箱、可观测与评测、错误恢复。可以用一句话区分:ReAct 是「怎么想」,Harness 是「在哪想、能碰什么、跑完怎么验」。被问「为什么用 Agent 而不是固定的工作流」,可以答:任务路径不确定、需要根据中间结果动态选择工具时 Agent 才划算,路径固定且可枚举时用工作流更稳更便宜。
为什么引入 BM25:纯向量检索擅长语义相近但用词不同的匹配,弱点在精确匹配:专有名词、产品型号、代码标识符、编号与数字,向量往往把近似的东西也召回进来,反而把必须命中的那条挤掉。BM25 是经典的稀疏检索,靠词频饱和(TF 增长有上限)与逆文档频率(越罕见的词权重越高),加上文档长度归一化,对关键词命中非常敏感且可解释。两者结合就是混合检索:各自召回 Top K,再用 RRF(倒数排名融合)或加权分数合并。RRF 的公式是 Σ 1/(k + rank),k 起平滑作用,一般取 60 左右,调小会让头部结果权重更集中、调大则更平均。合并之后再上 cross-encoder 重排取最终 Top N,能显著提升精度但要注意延迟与成本。
RAGAS 出现 NaN 与冲突 chunk 取舍:评测指标算出 NaN,几乎都指向「这一项在该样本上无法计算」,常见原因是参考答案缺失导致依赖 reference 的指标算不出来、检索上下文为空、回答为空或被截断、指标内部做了除零、LLM 评审输出无法解析成约定格式、以及解析时字段名不一致。排查顺序是:先看原始样本(question/answer/contexts/reference 是否齐)、再看 judge 的原始返回、最后看指标的实现与版本。工程上要做的处理是显式校验样本完整性并在报告里标注无效样本数量,而不是让 NaN 参与平均(会把均值污染成 NaN)。两段冲突 chunk 的取舍不能拍脑袋:优先看来源权威性与时间新旧(元数据里记版本与更新时间)、看是否覆盖同一实体同一维度,然后在提示里把冲突显式呈现给模型,要求它指出冲突并说明采信哪一方及理由,必要时回退到权威源核验。最忌讳的是按检索分数随便丢一条,那等于把错误悄悄写进答案。
幻觉治理与知识库失效判定:幻觉要从链路的每一段治:检索侧提高召回质量(切分合理、混合检索、重排),生成侧约束「只依据给定材料作答、没有依据就说明不知道」,输出侧要求引用到具体片段以便核对,后置再加规则校验(数字、日期、实体是否出现在材料里)。评测侧要建幻觉专项用例(材料里没有的问题、诱导性问题),把拒答能力单独度量,而不是只看回答流畅度。至于「知识库更新时怎么判断旧内容失效」,本质是内容指纹与版本管理:对每个文档与每个 chunk 算哈希(MD5/SHA 之类的文件指纹,实践中常把完整哈希与修改时间一起存),同步时重新计算并做差集——指纹变了就是更新(先删旧 chunk 再写入新 chunk,避免同一文档留下新旧两份),文档消失了就删除对应向量,新增文档则插入;再配合元数据里的生效时间与来源版本号,检索时按时效过滤。整库重建成本高,所以增量同步要幂等、要能重跑,并记录每次同步的结果便于排查。
项目怎么讲才能扛住拷打,以及一道设计题:这类面试全程问项目,考察的是你有没有真正掌握自己写的东西。准备时要能给每个模块回答四个问题:为什么这么设计、替代方案是什么、瓶颈在哪里、你怎么验证它有效。涉及指标(准确率、成功率、延迟、成本)必须能说清口径与样本量,否则一被追问就露馅。「设计一个写毕设的 Agent」这种开放题,答题框架是先明确输入输出与验收标准(题目与参考资料进,成稿的结构化章节出),再拆流程:检索与阅读文献、生成大纲并与人确认、逐章写作并要求引用来源、交叉校验(事实核查、查重与格式规范)、最后汇总与导出。中间要说明人在环的位置(大纲与关键结论必须人确认)、如何防止编造引用(引用必须来自检索到的片段并回链)、以及长文的一致性怎么保证(把大纲与术语表作为结构化 state 常驻)。最后提到知识更新的面试官往往是在试探你是否了解工程细节,把哈希、增量同步、幂等这些说清楚就足够了。