拿下技术面上传简历

示例报告

按真实面试顺序分七个阶段,每道技术题附多轮追问链;以下为完整内容,未做删减,无需登录即可查看。

虚构简历完整内容无需登录

AI 全栈开发 · 社招 1-3 年43 道题7 个面试阶段附岗位 JD · 含岗位匹配算法 + 后端 + 前端全链路:RAG 问答助手从解析到上线,含降本与线上排障。
7面试阶段
43题目总数
42追问轮次(14 题带链条)
1追到题库题卡的轮次

AI 生成 本报告由 AI 生成,仅供参考。出题标准来自多位资深 AI 面试官与算法技术专家的多年一线面试经验, 考什么由大模型对题库(含各大厂高频面试题)做 RAG 检索决定,每题挂回简历原文。算法 + 后端 + 前端全链路:RAG 问答助手从解析到上线,含降本与线上排障。

导读

先看这几处,再逐题过
43道题
7个面试阶段
14道带追问链
3处需优先修正

简历先改这几处

  • 硬错误简历正文夹带了“待澄清:”和“(注:口径为……)”这类内部工作笔记口吻,属于写给自己的备注而非对外简历语言,HR 初筛容易读成“这件事没做完”
  • 硬错误同一份简历内数字与单位的间距不统一:项目 1 写“2 分10 秒”(“分”后无空格),其余位置写作“6 分钟”“12 万次”“11k”,排版不齐;三个项目标题行的时间右对齐空格数也不一致
  • 高风险开头自述“我负责算法与后端接口”,但项目 3 又写了完整前端开发、K8s 上线与故障处理,三处职责边界互相打架,面试官无法判断哪部分是你真正主责、哪些只是“参与过”
模块一

简历原始文件

先看题目从哪来。下面是简历原文,带底纹的段落被出题引用; 点击任一段落,模块三仅保留与该段相关的问题。

文件ai-fullstack-1-3y-resume.txt类型文本简历(示例)规模38 行 / 1678 字
  1. 张启明
  2. 手机:138****2210 | 邮箱:zhangqm@example.com | 求职意向:AI 全栈开发工程师
  3. 教育背景
  4. 同济大学 · 计算机科学与技术 · 本科 · 2019.09–2023.06
  5. GPA 3.6/4.0;专业排名前 15%;获校级一等奖学金两次。
  6. 工作经历
  7. 杭州云枢科技有限公司 · 算法工程师(AI 应用方向) · 2023.07–至今
  8. 负责公司内部"智能文档助手"从模型选型到对外服务的全链路开发,团队 4 人,我负责算法与后端接口。
  9. 1) 智能文档助手(问答 + 摘要 + 结构化抽取) 2023.09–2024.062 道题
  10. - 背景:客服团队每天处理 2000+ 份工单附件与合同,人工翻找条款平均耗时 6 分钟/单。1 道题
  11. - 做法:搭 RAG 链路——PDF 解析(自研版式还原,处理表格与页眉页脚)、按语义切分、1 道题
  12. bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。9 道题
  13. 针对"表格里的条款答不上"的问题,把表格按行列展开成结构化文本再切分,命中率明显改善。
  14. 后端用 FastAPI 提供 /ask /upload /feedback 三个接口,Celery 处理异步解析,Redis 做任务队列与结果缓存。3 道题
  15. - 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的5 道题
  16. 可采信率从初版 71% 提到 89%。(注:口径为人工盲评"答案是否可直接采用",非自动指标)
  17. 2) 模型服务化与成本优化 2024.07–2025.03
  18. - 背景:高峰期日调用 12 万次,月推理成本 3.8 万元,其中约 40% 是重复问题。2 道题
  19. - 做法:加语义缓存(embedding 相似度 > 0.95 且问题长度差 < 15 字则直接命中缓存),4 道题
  20. 命中结果带 TTL 与人工纠错入口;对摘要类任务改用更小的模型分流,只有追问与复杂抽取才走大模型;
  21. 把长文档摘要改成"分段摘要 + 合并摘要"两段式,单次输入 token 从平均 11k 降到 3.2k。2 道题
  22. - 结果:重复问题命中率 37%,推理成本从月均 3.8 万降到 2.4 万(-37%);接口 P95 从 4.1s 降到 2.3s。1 道题
  23. - 待澄清:成本下降里"模型分流"与"语义缓存"各占多少未做严格拆分,只做过一周的分项观察。
  24. 3) 前端与联调 2023.09–至今
  25. - 用 Vue3 + TypeScript 写管理端与对话界面,实现引用定位(点击答案跳转到原文段落)、1 道题
  26. 反馈闭环(采纳/不采纳直接回流成评测集)。
  27. - 与运维一起把服务上到自建 K8s,写了健康检查与限流(单用户 10 QPS),处理过一次因连接池2 道题
  28. 未释放导致的雪崩(重启后加了池的 maxLifetime 与熔断)。1 道题
  29. 技能
  30. Python、TypeScript/JavaScript;FastAPI、Celery、Redis、Milvus、PostgreSQL;
  31. Vue3、React(用过);Docker、Kubernetes(用过)、Linux;
  32. 熟悉 RAG 全链路(解析/切分/召回/重排/合成)、embedding 与 rerank 模型选型;
  33. 了解 Prompt 工程与输出结构化(JSON Schema 约束)、大模型 API 的成本与延迟权衡。
  34. 项目补充
  35. - 开源:向 Milvus 贡献过一个中文文档示例脚本(已合并);个人维护一个 RAG 评测小工具(GitHub 380 star)。1 道题
  36. - 竞赛:2022 年 MathorCup 高校数学建模挑战赛 二等奖(三人队,负责建模与代码)。
  37. 自我评价
  38. 习惯先把链路跑通再优化;写文档时会把口径与边界写清楚,不做"看起来很准"的指标。
模块二

简历分析

面试官看到这份简历时脑子里在想什么:哪些是加分项、哪些会让他犹豫、 哪些是写错了、哪些信息不足需要当面问清。

岗位匹配整体与 AI 全栈开发方向高度匹配,RAG 链路、服务化、成本优化、部署与前端都有真实产出和量化指标;主要缺口是没有模型训练/微调类证据,以及若干量化口径需要拆细。
JD 要求,简历里已有证据(8)
  • RAG 全链路搭建与调优简历原文:搭 RAG 链路:自研 PDF 版式还原、语义切分、向量化入 Milvus、向量+BM25 多路召回与重排、大模型合成并给出处
  • 大模型应用服务化:FastAPI + 异步任务简历原文:FastAPI 提供接口,Celery 异步解析
  • 向量数据库(Milvus)使用简历原文:向量化入 Milvus
  • embedding 与 rerank 模型选型简历原文:embedding 与 rerank 模型选型
  • 推理成本与接口延迟优化简历原文:重复问题命中率 37%,推理成本月均 3.8 万降至 2.4 万(-37%),接口 P95 4.1s→2.3s
  • 部署与稳定性:K8s、健康检查、限流、故障处理简历原文:与运维把服务上到自建 K8s,写健康检查与限流,处理连接池未释放导致的雪崩
  • 前端联调能力:Vue3/TypeScript简历原文:用 Vue3 + TypeScript 写管理端与对话界面,实现引用定位与反馈闭环
  • 评测体系建设简历原文:向 Milvus 贡献中文文档示例脚本;个人维护 RAG 评测小工具
JD 要求,简历里看不到(4)
  • 模型训练/微调能力(SFT、LoRA 等)怎么补:简历上补一段最小可验证的微调实践:领域语料清洗→指令构造→LoRA SFT→与 RAG 基线在自有评测集上对比(正确率/格式合规/成本)。面试被问到时先承认现有产出以应用与工程为主,再给可执行的三个月计划,不要硬说自己训过模型。
  • React 相关工程证据怎么补:技能列表里的 React 没有任何项目佐证,面试官一定会追。要么补一个有实际产出的 React 侧项目/组件库贡献写进简历,要么在面试中说明只做过小规模改造、主战场是 Vue3 + TypeScript,避免在 React 细节上被追问翻车。
  • 成本下降的归因拆分怎么补:成本 3.8 万→2.4 万同时上了语义缓存、模型分流、两段式摘要三个变量,未拆分贡献。面试前把一周分项观察的数据整理成表格(各变量单独开关下的命中率/成本/延迟),答不上时明说『只做过一周分项观察,结论是粗粒度的』。
  • 前端与接口层的效果量化怎么补:前端部分除单用户 10 QPS 外无量化。补页面级指标(首屏加载、引用定位点击率、反馈闭环收集率)或接口成功率/错误率,哪怕是小样本统计也比纯描述强。
JD 原文的任职要求
  1. RAG 全链路搭建与调优(文档解析、切分、召回、重排、生成)
  2. 大模型应用服务化:FastAPI 接口设计、Celery 异步任务
  3. 向量数据库(Milvus)使用与检索调优
  4. embedding 与 rerank 模型选型与评估
  5. 推理成本与接口延迟优化
  6. 部署与稳定性:Docker/K8s、健康检查、限流、故障处理
  7. 前端联调能力:Vue3/TypeScript 管理端与对话界面
  8. 评测体系建设:离线评测集与线上效果量化
  9. 模型训练/微调能力(算法岗常见要求)
优势
  • RAG 不是停留在调 API 层,而是动手啃了 PDF 版式还原、表格条款召回这类脏活,说明有真实落地经验
  • 成本优化有完整的问题—手段—结果闭环,且数字自洽(3.8 万→2.4 万,降幅 37%),是可追问、可验证的成果原文:重复问题命中率 37%,推理成本从月均 3.8 万降到 2.4 万(-37%);接口 P95 从 4.1s 降到 2.3s
  • 主动交代指标口径与归因局限,这种“不做看起来很准的指标”的态度在候选人中很少见,能显著提升面试可信度
  • 有线上故障的根因定位与修复动作,不是只写“参与运维”原文:处理过一次因连接池未释放导致的雪崩(重启后加了池的 maxLifetime 与熔断)
  • “全栈”有具体痕迹:后端接口设计、前端交互、K8s 上线三层都能对上号
  • 有开源贡献和个人工具产出,且工具方向(RAG 评测)与岗位强相关,容易成为面试话题原文:向 Milvus 贡献过一个中文文档示例脚本(已合并);个人维护一个 RAG 评测小工具(GitHub 380 star)
