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"

# 데이터셋에 입력을 저장하면
# 공유된 예제 세트에 대해 체인과 LLM을 실행할 수 있습니다.
dataset = client.create_dataset(
  dataset_name=dataset_name, description="Questions and answers about animal phylogenetics.",
)

# 대량 생성을 위한 입력, 출력 및 메타데이터 준비
client.create_examples(
  dataset_id=dataset.id,
  examples=examples
)

트레이스로부터 데이터셋 생성

트레이스의 실행(스팬)으로부터 데이터셋을 생성하려면 동일한 방법을 사용할 수 있습니다. 실행을 가져오고 필터링하는 방법에 대한 훨씬 더 많은 예제는 트레이스 내보내기 가이드를 참조하세요. 다음은 예시입니다:
from langsmith import Client

client = Client()
dataset_name = "Example Dataset"

# 데이터셋에 추가할 실행 필터링
runs = client.list_runs(
  project_name="my_project",
  is_root=True,
  error=False,
)

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

# 대량 생성을 위한 입력 및 출력 준비
examples = [{"inputs": run.inputs, "outputs": run.outputs} for run in runs]

# 대량 create_examples 메서드 사용
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'] # 입력 열 이름으로 교체
output_keys = ['output1', 'output2'] # 출력 열 이름으로 교체

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'] # 입력 열 이름으로 교체
output_keys = ['output1', 'output2'] # 출력 열 이름으로 교체

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" # 기본값
)

데이터셋 가져오기

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는 배열 또는 독립 문자열이 될 수 있습니다
)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I