跳到主要内容

Datasets 概览

新增于: @mastra/core@1.4.0

Dataset 是测试用例的集合,你可以针对这些测试用例运行实验,以衡量 Agent 和 Workflow 的表现。每次变更都会创建新版本,因此可以精确复现过去的实验。将 Dataset 与 Scorer 配合使用,可以跟踪 prompt、模型或代码变更带来的质量变化。

用法
用法的直接链接

配置 Storage
配置 Storage的直接链接

在 Mastra 实例中配置 Storage。Dataset 需要提供 datasets domain 的 Storage 适配器:

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { LibSQLStore } from '@mastra/libsql'

export const mastra = new Mastra({
storage: new LibSQLStore({
id: 'my-store',
url: 'file:./mastra.db',
}),
})

访问 Datasets API
访问 Datasets API的直接链接

所有 Dataset 操作都可通过 mastra.datasets 使用:

const datasets = mastra.datasets

// Create a dataset
const dataset = await datasets.create({ name: 'my-dataset' })

// Retrieve an existing dataset
const existing = await datasets.get({ id: 'dataset-id' })

// List all datasets
const { datasets: all } = await datasets.list()

有关完整的方法列表,请访问 DatasetsManager Reference

Studio
Studio的直接链接

你也可以在 Studio 中管理 Dataset。打开 Studio 后,从侧边栏选择 Datasets,即可查看所有可用 Dataset 或创建新 Dataset。

要开始使用,请选择 Create Dataset,然后设置名称、描述和可选 schema。确认后,你会看到 Dataset 详情页面,其中包含两个选项卡:ItemsExperiments

Items 视图中,可以添加、更新和删除 item,并查看版本历史记录。选择 Add Item 可插入新 item,并通过 JSON 编辑器设置 input 和 ground truth。在此视图中,还可以从 CSV 或 JSON 文件批量导入 item。导入时,请将每一列映射到对应的 Dataset 字段。

选择 Versions 可查看 Dataset 的完整变更历史。选择 Compare Versions 后,选取任意两个版本并选择 Compare,即可并排查看这两个版本之间所有新增、变更或删除 item 的 diff。

创建 Dataset
创建 Dataset的直接链接

使用名称和可选描述调用 create()

src/mastra/datasets/create-dataset.ts
import { mastra } from '../index'

const dataset = await mastra.datasets.create({
name: 'translation-pairs',
description: 'English to Spanish translation test cases',
})

console.log(dataset.id) // auto-generated UUID

定义 schema
定义 schema的直接链接

创建 Dataset 时,可以传入 Standard JSON SchemaZodValibotArkType 等),以强制规定 inputgroundTruth 的结构:

src/mastra/datasets/create-with-schema.ts
import { z } from 'zod'
import { mastra } from '../index'

const dataset = await mastra.datasets.create({
name: 'translation-pairs',
inputSchema: z.object({
text: z.string(),
sourceLang: z.string(),
targetLang: z.string(),
}),
groundTruthSchema: z.object({
translation: z.string(),
}),
})

插入时,与 schema 不匹配的 item 会被拒绝。

添加 item
添加 item的直接链接

使用 addItem() 添加单个 item,或使用 addItems() 批量插入:

src/mastra/datasets/add-items.ts
// Single item
await dataset.addItem({
input: { text: 'Hello', sourceLang: 'en', targetLang: 'es' },
groundTruth: { translation: 'Hola' },
})

// Bulk insert
await dataset.addItems({
items: [
{
input: { text: 'Goodbye', sourceLang: 'en', targetLang: 'es' },
groundTruth: { translation: 'Adiós' },
},
{
input: { text: 'Thank you', sourceLang: 'en', targetLang: 'es' },
groundTruth: { translation: 'Gracias' },
},
],
})

更新和删除 item
更新和删除 item的直接链接

updateItem()deleteItem()deleteItems() 可让你通过 itemId 修改或移除现有 item:

src/mastra/datasets/update-delete.ts
await dataset.updateItem({
itemId: 'item-abc-123',
groundTruth: { translation: '¡Hola!' },
})

await dataset.deleteItem({ itemId: 'item-abc-123' })

await dataset.deleteItems({ itemIds: ['item-1', 'item-2'] })

列出和搜索 item
列出和搜索 item的直接链接

listItems() 支持分页和全文搜索:

src/mastra/datasets/list-items.ts
// Paginated list
const { items, pagination } = await dataset.listItems({
page: 0,
perPage: 50,
})

// Full-text search
const { items: matches } = await dataset.listItems({
search: 'Hello',
})

// Search and pagination can be combined with a specific version
const { items: v2Matches } = await dataset.listItems({
version: 2,
search: 'Hello',
page: 0,
perPage: 50,
})

// Version-only snapshot returns a bare DatasetItem[]
const v2Items = await dataset.listItems({ version: 2 })

版本控制
版本控制的直接链接

每次改变 Dataset item(添加、更新或删除)都会提升 Dataset 版本。这样可以将实验固定到特定的数据快照。

列出版本
列出版本的直接链接

使用 listVersions() 查看分页的版本历史记录:

src/mastra/datasets/list-versions.ts
const { versions, pagination } = await dataset.listVersions()

for (const v of versions) {
console.log(`Version ${v.version} — created ${v.createdAt}`)
}

查看 item 历史记录
查看 item 历史记录的直接链接

使用 itemId 调用 getItemHistory(),查看特定 item 在不同版本中的变化:

src/mastra/datasets/item-history.ts
const history = await dataset.getItemHistory({ itemId: 'item-abc-123' })

for (const row of history) {
console.log(`Version ${row.datasetVersion}`, row.input, row.groundTruth)
}

固定到版本
固定到版本的直接链接

获取过去某一版本中存在的确切 item:

src/mastra/datasets/pin-version.ts
const items = await dataset.listItems({ version: 2 })

也可以将实验固定到某个版本,请参阅运行实验。有关完整的方法和参数列表,请访问 Dataset Reference