데이터셋 관리하기

데이터셋 관리하기

LangSmith의 데이터셋을 관리하고 작업하는 도구들을 알려드릴게요. 이 페이지에서는 다음을 포함한 데이터셋 작업을 설명합니다:

또한 실험에서 추가 분석·반복을 위해 필터링된 트레이스 데이터셋으로 내보내기 방법도 배웁니다.

팁: LangSmith Engine이 프로덕션 트레이스에서 ground truth 데이터셋 예제를 자동으로 생성할 수 있습니다.

출처: 문서

본문

데이터셋 버전 관리

LangSmith에서 데이터셋은 버전이 관리됩니다. 즉, 데이터셋에서 예제를 추가, 업데이트, 삭제할 때마다 데이터셋의 새 버전이 생성됩니다.

데이터셋의 새 버전 만들기

데이터셋에서 예제를 추가, 업데이트, 삭제할 때마다 데이터셋의 새 버전이 생성됩니다. 이를 통해 시간 경과에 따른 데이터셋 변경을 추적하고 데이터셋이 어떻게 진화했는지 이해할 수 있습니다.

기본적으로 버전은 변경의 타임스탬프로 정의됩니다. Examples 탭에서 특정 버전의 데이터셋(타임스탬프 기준)을 클릭하면 해당 시점의 데이터셋 상태를 볼 수 있습니다.

과거 버전을 볼 때 예제는 읽기 전용입니다. 또한 이 버전과 최신 데이터셋 버전 사이에 있었던 작업도 볼 수 있습니다.

참고: 기본적으로 Examples 탭에는 최신 데이터셋 버전이 표시되고, Tests 탭에는 모든 버전의 실험이 표시됩니다.

Tests 탭에서는 서로 다른 버전의 데이터셋에서 실행된 테스트 결과를 찾을 수 있습니다.

버전 태그 지정

데이터셋 버전에 더 사람이 읽기 쉬운 이름을 태그할 수도 있습니다. 데이터셋 기록에서 중요한 이정표를 표시하는 데 유용할 수 있습니다.

예를 들어 데이터셋 버전에 "prod"라고 태그하고 LLM 파이프라인에 대한 테스트를 실행하는 데 사용할 수 있습니다.

UI의 Examples 탭에서 + Tag this version을 클릭해 데이터셋 버전에 태그를 지정할 수 있습니다.

SDK를 사용해 데이터셋 버전에 태그를 지정할 수도 있습니다. Python SDK를 사용해 데이터셋 버전에 태그를 지정하는 예:

from langsmith import Client
from datetime import datetime

client = Client()
initial_time = datetime(2024, 1, 1, 0, 0, 0) # The timestamp of the version you want to tag

# You can tag a specific dataset version with a semantic name, like "prod"
client.update_dataset_tag(
    dataset_name=toxic_dataset_name, as_of=initial_time, tag="prod"
)

특정 태그된 데이터셋 버전에서 평가를 실행하려면 특정 데이터셋 버전에서 평가 섹션을 참고하세요.

특정 데이터셋 버전에서 평가

list_examples 사용

evaluate / aevaluate에 예제의 iterable을 전달해 특정 버전의 데이터셋에서 평가할 수 있습니다. as_of / asOf를 사용해 특정 버전 태그에서 예제를 가져오는 list_examples / listExamples를 사용하고, 이를 data 인자로 전달하세요.

from langsmith import Client

ls_client = Client()

# Assumes actual outputs have a 'class' key.
# Assumes example outputs have a 'label' key.
def correct(outputs: dict, reference_outputs: dict) -> bool:
  return outputs["class"] == reference_outputs["label"]

results = ls_client.evaluate(
    lambda inputs: {"class": "Not toxic"},
    # Pass in filtered data here:
    data=ls_client.list_examples(
      dataset_name="Toxic Queries",
      as_of="latest",  # specify version here
    ),
    evaluators=[correct],
)
import { evaluate } from "langsmith/evaluation";

