版权与内容来源声明
本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式,也不对任何收益结果作承诺。转载请注明出处。
第 1 章 面试官问的不是「哪个更高级」,而是「你能证明什么」
1.1 从一个常见的纠结说起
手上有两个选择:一家公司愿意让你去做几个月的 AI 相关实习,或者你干脆待在家里,把一个应用从头到尾做完。选哪个?
网上的答案通常是二选一:实习更硬,因为有公司背书;自研更硬,因为实习就是打杂。两种说法都不算错,但都不能直接拿来用,因为它们没回答那个更基本的问题:这段经历最后能变成什么可以被检验的东西。
面试的时间很短,面试官做的其实只有一件事:把你嘴里的「我会」换算成「我信」,中间的媒介就是证据。不同经历产出的证据类型并不一样——这才是纠结的真正来源。
1.2 两类经历,产出的是两种证据
一类是外部约束证据:这件事不是我想做的,是别人要我做的;有明确的截止时间;做完之后别人真的用过;出过问题,有问题记录和回滚动作。它证明的是:你能在真实约束下交付。
另一类是闭环完整度证据:从问题定义、数据准备、评测设计,到最后的取舍说明,整条链路都是你一个人走通的。它证明的是:你能独立把一件事做完做透。
两者不是「高配」和「低配」的关系,而是回答了不同的问题。两段经历如果证据类型重复,加起来也不比一段强多少。
| 对比项 | 实习通常能提供的 | 自研项目通常能提供的 |
|---|---|---|
| 问题是谁定的 | 需求方定的,你负责解 | 你自己定的,可能要自己论证它值得做 |
| 什么时候必须交 | 有截止时间,有别人的排期卡着 | 通常只有你自己定的时间 |
| 谁判定做完了 | 使用者用不用、好不好用 | 通常是你自己设计的评测 |
| 出了问题怎么办 | 有应急、有回滚、有复盘 | 多数情况下没有线上环境 |
| 面试时最容易被追问 | 你到底独立负责了哪一段 | 你的评测是不是自己骗自己 |
1.3 一个反例:什么都做过,什么都说不清
很常见的简历写法是罗列:做过检索增强问答,做过工具调用智能体,调过开源模型,跑过微调。听起来很满,但顺着任何一个点往下问三句就会卡住:这个问题是谁提出来的?你怎么判断做完了?哪一版是失败的、你从失败里改了什么?
答不上来的原因不是能力差,而是这些经历没有沉淀成证据。证据有三个特征:能被别人验证、有明确的时间点、包含不成功的部分。只有结论没有过程的描述,不是证据,只是标签。
所以「选实习还是选自研」,可以换成一个更可回答的问法:我现在最缺哪一类证据?
第 2 章 实习能给你的证据,与它常常不给你的
2.1 实习真正值钱的是四种外部约束
实习的价值不在于公司名字,而在于它天然带来四种自研项目很难凭空造出来的外部约束。
第一种是真实需求方。有人提需求,意味着有一个你之外的判断标准:他要的是能用的东西,不是你觉得好的东西。第二种是截止时间。有时间压力,你才会真的面对取舍:先做哪一半、砍掉什么、用什么替代方案顶上。
第三种是别人真的用过。用的人会提出你没想到的用法,也会在你认为没问题的地方撞出问题。第四种是线上问题与回滚。回滚指的是把服务退回上一个版本,这件事在成熟工程里是标准动作,不是耻辱柱。
Google 公开的 SRE 系列文档把「发布回滚、流量切换等值班介入」列为需要写复盘的触发条件,并把复盘的基调定成不追责、只找原因;《发布工程》一章还把可复现的构建与可回滚的发布列为基础要求(截至 2026-10-13 可访问)。这说明「参与过一次回滚并写了复盘」在工程语境里是正经经验,可以在面试里讲。
| 外部约束 | 它替你证明了什么 | 你该留下的凭证 |
|---|---|---|
| 真实需求方 | 你能按别人的标准交付,而不是按自己的标准 | 原始需求、你复述后的理解、中途的需求变更 |
| 截止时间 | 你会做取舍,知道先保什么 | 时间表、被砍掉的部分、砍的理由 |
| 别人真的用过 | 你的产出在别人流程里跑通过 | 使用者的反馈、你因此改的那一版 |
| 线上问题与回滚 | 你见过真实故障,知道怎么退回去 | 问题的现象、处置动作、复盘结论 |
2.2 只有打杂时怎么自救
实习最常见的不理想状态是:你被安排做边角料,接触不到核心链路。有三种做法能救回一部分证据。
把自己挂到一条完整链路上。哪怕只负责其中一段,也要把这条链路的输入、输出、上下游是谁问清楚。能画出这条链路的人,比只会说自己那一段的人可信得多,因为他知道自己的活在整个系统里的位置。
把交付物外部化。不要只交一个结论,要交三样东西:一段别人能重跑的脚本或步骤、一份说明为什么这么做的文档、一份失败记录。这三样东西的寿命比你的实习期长。
把过程写成可回溯的记录。每次需求变更、每次别人指出问题、每次线上问题怎么处置,各记一行。这些记录是面试时唯一能说清外部约束的凭证。
⚠️代码待验证
gitlog--date=short--pretty=format:'%ad %h %s'--<你的产出文件或目录>这条命令把你在某份产出上的每一步改动按日期列出来。它不能证明你做得好,但能证明你在某个时间段里持续改过这个东西,而不是最后一天突击写了个结论。输出格式以本地仓库的实际版本为准。
2.3 判断一段实习值不值得去:四个提问
决定去不去之前,可以直接问:我能不能看到一条完整链路的输入和输出?我的产出会不会被别人真正使用?做错了有没有人会及时告诉我?这段时间里我有没有一次必须按时交的压力?
四个问题里有三个能得到肯定回答,这段经历大概率能产出外部约束证据;四个都答不上来,就得提前想清楚,进去之后主动争取这四样东西,而不是等着被安排。
第 3 章 自研项目能给你的证据,与它最容易自欺的地方
3.1 闭环完整度是六个环节,不是一个结果
自研项目的价值不在于「我做出来了」,而在于你走完了一条完整的链。这条链有六个环节,缺一环就要打折扣。
| 闭环环节 | 做到什么程度算走通 | 最常见的缺失写法 |
|---|---|---|
| 问题定义 | 说清为什么值得做、边界在哪、什么不在范围内 | 只说「我想做一个智能助手」 |
| 数据准备 | 说清数据从哪来、怎么清洗、口径怎么定 | 只说「用了一些公开数据」 |
| 基线 | 先用最简单的方法跑一遍,作为对比下限 | 没有基线,直接上复杂方案 |
| 迭代 | 至少保留一次失败和一次修正 | 只展示最终版本 |
| 评测 | 指标先定、留出集不参与任何选择 | 只有一次演示成功的截图 |
| 取舍说明 | 说清为什么选这个方案、放弃了什么 | 不提代价,只讲好处 |
这里有两个词要解释。基线指先用最简单的方法(一条规则或一个固定回答)跑一遍,当作对比下限,后面所有方案都要跟它比。留出集指从一开始就切出一份,全程不参与任何调整,只在最后评一次。没有留出集,分数就是在自己看过的题上考出来的。
3.2 三种最常见的自欺
自研项目最危险的地方在于:没有外部约束,所以你可以一直骗自己。
第一种是自造需求。你给自己设了一个题目,然后自己判定它很重要。规避的办法是找一个你之外的需求方——你原来行业的真实流程、一个公开数据集上的公开任务、或者某个开源项目里长期挂着没解决的 issue(这类 issue 属于社区讨论帖,非官方文档,未经官方确认,只能当需求线索)。
第二种是没有评测。只看了一次演示成功,就认为方案可行。scikit-learn 官方文档讲得很直接:数据泄漏指建模时用到了预测时根本拿不到的信息,结果是评测分数过分乐观;规则也很直接——不要在测试数据上做拟合,任何预处理都只能从训练数据里学(scikit-learn 官方文档,截至 2026-10-13 可访问)。翻译过来就一句话:先切留出集,再动任何一步。
评测怎么组织,Anthropic 官方公开的评测指南给过一个可复用的结构:一次评测通常由输入提示、模型输出、参考答案、分数四部分组成;打分方式分代码打分、人工打分、模型打分三类,官方建议能设计成代码打分就优先用(Anthropic 官方 cookbook,截至 2026-10-13 可访问)。这三类打分怎么选,本身就是面试时能讲的一个取舍。
第三种是只演示成功案例。这是前两种自欺的外在表现。规避它不需要额外能力,只需要一页纸。
3.3 让自研项目「可被验证」的四个最小动作
不需要把项目做成产品,只需要四个动作。
动作一,固定随机种子。随机初始化会带来随机性,同一个脚本跑两次结果不一样,别人就无法复现。
⚠️代码待验证
importrandomimportnumpyasnp SEED=42random.seed(SEED)np.random.seed(SEED)# 顺序很重要:先切留出集,再动任何一步# 留出集不参与调参、不参与特征选择、不参与提示词试错# 只在最后一次评测里使用这段骨架的重点不在代码,而在于把「先切留出集」写成流程的第一步。如果先做特征选择或反复调提示词再切留出集,留出集就已经被污染。具体 API 以本地安装的版本为准。
动作二,准备一页失败案例。写清四个字段就够了。
⚠️代码待验证
输入:<一个让方案出错的真实输入> 期望输出:<按你的口径应该是什么> 实际输出:<方案实际给出了什么> 我的判断:<属于哪一类失败,可能的原因是什么>动作三,写清边界:适用范围、已知做不到的事、要用在真实场景还需补什么。NeurIPS 官方论文检查清单把「讨论工作的局限」单列为一项要求,并明确说明不因作者诚实而扣分(NeurIPS 官方指南,截至 2026-10-13 可访问)。顶会论文都要求写局限,个人项目更没有理由只讲优点。
动作四,把数据来源写清楚:来自哪里、怎么采集、推荐用途是什么、有哪些已知问题。这套做法有公开的文档范式可以照抄(见附表 A 中数据文档与模型卡两条)。
第 4 章 核心判据:一张经历选择打分表
4.1 五个维度怎么定义
真到做决定的时候,原则需要落成数字。下面五个维度,每个按 0 分、1 分、2 分三档打分,满分 10 分。
能不能拿到真实数据:真实数据指有真实的分布、真实的脏、真实的边界情况。能拿到 2 分,只有公开且已清洗的数据 1 分,只能自己造样例 0 分。
有没有外部约束:有人提需求、有人卡时间、有人使用,三者都占 2 分,只占一个 1 分,全靠自己管自己 0 分。
能不能留下可复现的产物:别人照着你的说明能跑出同样结果 2 分,能跑但需要你口头补充 1 分,只有一个演示画面 0 分。
有没有人给反馈:反馈来自真实使用者 2 分,来自同行或社区 1 分,只有自己 0 分。
时间是否可控:有稳定的整块时间 2 分,零碎但总量够 1 分,完全不可控 0 分。
4.2 打分表
| 维度 | 0 分 | 1 分 | 2 分 |
|---|---|---|---|
| 能否拿到真实数据 | 只能自己造样例 | 公开但已清洗的数据 | 真实分布、有脏数据和边界情况 |
| 有没有外部约束 | 全靠自己管自己 | 只占其一(需求方 / 时间 / 使用者) | 需求方、时间、使用者三者都占 |
| 能否留下可复现产物 | 只有一段演示画面 | 能跑,但需要口头补充 | 照说明就能跑出同样结果 |
| 有没有人给反馈 | 只有自己 | 同行或社区 | 真实使用者 |
| 时间是否可控 | 完全不可控 | 零碎但总量够 | 稳定的整块时间 |
用法很朴素:把两三个候选机会各自对着五个维度打分,把分数写下来,不要只在脑子里比。
4.3 分数怎么用:不是选总分最高的
这张表不是用来选总分最高的,而是用来找你现在最缺的那条证据。7 分以上证据类型比较完整,可以直接做;4 到 6 分说明缺一到两个维度,先把时间和评测补齐;3 分以下基本是自己跟自己玩,优先换成有外部约束的机会。
还有一个容易漏的点:分数是可以被你改的。同一个机会,进去之前是 4 分,进去之后你主动争取到使用者、主动补了评测,可能会变成 7 分。所以打分表也用来指导你进去之后该抢什么。
第 5 章 两者都不理想时的第三条路
5.1 为什么这条路常常最划算
现实里更常见的情况是:实习机会拿不到,自己闷头做项目又觉得没有底气。这时候有一条常被忽略的路——把实习里遇到的真实问题拿出来,自己做深一遍。
它划算的地方在于同时补上两边短板:问题有外部性,因为它是真实环境里长出来的;闭环完整度也有了,因为整条链是你自己走的。它还规避了实习的两个最大风险:接触不到核心链路,产出不能带走。
5.2 四步做法
第一步,把问题抽象成与数据无关的形式。去掉具体的表名、字段名、客户特征,只留下问题的形状:输入是什么类型的信息,输出要满足什么条件,判断对错的标准是什么。抽象这一步本身就是能力展示。
第二步,用公开数据或自造数据重建一个可以做的最小版本。规模可以小,但链路要完整。
这一步同时要把四个替代关系写进项目说明:输入用什么公开数据替代,判断标准在没有业务方时靠什么规则替代,线上指标用哪几个代理指标替代,与真实环境的差异会影响哪些结论。
第三步,把评测补齐。因为你没有线上环境,评测就是你全部的证明材料:先把指标定下来,再切留出集,再记录失败案例。
第四步,写清与真实环境的差异。差异不是减分项。能准确说出差异的人,说明他知道自己结论的边界在哪。把差异写成一段话,比多做一个功能有用。
5.3 边界:什么不能带走
这条路有一条硬边界:带走的是对问题的抽象,不是公司的资产。公司数据、代码、内部文档、客户信息、内部系统名称,都不属于可以带走的问题。
具体做法是:只保留问题的形状,去掉所有能定位到具体业务的标识;不写公司名,也不写内部系统名;严格遵守你签署过的保密约定,不确定的先去确认再动。这一步做得干净,讲出来是加分项;做得不干净,它会变成风险点。
这份资料是什么:一份把「问题抽象成可复现版本」时用到的清单。它和本章 5.2 节的四步做法是配套的,放在资料包里,扫码即可获取:
第 6 章 面试时两类经历各怎么讲
6.1 一个共用的结构
两类经历可以用同一个骨架来讲:背景 → 我的判断 → 我的动作 → 结果 → 复盘。
差别在结果和复盘这两段。实习的结果有外部参照物,可以说清别人用了之后怎么样;自研的结果通常只有评测,所以必须把评测讲得足够细。实习的复盘受限于你接触到的信息,自研的复盘则由你自己定义范围。
6.2 两类经历的讲法差异
| 要讲的环节 | 实习讲法 | 自研讲法 |
|---|---|---|
| 背景 | 谁提的需求、为什么提、当时的约束是什么 | 问题怎么定义的、为什么值得做、边界在哪 |
| 我的判断 | 你在哪些方案之间做过取舍,依据是什么 | 你的基线是什么,为什么先跑基线 |
| 我的动作 | 你独立负责的那一段,具体到接口和产出 | 数据怎么准备、评测怎么设计 |
| 结果 | 别人用不用、好不好用、出了什么问题 | 评测结果、与基线的差距、失败案例 |
| 复盘 | 一次回滚或一次返工,你的结论是什么 | 一次失败迭代,你改了什么、为什么 |
讲实习最容易犯的错,是把团队成果说成个人成果。与其说「我们做了某某系统」,不如说「这条链路上我负责哪一段,上游给我什么,我输出什么,我怎么知道我做对了」——范围小反而可信。讲自研最容易犯的错,是只讲结果不讲过程,而面试官想确认的恰恰是你的判断力,判断力只能从「你为什么这么选」里看出来。
6.3 会被顺着往下问的三个方向
无论讲哪一类,都大概率会被追问。实习方向上的追问一般围绕:这个需求是谁提的,你怎么知道做对了,出问题怎么退回去。自研方向上的追问一般围绕:为什么不用最简单的方法,你的评测可信吗,失败案例在哪。
这些问题在确认同一件事——你说的这个结果,是你判断出来的,还是碰巧对的。把答案准备成「我当时的依据是……,现在回头看我会改成……」这种带时间差的说法,比背一个标准答案稳得多。
第 7 章 三种处境的不同排法
7.1 应届 / 还没实习过
完全没有经历时,优先级很清楚:先把闭环跑通一遍,再去找外部约束。因为手上没有东西可以拿去换实习机会,而一个走完六个环节的最小项目本身就是敲门砖。规模要小到能做完,宁可做窄做深,不要做宽做浅。
7.2 转行 / 有旧行业经验
转行的人手里其实有一张牌:你原来行业里,哪些流程是可以被模型改进的。把这张牌打出来,问题定义那一步就天然有了外部性,而且你能说清为什么这个需求是真的。注意分寸:讲行业问题讲的是流程和判断标准,不要讲原公司的数据与内部信息。
7.3 在职 / 时间碎片化
在职的人最缺稳定整块时间,那就别比项目数量,改成比证据密度:一个项目,但留出集、基线、失败案例、边界说明一应俱全。每周固定几小时的节奏比周末熬夜更可持续,因为评测和记录依赖连续性。
| 处境 | 优先补哪类证据 | 可交付节奏 |
|---|---|---|
| 应届、无实习 | 闭环完整度优先 | 先把一个窄项目走完六个环节,再投机会 |
| 转行、有旧行业经验 | 两者兼顾,用行业问题做入口 | 先用行业流程定义问题,再补评测与记录 |
| 在职、时间碎片 | 外部约束优先 | 保持一个沉淀项目,同时争取一段有使用者的经历 |
三种排法背后的判断是同一个:先看证据,再看机会。手上缺什么就去补什么,而不是看别人在选什么。
这份资料是什么:一张按五个维度打分的机会评估表,填完就能看出自己缺哪类证据。它和本章的三种排法是配套的,放在资料包里,扫码即可获取:
附表 A:本文引用事实与出处对照表
| 事实 | 出处 | 本文位置 |
|---|---|---|
| 论文检查清单要求作者逐项回答可复现性、局限性等问题,且明确说明不因作者诚实讨论局限而扣分 | NeurIPS 官方指南《NeurIPS Paper Checklist Guidelines》,NeurIPS 官方站点,https://neurips.cc/public/guides/PaperChecklist (截至 2026-10-13 可访问) | 第 3 章 3.3 节 |
| 提出用一套检查清单衡量机器学习系统的生产就绪程度,包含 28 项具体测试与监控要求 | Breck, Cai, Nielsen, Salib, Sculley,《The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction》,2017 IEEE International Conference on Big Data,DOI 10.1109/BigData.2017.8258038 | 第 3 章 3.1 节 |
| 「值班工程师介入(发布回滚、流量切换等)」被列为需要撰写复盘的触发条件;复盘采用不追责、只找原因的形式 | Google SRE 官方文档《Site Reliability Engineering》第 15 章 Postmortem Culture,Google 官方站点,https://sre.google/sre-book/postmortem-culture/ (截至 2026-10-13 可访问) | 第 2 章 2.1 节 |
| 可复现的构建、自动化的构建与测试、以及可回滚的发布,被列为发布工程的基础原则 | Google SRE 官方文档《Site Reliability Engineering》第 8 章 Release Engineering,Google 官方站点,https://sre.google/sre-book/release-engineering/ (截至 2026-10-13 可访问) | 第 2 章 2.1 节 |
| 评测通常由输入提示、模型输出、参考答案、分数四部分组成;打分方式分为代码打分、人工打分与模型打分三类,并建议优先使用代码打分 | Anthropic 官方 cookbook《Building evals》,Anthropic 官方站点,https://platform.claude.com/cookbook/misc-building-evals (截至 2026-10-13 可访问) | 第 3 章 3.2 节 |
| 数据泄漏指建模时使用了预测阶段无法获得的信息,会导致评测结果过分乐观;官方规则为不要在测试数据上拟合,任何预处理只能从训练数据中学习 | scikit-learn 官方文档《Common pitfalls and recommended practices》第 12 章,https://scikit-learn.org/stable/common_pitfalls.html (stable 版本,截至 2026-10-13 可访问) | 第 3 章 3.2 节 |
| 建议为每个数据集配一份说明文档,记录其动机、构成、采集过程与推荐用途 | Gebru, Morgenstern, Vecchione, Vaughan, Wallach, Daumé III, Crawford,《Datasheets for Datasets》,arXiv:1803.09010(2018 年首次提交,2021-12-01 最后一次修订) | 第 3 章 3.3 节 |
| 建议为发布后的模型配一份简短报告,把评测结果按不同人群与不同条件分列,而不仅是给一个总体指标 | Mitchell, Wu, Zaldivar, Barnes, Vasserman, Hutchinson, Spitzer, Raji, Gebru,《Model Cards for Model Reporting》,arXiv:1810.03993 | 第 3 章 3.3 节 |
附表 B:术语速查表
| 术语 | 一句话解释 | 在本文哪里用到 |
|---|---|---|
| 外部约束证据 | 由别人提需求、别人卡时间、别人使用而产生的可检验记录 | 第 1 章 1.2 节、第 4 章 |
| 闭环完整度证据 | 从定义问题到取舍说明由一个人走完的完整链条 | 第 1 章 1.2 节、第 3 章 |
| 基线 | 用最简单的方法先跑一遍,作为后续方案的对比下限 | 第 3 章 3.1 节、第 6 章 |
| 留出集 | 一开始就切出、全程不参与任何调整、只在最后评一次的那份数据 | 第 3 章 3.3 节、第 5 章 |
| 数据泄漏 | 建模时用到了预测时拿不到的信息,导致评测分数虚高 | 第 3 章 3.2 节 |
| 可复现 | 同样的输入和配置,别人照着说明能跑出同样的结果 | 第 4 章 4.1 节 |
写在最后:这篇用到的资料
写这篇文章时,把相关的官方文档和源码又翻了一遍,顺手也整理了几份配套的东西:
- 大模型学习路线图:从零基础到能自己动手做 Agent,按阶段说明每一步该学什么、哪些可以先跳过
- 《LangChain + LangGraph + MCP 智能体开发实战》视频课:7 个模块,从私有化部署、Embedding+RAG 到 MCP+Agent 全流程
- AI 大模型知识库(在线可查):Agent Skills 从入门到落地、Claude Skills 完全指南等专题,按目录浏览即可
- 640 套 AI 大模型行业报告 + 经典 PDF 书籍:看行业落地案例和别人怎么做的时候用得上
- 大模型零基础到精通教学视频:跟着敲一遍,比只读文档快得多
资料是我自己整理的,放在下面这个码上,扫码即可获取:
添加时备注「AI」,优先通过。
资料按「先路线、再动手、最后查漏」的顺序整理好了,建议先看学习路线那一份,照着它挑一条适合自己当前基础的路径再往下看。