데이터셋 관리하기
데이터셋 관리하기
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을 클릭합니다. 데이터셋 링크를 복사할 수 있는 대화상자가 열립니다.
데이터셋 공유 해제
- 공개 공유된 데이터셋의 오른쪽 위 Public을 클릭한 뒤 대화상자에서 Unshare를 클릭합니다.
- Settings -> Shared URLs 또는 이 링크를 클릭해 조직의 공개 공유 데이터셋 목록으로 이동하고, 공유 해제하려는 데이터셋 옆의 Unshare를 클릭합니다.
데이터셋 내보내기
LangSmith UI에서 데이터셋을 CSV, JSONL, 또는 OpenAI의 파인튜닝 형식으로 내보낼 수 있습니다.
Dataset & Experiments 탭에서 데이터셋을 선택하고 ⋮ (페이지 오른쪽 위)을 클릭한 뒤 Download Dataset을 클릭합니다.
실험에서 데이터셋으로 필터링된 트레이스 내보내기
LangSmith에서 오프라인 평가를 실행한 뒤 특정 평가 기준을 충족한 트레이스를 데이터셋으로 내보낼 수 있습니다.
실험 트레이스 보기
이렇게 하려면 먼저 실험 이름 옆의 화살표를 클릭합니다. 그러면 실험에서 생성된 트레이스를 포함하는 프로젝트로 이동합니다.
여기서 평가 기준에 따라 트레이스를 필터링할 수 있습니다. 이 예제에서는 정확도 점수가 0.5보다 큰 모든 트레이스를 필터링합니다.
프로젝트에 필터를 적용한 뒤 데이터셋에 추가할 실행을 다중 선택하고 Add to Dataset을 클릭할 수 있습니다.
더 알아보기
- 프로그래매틱으로 데이터셋 생성·관리 — SDK 데이터셋 작업.
- 애플리케이션에서 데이터셋 관리 — UI 데이터셋 작업.