跳转至

原文链接:https://www.yuque.com/zander-xsg7o/bftg9l/wvt7ck2408cdnqo9?singleDoc#

本文我觉得很好的点是教如何写一个真正有效的、能够写在简历上的项目。

正文

最近很多小伙伴私信我推荐项目,由于一直在赶论文没抽出时间,先跟大家说一声抱歉!

ok,废话不多说,进入正题!项目到底怎么做,才能扛住面试追问?

如果不想面试被这样说,请跟着教程一步一步做! "这你跟教程做的吧?" "指标提升了多少?""大概……有一点?" "线上遇到什么问题?""……没上过线"

三个项目,有项目背景,容易拿数据,最最最最重要的是不吃算力!(默认有3090及以上哈)

项目一:电商客服问答——大模型训练方向

面试讲项目,开口第一句别上来就说"我用LoRA做了个SFT"。先说业务!

场景很简单:电商公司客服每天5000+咨询,退换货、物流、商品参数、售后投诉什么都有。 现在的规则引擎只能兜住40%,剩下全靠人力。so你的活就是——让大模型扛住高频标准问题,把自动解决率从40%干到75%以上

为什么选客服场景,不选医疗也不选法律?很简单:

第一,数据好搞。电商客服对话数据集网上一搜一大把,自己模拟构造也容易。医疗数据你上哪弄?

第二,指标好定。自动解决率、准确率、满意度,都是硬指标,面试讲起来有说服力,就不虚了!

第三,SFT + DPO 天然适配这个场景。SFT 教模型怎么回答,DPO 教模型哪种回答让用户更爽。客服场景天生就有"好回答"和"差回答"的区分。

第四,也是比较实际的——字节、阿里、京东、拼多多都有类似业务,以后面这些公司能用上。

数据不用去实习也能搞到

很多人第一反应是"我没实习过哪来的数据"。别慌。

  • GitHub 搜 e-commerce customer service dataset,中文电商客服多轮对话数据集好几个
  • 淘宝京东商品页的"问大家"板块,手动整理个两三百条就够用
  • 还有个省事的办法:写几个客服场景模板,用 GPT-4 批量扩写指令对,成本低可控性强
  • 偏好数据更简单:SFT 训完让模型自己生成 2-3 条回答,你标哪条更好就行

面试的时候别说数据是"网上下载的"。你可以说: "训练数据两部分,一部分来自电商平台公开 FAQ 加历史对话清洗, 另一部分是基于业务 SOP 用模板扩写的。原始 12000 条,去重、去短回复、去矛盾答案之后剩 5800 条做 SFT。"

如果一开始直接说数据是"从网上收集的",面试官马上追问"怎么保证质量",答不上来就很被动。 这个项目是算法岗的基本盘。你一个训练项目都没有,大部分面试走不过第二轮,这不是吓你。

别从零写,先读这几个仓库

我自己做的时候踩过一个坑:一上来就自己从头写训练脚本,config 写错、数据格式对不上,折腾了三天才跑通。后来发现正确姿势是先读别人的代码。

最值得读的三个:

LLaMA-Factory(68k star)https://github.com/hiyouga/LLaMA-Factory SFT+DPO 全流程做得最完整的项目。数据格式模板、LoRA 配置、各种对齐算法实现全有。 我当时在里面学到最有价值的东西是它的数据格式规范,省了很多踩坑时间。

TRL(12k star)https://github.com/huggingface/trl HuggingFace 官方训练库。SFTTrainer、DPOTrainer 写得很规范。 面试被问原理时说"我读过 TRL 源码",比说"我看了篇博客"强太多。

Qwen3(27k star)https://github.com/QwenLM/Qwen3 选什么模型、怎么调、怎么部署,看官方文档最靠谱。

我的做法是:花 2 天读 LLaMA-Factory 的数据模板和训练配置 → 然后用 TRL 自己写训练脚本。面试你就可以说"工程结构参考了 LLaMA-Factory,但训练代码是自己基于 TRL 写的"——这个说法面试官接受度很高,我实测过。

推荐技术选型

