synthetic-data-kit
Meta开源的LLM合成数据生成工具,4步CLI将PDF/Docx等原始文档转为微调数据集
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Meta开源的LLM合成数据生成工具,4步CLI将PDF/Docx等原始文档转为微调数据集
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
训练过LLM的朋友都懂:模型选型有LlamaFactory、微调框架有LLaMA-Factory、推理部署有vLLM——工具链已经非常成熟。但当你真正动手微调时,往往发现最难的不是"怎么训",而是数据从哪来、怎么格式化。
你手里可能有几十份PDF论文、一堆网页抓取内容、YouTube教程字幕,甚至是团队内部的Docx文档。这些资料内容质量很高,但AI不认——它们既不是Alpaca格式,也不是ChatML格式,更不是ShareGPT结构。直接塞进微调pipeline,要么报错,要么训出来的模型质量一言难尽。
Meta的AI团队也遇到了这个问题。2024年,他们开源了Synthetic Data Kit——一个专门解决"数据格式转换 + 合成数据生成"的CLI工具,让开发者可以把自己的原始文档一键变成高质量的微调数据集。

图1:项目核心贡献者 Sanyam Bhutani(Meta AI)
Synthetic Data Kit由Meta AI的研究团队开发维护,主要作者是Sanyam Bhutani和Hamid Shojanazeri。项目采用MIT许可证,当前版本为0.0.5b1(beta阶段)。
该项目解决的问题非常具体:LLM微调中,数据预处理占用了大量工程时间。Llama 3的官方后训练指南就指出,高质量合成数据(Synthetic Data)是提升模型推理能力的关键。但从原始文档到可用的微调数据,这段路需要解决格式解析、文本分块、QA生成、质量过滤、格式导出等多个环节,每个环节都有坑。
Meta AI团队将这套工作流封装成一个模块化的CLI工具,并开源给社区。项目的GitHub仓库目前有1598 Stars、219 Forks、48个Open Issues,社区活跃度在Meta同类工具中属于中等偏上。
Synthetic Data Kit的设计哲学是极简CLI + 模块化管道,用户只需要记住4个命令:
支持多种文件格式的自动解析,包括:
| 格式 | 解析方式 |
|---|---|
| PyMuPDF / pdfminer-six | |
| Word (.docx) | python-docx |
| PPT (.pptx) | python-pptx |
| 网页 (.html) | BeautifulSoup4 |
| YouTube视频 | pytube(提取字幕) |
| 纯文本 (.txt) | 直接读取 |
| 图片 | PyMuPDF(多模态支持) |
解析后的数据以 Lance格式 存储,这是一种高性能列式存储格式,比JSON更适合大规模数据处理。默认保存路径为 data/parsed/ 目录。
将解析后的文本喂给LLM,生成指定格式的微调数据。支持三种生成类型:
生成质量由YAML配置文件控制,核心参数包括:
temperature(随机性,默认0.7)chunk_size(分块大小,默认4000 tokens)num_pairs(生成对数,默认25对)max_context_length(上下文窗口,默认8000)支持两种LLM后端:
生成的QA对数量上来了,但质量参差不齐。Curate步骤使用Llama模型作为评判者,对每对问答打分(1-10分),只保留超过阈值(如7.0分)的优质数据。
synthetic-data-kit curate data/generated/report_qa_pairs.json --threshold 8.0
打分依据包括:答案是否准确、是否与上下文一致、是否具有信息量等。批量处理模式下,支持对整个目录的JSON文件统一打分过滤。
最后一步将精选数据导出为目标微调框架所需的格式。目前支持:
代码结构清晰,分为以下核心模块:
synthetic_data_kit/
├── core/ # 主流程:ingest/create/curate/save_as
├── generators/ # 数据生成器(QA、CoT、多模态QA、VQA)
├── models/ # LLM客户端(支持vLLM和OpenAI兼容API)
├── parsers/ # 文件解析器(PDF/Docx/PPT/HTML/YouTube/文本)
├── server/ # Flask Web界面(可选,非主要交付)
└── utils/ # 工具:配置、分块、格式转换、Lance存储
LLMClient是核心枢纽,通过Pydantic模型定义配置,抽象了vLLM和API Endpoint两种后端的差异。代码大量使用类型提示(typing.Optional、typing.Dict),MyPy配置了严格的类型检查规则。
Lance存储层:所有中间数据以Apache Arrow/Lance格式保存,相比JSON有以下优势:列式存储支持快速列筛选、向量化查询、零拷贝读取。Python生态通过datasets和pyarrow库无缝集成。
除了CLI,项目还附带了一个轻量级的Flask Web服务器,提供文件上传、流程管理、数据预览等图形化操作入口。

图2:Synthetic Data Kit在GitHub的项目概览
Web界面基于Bootstrap-Flask模板实现,功能相对简单,不是项目的重点。如果团队中有非技术人员需要使用,可以部署Web版本;专业用户建议直接使用CLI。
Synthetic Data Kit的安装非常简单,两种方式:
# 方式1:从PyPI安装(推荐)
pip install synthetic-data-kit
# 方式2:从源码安装
git clone https://github.com/meta-llama/synthetic-data-kit.git
cd synthetic-data-kit
pip install -e .
唯一的前提是Python >= 3.8,不需要GPU。如果只是做数据格式转换(Ingest + Save-as步骤),甚至不需要LLM后端。只有Create步骤需要LLM推理,可以选择:
整个项目磁盘占用约500MB,内存需求4GB,部署难度极低。
尽管设计出色,项目也存在一些已知问题:
Synthetic Data Kit背后反映的是LLM后训练领域的一个重要趋势:从依赖真实标注数据,到主动合成高质量训练数据。
2024年以来,AlphaProof、DeepSeek-R1、OpenAI o1等模型都大量使用合成数据进行训练。合成数据的优势在于:规模可控、质量可评、覆盖可调。Meta开源这个工具,本质上是把自家后训练流程中的"数据工程"能力开放出来,让更多研究者能以更低成本复现高质量的微调流程。
从GitHub数据看,该项目在2024年底到2025年初期间增长较快,与Llama 3.1/3.2发布周期基本吻合,反映了社区对合成数据工具的强烈需求。
快速上手命令:
pip install synthetic-data-kit
mkdir -p data/{input,parsed,generated,curated,final}
synthetic-data-kit ingest docs/report.pdf
synthetic-data-kit create data/parsed/report.lance --type qa
synthetic-data-kit curate data/generated/report_qa_pairs.json --threshold 8.0
synthetic-data-kit save-as data/curated/report_cleaned.json --format alpaca