> ## Documentation Index
> Fetch the complete documentation index at: https://cndoc-langchain.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 管理数据集

LangSmith 提供了用于管理和使用您的[*数据集*](/langsmith/evaluation-concepts#datasets)的工具。本页描述了数据集操作，包括：

* [对数据集进行版本控制](#version-a-dataset)以跟踪随时间的变化。
* [筛选](#evaluate-on-a-filtered-view-of-a-dataset)和[拆分](#evaluate-on-a-dataset-split)数据集以进行评估。
* [公开共享数据集](#share-a-dataset)。
* [导出数据集](#export-a-dataset)为各种格式。

您还将学习如何将[实验](/langsmith/evaluation-concepts#experiment)中的[筛选跟踪记录导出回数据集](#export-filtered-traces-from-experiment-to-dataset)，以进行进一步分析和迭代。

## 对数据集进行版本控制

在 LangSmith 中，数据集是版本化的。这意味着每次您在数据集中添加、更新或删除示例时，都会创建一个新版本的数据集。

### 创建数据集的新版本

每当您在数据集中添加、更新或删除示例时，都会创建一个数据集的新[版本](/langsmith/evaluation-concepts#dataset-organization)。这使您能够跟踪数据集随时间的变化，并了解数据集是如何演变的。

默认情况下，版本由更改的时间戳定义。当您在 **Examples** 选项卡中单击数据集的特定版本（按时间戳）时，您将看到该时间点的数据集状态。

<img src="https://mintcdn.com/other-405835d4/HWk8WH3Ivd1grcHm/langsmith/images/version-dataset.png?fit=max&auto=format&n=HWk8WH3Ivd1grcHm&q=85&s=3e7b921c2ce9c977e59c6f43652142f0" alt="版本控制数据集" width="2544" height="1241" data-path="langsmith/images/version-dataset.png" />

请注意，查看数据集的过去版本时，示例是只读的。您还将看到在此版本数据集与最新版本数据集之间执行的操作。

<Note>
  默认情况下，**Examples** 选项卡中显示的是数据集的最新版本，**Tests** 选项卡中显示的是所有版本的实验。
</Note>

在 **Tests** 选项卡中，您将找到在不同版本数据集上运行的测试结果。

<img src="https://mintcdn.com/other-405835d4/HWk8WH3Ivd1grcHm/langsmith/images/version-dataset-tests.png?fit=max&auto=format&n=HWk8WH3Ivd1grcHm&q=85&s=27c80a6009f0976ecc570c6bfb356bd0" alt="版本控制数据集测试" width="2483" height="963" data-path="langsmith/images/version-dataset-tests.png" />

### 为版本添加标签

您还可以为数据集的版本添加标签，使其具有更易于人类阅读的名称，这对于标记数据集历史中的重要里程碑非常有用。

例如，您可以将数据集的某个版本标记为 "prod"，并使用它来对您的 LLM 管道运行测试。

您可以通过在 **Examples** 选项卡中单击 **+ Tag this version** 在 UI 中为数据集的版本添加标签。

<img src="https://mintcdn.com/other-405835d4/ozzEsp14Hd9jH9J-/langsmith/images/tag-this-version.png?fit=max&auto=format&n=ozzEsp14Hd9jH9J-&q=85&s=67a3d40568c5efbd8e33656169f01293" alt="为数据集添加标签" width="662" height="124" data-path="langsmith/images/tag-this-version.png" />

您也可以使用 SDK 为数据集的版本添加标签。以下是使用 [Python SDK](https://docs.smith.langchain.com/reference/python/reference) 为数据集版本添加标签示例：

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
from langsmith import Client
from datetime import datetime

client = Client()
initial_time = datetime(2024, 1, 1, 0, 0, 0) # 您要标记的版本的时间戳

# 您可以使用语义名称（如 "prod"）标记特定的数据集版本
client.update_dataset_tag(
    dataset_name=toxic_dataset_name, as_of=initial_time, tag="prod"
)
```

要在特定标记版本的数据集上运行评估，请参阅[在特定数据集版本上评估](#evaluate-on-a-specific-dataset-version)部分。

## 在特定数据集版本上评估

<Check>
  在阅读本节之前，您可能会发现参考以下内容很有帮助：

  * [对数据集进行版本控制](#version-a-dataset)。
  * [获取示例](/langsmith/manage-datasets-programmatically#fetch-examples)。
</Check>

### 使用 `list_examples`

您可以使用 `evaluate` / `aevaluate` 传入一个示例可迭代对象，以在数据集的特定版本上进行评估。使用 `list_examples` / `listExamples` 通过 `as_of` / `asOf` 从特定版本标签获取示例，并将其传递给 `data` 参数。

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  from langsmith import Client

  ls_client = Client()

  # 假设实际输出有一个 'class' 键。
  # 假设示例输出有一个 'label' 键。
  def correct(outputs: dict, reference_outputs: dict) -> bool:
    return outputs["class"] == reference_outputs["label"]

  results = ls_client.evaluate(
      lambda inputs: {"class": "Not toxic"},
      # 在此处传入筛选后的数据：
      data=ls_client.list_examples(
        dataset_name="Toxic Queries",
        as_of="latest",  # 在此处指定版本
      ),
      evaluators=[correct],
  )
  ```

  ```typescript TypeScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import { evaluate } from "langsmith/evaluation";

  await evaluate((inputs) => labelText(inputs["input"]), {
    data: langsmith.listExamples({
      datasetName: datasetName,
      asOf: "latest",
    }),
    evaluators: [correctLabel],
  });
  ```

  ```java Java theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import com.langchain.smith.models.examples.ExampleListParams;

  ExampleListParams listParams = ExampleListParams.builder()
      .datasetId(datasetId)
      .asOf("latest")
  var examples = client.examples().list(listParams);
  ```
</CodeGroup>

在[以编程方式创建和管理数据集](/langsmith/manage-datasets-programmatically#fetch-datasets)页面上了解更多关于如何获取数据集视图的信息。

## 在数据集的拆分/筛选视图上评估

<Check>
  在阅读本节之前，您可能会发现参考以下内容很有帮助：

  * [获取示例](/langsmith/manage-datasets-programmatically#fetch-examples)。
  * [创建和管理数据集拆分](/langsmith/manage-datasets-in-application#create-and-manage-dataset-splits)。
</Check>

### 在数据集的筛选视图上评估

您可以使用 `list_examples` / `listExamples` 方法从数据集中[获取](/langsmith/manage-datasets-programmatically#fetch-examples)示例子集以进行评估。

一个常见的工作流是获取具有特定元数据键值对的示例。

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  from langsmith import evaluate

  results = evaluate(
      lambda inputs: label_text(inputs["text"]),
      data=client.list_examples(dataset_name=dataset_name, metadata={"desired_key": "desired_value"}),
      evaluators=[correct_label],
      experiment_prefix="Toxic Queries",
  )
  ```

  ```typescript TypeScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import { evaluate } from "langsmith/evaluation";

  await evaluate((inputs) => labelText(inputs["input"]), {
    data: langsmith.listExamples({
      datasetName: datasetName,
      metadata: {"desired_key": "desired_value"},
    }),
    evaluators: [correctLabel],
    experimentPrefix: "Toxic Queries",
  });
  ```

  ```java Java theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import com.langchain.smith.models.examples.ExampleListParams;

  ExampleListParams listParams = ExampleListParams.builder()
      .datasetId(datasetId)
      .metadata("{\"desired_key\":\"desired_value\"}")
      .build();
  var examples = client.examples().list(listParams);
  ```
</CodeGroup>

有关更多筛选功能，请参阅此[操作指南](/langsmith/manage-datasets-programmatically#list-examples-by-structured-filter)。

### 在数据集拆分上评估

您可以使用 `list_examples` / `listExamples` 方法在数据集的一个或多个[拆分](/langsmith/evaluation-concepts#dataset-organization)上进行评估。`splits` 参数接受您希望评估的拆分列表。

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  from langsmith import evaluate

  results = evaluate(
      lambda inputs: label_text(inputs["text"]),
      data=client.list_examples(dataset_name=dataset_name, splits=["test", "training"]),
      evaluators=[correct_label],
      experiment_prefix="Toxic Queries",
  )
  ```

  ```typescript TypeScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import { evaluate } from "langsmith/evaluation";

  await evaluate((inputs) => labelText(inputs["input"]), {
    data: langsmith.listExamples({
      datasetName: datasetName,
      splits: ["test", "training"],
    }),
    evaluators: [correctLabel],
    experimentPrefix: "Toxic Queries",
  });
  ```

  ```java Java theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import com.langchain.smith.models.examples.ExampleListParams;
  import java.util.Arrays;
  import java.util.List;

  List<String> splits = Arrays.asList("test", "training");

  ExampleListParams listParams = ExampleListParams.builder()
      .datasetId(datasetId)
      .splits(splits)
      .build();
  var examples = client.examples().list(listParams);
  ```
</CodeGroup>

有关获取数据集视图的更多详细信息，请参阅[获取数据集](/langsmith/manage-datasets-programmatically#fetch-datasets)指南。

## 共享数据集

### 公开共享数据集

<Warning>
  公开共享数据集将使**数据集示例、实验及相关运行以及此数据集上的反馈对任何拥有链接的人可访问**，即使他们没有 LangSmith 帐户。请确保您没有共享敏感信息。

  此功能仅在 LangSmith 的云托管版本中可用。
</Warning>

从 **Dataset & Experiments** 选项卡中，选择一个数据集，单击 **⋮**（页面右上角），单击 **Share Dataset**。这将打开一个对话框，您可以在其中复制数据集的链接。

<img src="https://mintcdn.com/other-405835d4/ozzEsp14Hd9jH9J-/langsmith/images/share-dataset.gif?s=3db0c067beee2e65c3fa765f6aaf00ff" alt="共享数据集" width="1086" height="720" data-path="langsmith/images/share-dataset.gif" />

### 取消共享数据集

1. 通过单击任何公开共享数据集右上角的 **Public**，然后在对话框中单击 **Unshare** 来取消共享。 <img src="https://mintcdn.com/other-405835d4/HWk8WH3Ivd1grcHm/langsmith/images/unshare-dataset.png?fit=max&auto=format&n=HWk8WH3Ivd1grcHm&q=85&s=f9ee920ec74c9d2e053186f89c7ecb42" alt="取消共享数据集" width="1312" height="803" data-path="langsmith/images/unshare-dataset.png" />

2. 导航到您组织的公开共享数据集列表，方法是单击 **Settings** -> **Shared URLs** 或[此链接](https://smith.langchain.com/settings/shared)，然后单击要取消共享的数据集旁边的 **Unshare**。

<img src="https://mintcdn.com/other-405835d4/HWk8WH3Ivd1grcHm/langsmith/images/unshare-trace-list.png?fit=max&auto=format&n=HWk8WH3Ivd1grcHm&q=85&s=25c81f04f5b5a672f5b66cbebbb70610" alt="取消共享跟踪记录列表" width="1125" height="519" data-path="langsmith/images/unshare-trace-list.png" />

## 导出数据集

您可以从 LangSmith UI 将 LangSmith 数据集导出为 CSV、JSONL 或 [OpenAI 的微调格式](https://platform.openai.com/docs/guides/fine-tuning#example-format)。

从 **Dataset & Experiments** 选项卡中，选择一个数据集，单击 **⋮**（页面右上角），单击 **Download Dataset**。

<img src="https://mintcdn.com/other-405835d4/2a1kkFnfjfW0Zb-b/langsmith/images/export-dataset-button.gif?s=49becdd62f823dbfbefcb43e338a5e8d" alt="导出数据集按钮" width="1086" height="720" data-path="langsmith/images/export-dataset-button.gif" />

## 将筛选的跟踪记录从实验导出到数据集

在 LangSmith 中运行[离线评估](/langsmith/evaluation-concepts#offline-evaluations)后，您可能希望将符合某些评估标准的[跟踪记录](/langsmith/observability-concepts#traces)导出到数据集。

### 查看实验跟踪记录

<img src="https://mintcdn.com/other-405835d4/2a1kkFnfjfW0Zb-b/langsmith/images/export-filtered-trace-to-dataset.png?fit=max&auto=format&n=2a1kkFnfjfW0Zb-b&q=85&s=c966119821aa2b3cf0446e955c315954" alt="导出筛选的跟踪记录" width="3452" height="1224" data-path="langsmith/images/export-filtered-trace-to-dataset.png" />

为此，首先单击实验名称旁边的箭头。这将引导您到一个包含从您的实验生成的跟踪记录的项目。

<img src="https://mintcdn.com/other-405835d4/2a1kkFnfjfW0Zb-b/langsmith/images/experiment-tracing-project.png?fit=max&auto=format&n=2a1kkFnfjfW0Zb-b&q=85&s=1ff9532fb972d38b89a58b3d653101dc" alt="导出筛选的跟踪记录" width="3452" height="1638" data-path="langsmith/images/experiment-tracing-project.png" />

从那里，您可以根据评估标准筛选跟踪记录。在此示例中，我们筛选所有准确度分数大于 0.5 的跟踪记录。

<img src="https://mintcdn.com/other-405835d4/G7l9ZuXFPY6DQG2A/langsmith/images/filtered-traces-from-experiment.png?fit=max&auto=format&n=G7l9ZuXFPY6DQG2A&q=85&s=16bf62991bcf01c0aa78f07aaae868a9" alt="导出筛选的跟踪记录" width="3438" height="1844" data-path="langsmith/images/filtered-traces-from-experiment.png" />

在项目上应用筛选器后，我们可以多选要添加到数据集的运行，然后单击 **Add to Dataset**。

<img src="https://mintcdn.com/other-405835d4/6Toz5fHjgEZXpscE/langsmith/images/add-filtered-traces-to-dataset.png?fit=max&auto=format&n=6Toz5fHjgEZXpscE&q=85&s=ace2d00248e70b5b1a53e259f2cce8b6" alt="导出筛选的跟踪记录" width="3364" height="1834" data-path="langsmith/images/add-filtered-traces-to-dataset.png" />

***

<div className="source-links">
  <Callout icon="terminal-2">
    [将这些文档连接](/use-these-docs)到 Claude、VSCode 等，通过 MCP 获取实时答案。
  </Callout>

  <Callout icon="edit">
    [在 GitHub 上编辑此页面](https://github.com/langchain-ai/docs/edit/main/src/langsmith/manage-datasets.mdx) 或 [提交问题](https://github.com/langchain-ai/docs/issues/new/choose)。
  </Callout>
</div>