组件 推荐 备选
基座模型 Qwen3-8B DeepSeek-R1-Distill-Qwen-7B、Qwen2.5-7B
微调框架 HuggingFace TRL OpenRLHF(进阶)
高效微调 HuggingFace PEFT(LoRA/QLoRA)
训练基建 PyTorch + DeepSpeed ZeRO-2 Transformers Trainer
显卡要求 单卡 3090/4090 可跑 QLoRA 双卡可跑全参 LoRA

分步执行(建议 3-4 周)

第1周:SFT 跑通

  1. 数据准备(电商客服场景)

    • 收集电商 FAQ + 客服对话数据,按场景分类:退换货、物流、商品参数、投诉
    • 转化为指令格式:{"instruction": "用户问:这个能退吗?已经拆封了", "input": "商品类别:食品", "output": "很抱歉,食品类商品拆封后不支持无理由退货..."}
    • 原始数据 ~12000 条 → 清洗后保留 5800 条(去重、去短于20字的回复、去答案矛盾的样本)
    • 别忘了记录清洗规则和前后数量变化——面试一定会问"你的数据怎么来的、怎么清洗的",说不出数字就很减分
  2. 跑 SFT

    • 用 TRL 的 SFTTrainer,配置 LoRA(rank=16, target_modules=["q_proj","v_proj"])
    • 训练 2-3 epoch,记录 loss 曲线
    • 输出:训练配置文件 + loss 截图 + 推理样例
    • 参考 LLaMA-Factory 的 examples/ 目录下客服/对话场景配置
  3. 本周交付验收

    • 能回答"SFT 的 loss 和预训练 loss 有什么区别?代码层面怎么实现?"
    • 能展示训练前后同一批客服 query 的输出对比(比如退货政策问答的准确性变化)

第2周:LoRA 消融实验——这步决定你是"会跑"还是"做过实验"

这一步是把项目从"跑通了"变成"做过实验了"的分水岭。我被问过好几次"rank 怎么选的",第一次没答好,后来补做了消融实验才过关。

至少跑 3 组对比:

实验 变量 要记录的指标
rank 消融 rank=4 / 16 / 64 loss、任务准确率、显存占用
target_modules q_proj+v_proj vs 全部线性层 效果差异、训练耗时
QLoRA vs LoRA 4bit 量化 vs FP16 精度损失、显存节省比例

面试的时候你怎么讲这个实验?直接这么说:

"我对 LoRA 的 rank 做了消融,发现 rank=16 在我的任务上是效果和效率的最优平衡点。rank=64 效果提升不到 1%,但显存多了 40%,不划算。"

就这一句话,面试官就能判断你是真做过实验的。这个经验对我真的很管用。

第3周:DPO 偏好对齐

  1. 构建偏好数据(客服场景天然适合做偏好标注)

    • 用 SFT 后的模型对同一批客服 query 生成 2-3 条回答
    • 标注标准:回答是否准确、是否有安抚情绪、是否给出可执行方案
    • 比如同一个退货问题,chosen 是"给出明确退货步骤+预计时间",rejected 是"只说了可以退但没说怎么操作"
    • 数量:1000-3000 对足够
    • 偏好数据的质量比数量重要很多,这个经验我吃过亏。一开始图省事堆了一堆噪声数据进去,结果效果反而还不如 SFT-only
  2. 跑 DPO

    • 用 TRL 的 DPOTrainer
    • 关注 β 参数(默认 0.1),试 0.05 / 0.1 / 0.3
  3. 对比实验

对比维度 要记录的
SFT-only vs SFT+DPO 同一评测集上的准确率/偏好胜率
β 不同取值 偏好对齐程度 vs 多样性损失
偏好数据质量 噪声数据占比 10%/30% 时的效果衰减

第4周:失败案例分析 + 项目文档

这步最容易被忽略,但我个人觉得面试加分最多。因为面试官真正想看的不是"你做成了什么",而是"你遇到问题时怎么想的"。