劣势与风险
  • 角色模糊开头自述“我负责算法与后端接口”,但项目 3 又写了完整前端开发、K8s 上线与故障处理,三处职责边界互相打架,面试官无法判断哪部分是你真正主责、哪些只是“参与过”
  • 量化缺失项目 3(前端与联调)整段没有任何数字,与项目 1、2 的量化风格严重断层,会被读作“这块是打杂”原文:用 Vue3 + TypeScript 写管理端与对话界面,实现引用定位(点击答案跳转到原文段落)、反馈闭环(采纳/不采纳直接回流成评测集)
  • 技术栈不匹配求职意向是“AI 全栈开发工程师”,但全篇没有任何模型训练/微调/蒸馏的经验,只有模型选型与 API 调用;如果 JD 含模型层职责,这一栏会被判定为偏应用层
  • 项目重复三个“项目”其实是同一个产品的三个切面,简历上呈现出的独立项目数只有 1 个,投递时容易被判定为“项目经历单薄”
  • 时间空档工作经历写到“至今”,但最后一个有明确时间范围的项目停在 2025.03,之后的工作内容在简历上是空白,存在无法解释的时间缺口
  • 表述存疑“100%”和“自研”两个词都没有边界说明,容易被追问或反噬;100% 带出处可能只是“无出处就不输出”的硬约束,未必是能力指标
简历里的基本错误
  • 格式简历正文夹带了“待澄清:”和“(注:口径为……)”这类内部工作笔记口吻,属于写给自己的备注而非对外简历语言,HR 初筛容易读成“这件事没做完”改法:把“待澄清:成本下降里“模型分流”与“语义缓存”各占多少未做严格拆分,只做过一周的分项观察。”从简历中删除,改到“结果”行末尾写成结论式表述,例如:“(成本归因基于一周分项观察,非严格 A/B)”;“(注:口径为人工盲评……)”同样改为括注在数字后:“89%(人工盲评“可直接采用”,n=200)”。
  • 格式同一份简历内数字与单位的间距不统一:项目 1 写“2 分10 秒”(“分”后无空格),其余位置写作“6 分钟”“12 万次”“11k”,排版不齐;三个项目标题行的时间右对齐空格数也不一致改法:统一为“2 分 10 秒”,并把“1) …2023.09–2024.06 / 2) …2024.07–2025.03 / 3) …2023.09–至今”三行时间用同一个制表位或空格数右对齐,保证竖向成列。
需要当面确认的模糊信息
  • “团队 4 人,我负责算法与后端接口”,但项目 3 又写了完整前端与 K8s 上线为什么模糊:缺少分工表:4 人各是什么角色、RAG 链路的解析/切分/检索/重排/合成哪几段代码是你亲手写的、前端是主责还是支援面试时会被这样问:你们这 4 个人具体怎么分工的?从 PDF 解析到 rerank 这条链路,哪几个模块是你一行行写出来的?前端是你主责还是顺手做的?
  • “可采信率从初版 71% 提到 89%”(人工抽检 200 条)为什么模糊:抽样方式、评测人身份、是否盲评、冲突如何裁决、89% 的置信区间都没交代,无法判断这个提升是否稳健面试时会被这样问:这 200 条是怎么抽的?评测的人是谁,跟你有没有利益关系?两个人评不一致的时候怎么算?
  • “重复问题命中率 37%”,而背景里写“约 40% 是重复问题”为什么模糊:37% 的分母是全部请求、还是那 40% 的重复问题?是缓存命中率还是重复问题被识别出的比例?口径不清数字就没有意义面试时会被这样问:这个 37% 的分母到底是什么?是全部请求的 37%,还是 40% 重复问题里被命中了 37%?
  • 针对表格问题做了结构化切分后“命中率明显改善”为什么模糊:唯一一处只有形容词没有数字的结果,恰好是最有技术含量的一处改动面试时会被这样问:表格按行列展开前后,命中率分别是多少?你怎么构造这组对照评测的?
  • 技能栏写了“React(用过)”“PostgreSQL”,但正文三个项目里只出现 Vue3 与 Redis/Milvus为什么模糊:技能栏与项目正文不对应,无法判断是真实使用过还是了解层面面试时会被这样问:React 是在哪个项目里用的?PostgreSQL 里建了哪些表、存什么?为什么选它而不是直接放 Milvus?
  • “向 Milvus 贡献过一个中文文档示例脚本(已合并)”为什么模糊:缺 PR 编号、提交时间、脚本解决的具体问题,无法核实也无法展开聊面试时会被这样问:这个 PR 编号是多少?你改的是文档哪一部分,为什么原示例在中文字体上跑不通?
  • “2022 年 MathorCup 高校数学建模挑战赛 二等奖(三人队,负责建模与代码)”为什么模糊:缺赛题内容、选题规模、二等奖获奖比例、你负责的具体模型面试时会被这样问:当年那道题是什么?二等奖大概什么获奖比例?你负责的模型部分具体做了什么?
  • “接口 P95 从 4.1s 降到 2.3s”为什么模糊:未说明压测条件(并发量、文档长度分布、是否含缓存命中),P95 在两套条件下对比可能不可比面试时会被这样问:这个 P95 是在什么并发和文档长度下测的?缓存命中和未命中的请求是混在一起统计的吗?
模块三

模拟问题

七个阶段,顺序就是真实面试的顺序:先确认简历疑点 → 问项目情况 → 用最多的问题挖技术实现 → 客观题 → 八股 → 开放题 → 方向与规划。 技术题都带一条追问链,轮数不固定,追到能分出候选人高低的地方为止; 有的落到底层概念,有的落到八股。

01

简历前置分析

6 题

面试开场:先把你简历里没写清、对不上、需要当面确认的地方问出来

贡献边界

你的简历里有两块工作:一个是智能文档助手 RAG 链路,一个是模型服务化的成本优化。请用 2 分钟说明这份简历上你最想让面试官看到的一条主线能力是什么?哪些部分是你独立主导、哪些是配合完成的?

简历原文第 9 行
1) 智能文档助手(问答 + 摘要 + 结构化抽取) 2023.09–2024.06

考察点考察候选人对自己简历主线的认知与贡献边界的表达是否清晰、是否夸大

量化结果

简历里"可采信率 71%→89%"和"单均处理时长 6 分钟→2 分10 秒"这两个数字,分别是多大规模样本上、用什么口径测出来的?谁做的抽检?

简历原文第 15 行
- 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的

考察点考察量化指标的口径意识——数字是否真实、可复现、有统计意义

评测

你写"推理成本月均 3.8 万降至 2.4 万(-37%)",但我看你备注过只做过一周分项观察。那这 37% 里语义缓存和小模型分流各自贡献多少?如果被要求给一个可信归因,你会怎么补实验?

简历原文第 18 行
- 背景:高峰期日调用 12 万次,月推理成本 3.8 万元,其中约 40% 是重复问题。

考察点考察候选人对自己结论的严谨度,以及能否设计消融实验做归因

Git 工作流

技能列表里写了 React,但简历没有任何 React 项目。这块你真实的使用程度是什么?如果面试官要求你现场讲一个 React 的并发/状态管理实践,你能讲出来吗?

挂靠简历:技能:React(仅出现在技能列表,无项目佐证)

考察点验证简历技能项的真实性,考察是否诚实且有可迁移的技术理解

预训练与微调

岗位是算法工程师,但你简历里看不到模型训练或微调的痕迹,主要是大模型应用与工程链路。如果面试官问"为什么不调模型而做 RAG",你的判断依据是什么?这个选择在什么情况下会失效?

挂靠简历:简历未见模型训练/微调类工作,主要是大模型应用与工程链路

考察点考察技术选型的判断力,以及是否清楚 RAG 与微调的适用边界

线上故障排查

前端与联调这块,除了"单用户限流 10 QPS",你还能给面试官提供哪些数字或事实来证明这块工作的价值?当时页面和接口的实际表现是什么样的?

简历原文第 27 行
- 与运维一起把服务上到自建 K8s,写了健康检查与限流(单用户 10 QPS),处理过一次因连接池

考察点考察候选人能否对自己的工作做量化,也检验其是否真的关心上线后的效果

02

项目情况了解

6 题

先把你写过的项目问清楚:做什么、你负责哪块、为什么做、结果如何

STAR 结构

你在「智能文档助手(问答 + 摘要 + 结构化抽取)」项目里写「客服团队每天处理 2000+ 份工单附件与合同,人工翻找条款平均耗时 6 分钟/单」。请说明:这个项目解决的核心问题是什么,整条链路你负责哪一段,哪些不是你做的?

简历原文第 10 行
- 背景:客服团队每天处理 2000+ 份工单附件与合同,人工翻找条款平均耗时 6 分钟/单。

考察点考察能否把业务问题、端到端链路与个人贡献边界讲清楚,判断是真做过还是挂名。

缓存策略

在「模型服务化与成本优化」里你写「高峰期日调用 12 万次,月推理成本 3.8 万元,其中约 40% 是重复问题」。请说明:这 40% 是怎么统计出来的?你做的语义缓存、小模型分流、两段式摘要三项优化,分别打的是哪一块成本?

简历原文第 18 行
- 背景:高峰期日调用 12 万次,月推理成本 3.8 万元,其中约 40% 是重复问题。

考察点考察成本优化的问题定位方式(数据从哪来)以及措施与问题的对应关系,验证数字不是拍脑袋。

线上故障排查

在「前端与联调」里你写「与运维把服务上到自建 K8s,写健康检查与限流,处理连接池未释放导致的雪崩」。请说明:当时的现象是什么、你怎么一步步定位到是连接池未释放、最后做了哪几处修改?

简历原文第 27 行
- 与运维一起把服务上到自建 K8s,写了健康检查与限流(单用户 10 QPS),处理过一次因连接池

