← 返回闯关手册
中文导读 · 博客笔记:Hamel Husain · 2026-08-12 · 原文

AI 产品工程笔记:13 场实战分享浓缩成 20 分钟(中文导读)

Hamel 把他在 Maven 上主持的「AI Product Engineering」系列 13 场分享(约 9.5 小时)压缩成一份笔记索引,按 Evals / Context / Systems 三条线组织,每篇附源材料链接。本文是它其中与 evals 直接相关内容的导读——错误分析自动化、模型级联降本、evals 上线案例、「先修 eval 再谈微调」,全是本站藏书中尚未覆盖的新机制。

一、这份笔记的总主张:改进有先后顺序

Hamel 在开篇给出了一张「改进顺序地图」:最低垂的果实是优化检索与上下文;然后改进系统与 harness;把 post-training(微调自己的模型)留到最后,等其他手段都用完再考虑。这个顺序和藏书 a16「这很难评测是产品坏味道」、a19「评的是模型+Harness 的协作」一脉相承:大多数时候分数低不是模型不行,是供给它的上下文、工具与评测环境不行。

二、Evals 线:四篇新机制

1. 错误分析可以半自动化(Shreya Shankar)

最常见的错误是没看任何数据就先写 Rubric。错误分析是 evals 中最耗人力的环节(要逐条读 trace、标注),Shreya 开源的 Error Discovery skill 把这个过程半自动化:人在本地评审 app 里标注,AI agent 同步更新「失败模式分类法」,并用主动学习(active learning)根据你已标注的内容挑选下一条最该看的样本。失败模式分类法从人工评审中「长」出来,而不是让 LLM 凭空编一个。

2. 模型级联:分类任务成本砍掉一大半(Shreya Shankar)

很多 LLM 工作负载本质是分类任务,全扔给最大模型太贵。BARGAIN 方法:用约 500 条大模型标注的样本,逐个测试小模型置信度阈值,选出「仍能达到目标准确率的最便宜阈值」,把小模型自信的样本路由给小模型、没把握的升级给大模型。注意:这里的目标准确率是与大模型答案的一致率,不是与人工标签的一致率——级联的目的是「模仿大模型」,不是「超越它」。论文报告在 8 个数据集上比同类方法多降最多 86% 成本;后续 Task Cascades 论文(改写为简单替代问题、只读相关段落、搜索最优级联序列)再平均降 48.5%。

3. Evals 上线案例:两个真实踩坑(Lucas / Nova Escola)

巴西教育非营利平台(约 100 万月活、20 万教师)的教案助手案例,两个教训值得背下来:

另一个警钟:两名标注员的一致率低于随机水平——说明「什么叫好」根本没定义清楚,团队拉着教学专家重写 Rubric 后重新标注。上线后他每天对 2% 生产流量跑 eval 套件抓回归。

4. 先把 eval 修对,再谈微调(Prime Intellect)

微调应该是提升 eval 分数的最后手段。动手前先按顺序检查:① 读 trace 搞清到底什么在失败;② 修 eval 和环境本身;③ 改进检索、上下文与 harness。第②条有震撼实例:Terminal-Bench 2 上光把任务超时×5,分数就从 46.3% 涨到 60.97%——你以为在测模型,其实在测你的评测环境。其他高频坑:强迫 temperature=0(模型按 1 训练时会影响可复现性)、max token 截断推理、沙箱 CPU/内存不足、臃肿 harness、缺任务专属技能。post-training 只在两个条件同时成立时才考虑:答案能被自动验证,且当前分数在 0 到 100 之间(有上升空间)。

三、Context / Systems 线里和评测相关的

四、与你收藏其他文章的关系

本文概念对应藏书
先看数据再写 Rubricen04「标准漂移」:标准只能在看过输出后浮现;a01 Rubric 篇的反面教材
错误分析半自动化(active learning)en01/en02 的错误分析流程的「提效版」;a17 自动化 evals 边界的补充
eval 环境影响分数(超时×5 → +15 分)a19 Harness Engineering「评的是模型+Harness」的最直接证据
标注一致率低于随机 → 重写 Rubrica36 人工评测与校准:先校准人,再校准裁判
模型级联降本a18 工具选型四标准的成本维度延伸
微调是最后手段a33 评测集飞轮:先用评测定位问题,大部分问题轮不到训练

