经纬恒润 AI 应用开发一面面经
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 请做一下自我介绍。
- 你在电信工作期间有接触 AI 相关的工作吗?本科毕业为什么去电信、做项目管理而不是做开发?
- 为什么从电信离职、出国读研?
- 为什么用语义检索加关键词(BM25)的双路召回?只用一路会有什么问题?
- 关键词、术语是 AI 识别出来的吗?需不需要人工确认?
- 有没有遇到模型理解错用户意图的情况?怎么解决的?
- 知识库的数据规模有多大?
- 评测用了哪些指标?怎么用这些指标指导调优?
- 评测集的标准答案是怎么来的?
- 支持上传哪些文档格式?上传后怎么解析处理?
- 文档里的图片和表格怎么处理?
- 有没有对知识库文档本身的内容做审核或质量把控?
- 怎么避免模型编造答案?
- 介绍一下你的个人项目。
- 这个项目是基于 Claude Code / Codex 运行的吗?
- 用到了哪些 MCP?
- 不同功能之间的 agent 模式是怎么选取的(ReAct 和状态机怎么区分)?
- PPT 生成为什么用状态机?
- 用 AI 写代码时,你会去看它生成的代码吗?怎么保证质量?
- 记忆是怎么实现的?短期记忆和长期记忆分别怎么做?
- 这个项目做了多长时间?
《参考解析》
双路召回与查询侧处理:BM25 是词项精确匹配,对型号、专有名词、缩写、编号这类「字面必须对上」的查询命中很准,不依赖模型、可解释、快;向量检索走语义相似,能召回换了说法但意思相同的段落,代价是容易「形似神不似」,对罕见词和数字不敏感。只用 BM25,用户换个说法就召不回;只用向量,型号与编号这类精确查询会漏。做法是两路并行取候选,用 RRF 或加权分数合并(两路分数量纲不可比,必须先归一化或只用排名),再上重排模型。术语表如果由模型从文档里抽,一定会有漏抽和归并过头的问题,所以要落成可编辑的表、由业务方确认后才生效,查询侧再做同义词扩展——这条是「人在回路」的考点。
模型理解错意图怎么办:典型表现是答非所问、检索用了错误实体、把闲聊当业务问题。分三层处理:一是查询改写与澄清,歧义时先反问用户确认关键实体(哪个型号、哪份制度),不要硬猜;二是把意图识别做成受控分类(给定意图集合 + few-shot),置信度低就走澄清,而不是让模型自由发挥;三是把线上错例按「意图识别错 / 召回错 / 生成错」分类归因,只有第一类才去补意图分类的样本与规则。评测时要单独统计意图准确率,否则回答质量差会被错误归因到检索或生成上。
评测指标与评测集怎么造:检索层看 Hit Rate@k、Recall@k、MRR/NDCG,生成层看忠实度(有没有编造)、答案相关性、完整性、拒答是否恰当。评测集理想形态是「真实问题 + 标准答案 + 依据片段」三元组,来源三条:线上真实问题(尤其点踩和追问的)、业务方常见问答、按文档反向生成的问题;标准答案要业务专家写或确认,模型生成的题只能当补充且必须人工过一遍,否则等于把模型的错当成标准。用指标指导调优就是做消融:固定评测集与参数,分别改切分粒度、embedding、召回路数、top-k、重排,看哪一项对哪个指标贡献最大,再决定投入。
文档解析:图片与表格:PDF、Word、Excel、PPT、Markdown 要分别处理,PDF 最难——有文本层的直接抽,扫描件走 OCR,双栏与页眉页脚要过滤,跨页表格要拼接。图片分两种:有信息量的(流程图、结构图)用多模态模型生成描述,把描述作为补充文本随原图链接一起入库;纯装饰图直接丢。表格不能拍平成一行文字,最好按「表头 + 行」结构化成 Markdown 或保留字段,让模型能读懂行列关系。文档级质量把控包括:入库前多版本去重、标注有效期与适用范围、隔离草稿与过期制度,以及定期抽检「高被引用但被点踩」的片段。
怎么避免模型编造答案:检索层设相似度阈值,不到阈值就明确说知识库没有;生成层强制引用片段并要求「资料不足时说明不足」,配合 few-shot 反例;校验层把答案与片段一起做一致性检查,把不被支持的说法标出来或降级为「建议人工确认」。还要把「不知道」做成正常输出:告诉用户为什么没找到(问题太宽泛、知识库未覆盖)并给出改写建议,比编一个看起来合理的答案代价小得多。
Agent 模式怎么选:ReAct 还是状态机:ReAct 灵活,模型自己决定下一步调哪个工具,能处理开放问题,代价是路径不可预测、可能绕圈、成本与延迟不可控、也不保证走到终点。状态机把流程固定成节点与迁移条件,每个节点职责单一、可测试、可重试、可观测,代价是只覆盖设计过的路径,例外要显式加分支。判据是任务有没有确定的步骤结构:生成 PPT 这种有明确阶段(选题 → 提纲 → 内容 → 排版 → 导出)、每阶段输入输出固定的,用状态机——面试官说这其实就是工作流,是对的;查资料答问题这种步数不定、要模型判断的,用 ReAct 循环。真实系统多是混合:外层状态机控阶段,阶段内用 ReAct 处理开放子任务,并给循环设步数与超时上限。
记忆:短期与长期:短期记忆就是当前会话的消息窗口加工具调用记录,难点在上下文预算——常见做法是保留最近 N 轮原文、更早的做滚动摘要,把摘要与关键事实(用户偏好、已确认结论)单独存成结构化字段,保证压缩时不丢。长期记忆跨会话,流程是「抽取稳定事实 → 向量化入库 → 按当前查询召回」,写入要有取舍,只存长期有用的偏好与背景,不存一次性信息;要给用户可见的读写与删除入口,否则脏记忆会长期污染回答。召回回来的记忆同样是不可信输入,要和知识库内容分开标注来源。
转行动机的答法与反问环节:离职与转行按「事实 — 决策依据 — 与岗位的连接」讲:在电信做项目管理期间接触过 AI 相关需求,发现自己更想往技术方向深入,于是出国读研补基础,读研期间做了 RAG 方向实习,确认要长期做 AI 应用工程。时间线要和简历严丝合缝,不抱怨前东家,也别把读研说成逃避,并主动给出到岗与稳定性信息。反问环节他问了二面是否需要准备 PPT、日常工作内容与领导派活方式、上下班与午休安排、自身相比其他候选人的不足、团队怎么做 code review、结果什么时候出——这类问题能换到团队真实状态,比岗位描述可信;问「我有哪些不足」还能拿到直接反馈。