考察点考察线上故障排查的路径与复盘能力,看是真正经历过雪崩还是只看过文章。

贡献边界

你写「向 Milvus 贡献中文文档示例脚本;个人维护 RAG 评测小工具」——请说明:Milvus 那个 PR 具体改了什么、评审过程是怎样的?你那个评测小工具评测的是什么指标、380 star 主要来自什么?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察开源贡献的真实性与个人工具的价值判断,防止用 star 数代替真实能力。

量化结果

简历里两个核心数字是「单均处理时长 6 分钟降至 2 分10 秒」和「人工抽检可采信率 71%→89%」。请分别说明:这两个指标怎么定义、怎么测量的?抽检了多少条、由谁判定?

简历原文第 15 行
- 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的

考察点考察量化结果的真实性与口径,是面试官验证简历含金量最直接的一问。

RAG 全链路

回到「智能文档助手」,面对 2000+ 份工单和合同,为什么最后选的是 RAG,而不是写规则/模板抽取条款,或者直接微调一个小模型来做抽取?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察技术选型是否有依据,还是默认“RAG 就是对的”。

03

项目技术深挖

9 题

本报告的重心:沿项目里真实用到的技术逐层追问「实现是怎么做的」

追问 3 轮 混合检索 / Rerank / 检索评测

你在「智能文档助手」里做了向量+BM25 多路召回与重排,请说明两路结果具体是怎么融合的:加权、RRF,还是各自召回后统一丢给 reranker?各路 topK 和权重是怎么定下来的?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察混合检索的融合方案是真实实现还是名词堆砌,以及参数是否用评测集定过。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖真实参数取值与延迟-效果的折中过程

    RRF 的 k、两路各自 topK、rerank 后的最终 topN 你分别设成多少?改动这几个参数时 recall 和端到端 P95 各有什么变化?

    • 召回 topK 常见 20~50,rerank 输入控制在 20~50,最终 topN 3~5
    • RRF 的 k 越大,排名差异被抹平得越多,偏向两路都靠前的文档
    • 以 recall@k 与端到端 P95 两条曲线对照,而不是单看效果
  2. 3
    答一半挖边界与失效场景,判断是否真跑过对比

    什么情况下 hybrid 反而不如纯向量?比如用户问的是口语化长问句,BM25 会表现成什么样?

    • 口语化、同义改写、错别字多的查询,BM25 词面不匹配,命中很差
    • 专有名词、编号、型号、合同条款号,纯向量经常召不回
    • 合理做法是按查询类型开关或调整两路权重,必要时加 query 改写
  3. 4
    一律会问落到检索的经典八股,验证基础是否扎实落到八股

    那说说 BM25 的公式:IDF 和文档长度归一化分别起什么作用?k1、b 这两个参数控制什么?

    • BM25 = Σ IDF(qi) · tf 饱和项 · 文档长度归一化项
    • IDF 压低高频无区分度词的权重,提升稀有词权重
    • k1 控制词频饱和速度,b 控制长度归一化强度(0 不归一化,1 完全归一化)
    • 本质是词面精确匹配,语义泛化能力弱,这是它需要和向量互补的原因
追问 3 轮 语义缓存 / Redis 使用场景 / 缓存策略

「模型服务化与成本优化」里你用了语义缓存,条件是 embedding 相似度>0.95 且长度差<15 字。请说明这两个阈值是怎么定出来的,误命中(不同问题被判成同一个)你怎么发现和控制?

挂靠简历:模型服务化与成本优化:embedding 相似度>0.95 且长度差<15 字命中

考察点考察阈值是用数据标定的还是拍脑袋,以及是否有误命中风险的意识。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追工程落地细节

    缓存具体怎么存?Redis 里用什么结构、TTL 设多久、容量上限到了怎么淘汰?

    • 常见是 key = 归一化 query 或其 embedding,value = 答案 + 出处 + 原问句
    • 相似检索要么用向量库自带能力,要么小规模场景直接遍历/局部索引
    • TTL 按文档更新频率定,容量满走 LRU/LFU 淘汰
  2. 3
    答一半挖版本漂移与缓存一致性

    如果 embedding 模型换了一个版本,或者文档库整体换了领域,之前缓存的语义空间就变了,你会怎么处理?

    • 缓存 key 里带 embedding 模型版本,换模型即整体失效或双写灰度
    • 灰度期新旧缓存并存,按命中率与误命中率对比后再切
    • 文档更新走主动失效(按 doc id 反查相关缓存)
  3. 4
    一律会问落到 Redis 经典八股落到八股

    Redis 常用的数据结构有哪些?过期删除策略和内存淘汰策略分别说说。

    • string / hash / list / set / zset,另有 bitmap、HyperLogLog、stream
    • 过期删除:惰性删除 + 定期抽样删除
    • 内存淘汰:noeviction、allkeys-LRU/LFU、volatile-LRU/LFU、random、TTL
    • 缓存与数据库一致性常用 Cache Aside + 过期兜底
追问 3 轮 上下文窗口 / 文档切分 / 模型分流

长文档摘要你改成了两段式,单次输入 token 从 11k 降到 3.2k。请说明两段式具体是哪两段、每段做什么,以及怎么确认摘要质量没有因为压缩而下降?

简历原文第 21 行
把长文档摘要改成"分段摘要 + 合并摘要"两段式,单次输入 token 从平均 11k 降到 3.2k。

考察点考察两段式拆分是否理解本质(分段摘要+合并),以及有没有配套的质量口径。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追信息保真与幻觉控制

    分段摘要往上合并的时候,怎么防止细节在中间层被丢掉或被模型编造?

    • 要求局部摘要保留原文数字/实体,并附出来源段落 id
    • 合并阶段只做压缩和去重,不允许引入新事实
    • 抽查“原文有、摘要无”和“摘要无出处”两类错误
  2. 3
    答一半挖模型分流的判断依据

    摘要类任务你做了小模型分流,为什么这类任务可以分给更小的模型?什么情况下不能分?

    • 摘要是信息抽取+压缩,模式稳定,小模型够用
    • 涉及条款解释、推理、跨段落计算的任务不能降级
    • 分流要有兜底:小模型输出不合格或置信度低时回退大模型
  3. 4
    一律会问落到 Transformer 与上下文窗口的经典八股落到八股

    为什么要控制上下文长度?长上下文下自注意力的计算复杂度是多少,position 外推又会带来什么问题?

    • 自注意力是 O(n²) 的注意力矩阵,长上下文计算与显存都吃紧
    • KV Cache 显存随序列长度线性增长,长上下文下常成为瓶颈
    • 超出训练长度后位置编码需外推,效果会明显衰减
    • 实践上常靠分段、检索压缩、滑窗来规避
追问 3 轮 文档切分 / 向量化 / 向量索引

你在「智能文档助手」里自研了 PDF 版式还原,并把表格按行列展开再切分。请说明版式还原相比直接抽文本解决了什么问题,表格展开后的 chunk 长什么样,chunk 大小和 overlap 又怎么定?

简历原文第 11 行
- 做法:搭 RAG 链路——PDF 解析(自研版式还原,处理表格与页眉页脚)、按语义切分、

考察点考察文档解析与切分这一环的实际处理细节,识别是否只是调库。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖真实参数与观察到的现象

    chunk 大小和 overlap 你实际用的值是多少?往大调、往小调分别观察到什么变化?

    • 给出具体取值区间及依据(文档类型、答案平均长度)
    • chunk 太大:命中不精准、噪声挤占上下文;太小:语义割裂、答不全
    • overlap 用来防止关键句被边界切断,但会增加存储与重复召回
  2. 3
    答一半挖排障顺序与归因方法

    如果检索总是召回“看起来相关但答非所问”的片段,你怎么判断是切分问题还是排序问题?

    • 先看正确片段是否被召回:没进候选是召回/切分问题,进了但排后面是排序问题
    • 人工检查召回片段的完整性,判断是否被切碎
    • 用 recall@k 与重排后 nDCG 分解定位
  3. 4
    一律会问落到向量检索索引的经典八股落到八股

    Milvus 这类向量库常用 HNSW 做近似最近邻,它的分层结构和 M、ef 参数大概是什么作用?为什么不全用暴力检索?

    • HNSW 是多层可导航小世界图,上层稀疏做粗跳、下层稠密做精搜
    • M 控制每个节点连边数(图密度),ef 控制检索时的候选队列大小,越大越准越慢
    • 暴力检索是 O(N·d) 精确但不可扩展;ANN 用少量精度换数量级的速度
    • 索引选择还要看数据规模、过滤条件和内存
追问 3 轮 embedding 与 rerank 模型选型 / Rerank / 对比学习

「智能文档助手」里你选了 bge-base 做向量化、bge-reranker 做重排。请说明选型依据:为什么是 base 而不是 large?加上 cross-encoder 重排后延迟增加多少,你怎么权衡?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察 embedding/rerank 选型是否有实验依据,以及是否理解双塔与交叉编码器的代价差异。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追效果-延迟拐点的实测

    重排候选数你设成多少?从 20 加到 100 时,nDCG 和 P95 各自怎么变,你选的点在哪?

    • 候选数越大召回上限越高,但延迟近似线性增长
    • 通常 20~50 是收益拐点,再加收益递减
    • 用同一评测集画 nDCG-candidates 曲线,结合 SLO 取点
  2. 3
    答一半挖结构原理与可用性边界

    双塔和交叉编码器在结构上差在哪?为什么交叉编码器不能拿来做全库检索?

    • 双塔分别编码 query 和 doc,doc 向量可预先建索引
    • 交叉编码器把 query 和 doc 拼接后一起过模型,能建模细粒度交互但每个 doc 都要算一次
    • 所以交叉编码器只适合对少量候选做精排,无法预计算
  3. 4
    一律会问落到 embedding 训练的经典八股落到八股

    那双塔检索模型一般怎么训练?对比学习里的 in-batch negative 和 hard negative 分别起什么作用?

    • 常用对比学习目标(InfoNCE / 带温度的双塔相似度)
    • 正样本来自标题-正文、问答对、点击日志等弱/强监督
    • in-batch negative 复用同批次其他样本,成本低但容易太简单
    • hard negative 提升判别边界,但挖掘过头会引入假负例伤害训练