五、适合谁 · 怎么用

适合已经读完精读主线、想把 evals 从「会做」推进到「做得省、做得快」的读者。建议用法:先读本导读确定哪篇对症,再点进对应子笔记看细节(每篇 5 分钟以内);「错误分析自动化」和「先修 eval 再谈微调」两篇优先级最高。无硬先修;若先读过 en01(错误分析总纲)与 a16,会更清楚这些新机制补的是哪块拼图。

以下为原文全文 · 中文翻译

上方为本站原创导读,下方为 Hamel 原文索引页的完整中文翻译(宝玉翻译管线,normal 模式)。原文本身是 13 篇子笔记的索引;13 篇子笔记的中文全文翻译续接在目录之后。

AI 产品工程笔记

来自 13 场关于评测(evals)、上下文(context)与系统(systems)分享的笔记。—— Hamel Husain

过去三年,我的工作一直围绕评测展开。评测是改进 AI 产品的地基,但地基之外还有很多旋钮可以调,每个旋钮的取舍各不相同。

最低垂的果实是优化检索与上下文。这一步做完之后,再改进你的系统与 harness。最后,等其他手段都用尽之后,才考虑 post-training(后训练)自己的模型。

我主持了一个「AI 产品工程」系列来探讨这些议题。我把全部 13 场分享按主题整理成了笔记,并附上了原始材料的链接。提醒一句:我尽量提炼了每场分享的精华,所以有些笔记很短(9.5 小时的分享,压成了大约 20 分钟的阅读量)。

笔记目录

分类标题说明
评测数据 Agent 的评测 EN↗一个还原真实混乱数仓环境的数据 Agent 基准。其中的思路可以平移到你自己的数据 Agent 上。
评测用模型级联削减分类成本 EN↗一种路由技术:小模型有把握时走小模型,没把握时升级给大模型,同时保住大模型级别的准确率。
评测自动化错误分析 EN↗借助 AI 来自动化错误分析、更快发现线上问题,思路借自主动学习(active learning)。
评测案例:把评测搬进生产环境 EN↗一家教育创业公司如何落地评测、发现其教案规划助手问题的完整案例。
上下文多向量检索入门 EN↗了解多向量 embedding,以及如何用它提升检索质量。
上下文如何改进搜索 Agent EN↗搜索 Agent 的评测策略,以及用来识别低效环节的分析工具。
上下文如何优化检索 embedding EN↗如何为你的场景选择 embedding 模型,以及何时、如何微调 embedding 模型。
上下文如何选择 OCR 模型 EN↗OCR 在文档上一些出人意料的失败方式,以及准确率与成本之间如何取舍。
上下文用「给 Agent 的脚注」引导 AI 写作 EN↗Subtext 是一种专给 Agent 看的特殊脚注,能有效引导 AI 辅助写作。
系统排查推理延迟 EN↗了解推理延迟由什么决定,以及如何找到瓶颈。
系统开放权重模型经济学 EN↗开放权重模型的成本账,以及什么时候该自托管、什么时候该用 API。
系统为什么该给 Agent 配沙箱 EN↗为什么你大概率该给 Agent 一个沙箱,以及如何为开发效率而设计它。
系统把评测结果变成更好的模型 EN↗什么时候该利用评测来后训练自己的模型,以及实操建议。

这些笔记里几乎每一项改进都始于好的评测。如果你想和一群人一起动手把评测做出来,AI Evals 课程有上手练习和答疑时间。

13 篇子笔记 · 中文全文翻译

按目录顺序排列;目录表中的标题均可点击直达对应译文。演讲视频与配套链接保留在译文内。

数据 Agent 的评测(Evals for Data Agents)

Shreya Shankar 的分享 · 2026-07-15 · 英文原文

在真实任务上检验数据分析 Agent。

数据 Agent 回答的是「哪个用户群的流失率最高?」这类本该由数据分析师回答的业务问题。尽管这类问题占据了知识工作的很大一块,针对它们的好基准却很稀缺。

