跳到正文

第 5 章:训练数据构造,种子 → 轨迹 → 增强

讲清为什么 Agent 要专门构造训练数据,以及「种子 → 轨迹 → 增强 → 质检 → 格式」这条数据流水线的设计思路,并理解 Loss Mask、Agentic CPT 数据合成等关键概念

📊 学习时长:55-70 分钟 🎯 完成后能力:讲清为什么 Agent 要专门构造训练数据,以及「种子 → 轨迹 → 增强 → 质检 → 格式」这条数据流水线的设计思路,并理解 Loss Mask、Agentic CPT 数据合成等关键概念 🔗 关联面试题:5 道(覆盖 5 个角度,见 Part 3)

🧭 这一章起,进入「训练」线:前四章把调研 Agent 的执行框架、工具、记忆搭好了,但模型「会不会做调研」很大程度由训练决定。要训练,第一步是先有数据。这一章讲数据流水线的设计思路:为什么这么做、每一环在解决什么,并配一个零依赖小实验帮你建立直觉。

这一章你会学到什么

  • ✓ 想清一个根本问题:通用大模型直接拿来当 Agent,为什么「不会用工具、不知道何时收手」,得专门造数据训
  • ✓ 看懂一条「训练轨迹」长什么样,以及 Loss Mask 为什么要「mask 掉 observation」(配可跑小实验)
  • ✓ 掌握数据流水线全貌:种子数据 → 轨迹数据(Teacher 生成)→ 增强 → 质检 → 格式标准化,每一环在干嘛
  • ✓ 理解种子数据的来源构成、数据增强的几类思路、自动质量筛选,以及「数据分布」为什么要均衡
  • ✓ 建立「数据质量 > 数据数量」的判断,以及 Agentic CPT(FAS / HAS)这种更进阶的数据合成思路是怎么回事

本章按三段式组织:

段落 给谁看 内容 占比
🚀 Part 1 · 主线实战 零基础,想先看懂 为什么要造数据 + 轨迹长什么样 + Loss Mask 小实验 ~45%
🎯 Part 2 · 面试深度 想讲透、备战面试 流水线每一环的设计思路 + 分布 + CPT 合成 + 私货 ~45%
🏆 Part 3 · 验收串题 检验学到位没 关联面试题 + 自检清单 ~10%

🚀 Part 1 · 主线实战 | ~45% 这部分先想清「为什么要造数据」,再用一条样例轨迹 + 一个零依赖小实验,看懂训练数据到底长什么样。

先讲个真实场景(这是本章的「为什么」)

前四章我们把一个调研 Agent 的「骨架」搭起来了:执行框架、工具集、记忆。但有件事一直靠 prompt 硬撑,让一个通用大模型(比如 Qwen、LLaMA)去当 Agent,它其实不太「会」。

具体哪不会?① 该用 visit 拿细节时,它图省事只 search 一下就编结论;② 该收手时不收手,或没查够就硬给结论;③ 工具调用的格式时灵时不灵。你 prompt 写得再细,通用模型也只是「勉强照做」,不稳。

根因是:通用模型在预训练时,见过的「人类写文章」很多,但见过的「Agent 一步步用工具做调研」的轨迹很少。 它缺一种「Agent 的本能」。

怎么补?用大量「优质的 Agent 做调研的轨迹」去训练它。 而这些轨迹,现实里没有现成的、得自己造,这就是「训练数据构造」。本章讲的就是:这条数据流水线该怎么设计。

概念 1:种子数据 vs 轨迹数据

数据构造分两层,先有「问题」,再有「做这些问题的完整过程」:

  • 种子数据(seed):一批高质量的调研问题。比如「中小规模 RAG 项目,向量库选 Milvus、Qdrant 还是 pgvector」。它是整个数据的源头。
  • 轨迹数据(trajectory):针对每个种子问题,一条完整的「怎么一步步做出来」的过程:Thought → Action → Observation → … → Final。这才是模型真正要学的东西。

