[v2] 数据集 Context Card:Agent 可解析的数据履历规范
提出一种面向 AI 原生数据团队的结构化数据集描述规范,弥补现有 Model Card / Data Card 在 Agent 决策场景下的不足,并给出完整的 schema 设计与自动化维护策略。
数据集 Context Card:Agent 可解析的数据履历规范
一、现有方案的局限
HuggingFace 的 Model Card 和 Data Card 在社区推广上取得了不小的成功。它们让人类研究者在五分钟内对一个模型或数据集建立基本认知:这是什么、用来干什么、有没有已知偏见。但当我们问”Agent 能从中读取什么?“时,答案令人沮丧——几乎什么都不能。
问题不在于内容,而在于格式假设:现有的 Card 本质上是为人眼设计的 Markdown 文档。它的核心信息散落在自然语言段落里,没有机器可直接消费的字段,没有版本化的处理步骤,更没有与训练 run 的关联索引。
具体来看,当前方案存在三个致命缺陷:
1. 非结构化叙述,Agent 无法可靠提取。 “This dataset was collected from web crawls in 2023” 和 “数据来源于2023年网络爬取” 在语义上等价,但 Agent 读取时必须做 NLP 解析,准确率不稳定,无法直接驱动决策逻辑。
2. 缺失数据工程关键字段。 过滤率、每步清洗的代码版本、与具体训练 run 的映射关系——这些对数据工程师每天都要用到的字段,在现有规范里完全缺席。
3. 静态快照,无法追踪演化。 数据集会被反复清洗和版本迭代。一份没有变更历史的 Card 只描述了某个时间点,无法支持”这批数据在上次训练后有没有被进一步过滤”这样的查询。
AI 原生数据团队的提案(ai-native-data-team-v2)指出每个数据集应维护一份”数据履历”,但没有定义履历的数据结构。这个 schema 的缺位,正是本文要填补的。
二、Agent 真正需要什么信息
在数据质检和配比决策场景中,Agent 的工作可以分解为几类典型任务:
- 质检:判断这批数据是否满足当前训练目标的质量门槛
- 配比:在多个数据集之间分配采样权重
- 溯源:当模型出现某类问题时,定位可能的数据来源
- 预测:根据历史训练结果,预估加入这批数据后的能力变化
要完成这些任务,Agent 需要一个分层信息模型:
来源层(Provenance Layer)
Agent 需要知道数据从哪里来、什么时候采集的、用什么策略筛选的。这决定了数据的”先天质量上界”:
- 采集时间范围(影响时效性和知识截止点)
- 来源域(domain)及其权重分布
- 采集策略(全量爬取?关键词过滤?种子 URL 扩散?)
- 原始质量估计(去重前的重复率、语言分布、内容类型分布)
处理层(Processing Layer)
原始数据经过多轮清洗才能进入训练。Agent 需要理解每一步做了什么、过滤掉了多少、以及用的是哪个版本的代码——这直接决定能否复现:
- 清洗步骤列表(有序,附 commit hash 或代码链接)
- 每步的输入/输出样本数及过滤率
- 已知问题(如某步骤引入了特定偏差、某批次数据异常)
训练历史层(Training History Layer)
数据集的”价值”不只在于它自身的质量,还在于它在实际训练中的表现历史:
- 出现过的训练 run ID 列表
- 每次 run 中的采样配比
- 对应的能力评估结果(按评测集维度)
这一层让 Agent 可以做因果推断:「上次以 15% 配比加入这批数学数据,GSM8K 提升了 3.2 点」。
元认知层(Meta-Cognition Layer)
这是最”软”但往往最有用的一层——对数据集的主观评估,通常来自数据工程师的经验:
- 这个数据集”擅长”什么(能力标签)
- “有问题”的典型样本示例(及问题类型)
- 推荐使用场景和不推荐使用场景
三、Context Card Schema 设计
基于上述分层模型,给出完整的 YAML schema 示例:
# dataset-context-card.yaml
# Context Card v1.0 - Agent-readable dataset descriptor
id: "math-instruct-v3"
version: "3.2.1"
created_at: "2025-11-01T08:00:00Z"
updated_at: "2026-03-15T14:30:00Z"
maintainers:
- id: "u_alice"
role: "owner"
# ── 来源层 ──────────────────────────────────────────
provenance:
collection_period:
start: "2024-06-01"
end: "2025-10-31"
sources:
- domain: "math.stackexchange.com"
weight: 0.35
strategy: "full_crawl"
- domain: "arxiv.org/cs.LG"
weight: 0.25
strategy: "keyword_filter"
keywords: ["theorem", "proof", "lemma"]
- domain: "synthetic_cot_pipeline_v2"
weight: 0.40
strategy: "generative"
generator_model: "gpt-4o-2024-08"
raw_quality_estimate:
dedup_ratio_before: 0.23 # 去重前重复率
language_distribution:
zh: 0.15
en: 0.82
other: 0.03
content_type_distribution:
qa_pair: 0.60
long_form_reasoning: 0.30
code_with_math: 0.10
# ── 处理层 ──────────────────────────────────────────
processing:
pipeline_id: "clean-math-v3"
steps:
- step: 1
name: "language_filter"
description: "保留中英文,过滤其他语言"
code_ref: "git@gongfeng:data/pipelines#a3f2c91"
input_count: 12_400_000
output_count: 12_008_000
filter_rate: 0.032
- step: 2
name: "deduplication"
description: "MinHash LSH 去重,jaccard 阈值 0.85"
code_ref: "git@gongfeng:data/pipelines#a3f2c91"
input_count: 12_008_000
output_count: 9_856_000
filter_rate: 0.179
- step: 3
name: "quality_classifier"
description: "fastText 质量分类器,过滤低质内容"
code_ref: "git@gongfeng:data/pipelines#b71e004"
input_count: 9_856_000
output_count: 8_100_000
filter_rate: 0.178
model_ref: "quality-clf-math-v2.bin"
- step: 4
name: "format_normalization"
description: "统一 LaTeX 格式,修复 Unicode 异常"
code_ref: "git@gongfeng:data/pipelines#b71e004"
input_count: 8_100_000
output_count: 8_097_000
filter_rate: 0.0004
final_count: 8_097_000
known_issues:
- issue_id: "ISS-042"
severity: "medium"
description: "step3 质量分类器对竞赛数学(olympiad)有轻微偏低打分,估计约 3% 的高质量竞赛题被错误过滤"
affected_step: 3
status: "open"
reported_by: "u_bob"
reported_at: "2026-01-10"
# ── 训练历史层 ──────────────────────────────────────
training_history:
- run_id: "train-run-20251120"
mix_ratio: 0.12
mix_strategy: "uniform_sampling"
eval_results:
gsm8k: 0.812
math_500: 0.641
minerva: 0.387
notes: "首次引入该数据集,数学能力显著提升"
- run_id: "train-run-20260115"
mix_ratio: 0.18
mix_strategy: "difficulty_weighted"
eval_results:
gsm8k: 0.841
math_500: 0.678
minerva: 0.412
notes: "提高配比后进一步提升,但代码能力略有下降 (-0.8 HumanEval)"
# ── 元认知层 ──────────────────────────────────────────
meta_cognition:
strengths:
- tag: "multi_step_reasoning"
confidence: 0.9
- tag: "algebra"
confidence: 0.85
- tag: "proof_writing"
confidence: 0.75
weaknesses:
- tag: "geometry_visual"
confidence: 0.8
note: "缺乏图形辅助的几何题"
- tag: "combinatorics_olympiad"
confidence: 0.6
note: "见 ISS-042"
typical_bad_samples:
- sample_id: "ms3-bad-001"
content_preview: "答案直接给出数字,无推理过程..."
issue_type: "missing_reasoning_chain"
- sample_id: "ms3-bad-002"
content_preview: "LaTeX 公式残缺,\\frac{ 未闭合..."
issue_type: "format_corruption"
recommended_use_cases:
- "数学推理能力训练(SFT/RL)"
- "思维链(CoT)数据增强"
not_recommended_for:
- "几何视觉推理(缺图形数据)"
- "金融数学(领域覆盖不足)"
四、自动化维护策略
Context Card 的可持续性取决于维护成本——如果所有字段都要手动填写,它最终会烂掉。字段应按照可自动化程度分级:
完全自动(Auto):由数据处理流水线在运行时写入,零人工成本:
processing.steps[*].input_count/output_count/filter_rateprocessing.final_counttraining_history[*].run_id/mix_ratio/eval_resultsprovenance.raw_quality_estimate.*(由质量统计脚本生成)version、updated_at(git hook 触发)
半自动(Semi-Auto):工具辅助生成草稿,人工确认:
processing.steps[*].description(从代码注释提取)meta_cognition.strengths/weaknesses(由分析 Agent 基于训练历史推断,需人工审核)known_issues(由数据质检 CI 自动检出,人工补充 severity 和 description)
必须人工(Manual):无法从现有信号中可靠推断:
meta_cognition.typical_bad_samples(需人眼判断”典型性”)recommended_use_cases/not_recommended_for(需业务判断)known_issues[*].severity(需人工定级)
这套分级原则可以用一句话总结:凡是代码运行过程中就能知道的,都让代码写;凡是需要理解”为什么”的,才需要人介入。
五、与 AI 原生数据团队提案的关系
ai-native-data-team-v2 提案的核心主张是:数据工程应该像软件工程一样可追踪、可测试、可迭代。提案列出了”数据履历”作为基础设施之一,但停留在概念层面。
Context Card 是该提案信息层的具体实现,填补了以下空白:
| 提案主张 | Context Card 对应字段 |
|---|---|
| 数据来源可追溯 | provenance.* |
| 处理过程可复现 | processing.steps[*].code_ref |
| 质量可量化 | processing.steps[*].filter_rate,known_issues |
| 与训练结果关联 | training_history.* |
| 支持 Agent 决策 | 整体结构化 schema |
更重要的是,Context Card 将”数据履历”从一个记录工具升级为一个决策接口。当 Agent 需要为新一轮训练选择数据配比时,它可以直接查询每个数据集的 training_history,检索哪些配比在目标评测集上有过正向效果,而不需要人工整理报告。
这是 AI 原生数据团队与传统数据团队的本质区别:数据不只是给人看的文件,而是 Agent 可以直接消费的结构化知识。Context Card 就是这个知识的载体。
🔄 [v2 改进]
采用路径:为什么数据团队应该用这个规范
原方案的最大缺失是:没有说清楚数据团队为什么应该采用 Context Card 而不是继续用 HuggingFace Data Card。这个问题不回答,规范就只是自说自话。
定位澄清:不是替代品,是「机器可读扩展层」
Context Card 的正确定位是 HuggingFace Data Card 的机器可读附加层,而非竞争关系:
- HuggingFace Data Card:面向人类读者,叙述性,适合开源社区发布
- Context Card:面向 Agent 消费,结构化,适合内部训练流水线
两者可以共存:对外发布时提交 HuggingFace Data Card,内部维护 Context Card 作为操作接口。
最小化采用路径(降低阻力)
不要求团队一次性实现全部四层。推荐的渐进式采用:
- 阶段 0(试点,1天):只实现
processing.steps中的input_count/output_count/filter_rate三个字段——这是自动化成本最低的字段,pipeline 运行时即可写入- 阶段 1(2周):增加
training_history层——接入训练系统的 webhook,每次 run 结束自动写入配比和评测结果- 阶段 2(可选):补充
provenance和meta_cognition层工具集成:Python SDK 示例
提供 SDK 让 pipeline 在运行时自动写入,消除手动维护成本:
from context_card import DatasetCard card = DatasetCard.load("math-instruct-v3") # 在 pipeline 每个 step 结束时自动调用 with card.processing_step("deduplication", code_ref="git#a3f2c91") as step: df_out = run_dedup(df_in) step.record(input_count=len(df_in), output_count=len(df_out)) card.save() # 自动更新 version 和 updated_at采用收益量化:实施阶段 0+1 后,数据团队可以:(1) 自动追踪每次 pipeline 变更对数据量的影响;(2) Agent 可直接查询历史训练效果做配比决策,减少人工整理报告的时间(估计每次训练 run 节省 2–4 小时的数据分析工作)。
🔄 [v2 改进]
Schema 版本化策略:保证历史数据不失效
一个规范的最大风险是字段频繁变更导致历史数据失效,进而引发工具链断层。本规范承诺以下版本化策略:
核心字段锁定原则
以下字段在 v1.x 全系列中锁定不变(breaking change 需发布 v2.0):
id、version、created_at、updated_atprovenance.collection_period、provenance.sources[*].domainprocessing.steps[*].step、.name、.input_count、.output_count、.filter_ratetraining_history[*].run_id、.mix_ratio、.eval_results扩展字段通过
extensions命名空间处理团队可以添加自定义字段,但必须放在
extensions下,不污染核心命名空间:extensions: my_team: custom_quality_score: 0.87 internal_review_status: "approved"向后兼容保证
- 新增可选字段:向后兼容,旧解析器忽略即可
- 删除/重命名字段:禁止在 minor 版本中执行,必须发布 deprecation notice 且提供 migration 脚本
- 工具链在读取时遇到未知字段:忽略而非报错(宽松解析原则)
Schema 版本声明字段(新增至 YAML 根节点):
_schema_version: "1.0" # Context Card 规范版本,与数据集 version 字段分开
🔄 [v2 改进]
评估方案:量化验证「Context Card 对 Agent 决策有帮助」
「Agent 能读取 Context Card 做更好的决策」是核心 claim,但当前方案没有验证路径。以下是可操作的评估实验设计:
实验设计:有 Card vs 无 Card 的数据配比决策对比
- 任务设定:给 Agent 一个目标(如「提升模型在 GSM8K 上的准确率同时保持 HumanEval 不下降超过 1%」),让它从 10 个候选数据集中决定各自的采样配比
- 对照组(无 Card):仅提供数据集名称和数据量,Agent 凭通用知识决策
- 实验组(有 Card):提供完整 Context Card,包含
training_history中历史配比与评测结果- 重复次数:30 次随机化实验,避免 prompt 偶然性
主指标
- 配比决策准确率:与人工专家给出的「最优配比」的相关系数(Spearman’s ρ)
- 下游模型提升:按 Agent 决策的配比实际训练模型,在目标评测集上的分数 vs 基线(随机配比、人工配比)
- 决策一致性:同一目标下多次决策的方差(有 Card 应更低,因为有明确依据)
辅助指标
- Agent 引用
training_history字段的频率(验证 Card 被实际消费)- Agent 决策理由的可解释性评分(人工评估)
预期结论形式:「在 GSM8K 提升目标下,有 Context Card 的 Agent 配比决策使最终模型准确率比无 Card 基线高 X 点,配比决策与专家方案的相关系数从 0.3 提升至 0.7。」
本文是 ai-native-data-team-v2 提案的配套规范文档,建议与该提案一同阅读。schema 版本:v1.0,后续迭代将保持向后兼容。