Shreya Shankar 的分享介绍了 Data Agent Benchmark(DAB)。作者们还原了真实数仓的混乱:每个任务的数据分散在至少两个数据库系统中,join 键不一致、键值埋在自由文本里、schema 含糊甚至定义不清。(原文此处有 DAB 与相关基准在四项属性上的对比表,见英文原文。)

这个通用基准回答的问题与产品评测不同,但如果你在做数据 Agent,它的失败分析很有用。

出人意料的是,数据 Agent 失败最多的地方不是选错数据,而是计划与实现本身就错了。研究发现,Agent 常常先写一个计划,然后即使数据已经推翻了计划,也照旧执行。调试自己的数据 Agent 时,这些失败模式值得记在心里。

该基准是开放的,排行榜接受提交。团队会随着新模型发布持续刷新,值得长期关注。

↑ 返回笔记目录

用模型级联削减分类成本(Cut Classification Costs With a Model Cascade)

Shreya Shankar 的分享 · 2026-07-30 · 英文原文

用经过测算的模型级联砍成本,同时不牺牲目标准确率。

很多 LLM 工作负载本质是分类任务——这个问题比生成式 AI 老得多。LLM 太好用了,以至于人们动不动就把最大的模型怼上去。但分类一旦上了规模,成本就很可观。

Shreya 的最后一场分享讲的是 BARGAIN:一种把分类工作转移给小模型、同时满足你自选目标准确率的方法。它用小模型给每个标签输出的概率来为每条记录做路由。你先抽约 500 条记录,用大模型标注;然后把每个出现过的置信度都当作候选路由阈值逐一测试,选出「仍能达到目标准确率的最便宜阈值」。同一份样本还能告诉你:小模型的 logits 与大模型标签的相关性是否强到足以支撑这个玩法。

重要提醒:这里的目标准确率衡量的是与大模型答案的一致率,不是与人工标签的一致率——这项技术是「模仿大模型」,而「与人工标签对齐」是另一件事。

BARGAIN 论文报告:在 8 个数据集上,比同类方法多降最多 86% 的成本。

后续论文 Task Cascades 加了更多优化,比如:

这些优化在 BARGAIN 式级联之上再平均降本 48.5%。完整演讲视频在这里

↑ 返回笔记目录

自动化错误分析(Automating Error Analysis)

Shreya Shankar 的分享 · 2026-06-24 · 英文原文

从人工评审中长出错误分类法,而不是让 LLM 凭空编一个。

在做任何评测之前,先对日志做数据分析、搞清楚到底有哪些错误在发生,这很重要。一个常见错误是:还没看任何数据,就先把 Rubric 写好了。

这个过程叫错误分析(error analysis)。它是评测中最耗人力的环节,因为你得逐条读 trace 并标注。

Error Discovery skill 消除了其中大量摩擦:你标注的同时,它同步更新失败模式分类法,并为每个新模式检查此前的记录;它用主动学习(active learning),根据你已标注的内容挑选下一条最该看的样本。

工作流是这样的(原文此处有流程图):人工评审者在本地评审 app 里标注,AI agent 在一旁更新失败模式分类法并挑选下一批样本。

演讲视频是这个 skill 的完整上手演示。

↑ 返回笔记目录

案例:把评测搬进生产环境(Case Study: Putting Evals Into Production)

Lucas Machado Rocha 的分享 · 2026-07-09 · 英文原文

Lucas 用评测优化了 Nova Escola 的教案规划助手——Nova Escola 是巴西一家非营利教育平台,月活约 100 万、覆盖 20 万教师。他的分享覆盖了完整流程。他的团队犯过两个错误:

  1. 先写 Rubric,后做错误分析。由于大多数标准从未在真实失败中出现过,团队花了很多时间标注根本用不上的数据。
  2. 为一个「简单修复就能解决」的问题建了评测。助手有时该输出一个学习目标却输出两个——团队改了 prompt,问题就消失了。(「什么时候才值得为失败模式建自动评估器」这个权衡,Hamel 的 FAQ 里有专门讨论。)

标注过程还暴露了另一个问题:Lucas 用了两名标注员,结果两人一致率低于随机水平。团队这才意识到「什么叫好」定义得不够清楚,于是拉上教学专家重写 Rubric、重新标注。(原文此处有 Lucas 的评测电子表格截图。)

