메인 콘텐츠로 건너뛰기
Weave 데이터셋은 LLM 애플리케이션 평가와 병렬 비교를 위한 예시를 정리, 수집, 추적하고 버전 관리하는 데 도움이 됩니다. 이 페이지를 따라 하면 여러분과 팀 구성원이 시간에 따라 LLM 애플리케이션 동작을 평가하고, 반복적으로 개선하고, 비교하는 데 사용할 수 있는 재사용 가능한 버전 관리 예시 컬렉션을 구축할 수 있습니다. Dataset은 프로그래밍 방식과 UI를 통해 생성하고 사용할 수 있습니다. 이 페이지는 코드 또는 Weave UI를 통해 평가 데이터를 관리하려는 엔지니어와 팀 구성원을 위한 것입니다. 다음 내용을 설명합니다.
  • Python 및 TypeScript에서 Dataset의 기본 오퍼레이션과 시작하는 방법
  • Weave Call와 같은 객체에서 Python 및 TypeScript로 Dataset을 생성하는 방법
  • UI에서 Dataset에 사용할 수 있는 오퍼레이션

데이터셋 퀵스타트

다음 코드 예시는 Python 및 TypeScript를 사용해 기본적인 데이터셋 오퍼레이션을 수행하는 방법을 보여줍니다. SDK를 사용하면 다음을 수행할 수 있습니다.
  • 데이터셋 생성
  • 데이터셋 게시
  • 데이터셋 조회
  • 데이터셋의 특정 예시에 액세스
탭을 선택해 Python 및 TypeScript 코드를 확인하세요.
import weave
from weave import Dataset
# Weave 초기화
weave.init('intro-example')