客服场景典型翻车:

  • 复读机:"您好您好您好我们的退货政策是……" —— 后来发现是训练数据里有大量重复句式,清掉之后好了
  • 突然变冷:应该礼貌安抚的退货场景,模型回复跟机器人一样冰冷。查了半天,是 DPO 偏好数据里混了两种风格
  • 答非所问:用户问物流到哪了,模型回答退货政策。这个比较头疼,根因是指令分类能力不够,后来加了场景分类 prompt 缓解了一些
  • 事实错误:给了错误的退货天数。最坑的一个 bug,排查下来是 SFT 数据中有两条互相矛盾的样本

每个翻车都写清楚:出了什么问题 → 为什么 → 试了什么 → 解没解决。面试讲这些比讲指标有用得多。

简历怎么写

面向电商客服智能问答场景,针对退换货、物流、商品咨询等高频问题,基于 Qwen3-8B 完成指令微调与偏好对齐全流程。清洗并构建 5800 条客服指令数据集完成 LoRA SFT,对 rank、target_modules、量化方案进行消融实验;基于客服满意度维度标注 2000 组偏好数据完成 DPO 对齐。最终回答准确率从 58% 提升至 82%,用户偏好胜率达 67%,自动解决率由 40% 提升至 72%,并沉淀 badcase 分析与迭代策略。

面试会怎么追问你

这些我被问过,提前准备好:

  1. "LoRA 的 rank 你怎么选的?" —— 讲消融实验结论就行
  2. "偏好数据怎么构建的?质量差会怎样?" —— 讲噪声实验
  3. "DPO 和 PPO 你为什么选 DPO?" —— 不需要额外 Reward Model、训练更稳定、数据量要求更低。PPO 我也了解,但在我这个数据规模和资源下不现实
  4. "loss 不降你怎么排查?" —— 学习率太大、数据有问题、梯度裁剪没开、混合精度配置不对,挨个排查
  5. "出现复读机怎么办?" —— 就讲你的翻车案例
  6. "β 调大调小分别会怎样?" —— 调大更保守不敢偏离参考模型,调小偏好更强但容易过拟合

用到的开源仓库

  • LLaMA-Factory:https://github.com/hiyouga/LLaMA-Factory (⭐68k,SFT+DPO 全流程参考实现,含数据模板和训练配置)
  • TRL:https://github.com/huggingface/trl (SFT/DPO 训练,自己写脚本的规范参考)
  • PEFT:https://github.com/huggingface/peft (LoRA/QLoRA)
  • Transformers:https://github.com/huggingface/transformers (模型加载/推理)
  • Qwen3:https://github.com/QwenLM/Qwen3 (基座模型官方文档+微调最佳实践)
  • nanoGPT:https://github.com/karpathy/nanoGPT (理解训练闭环,建议做之前先花 2 天读源码)

项目二:金融研报问答——RAG 系统,面试问得最多的方向

为什么做 RAG,而且选金融场景

RAG 是目前面试被问到概率最高的模块,没有之一。字节阿里腾讯美团,几乎每场必问。但这个方向有个尴尬的问题:90% 的人做出来都是一个 demo,随便切个 txt 文件、用 LangChain 套一下就完了。面试官追两句就知道深浅。

所以关键不在于"要不要做 RAG",而在于场景选什么。

我选的是金融研报。原因很简陋——PDF 比 txt 难处理太多了(手动狗头)。研报里全是多栏排版、表格、图表、脚注,不做版面分析直接 split,表格数据全是乱的。面试你只要说"我处理过 PDF 多栏排版和表格切块",就比纯文本选手听起来厉害很多。 另外金融问答有个天然优势:答案是确定的。"比亚迪 Q3 毛利率多少",研报里白纸黑字写着,评测非常好做。不像开放域问答那样评测全是主观。 再加上字节、蚂蚁、百度、阿里都有金融 AI 团队,面试官对这个场景很熟,不用花时间解释背景(应该吧)。

具体的任务就是:给分析师做一套研报问答工具,自然语言提问,系统自动从几百份 PDF 里找到相关段落,生成回答,标注来源文档和页码

数据去哪找

研报数据其实蛮好搞得。东方财富 Choice 上市公司年报季报 PDF 免费下载, 选 3-5 个行业各拿 10 份就够了。发改委、人民银行的政策文件也是公开的。 如果懒得一个个找,卷心菜研究、墨宝研报都有免费的行业报告可以批量下。 评测数据集可以用 FinanceIQ 或 FinQA,GitHub 和 HuggingFace 都能搜到。

