Skip to main content

如何以编程方式管理数据集

您可以使用 Python 和 TypeScript SDK 以编程方式管理数据集。这包括创建、更新和删除数据集,以及向其中添加示例。

创建一个数据集

从值列表创建数据集

使用客户端创建数据集最灵活的方法是通过从输入列表以及可选的输出中创建示例。以下是一个示例。

请注意,你可以为每个示例添加任意的元数据,例如备注或来源。元数据以字典形式存储。

批量创建示例

如果有大量示例需要创建,请考虑使用 create_examples/createExamples 方法在单个请求中创建多个示例。 如果仅创建单个示例,则可以使用 create_example/createExample 方法。

from langsmith import Client

examples = [
{
"inputs": {"question": "What is the largest mammal?"},
"outputs": {"answer": "The blue whale"},
"metadata": {"source": "Wikipedia"},
},
{
"inputs": {"question": "What do mammals and birds have in common?"},
"outputs": {"answer": "They are both warm-blooded"},
"metadata": {"source": "Wikipedia"},
},
{
"inputs": {"question": "What are reptiles known for?"},
"outputs": {"answer": "Having scales"},
"metadata": {"source": "Wikipedia"},
},
{
"inputs": {"question": "What's the main characteristic of amphibians?"},
"outputs": {"answer": "They live both in water and on land"},
"metadata": {"source": "Wikipedia"},
},
]

client = Client()
dataset_name = "Elementary Animal Questions"

# Storing inputs in a dataset lets us
# run chains and LLMs over a shared set of examples.
dataset = client.create_dataset(
dataset_name=dataset_name, description="Questions and answers about animal phylogenetics.",
)

# Prepare inputs, outputs, and metadata for bulk creation
client.create_examples(
dataset_id=dataset.id,
examples=examples
)

从追踪创建数据集

要从跟踪的运行(跨度)创建数据集,您可以使用相同的方法。 有关如何获取和筛选运行的 更多 示例,请参阅 导出跟踪 指南。 以下是一个示例:

from langsmith import Client

client = Client()
dataset_name = "Example Dataset"

# Filter runs to add to the dataset
runs = client.list_runs(
project_name="my_project",
is_root=True,
error=False,
)

dataset = client.create_dataset(dataset_name, description="An example dataset")

# Prepare inputs and outputs for bulk creation
examples = [{"inputs": run.inputs, "outputs": run.outputs} for run in runs]

# Use the bulk create_examples method
client.create_examples(
dataset_id=dataset.id,
examples=examples
)

从CSV文件创建数据集

在本节中,我们将演示如何通过上传 CSV 文件来创建数据集。

首先,确保你的 CSV 文件格式正确,其中包含代表输入和输出键的列。这些键将在上传过程中用于正确映射你的数据。你可以为数据集指定一个可选的名称和描述。否则,将使用文件名作为数据集名称,并且不会提供描述。

from langsmith import Client
import os

client = Client()

csv_file = 'path/to/your/csvfile.csv'
input_keys = ['column1', 'column2'] # replace with your input column names
output_keys = ['output1', 'output2'] # replace with your output column names

dataset = client.upload_csv(
csv_file=csv_file,
input_keys=input_keys,
output_keys=output_keys,
name="My CSV Dataset",
description="Dataset created from a CSV file"
data_type="kv"
)

从pandas DataFrame创建数据集(仅限Python)

Python 客户端提供了一个额外的便捷方法,用于从 pandas 数据框上传数据集。

from langsmith import Client
import os
import pandas as pd

client = Client()

df = pd.read_parquet('path/to/your/myfile.parquet')
input_keys = ['column1', 'column2'] # replace with your input column names
output_keys = ['output1', 'output2'] # replace with your output column names

dataset = client.upload_dataframe(
df=df,
input_keys=input_keys,
output_keys=output_keys,
name="My Parquet Dataset",
description="Dataset created from a parquet file",
data_type="kv" # The default
)

获取数据集