概念 2:一条「轨迹」长什么样

轨迹就是把第 1-2 章那个 ReAct 循环(Thought 想 → Action 调工具 → Observation 看结果,循环往复,直到 Final 给答案)完整记录下来:

模型要学的,正是这种「遇到问题 → 怎么想 → 调什么工具 → 看到结果怎么接着想 → 最后怎么综合」的决策模式

概念 3:Loss Mask(不是所有 token 都该学)

这里有个关键技术:一条轨迹里,不是每个字都该让模型「学着生成」

  • Thought / Action / Final模型自己该产出的 → 要参与训练(算 loss)
  • Observation工具 / 环境返回的,不是模型该「生成」的 → 要 mask 掉,不算 loss

为什么?因为如果让模型去拟合 observation,等于逼它背搜索结果,它会学着「编造」工具返回,反而学坏。

🛠️ 跟着做:一个零依赖的 Loss Mask 小实验

下面这段零依赖代码,演示一条轨迹里哪些片段参与训练、哪些被 mask。新建 loss_mask_demo.py:

# 零依赖,直接 python loss_mask_demo.py
# 一条训练轨迹(简化成「片段」),标注每段是不是模型该「学着生成」的
trajectory = [
    ("Thought: 先查 Qdrant 的部署和性能",        "model"),
    ('Action: search("Qdrant 部署 QPS")',        "model"),
    ("Observation: Qdrant 单容器即起,数千 QPS", "tool"),
    ("Thought: 再看 pgvector 是否够用",           "model"),
    ('Action: visit("pgvector")',                "model"),
    ("Observation: 复用 PG,中小规模够用",        "tool"),
    ("Final: 中小规模 + 低运维优先 pgvector / Qdrant…", "model"),
]
print(f"{'片段':<34}{'来源':<8}参与 loss?")
print("-" * 56)
for text, src in trajectory:
    mask = 1 if src == "model" else 0           # model → 算 loss;tool → mask
    print(f"{text:<34}{src:<8}{'✅ 是' if mask else '🚫 否(mask)'}")
n = sum(1 for _, s in trajectory if s == "model")
print(f"\n共 {len(trajectory)} 段:{n} 段参与训练,{len(trajectory) - n} 段被 mask")

运行

python loss_mask_demo.py

你应该看到(确定性输出):

片段                              来源    参与 loss?
--------------------------------------------------------
Thought: 先查 Qdrant 的部署和性能       model   ✅ 是
Action: search("Qdrant 部署 QPS")       model   ✅ 是
Observation: Qdrant 单容器即起,数千 QPS tool    🚫 否(mask)
Thought: 再看 pgvector 是否够用          model   ✅ 是
Action: visit("pgvector")               model   ✅ 是
Observation: 复用 PG,中小规模够用       tool    🚫 否(mask)
Final: 中小规模 + 低运维优先 pgvector…   model   ✅ 是

共 7 段:5 段参与训练,2 段被 mask

看明白了:模型只学「自己该产出的」(Thought/Action/Final),工具返回的 Observation 被 mask 掉。这一个小细节,是 Agent SFT 训练里最容易被忽略、却最关键的技术之一,漏了它,模型会学着背搜索结果、编造工具返回。

🐛 跑不通看这里:这段纯标准库,不该报错;若对齐看着歪,是中文字符宽度问题,不影响逻辑。

📌 说清楚:这是教学示意。这只是演示 Loss Mask 的概念(哪些 token 算 loss)。真实训练里,要把轨迹 tokenize、构造 attention mask、对接训练框架(SFT / GRPO),工程上复杂得多;这个小实验只为让你看懂「为什么这么做」。

🧭 你刚才看到的,等于真实系统的什么? 你手标的 model/tool = 真实训练里的 loss mask(哪些 token 参与梯度)。真实系统会自动按角色标记、按模型的 tokenizer 切分。理解了「为什么 mask observation」,你就抓住了 Agent SFT 数据处理的核心。