总量控制在 200-300 份 PDF 就行,太少不够多样性,太多你处理不过来。

面试时别说"下载了一批 PDF"。换个说法:

"语料库 300+ 份金融研报和政策文件,覆盖新能源、半导体、消费三个行业。文档以 PDF 为主,包含多栏排版、表格、图表,部分超过 80 页。评测集自建了 120 条,分事实型、对比型、汇总型三类。" 按这么说完面试官一般不会再追问数据来源。

代码别从零写,先读这三个

项目一的时候我说过,从零写是浪费时间。RAG 这块更是——光 PDF 解析就能折腾你一周。

RAGFlow(75k star)https://github.com/infiniflow/ragflow 这个我觉得是 RAG 方向最值得读的项目。它的 DeepDoc 模块做了深度 PDF 解析,表格识别、多栏处理、图表提取都有。混合召回链路和评测指标体系也做得很完整。我花了差不多三天把它的切块策略和检索融合那部分代码读了一遍,收获很大。

Langchain-Chatchat(37k star)https://github.com/chatchat-space/Langchain-Chatchat 中文 RAG 的老牌项目了。中文分词切块、FAISS/Milvus 多向量库适配、BM25+KNN 混合检索这些实现写得比较清晰,适合学习。

QAnything(14k star)https://github.com/netease-youdao/QAnything 网易有道做的。它的 2-stage retrieval(先 Embedding 粗筛再 Rerank 精排)和父子文档召回策略比较有意思,rerank 阈值怎么设计的也值得看。

我的做法跟项目一类似:先花两三天读 RAGFlow 的 DeepDoc 和检索融合代码,理解思路,然后自己用 FAISS + FlagEmbedding 写一套。面试时说"我参考了 RAGFlow 的文档解析思路,但检索和评测链路是自己实现的",这个说法比较安全。

技术选型一览

组件 推荐 备选
向量检索 FAISS Milvus(数据量大时)
Embedding bge-large-zh-v1.5(FlagEmbedding) text2vec、m3e
重排 bge-reranker-v2-m3(FlagEmbedding) cross-encoder/ms-marco
BM25 rank_bm25(Python库) Elasticsearch
生成模型 Qwen3-8B / Qwen2.5-7B DeepSeek-R1-Distill-7B
评测 RAGAS / 自建离线评测集
PDF解析 PyMuPDF + pdfplumber(表格) marker / RAGFlow DeepDoc
快速原型 LlamaIndex(仅用于搭 baseline) LangChain
数据领域 金融研报 + 政策文件 PDF

具体怎么做,分四周

第1周:数据处理 + 基线搭建

  1. 数据准备(金融研报场景)

    • 从东方财富/卷心菜等平台下载 200-300 份 PDF 研报(选 3-5 个行业就差不多了,比如新能源+半导体+消费)
    • PDF 解析是第一个难点:用 PyMuPDF 提取文本,用 pdfplumber 解析表格,处理多栏/页眉页脚
    • 这个点面试很容易出彩:你能讲清楚"纯文本 split 在 PDF 上为什么不行,表格会被拆散、多栏内容会串行",打败百分之99的对手(狗头保命)
    • 参考 RAGFlow 的 DeepDoc 模块,学习它的版面分析思路
  2. 切块实验(这步感觉很多人都不做,但面试基本上必问)

    • 至少对比 3 组 chunk_size:256 / 512 / 1024
    • overlap:50 / 100 / 200
    • 记录每组切块数量、平均长度、以及后续召回的 Recall@5 变化
    • 金融文档特殊点:表格行不能被切断,因此需要“表格保护”切块策略,这是一个很好的面试话题
    • 输出:一张切块策略对比表
  3. 向量索引构建

    • 用 FlagEmbedding 的 bge-large-zh-v1.5 做 embedding
    • 用 FAISS 构建索引(先用 Flat,后面对比 IVF/HNSW)
    • 输出:索引构建脚本 + 向量维度和文档数记录

