# Unsloth 数据配方

Unsloth Studio 的 Data Recipes 让你上传 PDF 或 CSV 文件等文档，并将它们转换为可用的/合成数据集。通过图节点工作流可视化创建和编辑数据集。在深入了解 Unsloth Data Recipes 之前，本指南将带你先掌握基础知识。

<div data-with-frame="true"><figure><img src="/files/d7a623c1009dd96e330afd7e279e05a2e03ae91b" alt=""><figcaption></figcaption></figure></div>

### Data Recipes 的工作方式

Data Recipes 遵循相同的基本流程。你打开 recipes 页面，创建或选择一个 recipe，在编辑器中构建工作流，进行验证并运行预览，然后在输出看起来正确后运行完整数据集。添加种子数据和生成块，验证工作流，预览示例输出，然后运行完整数据集构建。Unsloth Data Recipes 由以下组件驱动： **NVIDIA Nemo** [**Data Designer**](https://github.com/NVIDIA-NeMo/DataDesigner).

<div data-with-frame="true"><figure><img src="/files/1a3a53c44a59a493bdab62f046b2394ef4c81b59" alt=""><figcaption><p>生成数据集并微调模型的示例</p></figcaption></figure></div>

从整体上看，通常的工作流程应如下所示：

1. 打开 recipes 页面。
2. 创建一个新 recipe 或打开现有 recipe。
3. 添加区块来定义你的数据集工作流。
4. 点击 **验证** 以尽早发现配置问题。
5. 运行预览以快速检查示例行。
6. 当 recipe 准备就绪后，运行完整数据集构建。
7. 在图中实时查看进度和输出，或在 **执行** 视图中查看更多详情。
8. 在 **Studio** 中选择生成的数据集并微调模型。

### 开始使用

recipes 页面是主要入口。recipes 会本地存储在浏览器中，因此你之后可以继续使用已保存的工作。从这里，你可以创建一个空白 recipe 或打开一个引导式学习 recipe。

{% hint style="info" %}
recipes 可以导出和导入，因此很容易与其他 Unsloth 用户分享工作流 :tada:。如果你正尝试构建某种特定的数据集模式，可以在 Unsloth Discord 中提问。也许已经有人有可以分享的 recipe。
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/93d865e1fd9db417fb274e07e115a05dde2834e7" alt="" width="563"><figcaption><p>Recipes 落地页</p></figcaption></figure></div>

如果你刚接触工作流的概念，学习型 recipes 是最快了解种子数据、提示词、表达式和验证器如何在一个可运行示例中组合在一起的方式。如果你已经知道自己想要的数据集形状，从空白开始通常更快。

#### 选择起始路径

<table><thead><tr><th>如果你想要：</th><th>从以下开始：</th><th data-hidden></th></tr></thead><tbody><tr><td><sub><strong>快速构建自定义工作流</strong></sub></td><td><sub><strong>从空白开始</strong></sub></td><td></td></tr><tr><td><sub><strong>通过示例学习产品</strong></sub></td><td><sub><strong>从学习型 Recipe 开始</strong></sub></td><td></td></tr><tr><td><sub><strong>继续之前的工作</strong></sub></td><td><sub><strong>打开已保存的 Recipe</strong></sub></td><td></td></tr></tbody></table>

### 你在编辑器中构建什么

编辑器是 recipe 成型的地方。你从区块面板添加区块，在对话框中配置它们，在画布上连接它们，然后验证或运行工作流。

<div data-with-frame="true"><figure><img src="/files/d717680dce538e114d9534e5c62895753457b2e1" alt="" width="563"><figcaption><p>构建产品描述工作流的示例</p></figcaption></figure></div>

{% columns %}
{% column %}
编辑器有几个核心部分：

* recipe 标题栏，在这里你可以重命名 recipe 并在以下之间切换 **编辑器** 和 **执行**
* 画布，recipe 图在这里显示
* 区块面板，在这里添加新区块
* 配置对话框，在这里定义提示词、引用、模型别名、验证器和种子设置。
* 浮动的 **运行** 和 **验证** 控件
* 这里需要补充更多内容

{% endcolumn %}

{% column %}
recipe 中最常见的区块是：

* **种子** 用于来自 Hugging Face、本地结构化文件的输入数据（或会被分块成行的非结构化文档）。
* **LLM + 模型** 用于提供商、模型配置、LLM 生成区块以及共享工具配置文件。
* **表达式** 用于不需要 LLM 调用的基于 Jinja2 的转换。
* **验证器** 用于通过内置的 Python、SQL 和 JavaScript/TypeScript 代码检查器过滤不良生成代码。
* **采样器** 用于类别和子类别等确定性列。
  {% endcolumn %}
  {% endcolumns %}

### 引用如何工作

大多数生成数据的区块（少数例外）都会成为后续区块的引用。这是 Data Recipes 背后的核心理念之一。你只需创建一次值，然后在提示词、表达式、结构化输出和验证步骤中重复使用它。

{% hint style="info" %}
Jinja 表达式可帮助你处理 recipe 中已经存在的值。你可以引用嵌套字段，例如 `{{customer.first_name}}` ，连接值，例如 `{{customer.first_name}} {{customer.last_name}}` 并使用如下模式添加条件逻辑： `{% if condition %}...{% endif %}`&#x20;
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/13e6b1a88cd92950f1439783b8d036cb437a5010" alt="" width="563"><figcaption><p>编辑器中显示引用的示例</p></figcaption></figure></div>

例如：

* 一个名为 `domain` 的类别区块可以被引用为 `{{ domain }}`
* 种子列可以直接在 LLM 提示词中使用，你的种子数据中的列（例如 HF 数据集列、csv）
* 结构化 LLM 输出可以暴露字段供后续提示词使用
* 表达式区块可以在不再调用模型的情况下组合前面的值

### 之后会发生什么？

预览运行用于快速迭代。它们会在编辑器中返回示例行和分析结果，因此你可以在提交完整运行之前检查生成的数据。

完整运行会创建一个持久化的本地数据集工件。该输出之后会出现在 Studio 的本地数据集选择器中，你可以再次检查它并用于微调。你也可以选择将数据集发布到你的 Hugging Face 仓库。

### 核心构建模块

{% columns %}
{% column %}

<div data-with-frame="true"><figure><img src="/files/7d47a7c1cd8d7e9c2ab295e69e860ee3038fb301" alt="" width="188"><figcaption><p>核心构建模块</p></figcaption></figure></div>
{% endcolumn %}

{% column %}

<div data-with-frame="true"><figure><img src="/files/abb6c49167598288483b89fb01c26fb97b9de2d9" alt="" width="188"><figcaption><p>模型和 LLM 区块</p></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

#### 模型设置分为两个可用层：

* **模型提供商** 定义端点和身份验证
* **模型配置** 定义模型名称和推理设置

此设置适用于托管提供商、自托管端点、 `vLLM` , `llama.cpp` ，或任何你在 Studio 外运行的 OpenAI 兼容 API。

{% hint style="info" %}
recipe 不限于一个模型。你可以添加多个 **模型提供商** 和 **模型配置** 区块，然后在不同步骤中使用不同模型，例如一个用于编程，另一个用于通用文本任务。
{% endhint %}

完成模型设置后，你可以使用四种 LLM 区块类型：

| 区块      | 输出     | 最适合                             |
| ------- | ------ | ------------------------------- |
| LLM 文本  | 自由格式文本 | 指令、解释、对话和描述                     |
| LLM 结构化 | JSON   | 需要固定字段和可预测结构的输出                 |
| LLM 代码  | 代码     | Python、SQL、TypeScript 和其他代码生成任务 |
| LLM 评审  | 评分结果   | 使用一个或多个用户定义的分数来评定输出             |

#### 工具配置文件

{% columns %}
{% column %}
工具配置文件区块为一个或多个 LLM 区块定义共享的基于 MCP 的工具访问权限。当生成步骤需要工具时使用它们，例如通过以下方式查找代码文档： `Context7`.

左侧图片显示已在工具配置文件区块对话框中添加并配置了 Context7 MCP：
{% endcolumn %}

{% column %}

<div data-with-frame="true"><figure><img src="/files/b72401f164ad92f31ea5d4b6df2218f8e1c7aeaf" alt="" width="375"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

#### 验证器

{% columns %}
{% column %}
验证器区块主要通过对生成的代码输出运行代码检查和语法验证来面向 LLM 代码区块，这有助于你通过过滤掉这些行来避免不良或无效的代码行进入最终数据集。内置选项涵盖 Python、SQL 和 JavaScript/TypeScript 验证。
{% endcolumn %}

{% column %}

<div data-with-frame="true"><figure><img src="/files/e4c0088cdd270f31a861dafb6af42f80c4bf8b58" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

### 验证、预览和运行

一旦 recipe 工作流就位，下一步就是执行。推荐的模式是：先验证，再预览以快速反馈并在执行视图中检查生成的数据，然后在你觉得输出符合计划时运行完整数据集。

按以下顺序使用执行控件：

{% stepper %}
{% step %}

#### 验证

点击 **验证** 以捕获配置问题。
{% endstep %}

{% step %}

#### 预览

运行预览以检查示例行和分析结果
{% endstep %}

{% step %}

#### 优化

优化提示词、引用、种子设置或验证器。

反复迭代，直到你对生成的数据感到满意
{% endstep %}

{% step %}

#### 运行完整数据集构建

{% endstep %}
{% endstepper %}

<figure><img src="/files/a134f5650010ae2b3ead2512c422f31a2e6fb2b3" alt="" width="188"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/zh/xin-zeng/studio/data-recipe.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