追问 3 轮 并发与异步 / 消息队列 / 高并发设计

你用 FastAPI 提供接口、Celery 异步解析文档。请把一次上传到解析完成的链路讲完整:任务在哪排队、状态怎么回传前端、任务失败或重复投递怎么处理?

简历原文第 14 行
后端用 FastAPI 提供 /ask /upload /feedback 三个接口,Celery 处理异步解析,Redis 做任务队列与结果缓存。

考察点考察异步任务链路的完整性与幂等/重试这类生产细节。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追容量与并发控制

    Redis 做 broker 时任务积压怎么处理?worker 并发数、prefetch 你根据什么定?

    • 先看队列长度与任务平均耗时,判断是生产过快还是消费太慢
    • worker 并发受下游(解析 CPU、向量化、DB 连接)限制,不能只看 broker
    • prefetch 过大容易导致任务分配不均,长任务场景常调小
  2. 3
    答一半挖投递语义与幂等的因果关系

    Celery 的 ack 是在任务开始时还是完成时?worker 崩溃后任务会丢还是会重复执行?

    • 默认 late ack(完成后再 ack)保证至少一次,代价是可能重复执行
    • early ack 会丢任务,一般不用于关键链路
    • 因此必须靠任务键做幂等,重复执行结果一致
  3. 4
    一律会问落到消息队列经典八股落到八股

    消息队列的投递语义 at most once / at least once / exactly once 分别是什么?要实现消费幂等通常怎么做?

    • at most once 可能丢、at least once 可能重、exactly once 一般靠“至少一次 + 幂等”实现
    • 幂等手段:唯一业务键去重表、状态机(只允许从某状态迁移)、去重缓存
    • ack 时机决定了会不会重复或丢,二者必须配套设计
追问 3 轮 线上故障排查 / 限流降级 / 高并发设计

「前端与联调」里你提到处理了连接池未释放导致的雪崩,加了池的 maxLifetime 与熔断。请还原这次故障:现象是什么、怎么定位到连接池没释放、最后改了哪些地方?

简历原文第 28 行
未释放导致的雪崩(重启后加了池的 maxLifetime 与熔断)。

考察点考察线上故障排查的真实经验与根因分析能力,而不是只报修复动作。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖熔断参数与降级行为

    熔断的失败率阈值、统计窗口、半开策略你怎么定的?熔断期间新请求怎么处理?

    • 阈值按可接受错误率定,窗口要覆盖足够请求数避免被单次抖动触发
    • 熔断期间走快速失败或降级返回值,不再占用连接
    • 半开只放少量请求探测,成功率达到条件才恢复
  2. 3
    答一半挖参数背后的机制与副作用

    为什么设 maxLifetime 能缓解这个问题?如果根因其实是慢查询,maxLifetime 设小会带来什么副作用?

    • maxLifetime 让池主动淘汰老连接,打破“被长期占用”的僵局
    • 但慢查询场景下频繁重建连接会增加握手与数据库压力
    • 所以它只是缓解手段,根因还得回到释放逻辑与慢查询治理
  3. 4
    一律会问落到 K8s 健康检查经典八股落到八股

    K8s 里 liveness 和 readiness probe 有什么区别?把依赖健康检查错配到 liveness 会有什么后果?

    • readiness 决定是否把流量摘进来/摘出去,失败只影响流量
    • liveness 决定是否重启容器,失败会导致反复重启
    • 把下游依赖放进 liveness,会让依赖抖动引发大规模重启,放大故障
追问 3 轮 评测 / 幻觉治理 / 可观测性

「智能文档助手」里可采信率从 71% 提到 89%、答案带出处比例 100%。请说明这两个指标的口径:可采信率是谁判的、抽检多少样本、判定标准是什么?出处 100% 又是怎么强制的?

简历原文第 15 行
- 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的

考察点考察指标定义是否严谨、是否知道“带出处”不等于“答案正确”。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追评测集构建的严谨度

    抽检样本怎么抽的?抽多少条?抽样偏差你怎么避免?

    • 按业务类型/文档类型分层抽样,覆盖高频与长尾
    • 样本量要能支撑置信区间,不能只抽几十条
    • 避免只抽容易样本,定期补充新用例与历史踩坑用例
  2. 3
    答一半挖指标提升的归因能力

    从 71% 到 89%,具体是哪几类错误被修掉的?分别对应链路上的哪个改动?

    • 按错误类型归因:召回不到、检索到但答错、编造事实、引用错位
    • 召回问题对应混合检索/切分调整,答错对应重排与上下文组织
    • 编造对应强制引用与拒答策略
  3. 4
    一律会问落到幻觉治理经典八股落到八股

    大模型幻觉的常见成因有哪些?RAG 场景下有哪些通用缓解手段?

    • 成因:预训练知识过时/缺失、上下文噪声与冲突、长上下文中间信息丢失、解码随机性
    • 缓解:检索增强并强制引用、约束“只依据上下文回答”、无据拒答、降低温度
    • 后置校验:答案与引用一致性检查、事实核验、必要时二次检索
    • 评测侧要有固定的幻觉/可采信评测集
追问 3 轮 Prompt 工程与结构化输出 / 评测

「智能文档助手」的第三个能力是结构化抽取。请说明抽取字段的 schema 怎么定,以及怎么保证大模型稳定输出合法 JSON(温度、格式约束、校验与重试分别怎么做)?

简历原文第 9 行
1) 智能文档助手(问答 + 摘要 + 结构化抽取) 2023.09–2024.06

考察点考察结构化输出的工程稳定性,而不只是会写提示词。

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对追评测口径

    抽取结果你用什么指标评?字段级准确率和整条记录完全正确的比例,你更看哪个?

    • 字段级准确率定位到具体字段问题,整条准确率反映端到端可用性
    • 业务上先保障关键字段(金额、日期、甲乙方)的准确率
    • 要区分漏抽(为空)和抽错(值不对)
  2. 3
    答一半挖业务规则与模型能力的边界

    同一字段在文档多处出现不同数值(比如多个金额),你的归一化和冲突消解规则是什么?

    • 保留出处(页码/条款),让模型带位置输出而不是只给值
    • 按业务规则消解,如取“合同总额”对应字段而非任意出现的金额
    • 无法消解时输出候选并标注冲突,而不是让模型瞎选
  3. 4
    一律会问落到采样与解码的经典八股落到八股

    temperature、top-p、top-k 分别控制什么?为什么结构化抽取通常要求低温?

    • temperature 缩放 logits 调整分布平坦度
    • top-k 截断到概率最高的 k 个 token,top-p 截断到累计概率达 p 的最小集合
    • 低温让分布更尖锐,输出更确定、格式更稳,代价是多样性下降
    • 格式约束场景常配合贪心/受限解码
04

技术客观题

5 题

针对项目里提到的技术出客观题,并给出较优参考答案

追问 3 轮 混合检索 / Rerank

你在「智能文档助手」里做了向量+BM25 多路召回与重排。请说明:这两路召回的结果具体怎么融合成最终候选集(加权分数、RRF 还是统一重排),以及为什么选这种融合方式?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察混合检索的融合策略选择与其背后的排序原理,能否说清而不是只报『我用了混合检索』

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖参数配置与调参依据,确认是真配过还是背概念

    RRF 里那个 k 你取多少?两路各召回多少条、最终进 prompt 几条?这个配比是怎么调出来的?

    • k 常用 60,k 越大排名差异被抹得越平
    • 两路各召回 20–50,进 prompt 3–5 条
    • 配比在固定评测集上逐档对比 recall@k / nDCG,而不是拍脑袋
  2. 3
    一律会问挖边界认知与排障经验

    什么情况下混合检索反而比纯向量差?失效边界在哪?

    • 权重失衡时关键词噪声挤掉语义好的候选
    • 短 query 关键词命中稀疏,BM25 几乎不贡献
    • 语料重复度高时同分排序不稳
    • rerank 不到位时坏候选污染生成
  3. 4
    一律会问从项目做法落到向量检索经典八股落到八股

    你在 Milvus 里用的哪种索引和度量方式?HNSW 和 IVF_FLAT 的区别是什么?为什么文本 embedding 常配余弦相似度而不是欧氏距离?

    • HNSW 图索引召回高、内存大;IVF_FLAT 是倒排聚类,需调 nprobe 换召回
    • PQ 类索引压缩省内存但损精度
    • embedding 归一化后余弦与内积等价;内积对向量模长敏感
    • COSINE / IP / L2 三种度量要与索引匹配,建库后不宜随意更换
追问 3 轮 缓存策略 / 向量化

你在「模型服务化与成本优化」里做了语义缓存,命中条件是 embedding 相似度>0.95 且长度差<15 字。请说明:0.95 这个阈值和『长度差』这个附加条件分别解决了什么问题?误命中会带来什么后果、你怎么防?

简历原文第 19 行
- 做法:加语义缓存(embedding 相似度 > 0.95 且问题长度差 < 15 字则直接命中缓存),

考察点考察语义缓存的阈值取舍与误命中风险意识——缓存命中率不是越高越好

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖缓存工程细节与一致性处理

    缓存的 key 具体怎么设计?多租户、不同模型版本、prompt 改了以后缓存怎么失效?

    • key = 归一化 query embedding + 意图/模型版本/租户标识
    • prompt 或模型变更时整体失效或用版本号隔离命名空间
    • 向量索引存 key,值存答案 + 出处,配 TTL 与容量淘汰
  2. 3
    一律会问挖边界与适用条件

    什么场景下语义缓存会失效甚至帮倒忙?

    • 问句长尾分散、重复度低时命中率很低
    • 带会话上下文或个性化的提问不能缓存
    • 答案随时间变化(价格、库存、政策)的问答缓存风险高
  3. 4
    一律会问从语义缓存落到 embedding 基础八股落到八股

    文本 embedding 是怎么训出来的?对比学习里的 InfoNCE 在做什么?余弦相似度和点积的区别是什么、为什么用之前常要先归一化?

    • 双塔结构 + 对比学习,正例来自同句增强或问答对,负例为 batch 内其他样本
    • InfoNCE 拉近正例、推远负例,温度系数控制分布陡峭度
    • 归一化后余弦相似度等价于点积;点积对向量模长敏感会引入长度偏置
    • 相似度阈值是相对量,不同模型分布不同,需要按本模型重新标定