第2周:多路召回 + 召回评测

  1. 实现 3 路召回

    • 路线 A:纯向量召回(FAISS)
    • 路线 B:纯 BM25 召回
    • 路线 C:混合召回(向量 + BM25 分数加权融合)
  2. 构建评测集(金融场景的核心优势:答案确定性强)

    • 自己写 80-120 条 (query, ground_truth_doc_id, answer) 三元组
    • query 分三类:事实型("比亚迪 Q3 营收多少")、对比型("宁德时代 vs 比亚迪毛利率哪个高")、汇总型("新能源行业 2025 年主要政策变化")
    • 这个分类别小看,面试时你说"我的评测集覆盖三类问题,其中对比型和汇总型是纯向量召回的弱点"——这就自然引出了你为什么要做混合召回
  3. 跑评测

召回方案 Recall@3 Recall@5 Recall@10 备注
纯向量 ? ? ? baseline
纯 BM25 ? ? ? 关键词场景更强
混合召回 ? ? ? 通常最优
  1. FAISS 索引对比(面试区分度很高)
索引类型 Recall@10 查询延迟(ms) 构建时间(s) 内存占用(MB)
Flat ? ? ? ?
IVF ? ? ? ?
HNSW ? ? ? ?

第3周:重排 + 生成 + 故障处理

  1. 接入 Reranker

    • 用 FlagEmbedding 的 bge-reranker-v2-m3
    • 对比:向量召回 Top20 → Rerank 取 Top5 vs 直接 Top5
    • 记录 Recall 和准确率变化
  2. 生成约束

    • 实现引用溯源:回答中标注证据来源段落
    • 实现拒答机制:召回分数全低于阈值时返回"我不确定"而不是硬编
    • 这个问题面试百分百会问:你怎么缓解幻觉? 你就说"证据绑定+低置信度拒答+生成后引用校验"
  3. 故障处理——这块面试问得很频繁,没有案例会很被动

故障 你的 badcase(金融场景具体例子) 根因 怎么修的
空召回 “宁德时代 2025 年装机量”,但文档里写的是"装车量" 表述差异导致 embedding 语义鸿沟 加 query 改写(同义词扩展)
答非所问 问“比亚迪毛利率”召回了营收段落而不是利润表 chunk 太大,整页财报被切成一个块 缩小 chunk + 表格单独切块 + 重排
幻觉 模型编造了一个不存在的数字 生成时未绑定证据 加引用约束 + 后校验
延迟高 响应超过 3 秒 重排模型太重 + PDF 过长导致切块多 先粗筛再精排 / 缓存热查询

第4周:评测闭环 + Demo + 文档

  1. 搭一个可演示的 Demo(Gradio / Streamlit 都行)

    • 输入 query → 显示召回文档 → 显示最终回答 + 引用来源
    • 面试官可能会让你现场演示,有Demo加分极大
  2. 整理项目文档

    • 系统架构图(切块→索引→召回→重排→生成→评测)
    • 每个模块的选型理由
    • 实验表(切块/召回/重排所有对比)
    • badcase 池(至少 10 个典型案例)

简历可以这么写

面向金融研报智能问答场景,针对 PDF 多栏排版、表格密集等复杂文档特点,设计并实现 RAG 系统。构建 BM25+Dense 混合召回链路,引入 Cross-Encoder 重排提升检索相关性;设计"表格保护"切块策略解决财务表格切断问题,并基于自建 120 条三类型评测集和 badcase 池迭代优化。最终混合召回 Recall@5 达 87%,较纯向量方案提升 15 pp,答非所问比例下降 22%。

面试高频追问

RAG 项目被追问的概率比训练项目还高,这几个你一定会遇到:

  • chunk size 怎么选的 —— 讲你的 256/512/1024 三组对比,最好记住具体 Recall 数字
  • 为什么不只用向量检索 —— 举例子:用户搜"宁德时代装机量",文档里写的是"装车量",纯向量可能召不回来,BM25 反而能匹配到。所以混合召回效果最稳
  • Reranker 到底有多大提升 —— 直接报数。如果不做实验你根本说不出这个数字,所以实验必须跑
  • 空召回你怎么处理 —— query 改写 + 同义词扩展 + 降级拒答
  • 幻觉怎么缓解 —— 证据绑定 + 低置信度拒答 + 生成后引用校验
  • QPS 多少,瓶颈在哪 —— 重排模型和生成模型是延迟大头