# 데이터셋 생성
dataset = Dataset(
    name='grammar',
    rows=[
        {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
        {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
        {'id': '2', 'sentence': "They plays video games all day.", 'correction': "They play video games all day."}
    ]
)

# 데이터셋 게시
weave.publish(dataset)

# 데이터셋 조회
dataset_ref = weave.ref('grammar').get()

# 특정 예시에 액세스
example_label = dataset_ref.rows[2]['sentence']

다른 객체에서 dataset 만들기

이 섹션에서는 기록된 Weave call이나 기존 표 형식 데이터처럼 이미 가지고 있는 데이터로 Dataset을 구축하는 방법을 보여주므로, 예시를 수동으로 다시 입력할 필요가 없습니다.
Python에서는 Call 같은 일반적인 Weave 객체나 pandas.DataFrame 같은 Python 객체로도 Dataset을 생성할 수 있습니다. 이 기능은 특정 예시들로 예시 Dataset을 만들고 싶을 때 유용합니다.

Weave call

하나 이상의 Weave call에서 Dataset을 만들려면 call 객체를 조회한 뒤, from_calls 메서드에 전달하는 목록에 추가합니다.
@weave.op
def model(task: str) -> str:
    return f"Now working on {task}"

res1, call1 = model.call(task="fetch")
res2, call2 = model.call(task="parse")

dataset = Dataset.from_calls([call1, call2])
# 이제 데이터셋을 사용해 모델을 평가하는 등의 작업을 할 수 있습니다.

Pandas DataFrame

Pandas DataFrame 객체에서 Dataset을 만들려면 from_pandas 메서드를 사용합니다. 다시 DatasetDataFrame으로 변환하려면 to_pandas를 사용합니다.
import pandas as pd

df = pd.DataFrame([
    {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
    {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
    {'id': '2', 'sentence': "They plays video games all day.", 'correction': "They play video games all day."}
])
dataset = Dataset.from_pandas(df)
df2 = dataset.to_pandas()

assert df.equals(df2)

Hugging Face Datasets

Hugging Face datasets.Dataset 또는 datasets.DatasetDict 객체에서 Dataset을 만들려면 먼저 필요한 의존성이 설치되어 있는지 확인합니다:
pip install weave[huggingface]
그런 다음 from_hf 메서드를 사용합니다. 여러 split(train, test, validation 등)이 포함된 DatasetDict를 제공하면 Weave는 자동으로 train split을 사용하고 경고를 표시합니다. train split이 없으면 오류가 발생합니다. 특정 split을 직접 제공할 수도 있습니다(예: hf_dataset_dict['test']).weave.Dataset을 다시 Hugging Face Dataset으로 변환하려면 to_hf 메서드를 사용합니다.
# datasets가 설치되어 있는지 확인하세요: pip install datasets
from datasets import Dataset as HFDataset, DatasetDict

# HF Dataset 예시
hf_rows = [
    {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
    {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
]
hf_ds = HFDataset.from_list(hf_rows)
weave_ds_from_hf = Dataset.from_hf(hf_ds)

# HF Dataset으로 다시 변환
converted_hf_ds = weave_ds_from_hf.to_hf()

# HF DatasetDict 예시(기본적으로 'train' split 사용)
hf_dict = DatasetDict({
    'train': HFDataset.from_list(hf_rows),
    'test': HFDataset.from_list([{'id': '2', 'sentence': "Test sentence", 'correction': "Test correction"}])
})
# 경고를 표시하고 'train' split을 사용합니다
weave_ds_from_dict = Dataset.from_hf(hf_dict)

# 특정 split 지정
weave_ds_from_test_split = Dataset.from_hf(hf_dict['test'])

UI에서 데이터셋 생성, 수정 및 삭제

UI에서 데이터셋을 생성, 수정 및 삭제할 수 있습니다. Weave UI에서 데이터셋을 생성하면 코드를 편집하지 않고도 귀하와 팀의 비엔지니어링 구성원이 예시, 질문 및 기타 에이전트 테스트 데이터가 포함된 공유 가능한 데이터셋을 만들고 큐레이션할 수 있습니다. 다음 절차에서는 UI에서 이러한 각 작업을 수행하는 방법을 안내합니다. 평가 데이터를 노트북이나 스크립트가 아니라, 해당 데이터가 나온 트레이스와 함께 관리하려면 이 절차를 사용하세요.

새 데이터셋 만들기

다음 절차에서는 Weave 프로젝트의 기존 call 하나 이상을 바탕으로 새 Dataset을 만듭니다. 완료하면 evaluation에서 참조하고 팀과 공유할 수 있는 게시된 Dataset이 생성됩니다.
  1. 수정하려는 Weave 프로젝트로 이동합니다.
  2. 사이드바에서 Traces를 선택합니다.
  3. Dataset을 만들 Call을 하나 이상 선택합니다.
  4. 오른쪽 상단 메뉴에서 Add selected rows to a dataset 아이콘(휴지통 아이콘 옆에 있음)을 클릭합니다.
  5. Choose a dataset 드롭다운에서 Create new를 선택합니다. 그러면 Dataset name 필드가 나타납니다.
  6. Dataset name 필드에 데이터셋 이름을 입력합니다. 그러면 Configure dataset fields 옵션이 표시됩니다.
    데이터셋 이름은 문자 또는 숫자로 시작해야 하며, 문자, 숫자, 하이픈(-), 밑줄(_)만 포함할 수 있습니다.
  7. 선택 사항: Configure dataset fields에서 데이터셋에 포함할 call의 필드를 선택합니다.
    • 선택한 각 필드의 열 이름을 사용자 지정할 수 있습니다.
    • Dataset에 포함할 필드 일부만 선택하거나, 모든 필드의 선택을 해제할 수 있습니다.
  8. 데이터셋 필드 설정을 마치면 Next를 클릭합니다. 새 Dataset의 미리보기가 표시됩니다.
  9. 선택 사항: Dataset에서 편집 가능한 필드를 클릭해 항목을 수정합니다.
  10. Create dataset을 클릭합니다. Weave가 새 데이터셋을 생성합니다.
  11. 확인 팝업에서 View the dataset을 클릭해 새 Dataset을 확인합니다. 또는 Datasets 탭으로 이동합니다.

데이터셋 편집

다음 절차에 따라 기존 Dataset에 새 행을 추가하고 새 버전을 게시하세요. UI에서 편집하면 코드를 변경하지 않고도 평가 데이터를 확장하거나 수정할 때 유용합니다.
  1. 편집할 Dataset이 있는 Weave 프로젝트로 이동합니다.
  2. 사이드바에서 Datasets를 선택합니다. 사용 가능한 Dataset이 표시됩니다. Dataset UI
  3. 객체 열에서 편집할 Dataset의 이름과 버전을 클릭합니다. 이름, 버전, 작성자, Dataset 행 등 Dataset 정보가 표시되는 팝아웃 모달이 나타납니다. Dataset 정보 보기
  4. 모달 오른쪽 상단에서 Edit dataset 버튼(연필 아이콘)을 클릭합니다. 모달 하단에 + Add row 버튼이 표시됩니다. Dataset UI- 행 추가 아이콘
  5. + Add row를 클릭합니다. 기존 Dataset 행 위에 새 행이 표시되며, Dataset에 새 행을 추가할 수 있음을 나타냅니다. Dataset UI
  6. 새 행에 데이터를 추가하려면 해당 행에서 원하는 열을 클릭합니다. Dataset 행의 기본 id 열은 Weave가 생성 시 자동으로 할당하므로 편집할 수 없습니다. 서식 지정을 위한 Text, Code, Diff 옵션이 있는 편집 모달이 나타납니다. Dataset UI - 열에 데이터 추가 및 서식 지정.
  7. 새 행에서 데이터를 추가하려는 각 열에 대해 6단계를 반복합니다. Dataset UI - 모든 열에 데이터 추가.
  8. Dataset에 추가하려는 각 행에 대해 5단계를 반복합니다.
  9. 편집이 끝나면 모달 오른쪽 상단의 Publish를 클릭해 Dataset을 게시합니다. 변경 사항을 게시하지 않으려면 Cancel을 클릭합니다. Dataset UI - 게시 또는 취소. 게시가 완료되면 업데이트된 행이 포함된 새 버전의 Dataset을 UI에서 사용할 수 있습니다. Dataset UI - 게시된 메타데이터. Dataset UI - 게시된 행.

데이터셋 삭제

더 이상 필요하지 않은 Dataset을 Weave 프로젝트에서 제거하려면 다음 절차를 따르세요.
  1. 수정하려는 Dataset이 있는 Weave 프로젝트로 이동합니다.
  2. 사이드바에서 Datasets를 선택합니다. 사용 가능한 Dataset이 표시됩니다.
  3. 객체 열에서 삭제하려는 Dataset의 이름과 버전을 클릭합니다. 이름, 버전, 작성자, Dataset 행 등 Dataset 정보가 표시된 팝아웃 모달이 나타납니다.
  4. 모달 오른쪽 상단에서 휴지통 아이콘을 클릭합니다. Dataset 삭제를 확인하는 팝업 모달이 나타납니다. Dataset UI - 삭제 확인 모달.
  5. 팝업 모달에서 Delete를 클릭해 Dataset을 삭제합니다. Dataset을 삭제하지 않으려면 Cancel을 클릭합니다. Dataset이 삭제되며, Weave 대시보드의 Datasets 탭에 더 이상 표시되지 않습니다.

데이터셋에 새 에이전트 트레이스 추가

세션, 턴, 도구 Call과 같은 에이전트 트레이스를 Dataset에 추가하려면 다음 단계를 따르세요.
  1. wandb.ai 로 이동한 다음 프로젝트를 선택하세요.
  2. Weave 프로젝트 sidebar에서 Agents를 클릭하세요.
  3. 상단 탭 바에서 Conversations를 클릭하세요.
  4. Conversations 테이블에서 대화 행을 선택해 대화 세부정보 사이드 패널을 여세요. 대화 세부정보 사이드 패널 헤더에는 에이전트 이름과 UUID가 표시됩니다.
  5. 대화 세부정보 사이드 패널 헤더에서 오른쪽의 테이블 아이콘을 클릭해 Add example to dataset drawer를 여세요. 데이터셋에 항목을 추가하는 테이블 아이콘이 표시된 에이전트 대화 세부정보 패널 헤더.
  6. Choose a dataset에서 드롭다운을 사용해 트레이스를 추가할 데이터셋을 선택하세요.
  7. Select context에서 데이터셋에 추가할 메시지를 선택하세요. Next를 클릭하세요.
  8. 선택 내용을 검토한 다음 Add to dataset을 클릭하세요.

데이터셋에 새 트레이스 추가

ops 및 Call에서 생성된 트레이스를 Dataset에 추가하려면:
  1. 편집하려는 Weave 프로젝트로 이동합니다.
  2. 사이드바에서 Traces를 선택합니다.
  3. 새 예제를 만들 Datasets가 있는 call을 하나 이상 선택합니다.
  4. 오른쪽 상단 메뉴에서 Add selected rows to a dataset 아이콘(휴지통 아이콘 옆에 있음)을 클릭합니다. 필요하면 Show latest versions를 꺼서 사용 가능한 모든 데이터셋의 전체 버전을 표시합니다.
  5. Choose a dataset 드롭다운에서 예제를 추가할 Dataset을 선택합니다. 그러면 Configure field mapping 옵션이 표시됩니다.
  6. 선택 사항: Configure field mapping에서 call의 필드를 해당 데이터셋 열에 매핑하는 방식을 조정할 수 있습니다.
  7. 필드 매핑 구성을 마치면 Next를 클릭합니다. 새 Dataset의 미리보기가 표시됩니다.
  8. 빈 행(초록색)에 새 예제 값을 추가합니다. id 필드는 편집할 수 없으며 Weave가 자동으로 생성합니다.
  9. Add to dataset을 클릭합니다. 또는 Configure field mapping 화면으로 돌아가려면 Back을 클릭합니다.
  10. 확인 팝업에서 View the dataset을 클릭해 변경 사항을 확인합니다. 또는 Datasets 탭으로 이동해 Dataset의 업데이트를 확인합니다.

기타 데이터셋 오퍼레이션

이 섹션에서는 이미 작업할 Dataset이 있을 때 유용한 추가 SDK 오퍼레이션을 다룹니다.

행 선택

select 메서드를 사용하면 인덱스를 기준으로 Dataset에서 특정 행을 선택할 수 있습니다. 예를 들어 더 적은 수의 예시를 대상으로 평가하려는 경우처럼 데이터의 하위 집합을 만들 때 유용합니다.
import weave
from weave import Dataset

# 샘플 데이터셋 생성
dataset = Dataset(rows=[
    {'col_a': 1, 'col_b': 'x'},
    {'col_a': 2, 'col_b': 'y'},
    {'col_a': 3, 'col_b': 'z'},
    {'col_a': 4, 'col_b': 'w'},
])

# 인덱스 0과 2에 있는 행 선택
subset_dataset = dataset.select([0, 2])

# 이제 subset_dataset에는 첫 번째와 세 번째 행만 포함됩니다
# print(list(subset_dataset))
# 출력: [{'col_a': 1, 'col_b': 'x'}, {'col_a': 3, 'col_b': 'z'}]