await evaluate((inputs) => labelText(inputs["input"]), {
  data: langsmith.listExamples({
    datasetName: datasetName,
    asOf: "latest",
  }),
  evaluators: [correctLabel],
});
import com.langchain.smith.models.examples.ExampleListParams;

ExampleListParams listParams = ExampleListParams.builder()
    .datasetId(datasetId)
    .asOf("latest")
var examples = client.examples().list(listParams);

데이터셋 뷰를 가져오는 방법에 대한 자세한 내용은 프로그래매틱으로 데이터셋 생성·관리 페이지를 참고하세요.

데이터셋 스플릿 / 필터링된 뷰에서 평가

데이터셋의 필터링된 뷰에서 평가

list_examples / listExamples 메서드를 사용해 평가할 데이터셋의 예제 하위 집합을 가져올 수 있습니다.

일반적인 워크플로는 특정 메타데이터 키-값 쌍을 가진 예제를 가져오는 것입니다.

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",
)
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",
});
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);

더 많은 필터링 기능은 이 how-to 가이드를 참고하세요.

데이터셋 스플릿에서 평가

list_examples / listExamples 메서드를 사용해 데이터셋의 하나 이상 스플릿에서 평가할 수 있습니다. splits 파라미터는 평가할 스플릿 목록을 받습니다.

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",
)
import { evaluate } from "langsmith/evaluation";

await evaluate((inputs) => labelText(inputs["input"]), {
  data: langsmith.listExamples({
    datasetName: datasetName,
    splits: ["test", "training"],
  }),
  evaluators: [correctLabel],
  experimentPrefix: "Toxic Queries",
});
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);

데이터셋 뷰를 가져오는 방법에 대한 자세한 내용은 데이터셋 가져오기 가이드를 참고하세요.

데이터셋 공유

데이터셋 공개 공유

경고: 데이터셋을 공개적으로 공유하면 데이터셋 예제, 실험과 관련 실행, 이 데이터셋의 피드백이 링크를 가진 사람이라면 누구에게나 접근 가능해집니다. LangSmith 계정이 없어도 마찬가지입니다. 민감한 정보를 공유하지 않는지 확인하세요.

이 기능은 LangSmith의 클라우드 호스팅 버전에서만 사용할 수 있습니다.

Dataset & Experiments 탭에서 데이터셋을 선택하고 (페이지 오른쪽 위)을 클릭한 뒤 Share Dataset을 클릭합니다. 데이터셋 링크를 복사할 수 있는 대화상자가 열립니다.

데이터셋 공유 해제

  1. 공개 공유된 데이터셋의 오른쪽 위 Public을 클릭한 뒤 대화상자에서 Unshare를 클릭합니다.
  2. Settings -> Shared URLs 또는 이 링크를 클릭해 조직의 공개 공유 데이터셋 목록으로 이동하고, 공유 해제하려는 데이터셋 옆의 Unshare를 클릭합니다.

데이터셋 내보내기

LangSmith UI에서 데이터셋을 CSV, JSONL, 또는 OpenAI의 파인튜닝 형식으로 내보낼 수 있습니다.

Dataset & Experiments 탭에서 데이터셋을 선택하고 (페이지 오른쪽 위)을 클릭한 뒤 Download Dataset을 클릭합니다.

실험에서 데이터셋으로 필터링된 트레이스 내보내기

LangSmith에서 오프라인 평가를 실행한 뒤 특정 평가 기준을 충족한 트레이스를 데이터셋으로 내보낼 수 있습니다.

실험 트레이스 보기

이렇게 하려면 먼저 실험 이름 옆의 화살표를 클릭합니다. 그러면 실험에서 생성된 트레이스를 포함하는 프로젝트로 이동합니다.

여기서 평가 기준에 따라 트레이스를 필터링할 수 있습니다. 이 예제에서는 정확도 점수가 0.5보다 큰 모든 트레이스를 필터링합니다.

프로젝트에 필터를 적용한 뒤 데이터셋에 추가할 실행을 다중 선택하고 Add to Dataset을 클릭할 수 있습니다.

더 알아보기