讲真,RAG 的追问深度比训练项目大。但好在每个追问都能用实验数据回答,所以实验做扎实了反而最好讲。

相关开源仓库汇总

  • RAGFlow:https://github.com/infiniflow/ragflow (★75k,生产级 RAG 全链路参考,重点读 DeepDoc PDF 解析 + 检索融合 + 评测体系)
  • FAISS:https://github.com/facebookresearch/faiss (向量检索)
  • FlagEmbedding:https://github.com/FlagOpen/FlagEmbedding (Embedding + Reranker)
  • Langchain-Chatchat:https://github.com/chatchat-space/Langchain-Chatchat (★37k,中文 RAG 经典参考,学切块/向量库适配/混合检索)
  • QAnything:https://github.com/netease-youdao/QAnything (★14k,学 2-stage retrieval + rerank 阈值设计)
  • LlamaIndex:https://github.com/run-llama/llama_index (快速搭 baseline)
  • Milvus:https://github.com/milvus-io/milvus (生产级向量库,数据量大时推荐)
  • GraphRAG:https://github.com/microsoft/graphrag (进阶:复杂多跳问答场景)

项目三:把前两个项目部署上线——推理优化,大部分人最虚的环节

为什么一定要有部署项目

到这里你有了项目一训好的客服模型,有了项目二的研报 RAG 系统。但如果只能在 Notebook 里跑,面试官会觉得你只是个"调参选手"。

实话说,做训练和 RAG 的人很多,但一问到部署——"你的服务 QPS 多少?""P95 延迟多少?""OOM 了你怎么处理?"——十个人里八个答不上来(我之前也答不上来,嘻嘻)

这个项目就是把前面两个串起来,做成一个真正能扛并发的在线服务。场景还是接着客服来:日均 5000+ 请求,双11 高峰翻 3 倍,要求单次响应 P95 < 2 秒,32 并发不能崩,GPU 扛不住了要有降级方案,热门问题("双11能叠加优惠券吗"这种)直接走缓存不过模型。

做完这个项目,你的简历就不只是"会训练"、"会做 RAG",而是"能跑通训练→检索→部署全链路"。恭喜你可以得道成仙了。

推理框架怎么选

这个方向的开源生态特别成熟,不用自己造轮子。

vLLM(73k star)https://github.com/vllm-project/vllm —— 推理服务的事实标准了。PagedAttention、continuous batching、自带 OpenAI 兼容 API,这仨东西面试全是高频考点。先把 vLLM 跑通,后面做量化对比、压测全基于它来。

LMDeploy(7.7k star)https://github.com/InternLM/lmdeploy —— 量化+部署一体化。我主要拿它来做 AWQ 量化,然后跟 vLLM 跑 benchmark 对比。面试时候有对比数据说话会更有底气。

SGLang(20k star)https://github.com/sgl-project/sglang —— 进阶用的。如果你精力够,可以拿 SGLang 和 vLLM 做个 A/B 对比,面试提一嘴"我也对比了 SGLang"会加分。精力不够就先不管它。

整体路线就是:vLLM 跑通服务 → LMDeploy 做量化实验 → FastAPI 套一层做工程化。目标是产出一份量化对比表 + 一份压测报告 + 一份故障处理文档。

能讲清这个项目的人真的不多,面试里属于"别人没有你有"的加分项。

技术栈选型

组件 推荐 备选
推理引擎 vLLM SGLang(进阶对比)
量化 AWQ (autoawq) GPTQ (auto-gptq)、LMDeploy
服务框架 FastAPI + vLLM OpenAI-compatible server
缓存 Redis(缓存热门客服问题)
压测 locust / 自写并发脚本
监控 Prometheus + Grafana(了解即可) 日志+手动指标
模型 项目一微调后的 Qwen3-8B 客服模型 Qwen3-14B(量化后)

分四周执行