追问 3 轮 上下文窗口 / 批处理

你在成本优化里把长文档摘要改成两段式,单次输入 token 从 11k 降到 3.2k。请说明这两段各自做什么、怎么切,以及为什么这样能降 token 而不是在丢信息?

简历原文第 21 行
把长文档摘要改成"分段摘要 + 合并摘要"两段式,单次输入 token 从平均 11k 降到 3.2k。

考察点考察是否理解 map-reduce 式摘要的省 token 来自何处,以及信息损失如何兜底

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖参数权衡与实测依据

    第一段的输出粒度怎么定?太长第二段还会超,太短关键信息没了,你怎么权衡?

    • 按块大小给压缩比(如每块 2k token 压到 200–300 token)
    • 块间保留标题/小节上下文避免语义割裂
    • 用评测集逐档调压缩比,看关键点覆盖率与最终 token 两条曲线
  2. 3
    一律会问挖边界与失败场景

    什么类型的文档用两段式反而更差?

    • 结论依赖跨章节串联的论证性文档,压缩后逻辑链断裂
    • 表格密集/数字敏感的合同条款,压缩易丢关键数字
    • 短文档(低于阈值)没必要两段式,直接单次更快更准
  3. 4
    一律会问落到长上下文与注意力基础八股落到八股

    Transformer 自注意力的计算复杂度是多少?上下文窗口受什么限制,位置编码在这里起什么作用?

    • 自注意力时间与空间复杂度随序列长度呈平方级增长
    • KV Cache 显存随序列长度与 batch 线性增长,是长上下文的主要瓶颈
    • 自注意力本身无序,位置编码注入顺序信息;外推能力决定超长输入的衰减
    • 长上下文不等于有效上下文,中间位置信息容易被忽略
追问 3 轮 文档切分 / 结构化输出

你在「智能文档助手」里提到『表格按行列展开再切分』。请说明:一张复杂表格具体展开成什么形式?表头、合并单元格、跨页表格怎么处理?为什么不能直接按字符长度切?

挂靠简历:表格按行列展开再切分

考察点考察对结构化文档切分的处理细节,判断是否真做过版式还原而不是调库了事

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖切分粒度与 chunk 大小权衡

    展开后的行你按什么粒度合 chunk?太碎和太大分别会怎样?

    • 同表内相邻行合到同一 chunk,保留表级上下文
    • chunk 过小检索精准但答不全,过大噪声多但上下文完整
    • 按表题目/章节边界切,比定长切更稳
  2. 3
    一律会问挖异常处理与工程兜底

    跨页大表、嵌套表这种极端情况你实际怎么兜底?

    • 按表头一致性做跨页合并,合并失败则降级为文本块并标注不完整
    • 嵌套表拆成独立子表分别展开
    • 兜底策略:解析不了就整块保留原图/原文进入人工复核队列
  3. 4
    一律会问落到切分经典八股落到八股

    文档切分整体上,chunk 大小和重叠怎么定?为什么按语义边界切优于定长硬切?

    • 语义边界(段落、标题、句子)切分保证单块语义完整
    • 重叠用于防止关键句被拦腰截断,通常取 chunk 的 10%–20%
    • 参数按文档类型调,并用检索评测集验证而非拍脑袋

    对应题库题卡:RAG 的完整链路你会怎么搭?文档切分这一步,你会怎么定 chunk 大小和重叠?为什么?

追问 3 轮 Rerank / 向量化

你用 bge-base 做向量化、bge-reranker 做重排。请说明两者在结构上有什么差别,为什么召回阶段用双塔、重排阶段用交叉编码器?rerank 的候选数你是怎么定的?

简历原文第 19 行
- 做法:加语义缓存(embedding 相似度 > 0.95 且问题长度差 < 15 字则直接命中缓存),

考察点考察对召回-重排两阶段范式的理解,能否讲清效率与精度的取舍

面试官会这样一层层往下追,共 3 轮
  1. 2
    答对挖真实调参经验与量化结论

    rerank 的候选数你是取 20 还是 50?上线后实测延迟增加多少、精度提升多少?

    • 候选数从 20→50,召回上限提升但延迟近似线性增加
    • 用离线评测的 nDCG/命中率与线上 P95 双曲线找拐点
    • 延迟紧张时优先加缓存或批推理,而不是砍到损害召回
  2. 3
    一律会问挖环节定位能力

    什么情况下加 rerank 也救不回来?

    • 候选集里根本没有正确文档,属于切分或 embedding 适配问题
    • chunk 被切碎导致单块信息不完整,重排无从下手
    • query 与文档用词差距大且没有查询改写,召回源头就错了
  3. 4
    一律会问落到检索模型结构基础八股落到八股

    双塔模型和交叉编码器在训练目标和推理复杂度上分别是什么?为什么交叉编码器不能直接用来建向量索引?

    • 双塔多用对比学习(正负样本 + 温度系数),可离线向量化建 ANN 索引
    • 交叉编码器常做 pointwise/pairwise 排序训练,输出相关性分数
    • 交叉编码器必须 query-doc 成对前向,无法预先算好 doc 向量,故不能建索引
    • 两阶段本质是用低成本的粗排换候选规模,用高成本的精排换排序质量
05

对应八股

6 题

由上面的技术检索到的经典基础题(八股)

向量化 / 混合检索

你的 RAG 链路把向量化结果存进了 Milvus。请说明:Milvus 里常用的索引类型有哪些、各自的取舍是什么?度量方式 COSINE / IP / L2 有什么差别,怎么选?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察向量数据库索引与度量的硬知识,判断是否只是调 API 建了个库

向量化 / embedding 与 rerank 模型选型

你用 bge-base 做向量化入库。请说明:这类 embedding 模型的输出向量怎么取(池化方式)、为什么通常要做 L2 归一化、中文检索时 query 侧和 doc 侧的处理是否要一样?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察 embedding 使用的实操细节,这些细节直接决定检索质量

混合检索

你在智能文档助手里把 BM25 和向量检索并行使用。请说明:BM25 相比朴素 TF-IDF 改了什么?k1 和 b 两个参数分别控制什么?为什么 BM25 特別擅长召回专有名词和型号?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察关键词检索的经典原理,判断是否理解 BM25 而不是当作黑盒调包

缓存策略 / 限流降级 / 线上故障排查

你在前端与联调里提到『处理连接池未释放导致的雪崩』。请说明:这里说的服务雪崩是怎么形成的?它和缓存雪崩、缓存穿透、缓存击穿分别是什么区别?

挂靠简历:处理连接池未释放导致的雪崩

考察点考察故障归因能力,能否把线上事故与经典缓存/服务稳定性问题区分清楚

Docker / 线上故障排查

你把服务上到自建 K8s 并写了健康检查。请说明:liveness probe 和 readiness probe 的职责差别是什么?配错 probe 会引发什么后果?

挂靠简历:写健康检查与限流

考察点考察容器编排的基础认知,判断是否只是让运维代劳

并发与异步 / 消息队列

你用 FastAPI 提供接口、Celery 做异步解析。请说明:FastAPI 里 async def 和 def 路由的执行方式有什么差别?在 async def 里调用同步阻塞的解析代码会发生什么?为什么这类任务要交给 Celery?

简历原文第 14 行
后端用 FastAPI 提供 /ask /upload /feedback 三个接口,Celery 处理异步解析,Redis 做任务队列与结果缓存。

考察点考察异步模型的理解,判断是否踩过『async 里跑同步代码』这个经典坑

06

开放性技术设计题

5 题

基于项目或简历内容的开放性设计题,考方案取舍,没有唯一答案

幻觉治理、评测、混合检索、Rerank

你在「智能文档助手」里把人工抽检可采信率从 71% 提到 89%,但同时答案带出处比例已经是 100%。如果业务要求继续推到 95%,你打算先动链路的哪一环?怎么衡量每一次改动是否真的有效?

简历原文第 15 行
- 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的

考察点考察能否对 RAG 的失败样本做归因分类,并给出带评测闭环的优化优先级,而不是拍脑袋换模型。

缓存策略、embedding、可观测性

你在「模型服务化与成本优化」里用的语义缓存规则是 embedding 相似度 > 0.95 且长度差 < 15 字命。如果让你重做一版更鲁棒的缓存,你会怎么设计?哪些类型的问题你坚决不允许命中缓存?

简历原文第 19 行
- 做法:加语义缓存(embedding 相似度 > 0.95 且问题长度差 < 15 字则直接命中缓存),

考察点考察缓存策略的边界设计意识——相似不等于等价,以及能否识别高风险命中的问题类型。

性能剖析、批处理、高并发设计

你提到单均处理时长从 6 分钟降到 2 分 10 秒、接口 P95 从 4.1s 降到 2.3s。如果要再压一版把在线问答的 P95 做到 1s 以内,你会怎么拆这条链路的延迟预算?

简历原文第 15 行
- 结果:上线后客服单均处理时长从 6 分钟降到 2 分10 秒;答案带出处比例 100%,人工抽检 200 条的

考察点考察端到端性能拆解能力——能不能先测量分段耗时再分配目标,并区分在线请求与异步任务。

Prompt 工程与结构化输出、评测、幻觉治理

你在智能文档助手里把合同表格「按行列展开再切分」。如果业务要求从合同里稳定抽出金额、付款节点、违约条款这类字段,你怎么设计端到端的结构化抽取方案?字段准确率怎么证明?

挂靠简历:表格按行列展开再切分

考察点考察结构化抽取的工程完整度——schema 约束、校验回退、字段级评测是否成体系。

评测 harness、评测、可观测性