您可以使用 Python 和 TypeScript SDK 中的 list_datasets/listDatasets 方法以编程方式从 LangSmith 获取数据集。以下是一些常见的调用示例。

先决条件

在运行以下代码片段之前,请先初始化客户端。

from langsmith import Client

client = Client()

查询所有数据集

datasets = client.list_datasets()

按名称列出数据集

如果你想通过确切的名称进行搜索,可以执行以下操作:

datasets = client.list_datasets(dataset_name="My Test Dataset 1")

如果你想进行不区分大小写的子字符串搜索,请尝试以下方法:

datasets = client.list_datasets(dataset_name_contains="some substring")

按类型列出数据集

你可以按类型筛选数据集。以下是一个查询聊天数据集的示例。

datasets = client.list_datasets(data_type="chat")

获取示例

您可以使用 Python 和 TypeScript SDK 中的 list_examples/listExamples 方法以编程方式从 LangSmith 获取示例。以下是一些常见的调用。

先决条件

在运行以下代码片段之前,请先初始化客户端。

from langsmith import Client

client = Client()

列出数据集的所有示例

你可以按数据集ID进行筛选:

examples = client.list_examples(dataset_id="c9ace0d8-a82c-4b6c-13d2-83401d68e9ab")

或者你可以通过数据集名称进行筛选(这必须与你要查询的数据集名称完全匹配)

examples = client.list_examples(dataset_name="My Test Dataset")

按ID列出示例

你也可以通过ID列出多个示例。

example_ids = [
'734fc6a0-c187-4266-9721-90b7a025751a',
'd6b4c1b9-6160-4d63-9b61-b034c585074f',
'4d31df4e-f9c3-4a6e-8b6c-65701c2fed13',
]
examples = client.list_examples(example_ids=example_ids)

根据元数据列出示例

你还可以根据元数据来筛选示例。以下是一个查询具有特定元数据键值对的示例。 在底层,我们会检查示例的元数据是否包含你指定的键值对。

例如,如果你有一个元数据为 {"foo": "bar", "baz": "qux"} 的示例,则 {foo: bar}{baz: qux} 都会匹配,{foo: bar, baz: qux} 也会匹配。

examples = client.list_examples(dataset_name=dataset_name, metadata={"foo": "bar"})

按结构化筛选器列出示例

与使用结构化过滤查询语言来获取运行记录类似,您也可以用它来获取示例。

笔记

这目前仅在 Python SDK 的 v0.1.83 及更高版本以及 TypeScript SDK 的 v0.1.35 及更高版本中提供。

此外,结构化过滤查询语言仅支持 metadata 个字段。

您可以使用 has 操作符来获取元数据字段中包含特定键/值对的示例,使用 exists 操作符来获取元数据字段中包含特定键的示例。 此外,您还可以使用 and 操作符将多个筛选条件组合在一起,并使用 not 操作符对筛选条件进行取反。

examples = client.list_examples(
dataset_name=dataset_name,
filter='and(not(has(metadata, \'{"foo": "bar"}\')), exists(metadata, "tenant_id"))'
)

更新示例

更新单个示例

您可以使用 Python 和 TypeScript SDK 中的 update_example/updateExample 方法,以编程方式从 LangSmith 更新示例。以下是具体示例。

client.update_example(
example_id=example.id,
inputs={"input": "updated input"},
outputs={"output": "updated output"},
metadata={"foo": "bar"},
split="train"
)

批量更新示例

您还可以使用 Python 和 TypeScript SDK 中的 update_examples/updateExamples 方法,通过单个请求以编程方式批量更新多个示例。以下是一个示例。

client.update_examples(
example_ids=[example.id, example_2.id],
inputs=[{"input": "updated input 1"}, {"input": "updated input 2"}],
outputs=[
{"output": "updated output 1"},
{"output": "updated output 2"},
],
metadata=[{"foo": "baz"}, {"foo": "qux"}],
splits=[["training", "foo"], "training"] # Splits can be arrays or standalone strings
)

这个页面对你有帮助吗?


您可以留下详细的反馈 在 GitHub 上.