第1周:推理基础 + 量化实验

  1. 先用 vLLM 把项目一微调好的客服模型跑起来

    • python -m vllm.entrypoints.openai.api_server --model ./qwen3-8b-ecom-sft-dpo
    • 验证基础推理正确性:用项目一的客服测试集验证输出一致性
  2. 量化对比实验——面试几乎必问,没数据很难讲

方案 模型体积 显存占用 推理速度(tokens/s) 效果损失(评测集准确率)
FP16 原始 ? ? ? baseline
AWQ INT4 ? ? ? ?
GPTQ INT4 ? ? ? ?
INT8 ? ? ? ?
  1. 输出:一张完整的量化对比表 + 结论("AWQ 在我的场景下精度损失 <1%,推理速度提升 2.1x")

第2周:服务化 + 并发压测

  1. 搭 API 服务(串联项目一+项目二)

    • vLLM 自带 OpenAI-compatible server
    • 前面套一层 FastAPI 做限流、超时、降级
    • 加 Redis 做热问题缓存:“双11能叠加优惠券吗”这类高频 query 命中缓存直接返回,不走推理
    • 请求链路:用户请求 → Redis 查缓存 → 未命中则走 RAG 检索(项目二)→ 客服模型推理(项目一)→ 返回结果 + 写入缓存
  2. 压测(这步的数据面试直接拿来讲)

并发数 QPS P50延迟(ms) P95延迟(ms) P99延迟(ms) 显存峰值
1 ? ? ? ? ?
4 ? ? ? ? ?
8 ? ? ? ? ?
16 ? ? ? ? ?
32 ? ? ? ? ?
  1. KV Cache 分析
    • 记录不同 max_seq_len 下显存变化
    • 面试能讲"KV Cache 的显存公式:2 × num_layers × hidden_dim × seq_len × batch × precision_bytes"

第3周:工程化完善

  1. 限流与降级

    • 令牌桶限流:超过 QPS 阈值返回 429
    • 超时机制:推理超过 N 秒自动中断返回兜底回答
    • 降级策略:GPU OOM 时自动切到更小的量化模型
  2. 日志与监控

    • 每次请求记录:input_tokens、output_tokens、latency、status
    • 统计:每小时 QPS、平均延迟、错误率
    • 不需要搭完整 Prometheus,但要能讲清楚你会关注哪些指标
  3. 故障演练——你不练就面试时现场编,大概率翻车

故障 现象 排查步骤 修复方案
OOM 进程被 killed nvidia-smi 查显存、检查 batch/seq_len 减 max_seq_len / 开量化 / 降并发
延迟飙升 P95 从 500ms 涨到 3s 查并发数、查 KV Cache 占用 开 continuous batching / 加缓存
请求抖动 部分请求超时 查 GC、查显存碎片 预热 + 固定 batch
输出截断 回答不完整 查 max_new_tokens 设置 调大上限 + 流式输出

第4周:串联整合 + 文档

  1. 把项目一的客服模型 → 项目二的研报 RAG → 项目三的推理服务串成完整链路

    • 客服场景:用户提问 → API 网关 → 意图识别(是客服问题还是研报问题)→ 走对应链路 → 返回结果
    • 研报场景:用户提问 → RAG 检索 → 模型生成 + 引用源 → 返回
    • 有缓存层、有限流、有监控
  2. 画一张系统架构图(面试时可以直接在白板上复现)

  3. 整理项目文档

    • 量化对比表
    • 压测报告
    • 故障演练记录
    • 性能优化顺序:缓存 > 量化 > Batching > 硬件升级

简历参考写法

基于 vLLM 搭建电商客服 + 研报问答在线推理服务,完成 AWQ/GPTQ 量化对比实验,在 Qwen3-8B 客服模型上实现 INT4 量化后推理速度提升 2.1x,精度损失 <1%。设计 FastAPI+Redis 服务架构,支持并发限流、超时降级和热问题缓存(缓存命中率 35%)。在 32 并发下 QPS 达 xx,P95 延迟 xx ms,并完成 OOM、延迟抖动等典型故障演练,串联训练-检索-部署全链路。

部署方向面试会问什么

部署项目的追问跟训练和 RAG 画风不太一样,更偏工程和系统。