🎯 Part 2 · 面试深度 | ~45% 这部分讲透数据流水线每一环在解决什么问题、为什么这么设计,这些正是面试要讲清的。

🔒 关于「讲到哪」:本节把每一环的原理与设计思路讲透,让你建立完整、扎实的认知。但真正能直接落地的「配方级」细节——各来源的具体配比、增强倍数、FAS / HAS 正负样本构造细则、质检阈值,以及一批经过真实业务沉淀、能直接拿去训练的种子与轨迹——是训练营的实战内容。看完你会懂「为什么」与「是什么」、面试能讲到点子上;要拿到「具体怎么配、配多少」,还需要那一层。本节不灌水,讲到的原理都是真的。

2.1 数据流水线全貌

造 Agent 训练数据,是一条有明确环节的流水线:

下面逐环讲清「每一环在干嘛、为什么需要它」。

2.2 种子数据:从哪来

种子问题(调研问题)通常由几个来源互补而成:

  • 真实日志挖掘:从已上线系统的真实用户 query 里提取、聚类、挑高频高价值的。最贴近真实分布,通常是主力来源。
  • 专家编写:领域专家按场景补写,覆盖日志里没有、但重要的场景(冷启动、边角 case)。
  • LLM 扩写:用强模型对已有种子做改写、变体生成,快速扩量。

业内行话:种子数据的分布比数量更重要。面试能讲「我会让种子覆盖不同领域 × 不同问题类型 × 不同难度,而不是一股脑堆同质问题」,比只说「我造了 N 条数据」专业得多,因为模型只会做它见过分布的题。

🔒 至于各来源具体配多少比例、日志怎么聚类挑选,是随业务调出来的经验值,属训练营实战。

2.3 轨迹数据:Teacher 模型生成 + 数据增强

种子有了,怎么变成「带完整过程」的轨迹?用一个更强的 Teacher 模型实际跑一遍每个种子问题,把它的 Thought/Action/Observation/Final 全程录下来,这就是一条轨迹。

但优质种子很贵、数量有限。要扩到训练够用的量,靠数据增强,常见三类思路:

  • 问题改写:同一个问题用不同说法问(「谁更省运维」↔「哪个运维更轻」)。
  • 参数变化:把问题里的具体参数换掉(规模、约束、候选项),一题变多题。
  • 组合扩展:把单一问题扩成「组合问题 / 追问」,逼出更长的多步轨迹。

🔒 设防点:用哪个 Teacher、每类增强放大多少倍、怎么保证增强后不塌缩成同质数据,是配方级细节,训练营里会带着做。本节你要带走的是:「少量优质种子 + 分层增强」扩量,且增强要保住多样性这个思路。

2.4 质量验证与筛选

Teacher 生成的轨迹不能照单全收,有的中途跑偏、有的格式错。要用自动规则先筛一遍,核心看三点:

  • 格式是否合法(标签完整、能解析)
  • 步骤是否合理(没有死循环、没有无意义的重复调用)
  • 最终答案是否正确(能对照参考答案 / 用规则或模型判)

不达标的直接丢,或退回重新生成。(具体的判定阈值、用什么模型当裁判,是实战调出来的,属训练营。)

2.5 格式标准化

不同来源的轨迹,格式可能五花八门。喂给训练框架前,要统一成目标模型的原生对话 / 工具调用格式:

这一步看着琐碎,但格式不统一,训练直接报错或学歪,是数据工程里最容易踩、也最不起眼的坑。

2.6 数据分布:为什么要均衡

最后,要检查整批数据的分布:按领域、按问题类型、按工具调用步数,是不是均衡?

如果九成数据都是「两步就能答」的简单问题,模型就学不会「几十步的深度调研」;如果全是某一类问题,换个类型就抓瞎。模型只会做它见过分布的题,分布失衡,模型就偏科。

