【48】AI工程师面经整理与解读-20260426-Agent算法
我是波哥,专注于大模型/推荐系统,持续分享AI算法岗面试岗知识干货、实战项目、面试经验。
【大模型LLM训练营】、【大模型算法冲刺营】持续进行中,详细内容:大模型1v1第5期已经开始直播了!
详情了解可+v:Burger_AI
继续复盘整理训练营同学大模型面试真题
这场面的是某tob公司的大模型应用岗。先交代下公司背景,方便大家判断定位:公司是国内做企业级 Data Agent / ChatBI 起家的公司,主打让业务人员用自然语言问数据、出报表,客户覆盖金融、零售、制造业。这种公司面试的特点非常鲜明:不怎么考理论推导,但会把工程链路上的每一个脏活累活抠到细节。这场面试就是典型——5 道题看起来跳跃,实际上全是围绕”企业文档入库 → 向量化 → 检索”这条 RAG 主链路上的脏活展开的,外加一道 MCP 的新概念考察。
如果你做过企业级 RAG 项目,这些题你会觉得”这不就是我每天在调的参数吗”;如果你只做过 Demo 级别的 RAG(丢几个 PDF 进 LangChain 就算完事),这些题会把你问得一脸懵。这正是面试官想筛选的东西。
题目背景补充
面试原题比较简短,很多同学看到第一反应是”这也能叫面试题?”。其实每道题背后都是一个具体的工程场景,这里把场景补全:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Q2-Q4 三道题连起来看,就是一整条扫描件 PDF → 图像预处理 → OCR → 结构化输出的链路。面试官其实是在问”你真的做过扫描件入库吗”。
题目分类与难度标注
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这套题的分布很”数巅”:没有华而不实的模型原理题,全是能直接对上业务 SOP 的工程问题。
Q1:Embedding 微调的损失函数【深度讲解】
这题是全场最硬的一道,也是最能体现候选人底子的一道。面试官问的是”公式”,说明他不想听你打太极,要写得出来。
背景先讲清楚
Embedding 微调的目标是:让语义相关的句子在向量空间中靠得更近,不相关的句子离得更远。这是度量学习(Metric Learning)的经典命题。不同损失函数的差异,本质是”怎么定义’近’和’远'”、”用几个样本来定义”。
目前 Embedding 训练主流就三大类损失函数,按历史演进顺序讲:
1、Triplet Loss(三元组损失)
形式:给一个 Anchor(锚点)、一个 Positive(正样本)、一个 Negative(负样本)。
直觉:希望 anchor 到 positive 的距离 比 anchor 到 negative 的距离至少近 margin 这么多。如果已经足够近了(差值 > margin),loss 就是 0,不再更新。
优缺点:简单直观,但一次只看一对正负样本,信息利用率低,训练慢且对负样本选择极其敏感(需要专门做 hard negative mining)。
2、InfoNCE / Contrastive Loss(对比损失)
形式:一个 Anchor 对应一个 Positive,配上 N 个 Negative,做 softmax 分类。
其中
通常是余弦相似度, 是温度系数(典型值 0.01-0.1)。
直觉:把”在一堆负样本里挑出那个真正的正样本”转化成一个分类问题。分母里负样本越多,任务越难,监督信号越强。
工程技巧:
-
In-batch Negatives:不需要单独准备负样本,同一个 batch 里其他样本的 positive 就天然是你的 negative。Batch size 越大效果越好,这也是为什么 Embedding 训练动不动就要 8 卡、16 卡跑大 batch。 -
温度系数 τ:τ 越小,模型越关注 hard negative(那些容易混淆的);τ 越大,模型关注所有负样本更均匀。这个参数直接决定训练能不能收敛。
InfoNCE 是目前 Embedding 微调的主流损失函数,bge、e5、gte 这些模型训练基本都是它的变种。
3、Multiple Negatives Ranking Loss(MNR Loss)
Sentence-Transformers 库里的默认选择,本质是 InfoNCE 的工程友好版。只需要提供 (anchor, positive) 对,负样本自动从 batch 内采样。
为什么火:标注成本低——你只要有”问题-答案”或”查询-相关文档”的正例对,训练数据就齐了,不用费劲标负样本。
4、BGE 的多任务损失(进阶答案)
如果想拿满分,可以再提一嘴 BGE M3 的训练:它同时优化稠密向量、稀疏向量、ColBERT 式多向量三种表示,用 self-knowledge distillation 让三种表示互相学习。这种回答一出来,面试官基本会认定你看过论文。
回答策略
面试时别上来就甩 MNR,先讲 Triplet 再讲 InfoNCE 再讲 MNR,按演进顺序讲,体现你理解”为什么业界最后收敛到了 InfoNCE”。面试官问”公式”,写 InfoNCE 那个就够了,重点把温度系数和 in-batch negatives 讲透。
Q2:PDF 解析输出的格式有哪些
这题简单但重要,属于”你到底有没有做过企业文档入库”的判断题。
主流输出格式
-
纯文本(plain text):最简单,丢失所有结构信息。只适合纯文字小说类 PDF,企业文档基本不能用。 -
Markdown:当前最主流的选择。能保留标题层级、列表、表格、加粗斜体,下游 chunking 和 LLM 处理都友好。MinerU、Marker、Docling 这些开源工具默认输出 Markdown。 -
HTML:和 Markdown 能力接近,但保留更多样式信息(颜色、字体大小)。多数场景 Markdown 够用,HTML 更啰嗦。 -
JSON(结构化):把文档拆成元素树,每个元素带类型(title/paragraph/table/figure)、坐标(bbox)、页码、层级。信息量最大,适合下游需要做精细化处理的场景——比如按章节检索、按表格单独建索引、引用时回溯到原文位置。 -
带布局的中间格式(如 Unstructured 的 Element 列表):介于 JSON 和 Markdown 之间,每个 element 是一条结构化记录,但保留了阅读顺序。
工程选型的潜台词
面试官真正想听的不是”有哪些”,而是”你在什么场景下选哪个“:
-
纯 RAG 检索:Markdown 够用,简单省事; -
需要精确引用和溯源(比如法律、金融文档,要给用户看”这段答案来自第几页第几段”):必须用 JSON,带 bbox 和 page number; -
复杂表格多的文档(财报、说明书):JSON 输出表格为 HTML 或 Markdown 嵌套结构,下游用 LLM 理解表格前要专门处理; -
扫描件:OCR 之后通常输出为带坐标的 JSON,因为 OCR 本身就是按框识别的。
回答时把这个选型逻辑讲出来,远比罗列格式清单得分高。
Q3:拉普拉斯方差阈值多少
这题看着像送分题,答一个数字就完事,其实是个陷阱——给固定数字的同学基本都会被追问。
先讲这是什么
拉普拉斯算子是图像二阶导数算子,对图像中的边缘(灰度突变处)响应强。一张清晰的图片有大量锐利边缘,拉普拉斯响应的方差就大;模糊图片边缘被”糊”掉了,方差就小。
计算方法:
import cv2
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
score = cv2.Laplacian(img, cv2.CV_64F).var()
阈值到底取多少
经典经验值:OpenCV 官方教程和 PyImageSearch 那篇传播极广的博客里给的参考是 100——低于 100 判模糊,高于 100 判清晰。
但这个数字不能直接用,真正的答案是”看场景和分辨率“:
-
手机拍照的高清图(4000×3000):清晰图常在 500-2000,阈值设 200-300 比较合理; -
扫描件 200dpi:清晰图常在 100-500,阈值设 80-100; -
身份证 / 票据这类小图:清晰图可能就 80-200,阈值要下调到 50-80; -
压缩厉害的低质图:整体数值都偏低,阈值还要再降。
更正确的做法是:不要用硬阈值,而是在自己的数据集上采样一批标注好”清晰/模糊”的图片,统计两类分布,找最佳分割点。或者做相对判断——对同一批扫描件里的图片按方差排序,过滤掉末尾 5% 的。
回答策略
别只给一个数。标准答案是:“经典参考值是 100,但这个阈值强依赖图像分辨率和压缩质量。实际工程里我会先在业务数据上跑一批拿分布,再定阈值。比如我们扫描件场景下最终用的是 XX。”
这种回答把”一个数字”升级成了”一个方法论”,面试官一听就知道你真的调过。
Q4:为什么要去噪、锐化、超分、对比度增强【深度讲解】
这题必须结合 OCR 场景回答,面试官问的不是图像处理课本,是 OCR 前置预处理。
统一的目的:提升 OCR 准确率
OCR 模型(无论是 PaddleOCR、Tesseract 还是 GPT-4V)对输入图像质量极度敏感。同样一份合同,扫描质量好 OCR 准确率 99%,扫描质量差可能掉到 70%。预处理就是在 OCR 之前把图像”洗干净”,每一步针对一种特定的劣化。
四种操作各自解决什么问题
去噪(Denoising):
-
目标:消除扫描或拍照引入的椒盐噪声、高斯噪声; -
为什么 OCR 需要:噪声会被 OCR 误识别为标点、笔画,导致”。”变”.”、”一”变”二”; -
常用方法:高斯滤波(轻度噪声)、中值滤波(椒盐噪声效果好)、非局部均值去噪(保细节但慢)、BM3D(效果好但贵); -
坑:去噪力度太大会把细小笔画一起去掉(比如”日”和”目”的横线),所以要平衡。
锐化(Sharpening):
-
目标:增强文字边缘,让笔画轮廓更清晰; -
为什么 OCR 需要:扫描件经常因为聚焦不准有轻微模糊,锐化后笔画分离度提高,相近字形(”未/末”、”日/曰”)更易区分; -
常用方法:Unsharp Mask(USM 锐化)、拉普拉斯锐化; -
坑:锐化会放大噪声,所以先去噪再锐化是标准顺序。
超分辨率(Super Resolution):
-
目标:把低分辨率图像放大到高分辨率; -
为什么 OCR 需要:小字号(8pt 以下)或低 dpi 扫描件,文字像素数太少,OCR 模型根本看不清。典型场景是合同的页脚小字、发票上的金额; -
常用方法:传统插值(双三次)→ 深度学习(ESRGAN、Real-ESRGAN、SwinIR); -
工程提示:超分耗时长,只在检测到小字区域时用,不要全图超分。
对比度增强(Contrast Enhancement):
-
目标:拉开文字(前景)和纸张(背景)的灰度差; -
为什么 OCR 需要:老旧文档、透光扫描、印刷浅淡的文档,前后景差异小,文字”糊”在背景里; -
常用方法:直方图均衡化(全局)、CLAHE(限制对比度的自适应直方图均衡,更推荐,不会过度放大噪声)、Gamma 校正; -
坑:简单直方图均衡化容易把轻微污渍也拉成黑色,CLAHE 更安全。
加分项:标准预处理流水线
讲到这里再补一个工程师视角的完整 pipeline,直接封神:
原图 → 灰度化 → 去噪(中值/高斯)→ 对比度增强(CLAHE)
→ 二值化(自适应阈值 / Otsu)→ 倾斜矫正(霍夫变换)
→ 必要时锐化 / 超分 → 送入 OCR
顺序有讲究:去噪必须在锐化之前,否则锐化会把噪声一起放大;二值化之前要先提对比度,否则自适应阈值分不干净。
回答策略
别一个个孤立讲,按”输入问题 → 处理手段”配对讲:
-
图像有噪声 → 去噪 -
图像模糊 → 锐化 / 超分 -
图像灰暗 → 对比度增强
最后加一句”这些操作的顺序和强度要根据实际图像质量动态调整”,到位。
Q5:MCP 和 CLI 的区别【深度讲解】
这题是 2025 年以来 LLM 面试的新考点,不少同学看到 MCP 三个字就懵。先讲清楚它是什么。
MCP 是什么
MCP(Model Context Protocol)是 Anthropic 在 2024 年底推出、2025 年快速普及的一个开放协议,核心目的是给大模型提供一个标准化的”外挂”接口。
类比理解:
-
USB-C 之于充电器 → MCP 之于 LLM 工具; -
以前每个 LLM 应用都要自己写一堆工具调用的胶水代码,MCP 来了之后,工具提供方(比如 GitHub、Slack、本地文件系统)只要实现一个 MCP Server,任何支持 MCP 的 LLM 客户端(Claude Desktop、Cursor、各种 Agent 框架)都能直接用。
CLI 是什么
CLI(Command Line Interface)就是命令行工具。git、ls、curl、ffmpeg 都是 CLI。调用方式是 shell 里敲命令,输入是参数,输出是标准输出/标准错误流。
二者的本质区别
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
为什么 LLM 需要 MCP 而不是直接用 CLI
很多人会反问:“LLM 不是也能写 shell 命令吗?为什么还要 MCP?” 这是个好问题,三个原因:
-
结构化 I/O:LLM 调用 CLI 要解析文本输出( ls -l返回的那一大堆东西),解析不准就出错。MCP 直接返回 JSON,LLM 不用干解析的脏活。 -
能力自描述:CLI 工具的参数要靠 LLM “记住”(或读 man page),错了就报错重试。MCP Server 启动时就告诉客户端”我有这些工具,每个工具的参数 schema 是什么”,LLM 生成调用时参数错误率极低。 -
跨应用复用:你给 Claude 写的工具调用逻辑,搬到另一个 Agent 框架要重写。MCP 是协议,一次实现到处用。
二者是替代关系吗
不是。MCP 本身经常封装 CLI 作为底层实现——你完全可以写一个 MCP Server,它内部就是调用 git 命令。MCP 是面向 LLM 的适配层,CLI 是面向人的工具,两者在不同抽象层次。
回答策略
面试时讲清楚三点:
-
面向谁:CLI 给人用,MCP 给 LLM 用; -
接口形式:CLI 是字符串,MCP 是结构化协议; -
能力发现:CLI 靠文档,MCP 靠自描述。
再补一句”MCP 可以封装 CLI 作为实现”,表明你理解两者不是竞争关系。
复盘与建议
这场面试的启示非常明确:
第一,数巅这类应用公司,面试考的全是 RAG 工程链路的”脏活”。你做过的项目要能拆解到具体参数、具体流程、具体踩过的坑。只会画高层架构图、说不出阈值是怎么调的,基本过不了。
第二,PDF 解析和 OCR 预处理是企业 RAG 的隐藏主战场。大家平时学 RAG 都在看 embedding、reranker、chunking,但真正上生产时会发现一半的时间在对付 PDF 和扫描件。面试前把 MinerU、Marker、PaddleOCR 这几个开源工具都跑一遍,看看它们的输出长什么样,调过参数的同学面试时一听就和没调过的不一样。
第三,Embedding 微调要能写公式。光知道”用 bge-m3 做微调”是不够的,得写得出 InfoNCE、能讲清楚温度系数和 in-batch negatives 的作用。这是 2026 年大模型岗的基本盘。
第四,MCP 成了新考点。2025 年下半年开始,MCP 相关问题在大厂、中厂面试里出现频率越来越高。不光要知道它是什么,还要能对比 Function Calling、OpenAPI、LangChain Tool 几种主流方案的异同。
第五,面对”阈值是多少”这种看似简单的数值题,永远不要给一个孤立的数字。正确姿势是”经验参考值是 X,但实际要看场景,具体做法是在业务数据上采样统计”。这是区分”调过”和”没调过”的分水岭。
祝各位面试顺利。
夜雨聆风