通过错误分析锁定失败模式后,Lucas 用 eval skills 把后续工作的一部分自动化了,包括编写裁判(judge)并用人工标签验证它们。

他的端到端示例视频展示了整个流程。他每天对 2% 的生产流量跑一整套评测,以此尽早抓住回归。

↑ 返回笔记目录

多向量检索入门(An Intro to Multivector Retrieval)

Marek Galovic 的分享 · 2026-07-09 · 英文原文

保住 token 级检索质量,同时让存储和延迟变得实用。

大多数检索系统把每篇文档压缩成单个向量,这会成为信息瓶颈。多向量检索避开这个瓶颈(但有代价):查询和文档都按每个 token 存一个向量。查询的每个 token 与文档中最佳匹配的 token 配对,把这些 token 级分数求和,得到文档分数。这个打分算子叫 MaxSim。(Hamel 关于 late interaction 的笔记解释了为什么这条路值得一试。原文此处有 Marek 的直觉示意图:每个格子比较一个查询 token 和一个文档 token,阴影格是 MaxSim 求和的最佳匹配。)

但有个取舍:查询和文档的每个 token 都要存向量、做比较,计算和存储成本涨得很快。Marek 估算,MaxSim 的算术量约为单个点积的 2,000 倍,存储是 10 到 100 倍——这也是它长期只待在论文里的原因。

Marek 讨论了一组把成本降到可规模化的优化。最主要的是 SMVE:把每个 token 投影到一大组随机方向上,只保留最大的 8 个值;按文档求和后得到一个高度稀疏的向量,进入倒排索引。与查询没有共同条目的文档根本不打分,精确 MaxSim 只对幸存者运行。Marek 报告:在 10 亿篇文档规模下,p99 延迟低于 100 毫秒。

他的团队还发布了 Iso-ModernColBERT——GTE-ModernColBERT-v1 的修正版,其 embedding 几何特性与 SMVE 的随机投影兼容;在 bf16 精度下还快约 3 倍,排序质量几乎无损。

完整演讲视频在这里

↑ 返回笔记目录

如何改进搜索 Agent(How to Improve Search Agents)

Nandan Thakur 的分享 · 2026-07-13 · 英文原文

既衡量答案质量,也衡量 Agent 搜索的效率。

Nandan Thakur 的分享讲了三个项目,做搜索 Agent 的话都用得上。

第一个是 ORBIT:一条合成数据流水线,可以为检索评测冷启动数据。传统合成数据方法直接从文档朴素地生成问题,生成的问题单次搜索就能答对。ORBIT 反过来了:它描述一个实体的属性但不点名,并校验每个问题是否难到需要多次搜索跳转才能答对。

ORBIT 还会验证每个问题:要求搜索 Agent 对照源文档确认每个论断;另有一个独立裁判仅凭这些文档复现答案。整条路线完全合成,因此对没有标注数据的人很有吸引力。ORBIT 流水线生成了 20,000 个经过验证的问题,没花一分钱在搜索 API 或付费 LLM 上——这个配方可以在你自己的语料上复用。

第二个是 Hawkeye:一个理解 Agent 轨迹的可视化分析界面(在审,暂无公开产物)。它把每次运行如何展开呈现出来,帮你抓搜索 Agent 的错误。他们的分析发现:成功的运行所需的搜索轮次远少于未解决的运行(原文此处有搜索轮次分布图)。这样的视图能帮你为自己的 Agent 找到合适的最大搜索轮次阈值。让你最喜欢的 coding agent 给你搭一个类似的,是个不错的主意。

他还介绍了 BrowseComp-Plus——OpenAI BrowseComp 的可复现版本。BrowseComp 是一个高难度事实查找基准:答案短、好校验,但要经过很多次搜索才能找到。这项工作的一个重要发现是:限制准确率的是检索器,而不是模型。把包含答案的文档直接给模型,它几乎能答对每一题。GPT-4.1 自己用 BM25 找文档时只得 14.6%,直接把文档递给它则是 93.5%。

↑ 返回笔记目录

如何选择并微调 embedding 模型(Choose and Fine-Tune an Embedding Model)

