‧
4 分钟阅读
我们 AI 数据集生成器背后的故事

Matthew Hefferon
‧ 4 分钟阅读

分享本文
在 Metabase,我经常需要伪造数据来演示新功能。我发现自己在 Kaggle 上翻找,但没什么灵感,还浪费了很多搜索时间。所以我做了一个小工具来帮我生成数据集,并决定将其开源。
结果它登上了 Hacker News 的首页,在 GitHub 上获得了 600 多个星标,收到了一个 YC 投资的初创公司的贡献,并被 TLDR newsletter 报道。
为什么不用 Kaggle 或 ChatGPT
如上所述,我对 Kaggle 的数据集感到非常没有灵感,并不断求助于 ChatGPT 来生成伪造数据。我会提出要求,得到结果,然后进行可视化,并发现问题。比如条形图的高度都一样,增长趋势方向不对,变化不够等等。我发现自己总是在重复这个循环,然后想……也许有更好的办法。
我实际做了什么
既然我已经写过提示词并有了一些经验,我想,为什么不把这个过程变成一个简单的工具呢?于是我把我的提示词输入转换成了几个下拉菜单:
- 业务类型
- 行数
- 单表或多表结构
- 日期范围
- 增长模式
- 变化和粒度
你点击“预览数据”,就能得到一个示例结构和 10 行数据。如果看起来不错,你可以导出完整的 CSV、SQL 数据集,或者启动 Metabase 来探索它。
它是如何工作的
步骤 1:结构生成的工作原理
当你点击“预览数据”时,应用会通过 LiteLLM 向你选择的 LLM 提供商(OpenAI、Anthropic 或 Google)发送一个提示词。这个提示词是根据业务类型量身定制的,并返回一个定义了表、字段、关系和逻辑的 JSON 规范。把它想象成一个可信数据集的蓝图。
最初,我只是用 ChatGPT 生成结构。但在 Hacker News 上一些人提到如果能切换模型会很酷之后,我们收到了一个很棒的PR,它增加了 LiteLLM 支持,所以现在你可以轻松地在不同提供商之间切换。感谢@manueltarouca的贡献!
步骤 2:数据行由 DataFactory 在本地生成
我最初让 LLM 生成所有的数据行,但这速度慢得令人痛苦,即使只有 100 行。我尝试将任务分成批次处理,但这又引入了新的问题。例如,用户 ID 在第一批中可能是 001
、002
、003
,而在第二批中可能变成了 u099
、u100
这样的格式。
所以我退后一步,和 Cursor 进行了深入讨论。我需要一个更快、更真实、运行成本更低的东西。经过一番来回讨论,我决定构建 DataFactory。它使用 Faker.js 在本地生成数据,并应用来自 LLM 的结构和模拟规则。它还强制执行一些逻辑,比如:
- 真实的 SaaS 用户流失和定价计划
- 电商的小计、税费和运费能实际相加正确
- 医疗索赔中,赔付金额绝不会超过手术费用
步骤 3:性能和成本
通过将其分为两个阶段,这个工具保持了快速且出奇地便宜。只有结构生成部分会调用 LLM,而我想确保这不会让我破产。所以我添加了 token 跟踪,并用一个超级先进的公式计算了成本:
总 token 数 × 每个 token 的成本 = ???
结果发现……还不错。大多数预览使用 GPT-4o 的成本在 0.03-0.05 美元之间。之后,就全是免费的了。没有额外的 API 调用,只有纯粹的、100% 的、A 级数据。
亲自试试 + 贡献代码
项目还处于早期阶段,所以并非完美无缺。但如果你需要快速、真实的数据集,不妨一试。所有东西都通过 Docker 在本地运行,你只需要一个你喜欢的 LLM 提供商的 API 密钥就可以开始使用了。
如果你想贡献代码,这里有很多可以参与的地方:
- 添加新的业务类型或调整现有的
- 改进结构逻辑或模拟规则
- 在这里添加你超棒的功能
基础已经打好了。如果你有想法,我非常希望得到你的帮助,让它更进一步。在 GitHub 上给它点个星标、复刻它,或者提交一个 PR 吧。