你个人维护的 RAG 评测小工具拿了 380 star。如果公司要把类似能力做成每天跑、能卡住上线门禁的评测平台,你会怎么设计?以及怎么防止评测集被优化到过拟合?

简历原文第 35 行
- 开源:向 Milvus 贡献过一个中文文档示例脚本(已合并);个人维护一个 RAG 评测小工具(GitHub 380 star)。

考察点考察评测体系的工程化设计,以及是否有防过拟合、防指标自嗨的意识。

07

方向选择与职业规划

6 题

技术方向的选择依据、职业规划与长期打算

职业规划、贡献边界

你在智能文档助手里同时承担「算法与后端接口」两条线。往后一年你更想往哪条深挖?请结合你做过的语义缓存、检索与重排、成本优化这些实际产出,说说你的判断依据。

挂靠简历:角色:算法与后端接口

考察点考察是否有清晰的自我定位与取舍逻辑,而不是项目里有什么就做什么。

SFT、LoRA、预训练与微调、评测

这个岗位是算法工程师,但你的简历集中在 RAG 全链路与工程落地,没有训练或微调类产出。如果给你三个月和一份领域语料,你的第一版微调计划是什么?以及什么情况下你会判断该微调、什么情况下继续走 RAG 和提示词?

简历原文第 19 行
- 做法:加语义缓存(embedding 相似度 > 0.95 且问题长度差 < 15 字则直接命中缓存),

考察点考察是否正视自己的能力边界,以及补短板的路径是否可执行、判断边界是否清楚。

职业规划、技术方向选择

你的技术栈横跨 RAG 全链路、FastAPI/Celery 服务化、Vue3 管理端和自建 K8s 部署。你怎么判断「AI 全栈」在你的长期规划里是过渡还是主线?未来三年你打算怎么分层推进?

简历原文第 14 行
后端用 FastAPI 提供 /ask /upload /feedback 三个接口,Celery 处理异步解析,Redis 做任务队列与结果缓存。

考察点考察方向判断是否具体、有阶段目标,而不是跟风谈趋势。

量化结果、评测、成本与延迟取舍

你在模型服务化里把推理成本从月均 3.8 万降到 2.4 万,但你自己也提到没有拆分语义缓存与模型分流各自的贡献。往后遇到成本和效果的冲突,你会怎么定优先级?归因怎么才能做扎实?

简历原文第 22 行
- 结果:重复问题命中率 37%,推理成本从月均 3.8 万降到 2.4 万(-37%);接口 P95 从 4.1s 降到 2.3s。

考察点考察实验设计与归因意识,以及能否把成本问题放进业务价值里判断。

职业规划、团队协作

你向 Milvus 贡献过中文文档示例脚本,个人维护的 RAG 评测小工具也有 380 star。开源在你接下来的职业规划里扮演什么角色?你打算怎么延续,而不只是刷 star?

简历原文第 12 行
bge-base 向量化入 Milvus、多路召回(向量 + BM25)+ bge-reranker 重排、大模型合成答案并给出出处。

考察点考察开源投入是否有明确目的与方法论沉淀,而不是简历装饰。

职业规划、技术方向选择

你的技能列表里同时写了 Vue3 和 React,但项目里只有 Vue3 + TypeScript 的管理端与对话界面。如果目标岗位要求前端框架选型能力,你会怎么补这一块?以后做 AI 产品的界面,你按什么标准选框架?

简历原文第 25 行
- 用 Vue3 + TypeScript 写管理端与对话界面,实现引用定位(点击答案跳转到原文段落)、

考察点考察技能自我认知是否诚实,以及技术选型是否有判断标准而非凭熟悉度。

模块四

完整模拟面试问答

深度版专享

前三个模块给你的是题目与依据;这一模块把它们组织成一场真的面试: 面试官最可能问的问题、按真实顺序推进,每问都带一份可以照着组织语言的 标准参考答案。顺序与上面七个阶段一致。

45 分钟27 问问答7 个阶段全覆盖
面试官

简历我看过了,两条线挺清楚:前面是「智能文档助手」的 RAG 全链路,后面是模型服务化和成本优化。今天大概 45 分钟,我们从前到后走一遍,中间我会随时打断问细节。有不确定的地方直接说不确定,我更想看你的判断过程,不用硬凑。

01

简历前置分析

3 问
面试官

你简历上这两段其实是同一条链路的两头——「智能文档助手」是主干,「模型服务化与成本优化」是它的下游。如果只允许你挑一个细讲,你挑哪个?另一个里有什么结论是可以直接迁移过去的?

参考回答

我挑「智能文档助手」。因为它是从解析、切分、召回、重排到合成和接口的完整链路,成本那块本质上是它的下游产物,脱离主干讲成本不好讲清楚。可迁移的结论有三条:一是路由思想,把任务按难度分流到不同模型,这个在检索、抽取、摘要上都能用;二是分段处理,长文档两段式摘要和表格按行列展开,都是把「一次处理不完的东西」拆成可控颗粒;三是口径意识,成本这类数字必须先说清怎么统计的,否则优化无从验证。

面试官看什么能否明确取舍并给出可迁移的方法论,而不是把两个项目平行罗列 挂靠简历:负责公司内部"智能文档助手"从模型选型到对外服务的全链路开发,团队 4 人,我负责算法与后端接口。
面试官

你在「可采信率 71%→89%」后面专门加了个括号说明口径是人工盲评、不是自动指标。这句话是你主动加的,还是被要求加的?为什么要在简历里写这种自我限制的话?

参考回答

是我主动加的。原因很直接:这种提升幅度的数字如果不写口径,面试官第一反应一定会追问,而且很容易被默认成自动指标拿去和别家对比,那对我反而不利。写清楚「人工盲评、是否可直接采用」,等于提前把边界划出来,讨论就能直接进入方法和样本量,而不是先花五分钟澄清数字含义。另外我确实有个习惯,写周报和文档时会把口径和边界写清楚,不做看起来很准的指标,这句话算是这个习惯的延伸。

面试官看什么能否说明主动标注口径的动机,体现对指标可信度的自觉 挂靠简历:(注:口径为人工盲评"答案是否可直接采用",非自动指标)
面试官

这里有个小矛盾:你写「团队 4 人,我负责算法与后端接口」,但下面又写了前端与联调、K8s 上线、连接池雪崩。到底哪些是你主导、哪些是你配合?我不想听到全是你的。

参考回答

我分一下。算法侧是我的主责,包括解析后的切分策略、召回重排的选型、合成答案的约束,这些改动是我提的、我做的;后端接口也是我写,三个接口和 Celery 那条异步链路。前端那一块,管理端主体是前端同学写的,我负责对话界面和引用定位这部分,以及和接口的联调。K8s 是运维主导,我配合写了健康检查和限流规则。那次雪崩是我参与定位和善后,重启也是我做的,但加 maxLifetime 和熔断是运维和我一起定的。原则是配合的活我不说成主导,但联调和线上问题我愿意认。

面试官看什么能否诚实区分主导与配合,边界说得清不夸大 挂靠简历:与运维一起把服务上到自建 K8s,写了健康检查与限流(单用户 10 QPS)
02

项目情况了解

5 问
面试官

从链路最前端开始。你这段链路第一个环节是 PDF 解析,还自研了版式还原。当时进来的 PDF 主要是什么来源、什么类型?拿到一份从没见过的文档,你怎么判断解析质量够不够用?

参考回答

来源是客服的工单附件和合同,这两类版式差别挺大:工单附件格式杂、扫描件不少,合同相对规整但有大量表格和跨页。判断解析质量我一般不看好不好看,只看两件事:关键内容有没有丢,以及切出来的块是不是语义完整。做法是维护一个抽样文档集,每次改解析器就跑一遍,人工对照原始 PDF 看条款、金额这类关键位置有没有被吃掉。如果表格解析完行列错位,后面检索再好也救不回来,所以这一环我是按「召回条款是否完整」来验收,而不是按字符抽取率。

面试官看什么能否说清文档类型分布,并给出以终为始的解析验收标准 挂靠简历:PDF 解析(自研版式还原,处理表格与页眉页脚)
面试官

你写「把表格按行列展开成结构化文本再切分,命中率明显改善」。你怎么确认是这个改动起了作用,而不是同期还改了别的东西?

参考回答

这里我得先坦白,我当时没有做严格对照。我的观察方式是:先把「表格条款答不上来」的 bad case 挑出来做成一个小集合,改动前后跑同一批问题看命中变化,同时不碰其他环节。这种方式能排除掉一部分干扰,但不能算严格的因果证明,因为 reranker 和切分粒度那段时间也有微调。如果现在重做,我会固定其他变量、留一个不改的对照组,并且把命中率拆成表格类和正文类分开看,这样收益归属才站得住。

面试官看什么能否主动承认归因不严格,并说清可接受的替代验证方式 挂靠简历:针对"表格里的条款答不上"的问题,把表格按行列展开成结构化文本再切分,命中率明显改善。
面试官

客服每天 2000+ 份附件,但你只暴露了 /ask /upload /feedback 三个接口。这个量级下高峰期上传是什么样?你怎么保证解析不会把在线问答拖垮?

参考回答

上传接口本身很轻,只做落盘、算幂等键、投递任务,然后立刻返回一个 task 标识,真正的解析不在这条路径上。解析走 Celery 异步,任务进 Redis 队列,用独立的 worker 消费,并且限制并发数,避免解析把 CPU 和内存吃干、影响在线问答。在线问答是另一条路径,只读向量库和缓存,不依赖解析 worker。所以这两件事在资源上是要分开的,容量和并发也得分开压。这也是当时选 Celery 而不是在 FastAPI 里直接解析的原因。

面试官看什么能否说清在线/离线路径的资源隔离思路与只投递不阻塞的接口设计 挂靠简历:后端用 FastAPI 提供 /ask /upload /feedback 三个接口,Celery 处理异步解析,Redis 做任务队列与结果缓存。
面试官

「约 40% 是重复问题」——这 40% 到底是按问题原文完全一样统计的,还是按语义相似统计的?这直接决定你后面缓存能拿到多少收益空间。