Radu Gheorghe 的分享 · 2026-07-29 · 英文原文

在你自己的数据上做基准、压缩和微调 embedding 模型。

Radu Gheorghe 讲了如何为检索挑选 embedding 模型。他从 MTEB 排行榜讲起,然后提醒:排行榜排的是质量,几乎不反映成本。他随后梳理了几个值得考虑的取舍,重要的有:

当模型在你的领域还是不够用时,一个被忽视的优化是微调它。微调 embedder 比微调 LLM 容易得多,影响常常更大。Hamel 最喜欢的部分是 VespaEmbed——Radu 的开源微调工具:Apache 2.0 协议、零代码,从 Hugging Face 选基座模型、上传数据对、选损失函数、点训练,完事(原文此处有 VespaEmbed 新建任务的设置界面截图)。可以在这里直接试。

完整演讲视频幻灯片

↑ 返回笔记目录

如何选择 OCR 模型(How to Choose an OCR Model)

Joe Barrow 的分享 · 2026-07-10 · 英文原文

在有代表性的文档上比较 OCR 系统,观察它们怎么失败。

Joe Barrow 讲了如何挑选 OCR 模型。他给出一张双轴决策矩阵(原文有图):你需要纯文本块还是完整文档结构;你要托管 API 还是自托管模型。

Joe 的建议:只有约 5% 的团队应该自托管。以产品为导向的话,用 API 往往更划算。

即使用了 API,选哪个模型依然重要,因为 PDF 会以意想不到的方式干碎提取器。Joe 点名的几个:

想看看 PDF 能烂到什么程度,WTF PDF 是一个「能干碎大多数提取器」的文件画廊。

Joe 的流程很短:确定你的两个轴,抽 50–100 页有代表性的页面,让所有候选跑同一批页面,然后检查原始输出、比较失败模式,再做决定。

演讲视频;他的开放 OCR 模型研究也值得一读。

↑ 返回笔记目录

用「给 Agent 的脚注」引导 AI 写作(Steer AI Writing With Footnotes for Agents)

Bryan Bischof 与 Adam Conway 的分享 · 2026-07-23 · 英文原文

把上下文贴在它所解释的确切句子上,保住人的意图。

Bryan Bischof 和 Adam Conway 是 Theory Ventures 的 AI 工程师。这家投资机构的投资人会写详细的投资备忘录,每份备忘录都包含重要决策。当 Agent 改写这些文字时,这些决策有丢失的风险。

Subtext 是他们的解法:一种轻量格式,给每个句子附着元数据。句子文本原封不动,作者的澄清与待决问题存为元数据。它相当于「给 Agent 看的脚注」,让 Agent 不偏离原始材料。

人也能受益。Adam 的 demo 展示了一个原型聊天界面:每条消息旁边都浮现发送者关联的工单和通话 transcript(完整记录),读者不必自己去翻找上下文。

演讲视频幻灯片源码仓库都是公开的。

↑ 返回笔记目录

找到推理延迟藏在哪里(Find Where Inference Latency Lives)

Abi Aryan 的分享 · 2026-07-02 · 英文原文

先把 prefill 和 decode 分开,再优化——免得优化错了瓶颈。

Abi Aryan 的分享拆解了推理的两个阶段:prefill(读入输入)与 decode(逐个生成输出 token)。她的 Colab notebook 在同一个模型上跑三种请求形态,并排打印耗时。

decode 是顺序的:模型一次吐一个 token。prefill 并行处理整个输入,因此单 token 快一个数量级。三种常见推理形态:

Abi 的建议:如果输出占大头,先砍响应长度;然后考虑投机解码(speculative decoding)、更小的模型或更好的硬件。如果 prefill 占大头,就做请求批处理并缩短上下文。

这个 notebook 就是为折腾准备的。值得试的实验:

演讲视频,notebook 在这里

↑ 返回笔记目录

开放权重模型怎么用(How to Use Open Models)

Zach Mueller 的分享 · 2026-07-24 · 英文原文

哪些开放模型擅长什么,以及它们所需硬件的显存账。

Zach 盘点了开放模型家族,并分享了日常使用的心得:

选模型之前,先估算它装不装得下你的硬件:权重(GB) = 参数量(B) × N × 0.5,其中 4-bit 时 N=1、8-bit 时 N=2、16-bit 时 N=4、32-bit 时 N=8。精确记账见 EleutherAI 的 transformer math 文章。

举例:27B 模型 4-bit 约需 13.5 GB,给激活值和 KV cache 留出余量后,一张 16 GB 卡装得下。

Zach 提醒:不要把私有代码发给 OpenRouter 这类第三方路由,因为请求可能落到数据隐私参差不齐的主机商那里。还要警惕在会话中途切换供应商的模型路由——缓存可能因此失效。如果用路由,用评测去实测它对延迟和成本的影响,而不是靠猜。

租 GPU 方面,Zach 更倾向单台顶级节点,而不是多节点 H100 集群:H100 只便宜 10–20%,多节点部署还会引入互联瓶颈。

↑ 返回笔记目录

别急着造 Agent,先造环境(Don't Build Agents, Build Environments)

Adam Azzam 的分享 · 2026-07-30 · 英文原文

给每个 Agent 一台快速、隔离的机器,而不是共用你的笔记本。

如果你在本地跑 coding agent,沙箱的必要性可能还不明显。当你的编码速度提上来、并行跑很多 Agent、或开始与他人协作时,它就变得重要了。沙箱隔离每个 Agent 运行的代码,出事时把爆炸半径控制在小范围。

CI/CD(很多人第一个想到的工具)并不合适:启动慢、生命周期短,而 Agent 可能为一个任务工作几小时甚至几天,还会改动自己环境的依赖。Agent 的代码也没经过评审,一个糟糕的改动可能搞挂机器或泄露环境里的凭据。

一旦批量跑 Agent,慢启动就成了瓶颈。Ramp 的解法是每 30 分钟烘焙一次预装妥当的机器镜像:Agent 启动时直接拿一台现成机器,跑个 git pull,不到一秒就开干。

另一条设计原则:把 Agent 与它调用的工具分开。工具崩了,不该拖垮 Agent。比如一个加载大 CSV 把内存跑爆的工具,不该杀死一条跑了很久的 Agent 轨迹。

Adam 目前在 Modal 工作——Hamel 最喜欢的云基础设施,它快到「代码其实在远程跑,感觉却像本地」。Modal 创建沙箱的 hello world:

import modal

app = modal.App.lookup("sandbox-hello-world", create_if_missing=True)
sb = modal.Sandbox.create(app=app)
process = sb.exec("echo", "hello")
print(process.stdout.read())
sb.terminate()

完整演讲视频,另可读 Modal 沙箱指南

↑ 返回笔记目录

把评测结果变成更好的模型(Turn Eval Results Into a Better Model)

Will Brown 与 Florian Brand 的分享 · 2026-07-31 · 英文原文

Prime Intellect 的 Will 和 Florian 提醒:微调应该是提升评测分数的最后手段——因为很多时候不改模型也能提分。他们建议先按顺序过一遍:

  1. 读 trace,搞清楚到底什么在失败;
  2. 修评测和环境本身;
  3. 改进检索、上下文与 harness。

第二条可能让人意外,但评测自身的小毛病可以很要命。他们给的例子:在 Terminal-Bench 2 上,光把任务超时乘以 5,分数就从 46.3% 涨到 60.97%。

他们还分享了搭建评测基础设施时的常见坑:

只在两个条件同时成立时才考虑 post-training:正确答案能被自动验证;且模型在你的评测上得分高于 0、低于 100(还有上升空间)。

想试的话,Prime Intellect 的 verifiers 库用 Python 定义任务和奖励,他们的托管 RL 服务用一个短配置文件就能跑训练,也有现成的环境可以开箱即用。

完整演讲视频。最后一句话:post-training 需要一个奖励正确行为的评测——因为 RL 会利用一切不严谨之处。

↑ 返回笔记目录

原文出处:Hamel Husain 博客(hamel.dev)· 2026-08-12。本文全文仅用于个人学习交流,版权归原作者及发布方所有;如原作者认为不妥,请联系删除。
原文链接:https://hamel.dev/notes/llm/ai-product-engineering/