2.7 进阶:Agentic CPT 的数据合成(FAS / HAS)是怎么回事

前面说的是 SFT 用的轨迹数据。还有一种更早期、更底层的数据,Agentic CPT(持续预训练) 用的数据,目的是给通用模型注入「Agent 偏置」,让后续 SFT/RL 更高效。它有两种合成思路,理解概念即可:

  • FAS(一阶动作合成):从原始材料出发,合成「单步的 Agent 动作」样本,教模型基本的「看到这种情况,该做这个动作」。教的是孤立的一步
  • HAS(高阶动作合成):核心洞察是「轨迹里每一步都是一个隐藏的决策」。HAS 把次优 / 错误的步骤也利用起来(作为负面样本),让模型学的是决策能力而非死记某条轨迹,防过拟合、提泛化。教的是步与步之间的取舍

一句话抓住区别:FAS 教「单步动作」,HAS 教「面对一堆选择时选哪条路」。HAS 更贵、但更接近真正的 Agent 智能,因为调研里难的从来不是某一步,而是「选哪条路」。

讲师私货:HAS 这个「连错误步骤都能当负样本利用」的思路很值钱,面试聊数据构造时,大多数人只会说「造正样本」,能讲出「次优轨迹不浪费,作为负样本教模型决策」,立刻区别于只背过流程的人。这和后面 RL 里「负样本筛选」是一脉相承的。

🔒 设防点FAS / HAS 具体怎么构造正负分叉、配多少比例、用什么材料喂,是这套方法最吃工程经验的部分,也是训练营里会逐步拆开的地方。本节你要带走的是 HAS 的思想(次优步骤当负样本、教决策而非记事实),这一点讲清楚,面试就够亮眼了。

🧭 这一章到这儿:数据构造的完整思路、每一环在解决什么、以及 Loss Mask、FAS / HAS 的核心思想都讲清了——这一章为你画好了数据构造的完整认知地图,面试里把「Agent 训练数据怎么来的」讲到点子上,绰绰有余。等你要亲自下场搭这条流水线时,具体的工程配方(配比、种子、质检口径)就是你要翻的下一座山。下一章我们顺着往下走,讲这些数据怎么喂进多阶段训练


🏆 Part 3 · 验收串题 | ~10%

关联面试题(5 道,覆盖 5 个角度)

  1. 【工具调用数据构造】 用强化学习训练 Agent 调用工具时,如何构建和优化训练数据(含正负样本)?
  2. 【合成数据构造】 缺乏足够真实标注数据时,如何系统性地构建高质量的大规模合成数据?
  3. 【CPT 数据流水线】 CPT(持续预训练)任务中,典型的数据处理流水线是怎样的?
  4. 【Agent 完整训练流程】 设计一个基于大模型的 Agent 完整训练与迭代流程(任务定义、环境、数据…)。
  5. 【训练链路数据收集】 构建 Agent 完整训练链路时,数据收集、任务建模等关键步骤怎么做?

自检清单

  • 能讲清「为什么通用模型要专门造数据训练成 Agent」(缺 Agent 本能 / 见过的轨迹少)
  • 能说出种子数据 vs 轨迹数据的区别,以及一条轨迹由什么组成
  • 能讲清 Loss Mask:为什么要 mask 掉 observation(否则模型学着背 / 编造工具返回)
  • 能讲清数据流水线五环(种子 → 轨迹 → 增强 → 质检 → 格式)各自在解决什么
  • 能讲清「数据分布为什么比数量重要」,以及 FAS / HAS 的核心思想(尤其 HAS 用次优轨迹当负样本)

学完这一章,你已经理解了「优质训练数据是怎么造出来的」这条完整思路。下一章,我们把这些数据喂进去,讲多阶段训练:Agentic CPT → SFT 冷启动 → GRPO 强化学习,看一个通用模型怎么一步步被训练成真正会做调研的 Agent。