参考回答

这个口径我得如实说,当时的统计是偏粗的,主要是问题文本层面的重复统计,加人工看了一批近似问法,没有做严格的语义聚类。所以我只能说 40% 是个量级参考,不能当成精确的重复率。这也解释了为什么语义缓存的命中率是 37%,和 40% 比较接近属于合理,但我不能因此说缓存把重复问题捞干净了。如果重做,我会先对问题做一次聚类,分出「字面重复」「同义改写」「只是同一个文档的不同问题」三类,再看缓存能覆盖哪几类——因为第三类其实不该命中缓存,答案很可能不同。

面试官看什么能否区分字面重复与语义重复,并指出缓存能覆盖的边界 挂靠简历:高峰期日调用 12 万次,月推理成本 3.8 万元,其中约 40% 是重复问题。
面试官

你把「采纳/不采纳」直接回流成评测集。这里的「采纳」到底代表什么?用户点了采纳但答案是错的,这种情况你怎么办?

参考回答

采纳在我看来只是弱标签,它代表用户这次懒得改或者够用了,不代表答案正确。所以我的做法是把它当成复核队列的优先级信号,不是直接当正样本入集。真正进评测集之前要人工过一遍,判断是答案错、出处贴错、还是用户就是没用上。不采纳的同样要分类,有的确实是答错,有的只是用户想换个问法。标签如果不分类,评测集会越跑越偏,最后优化的方向也会跟着偏。

面试官看什么能否识别弱标签的局限,给出复核与分类入集的处理方式 挂靠简历:反馈闭环(采纳/不采纳直接回流成评测集)
03

项目技术深挖

5 问
面试官

你前端做了「点击答案跳转到原文段落」这个引用定位。切分之后的 chunk 和原文位置是怎么对应上的?如果一个答案横跨多个 chunk,怎么处理?

参考回答

关键是切分的时候就别丢位置。每个 chunk 入库时我带着 doc_id、页码和块序号一起存,检索命中后这些来源信息要一路带到合成阶段。合成时我不让模型自己编出处,而是把这些候选块编号给它,要求它按给定的 cite 标识引用,模型只能选我给的编号。前端拿到的就是这些编号对应的位置,直接定位到原文段落并高亮。跨 chunk 的答案就带多个编号,前端就依次跳。这样做的核心是——出处是检索层给的,不是模型说的,模型说的出处不可信。

面试官看什么能否说清位置信息在切分阶段就落库,并限定模型只能引用给定编号 挂靠简历:实现引用定位(点击答案跳转到原文段落)
面试官

你上了 cross-encoder 重排,这本身是加延迟的操作,但整体 P95 反而从 4.1s 降到 2.3s。这两件事怎么会同时成立?重排在整条链路里占多少延迟?

参考回答

这两件事不是因果关系。重排确实增加延迟,它是在召回之后对候选做一次交叉编码打分,属于纯加法。P95 从 4.1s 降到 2.3s 是成本优化那一版的整体口径,主要来自两个地方:一是语义缓存命中后直接返回,压根不走后面的重排和生成;二是两段式摘要把输入 token 从 11k 压到 3.2k,生成阶段的时间显著下降。所以是缓存和 token 省下来的时间,盖过了重排加的那部分。我不会拿这两个数字说重排变快了,那是两回事。

面试官看什么能否分清加法项与整体指标的关系,不把不同时点的数字说成因果 挂靠简历:接口 P95 从 4.1s 降到 2.3s
面试官

把表格按行列展开成文本之后,会引入大量重复的表头词。这对 BM25 的词频统计、和对 embedding 的语义表示,分别有什么副作用?你怎么缓解?

参考回答

这道题考的是结构化文本对两路召回的不同影响。对 BM25 来说,重复表头会让这些词的文档频率虚高,IDF 被拉低,结果是表头词变得没有区分度,甚至任何带这张表的 chunk 都能被召回。缓解办法是控制重复:只在块首或每若干行保留一次表名加列名,或者把表名单独作为一个字段参与召回。对 embedding 来说问题相反,展开后的文本是一堆「字段名:值」的短句堆叠,语义很稀薄,直接编码出来区分度差。更稳的做法是把表名、列名拼成一句自然语言描述再编码,让它落到语义空间里。

面试官看什么能否分别指出 BM25 的 IDF 稀释与 embedding 语义稀薄两个不同机制 挂靠简历:把表格按行列展开成结构化文本再切分
面试官

你自己维护的那个 RAG 评测小工具,评的是检索还是生成?如果只允许你留一个指标,你留哪个,为什么?

参考回答

检索和生成我分开评。检索侧看 recall@k、MRR 这类,便宜、可复现,适合回归;生成侧看答案是否忠实于给定的上下文、出处对不对。如果只留一个指标,我会留「答案可采信率」,因为它最贴近用户价值,能同时反映检索和生成两端的问题。但它贵,必须抽样且要人判。所以我的实际建议是:日常回归用检索指标卡门禁,发布前用可采信率抽样兜底。一个便宜但只能测一半,一个贵但能测全链路,两个位置不同,不能互相替代。

面试官看什么能否区分检索指标与端到端指标的分工,并说明成本和用途的取舍 挂靠简历:个人维护一个 RAG 评测小工具(GitHub 380 star)
面试官

那次雪崩,你最后加的是连接池的 maxLifetime 和熔断。我想听的是判断过程:你怎么一步步确定问题出在池上,而不是下游本身慢?加这两个东西分别解决什么,哪个是真正修问题?

参考回答

判断逻辑是先分清「谁在等」。看池的活跃连接数、等待获取连接的时长,同时看下游自身耗时和错误率。如果下游耗时正常、错误率也正常,而本服务这边请求全卡在拿连接上,那问题就在池,不在下游。maxLifetime 是兜底——它让连接到期强制回收,把泄漏或异常路径没归还的连接捞回来,但它不修复泄漏本身,真正修的是把所有分支包括异常分支的归还都补齐。熔断处理的是另一件事,它防的是下游真的挂了之后请求继续堆积,把本服务也拖垮。两者一个是治存量一个是防扩散,性质不同。

面试官看什么能否给出「看等待点而非下游」的定位路径,并区分兜底、修复与防扩散三类手段 挂靠简历:处理过一次因连接池未释放导致的雪崩(重启后加了池的 maxLifetime 与熔断)
04

技术客观题

4 问
面试官

你简历里写了解「JSON Schema 约束输出结构化」。具体到工程上,你怎么保证模型输出的一定是合法 JSON?

参考回答

我会分三层。第一层是优先用模型服务商提供的结构化输出或 function calling,由它在解码层面约束,这比纯 prompt 靠谱得多。第二层是 prompt 侧配合,把 schema 写清楚、字段尽量浅、少用嵌套和自由文本长字段,再给一两个例子。第三层是兜底:收到结果先用 JSON Schema 校验器校验,不合法就把错误信息拼回去让它修一次,重试一次还不行就降级到规则抽取或转人工。要注意的是,校验不能只看能不能解析,字段类型、枚举值、必填都得校,否则会出现「能解析但字段是错的」这种更隐蔽的问题。

面试官看什么能否分层说明约束解码、prompt 设计与校验重试的分工 挂靠简历:了解 Prompt 工程与输出结构化(JSON Schema 约束)
面试官

你写「按语义切分」。具体是怎么实现的?在中文合同这种长段落文本上,语义切分和固定长度加 overlap 相比,收益和风险分别在哪?

参考回答

常见实现是先把文本切成句子,再算相邻句子的向量相似度,在相似度明显掉下来的地方断开;另一种是直接按结构切,比如条款编号、标题层级。合同这类文本结构非常强,有明确的条、款、项,我个人会优先按结构切,语义相似度只用来兜底——比如一段正文特别长又没编号,再用它切。好处是块和条款对齐,召回出来就是完整一条,引用定位也准。风险有两个:块长度方差大,超长的还得再切、太短的还得合并,否则会影响召回;另外语义切分对流水线依赖重,多一步模型推理,慢了也更容易出错。

面试官看什么能否指出合同这类结构化文本应结构优先、语义兜底,并说出长度方差的副作用 挂靠简历:按语义切分
面试官

缓存你加了 TTL 和人工纠错入口。TTL 按什么定?如果一条缓存被用户标错了,系统怎么把它清掉,并且保证下次不会再命中同一条?

参考回答

TTL 我倾向于按内容的时效性分档,不能一刀切,但这里的主要作用是控制错误的暴露窗口,所以宁短勿长。纠错的处理要分两步:第一步是立刻失效,把这条 key 删掉或者标记成不可用;第二步是防止它再被命中,因为命中判断是走相似度的,删了 key 之后同义问法还是可能匹配上来,所以要把这条问题加进一个「禁止命中」的集合,命中的时候先过这个集合。同时这条要进 bad case 集,用来回头看阈值是不是定松了。只删缓存不做第二步,等于没修。

面试官看什么能否指出删除 key 不足以阻止相似问法再次命中,需要黑名单参与命中判断 挂靠简历:命中结果带 TTL 与人工纠错入口
面试官

如果同一份文件被上传两次,你怎么保证不会解析两遍、也不会产生两份向量?幂等这一层你放在哪?

参考回答

幂等键放在文件内容上,不是文件名,也不是请求 ID。上传时先算内容 hash,查这个 hash 有没有解析过,有就直接复用原来的文档标识,不再投递任务。任务侧再做一层,用文档标识加分布式锁防止重复投递和并发消费。最后是写入侧,向量库里用文档标识加块序号做主键,走 upsert 而不是 insert,这样即使任务重复跑,结果也是覆盖而不是翻倍。三层里最后一层最重要,因为前两层都可能因为异常重试被绕过,写入幂等才是最终防线。

面试官看什么能否把幂等键定在内容层,并给出投递与写入两级的兜底 挂靠简历:Celery 处理异步解析,Redis 做任务队列与结果缓存
05

对应八股

4 问
面试官

你拿 Redis 当 Celery 的 broker。Redis 做消息队列在可靠性上有什么已知的短板?什么情况下你会换成 RabbitMQ 这类?