最常被问的就这几个:

  • "continuous batching 是怎么回事?" —— 不等一批凑满就动态合并请求,提升 GPU 利用率。vLLM 的核心机制之一
  • "KV Cache 显存怎么估?" —— 公式:2 × num_layers × hidden_dim × seq_len × batch × precision_bytes。最好带上你的实测数据
  • "量化掉了多少精度?" —— 直接报你的实验数字,这就是为什么量化实验必须做
  • "P95 延迟多少?瓶颈在哪?" —— 报压测数据。瓶颈通常在 decode 阶段,因为它是访存密集型的
  • "OOM 了怎么办?" —— 讲你的故障演练经历
  • "如果要把延迟砍一半,你从哪入手?" —— 缓存热 query > 量化 > speculative decoding > batch 策略优化
  • "Prefill 和 Decode 有什么区别?" —— Prefill 计算密集(并行处理整个 prompt),Decode 访存密集(逐 token 自回归生成)

这些问题有一半以上不做实验根本答不清楚。所以压测和量化对比那两周的时间一定不能省。

开源仓库

  • vLLM:https://github.com/vllm-project/vllm (★73k,推理引擎事实标准,重点读 PagedAttention + continuous batching)
  • LMDeploy:https://github.com/InternLM/lmdeploy (★7.7k,量化+部署一体化,拿来和 vLLM 做 benchmark)
  • SGLang:https://github.com/sgl-project/sglang (进阶对比)
  • AutoAWQ:https://github.com/casper-hansen/AutoAWQ (AWQ 量化)
  • AutoGPTQ:https://github.com/AutoGPTQ/AutoGPTQ (GPTQ 量化)

三个项目的执行节奏总览

项目一:训练与对齐 项目二:RAG 系统 项目三:推理部署
W1 客服数据清洗 + SFT 跑通
W2 LoRA 消融实验
W3 客服偏好数据 + DPO
W4 客服 badcase + 文档
W5 研报 PDF 解析 + 切块 + baseline
W6 金融 QA 评测集 + 多路召回实验
W7 重排 + 故障处理
W8 Demo + 评测文档
W9 客服模型量化实验
W10 服务化 + 压测
W11 工程化 + 故障演练
W12 客服+研报三项目串联 + 总文档

12 周 = 3 个月,和我之前发的6个月规划里的第 2-4 个月刚好对上。前面1个月补基础,后面2个月刷题+面试,中间3个月就做这三个项目。


做完之后怎么判断能不能写进简历

说个我自己的标准,每个项目做完用这几条对一下:

✅ 有没有至少 3 组对比实验——不是"跑通了",是"试过几种方案知道哪个好" ✅ 有没有能说出口的数字——"效果不错"是废话,"准确率从 58% 到 82%"才是有效信息 ✅ 有没有翻车记录——面试官其实最想听你遇到问题怎么解决的 ✅ 能不能讲满 5 分钟不卡壳——背景→问题→方案→实验→结果→复盘,这个链条要通 ✅ 面试官追问三层还能不能接住

五条里不到三条的项目,说实话别往简历上放。写上去被问到反而减分。


我踩过的坑,你们别再踩了

  1. 只跑通不做实验 —— 面试官问"你做了什么优化",你张嘴说不出东西,氛围直接冷下来
  2. 用公开 demo 数据还不改 —— 面试官一眼就看出来了,问"数据哪来的"你就尬住
  3. 三个项目互不相干 —— 做了训练、做了 RAG、做了部署,但串不起来,整体感全无
  4. 只有代码没有文档 —— 你能跑不代表面试官能看到你的思考过程,文档是你的证据
  5. 贪多嚼不烂 —— 做5个浅的不如3个深的。面试不看数量看深度
  6. 不准备追问 —— 项目做了,但讲的时候结结巴巴,和没做区别不大

最后说一句掏心窝的: 这三个项目不是三个独立作业。从头到尾就是一条线——电商客服你微调了模型,金融研报你做了知识检索,最后部署的时候把两个都串上线。面试官要看的就是你能不能从一个具体需求出发,把训练、检索、上线这条路走通。 三个做扎实了,简历上写的就不再是"熟悉大模型相关技术"这种空话,而是你真做过的东西。