参考回答

Redis 作为 broker 本质上是拿 list 或 zset 模拟队列,没有原生的确认、重投、死信和优先级机制,投递语义偏 at-most-once,实例挂了或者 worker 拿到消息就崩,消息就可能丢。缓解方式是配合 visibility timeout 加定期重推,但代价是会出现重复投递,所以消费侧必须自己幂等。什么情况该换?当任务不能丢、需要严格的 ack 和死信队列、需要优先级和延迟队列、或者需要按路由分发的时候,我会选 RabbitMQ 这类专业 broker。反过来,任务可重跑、量不大、团队又已经在用 Redis,就先用 Redis,别为了可靠性提前复杂化。

面试官看什么能否说出 Redis 的投递语义短板,并给出「任务可重跑」这个换与不换的判据 挂靠简历:Redis 做任务队列与结果缓存
面试官

你的 Redis 既做任务队列又做结果缓存,如果共用一个实例,这里有什么风险?你会怎么把它们隔开?

参考回答

风险主要有三个。第一是淘汰策略打架:缓存希望内存满了按 LRU 淘汰,但队列里的消息被淘汰就是丢任务,所以同一个实例上没法用一套策略满足两边。第二是互相拖累,大 key 或者热 key 的慢操作会顶住整个实例,队列的延迟和缓存的延迟互相影响。第三是内存打满时两边一起出问题,故障域没有隔离。做法是拆成两个实例,队列那个设 noeviction,缓存那个设 allkeys-lru,并且分开监控。只分 DB 号是不够的,因为内存和淘汰是实例级共享的,DB 隔离不了这个。

面试官看什么能否指出淘汰策略冲突与故障域隔离,并说明分 DB 不够 挂靠简历:Redis 做任务队列与结果缓存
面试官

你的元数据在 PostgreSQL、向量在 Milvus,一份文档被删除时,两边怎么保持一致?不一致的时候怎么兜底?

参考回答

这里我不追求强一致,走的是「元数据为准、向量可重建」。删除时先在 PostgreSQL 标记为已删,再按文档标识去删 Milvus 里的向量。如果 Milvus 删除失败,就落到一个补偿任务里按软删列表重试。更关键的是读路径兜底:检索出来的候选,在返回前按 PostgreSQL 里的有效文档集合再过一遍,删漏的也召不回来。这样即使两边短时间不一致,用户也看不到已删文档。为什么不做强一致?因为跨存储的分布式事务代价太高,而这个场景对一致性的要求其实是「最终一致且读路径不能漏」,用软删加补偿加过滤就够了。

面试官看什么能否给出软删加补偿加读路径过滤的三层方案,并说明为何不追强一致 挂靠简历:bge-base 向量化入 Milvus
面试官

重排之后有多个候选块,合成答案时你怎么控制塞进 prompt 的上下文?如果超了窗口怎么办?

参考回答

我先按重排分数排序,按顺序取,同时卡一个总 token 预算,预算里要给系统提示和输出留出余量,不能把窗口占满。超预算的时候我不倾向直接截断尾部,因为对条款类问题来说,把一个条款从中间截断比少召几篇更危险——模型会拿着半句话编出完整结论。更稳的做法是少取几篇但保证每篇完整,或者对候选做一次预处理压缩,但压缩会丢细节,只适合摘要类任务,不适合抽取类。所以按任务类型分开定策略,而不是一套规则走到底。

面试官看什么能否区分摘要类与抽取类任务对上下文压缩的不同容忍度 挂靠简历:大模型合成答案并给出出处
06

开放性技术设计题

3 问
面试官

合同是敏感数据。如果这套系统要从客服扩到法务、销售等多个部门,你怎么设计权限和数据隔离?尤其是检索这一层,怎么保证不串?

参考回答

核心原则是过滤条件必须下推到检索入口,而不是召回之后再筛。每个块入库时打上部门、密级这些标签,向量检索和 BM25 两路都在查询时带上这些过滤条件,Milvus 用标量字段过滤,关系库用条件过滤。如果先召回全部再过滤,中间结果已经进过 rerank、进过日志,那就是泄漏。第二个要点是缓存 key 一定要带权限维度,否则同一个问题法务命中过、销售就直接拿到答案,这是很容易被忽略的一条。再往外是审计和脱敏:谁在什么时候问了什么、答案引用了哪些文档都要留痕,敏感字段在返回前做掩码,生成阶段也不引入无权限的片段。

面试官看什么能否指出过滤要下推到检索、缓存 key 要带权限,并说明先召回后过滤的风险 挂靠简历:客服团队每天处理 2000+ 份工单附件与合同
面试官

假设下周让你接一个全新领域,比如医疗或者法律,你只有两周时间判断这套 RAG 架构能不能复用。你的计划是什么?

参考回答

前两天先不碰代码,拿 50 到 100 个真实问题和期望答案做一个小评测集,把现有链路直接跑上去拿基线,这一步的目的不是做好,是看清失败长什么样。第三天开始分桶:是检索根本召不回、是切分把关键信息切碎了、还是术语对不上、还是文档里压根没有答案。然后针对最大的那一桶试一到两个改动,比如加领域词表、换或补一个领域 embedding、调整切分粒度。第二周做消融,确认这个收益稳定、不是运气。判断标准很清楚:如果失败集中在检索层,架构能复用,调检索就行;如果大量问题需要跨文档多跳推理、或者答案本身不存在,那就不是调优能解决的,得换方案。

面试官看什么能否给出先建小评测集再看失败分布的两周路径,并给出复用与否的判据 挂靠简历:熟悉 RAG 全链路(解析/切分/召回/重排/合成)、embedding 与 rerank 模型选型
面试官

如果明天大模型 API 涨价三倍,或者公司要求整套私有化部署,你的链路怎么改?

参考回答

不管是涨价还是私有化,第一件事都是把模型调用抽象成一层网关,业务侧只调这层接口,后面换什么模型对上层透明,这是前提。在这个基础上走三条路:一是路由,把对生成质量要求低的任务——摘要、分类、重排——先切到本地小模型或便宜模型,只留复杂抽取和追问走大模型;二是省 token,靠更准的召回把上下文压到最小,把离线摘要改成批处理跑;三是预热,把高频问题的答案提前算好。私有化部署的坑主要在本地模型的中文长文能力和并发吞吐,这两个必须压测过再切量,不能看着 demo 能跑就上。

面试官看什么能否先做模型抽象层,再谈路由、省 token 与压测前提 挂靠简历:只有追问与复杂抽取才走大模型
07

方向选择与职业规划

3 问
面试官

你工作两年左右。从简历看,你的强项是把链路跑通然后落地。你觉得现在最影响你往上走一步的短板是什么?

参考回答

我最缺的是可复现、可归因的实验能力。成本那个 37% 我没把语义缓存和小模型分流拆开看,只做过一周的分项观察,这就是典型症状——做得出来,但说不清是哪一步起的作用。这样往上走会很吃亏,因为你没法判断下一个改动值不值得做。打算分两步补:第一步是流程上的,任何优化先写口径、留对照组,评测集和回归跑当成习惯而不是额外工作;第二步是补模型侧的动手能力,做一次完整的数据构造和微调,因为现在遇到检索解决不了的问题,我手里只有调检索这一张牌。

面试官看什么能否把短板落到具体事件上,并给出可执行的补法而不是套话 挂靠简历:习惯先把链路跑通再优化
面试官

你自研了 PDF 版式还原。如果公司让你继续在这条线上投入,你会继续自研,还是换开源或商业方案?依据是什么?

参考回答

我的依据是文档来源的分布和维护成本,不是技术难度。如果绝大部分文档来自几家固定模板的合同,那自研或者用开源底座加模板规则成本很低、也可控,继续自研是划算的。如果来源很散、版式五花八门,自研就会变成长期人力黑洞——每来一个新模板就要修一次,这类活我不建议团队自己扛,应该换成成熟的版面分析加表格结构识别方案,把人放在检索和合成上。所以我会先统计一份文档来源和版式的分布,再决定,而且这个统计要定期重跑,因为业务模板是会变的,一次判断不能管三年。

面试官看什么能否用来源分布和维护成本做判据,并强调要定期重估 挂靠简历:PDF 解析(自研版式还原,处理表格与页眉页脚)
面试官

最后一个问题。如果三年后你还在做 AI 应用方向,你希望别人用一句话介绍你?为了让这句话成立,接下来 12 个月你具体做什么?

参考回答

我希望是「把 RAG 这类系统从 demo 做到线上,并且能说清它为什么好、为什么不好的那个人」。后半句比前半句更难,也是我现在最缺的。接下来 12 个月我想做三件事,都尽量可衡量:第一是把评测做扎实,口径、对照组、回归集这一套跑顺,争取每季度产出一份带口径的评测结论;第二是补一次完整的领域模型适配,哪怕是个小模型,把数据构造到评估走通一遍;第三是在系统侧再完整吃一次故障,压测、容量规划、成本模型都自己做一遍,而不是等运维给结论。

面试官看什么能否把长期定位拆成带交付物的短期动作,而不是只讲愿望 挂靠简历:写文档时会把口径与边界写清楚,不做"看起来很准"的指标。
面试官

今天就到这儿。整体印象是:你对自己做过的事边界感比较清楚,也会主动标口径,这是加分项;短板也很明显——凡是涉及「归因」和「对照实验」的地方,你的回答都偏软,成本那 37% 是典型例子。建议你回去把两件事补上:一是把语义缓存和小模型分流做一次真正的拆项对照,二是把评测集和回归跑变成习惯,每次改动先写口径再动手。最后留 5 分钟给你提问,你可以问团队现在的技术阶段、这个岗位前半年最想解决的问题、以及算法和工程两条线在团队里怎么分工。

完整模拟面试问答属于最高档「深度版」;基础版与标准版不包含这一模块。 上传你的简历即可按同样流程生成一场。

换成你自己的简历,就是你的题

上面是虚构简历的效果。上传你的简历,题目会挂到你写过的项目、指标和技术栈上, 并先给出简历体检与题目目录供你确认。