> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 데이터셋 수집 및 추적

> LLM 애플리케이션 평가를 위한 예시를 정리, 수집, 추적하고 버전 관리합니다

Weave 데이터셋은 LLM 애플리케이션 평가와 병렬 비교를 위한 예시를 정리, 수집, 추적하고 버전 관리하는 데 도움이 됩니다. 이 페이지를 따라 하면 여러분과 팀 구성원이 시간에 따라 LLM 애플리케이션 동작을 평가하고, 반복적으로 개선하고, 비교하는 데 사용할 수 있는 재사용 가능한 버전 관리 예시 컬렉션을 구축할 수 있습니다. `Dataset`은 프로그래밍 방식과 UI를 통해 생성하고 사용할 수 있습니다.

이 페이지는 코드 또는 Weave UI를 통해 평가 데이터를 관리하려는 엔지니어와 팀 구성원을 위한 것입니다. 다음 내용을 설명합니다.

* Python 및 TypeScript에서 `Dataset`의 기본 오퍼레이션과 시작하는 방법
* Weave [Call](../tracking/tracing)와 같은 객체에서 Python 및 TypeScript로 `Dataset`을 생성하는 방법
* UI에서 `Dataset`에 사용할 수 있는 오퍼레이션

<div id="dataset-quickstart">
  ## 데이터셋 퀵스타트
</div>

다음 코드 예시는 Python 및 TypeScript를 사용해 기본적인 `데이터셋` 오퍼레이션을 수행하는 방법을 보여줍니다. SDK를 사용하면 다음을 수행할 수 있습니다.

* `데이터셋` 생성
* `데이터셋` 게시
* `데이터셋` 조회
* `데이터셋`의 특정 예시에 액세스

탭을 선택해 Python 및 TypeScript 코드를 확인하세요.

<Tabs>
  <Tab title="Python">
    ```python lines theme={null}
    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']
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript twoslash lines theme={null}
    // @noErrors
    import * as weave from 'weave';

    // Weave 초기화
    const client = await weave.init('intro-example');

    // 데이터셋 생성
    const dataset = new weave.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."}
        ]
    });

    // 데이터셋 게시
    const ref = await dataset.save();

    // 데이터셋 조회
    const retrievedDataset = await client.get(ref);

    // 또는 URI string을 사용해 조회
    const datasetUri = 'weave:///my-entity/intro-example/object/grammar:abc123def456';
    const refFromUri = weave.ObjectRef.fromUri(datasetUri);
    const retrievedDatasetFromUri = await client.get(refFromUri);

    // 특정 예시에 액세스
    const exampleLabel = retrievedDataset.getRow(2).sentence;
    ```
  </Tab>
</Tabs>

<div id="create-a-dataset-from-other-objects">
  ## 다른 객체에서 dataset 만들기
</div>

이 섹션에서는 기록된 Weave call이나 기존 표 형식 데이터처럼 이미 가지고 있는 데이터로 `Dataset`을 구축하는 방법을 보여주므로, 예시를 수동으로 다시 입력할 필요가 없습니다.

<Tabs>
  <Tab title="Python">
    Python에서는 [Call](../tracking/tracing) 같은 일반적인 Weave 객체나 `pandas.DataFrame` 같은 Python 객체로도 `Dataset`을 생성할 수 있습니다. 이 기능은 특정 예시들로 예시 `Dataset`을 만들고 싶을 때 유용합니다.

    ### Weave call

    하나 이상의 Weave call에서 `Dataset`을 만들려면 call 객체를 조회한 뒤, `from_calls` 메서드에 전달하는 목록에 추가합니다.

    ```python lines theme={null}
    @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` 메서드를 사용합니다. 다시 `Dataset`을 `DataFrame`으로 변환하려면 `to_pandas`를 사용합니다.

    ```python lines theme={null}
    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`을 만들려면 먼저 필요한 의존성이 설치되어 있는지 확인합니다:

    ```bash theme={null}
    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` 메서드를 사용합니다.

    ```python lines theme={null}
    # 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'])
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext theme={null}
     이 기능은 현재 TypeScript에서 아직 사용할 수 없습니다.
    ```
  </Tab>
</Tabs>

<div id="create-edit-and-delete-a-dataset-in-the-ui">
  ## UI에서 데이터셋 생성, 수정 및 삭제
</div>

UI에서 `데이터셋`을 생성, 수정 및 삭제할 수 있습니다. Weave UI에서 데이터셋을 생성하면 코드를 편집하지 않고도 귀하와 팀의 비엔지니어링 구성원이 예시, 질문 및 기타 에이전트 테스트 데이터가 포함된 공유 가능한 데이터셋을 만들고 큐레이션할 수 있습니다.

다음 절차에서는 UI에서 이러한 각 작업을 수행하는 방법을 안내합니다. 평가 데이터를 노트북이나 스크립트가 아니라, 해당 데이터가 나온 트레이스와 함께 관리하려면 이 절차를 사용하세요.

<div id="create-a-new-dataset">
  ### 새 데이터셋 만들기
</div>

다음 절차에서는 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** 옵션이 표시됩니다.

   <Note>
     데이터셋 이름은 문자 또는 숫자로 시작해야 하며, 문자, 숫자, 하이픈(-), 밑줄(\_)만 포함할 수 있습니다.
   </Note>

7. 선택 사항: **Configure dataset fields**에서 데이터셋에 포함할 call의 필드를 선택합니다.
   * 선택한 각 필드의 열 이름을 사용자 지정할 수 있습니다.
   * 새 `Dataset`에 포함할 필드 일부만 선택하거나, 모든 필드의 선택을 해제할 수 있습니다.

8. 데이터셋 필드 설정을 마치면 **Next**를 클릭합니다. 새 `Dataset`의 미리보기가 표시됩니다.

9. 선택 사항: **Dataset**에서 편집 가능한 필드를 클릭해 항목을 수정합니다.

10. **Create dataset**을 클릭합니다. Weave가 새 데이터셋을 생성합니다.

11. 확인 팝업에서 **View the dataset**을 클릭해 새 `Dataset`을 확인합니다. 또는 **Datasets** 탭으로 이동합니다.

<div id="edit-a-dataset">
  ### 데이터셋 편집
</div>

다음 절차에 따라 기존 `Dataset`에 새 행을 추가하고 새 버전을 게시하세요. UI에서 편집하면 코드를 변경하지 않고도 평가 데이터를 확장하거나 수정할 때 유용합니다.

1. 편집할 `Dataset`이 있는 Weave 프로젝트로 이동합니다.

2. 사이드바에서 **Datasets**를 선택합니다. 사용 가능한 `Dataset`이 표시됩니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=c011e3f981712ffdb9e7b3c8b62b6747" alt="Dataset UI" width="277" height="395" data-path="weave/guides/core-types/imgs/datasetui.png" />

3. **객체** 열에서 편집할 `Dataset`의 이름과 버전을 클릭합니다. 이름, 버전, 작성자, `Dataset` 행 등 `Dataset` 정보가 표시되는 팝아웃 모달이 나타납니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=19ad98ae1a82a808f6ce1a5812213062" alt="Dataset 정보 보기" width="341" height="306" data-path="weave/guides/core-types/imgs/datasetui-popout.png" />

4. 모달 오른쪽 상단에서 **Edit dataset** 버튼(연필 아이콘)을 클릭합니다. 모달 하단에 **+ Add row** 버튼이 표시됩니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=8c58692bb63f9519592de60e90ea689b" alt="Dataset UI- 행 추가 아이콘" width="48" height="65" data-path="weave/guides/core-types/imgs/datasetui-popout-edit.png" />

5. **+ Add row**를 클릭합니다. 기존 `Dataset` 행 위에 새 행이 표시되며, `Dataset`에 새 행을 추가할 수 있음을 나타냅니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-green.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=718d02330b3b1f1a7dc8eb282dcc6ac2" alt="Dataset UI" width="841" height="194" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-green.png" />

6. 새 행에 데이터를 추가하려면 해당 행에서 원하는 열을 클릭합니다. `Dataset` 행의 기본 **id** 열은 Weave가 생성 시 자동으로 할당하므로 편집할 수 없습니다. 서식 지정을 위한 **Text**, **Code**, **Diff** 옵션이 있는 편집 모달이 나타납니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-addcol.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=e07cd4d2e808662d74658afae8082f5a" alt="Dataset UI - 열에 데이터 추가 및 서식 지정." width="243" height="233" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-addcol.png" />

7. 새 행에서 데이터를 추가하려는 각 열에 대해 6단계를 반복합니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-colsadded.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=16154c3e8bb487e193de7f8ade3499db" alt="Dataset UI - 모든 열에 데이터 추가." width="853" height="194" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-colsadded.png" />

8. `Dataset`에 추가하려는 각 행에 대해 5단계를 반복합니다.

9. 편집이 끝나면 모달 오른쪽 상단의 **Publish**를 클릭해 `Dataset`을 게시합니다. 변경 사항을 게시하지 않으려면 **Cancel**을 클릭합니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-publish.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=654cedabe596f017448ae93cc527d17b" alt="Dataset UI - 게시 또는 취소." width="224" height="135" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-publish.png" />

   게시가 완료되면 업데이트된 행이 포함된 새 버전의 `Dataset`을 UI에서 사용할 수 있습니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-published-meta.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=f79f512ccf39735079c56b1daa790128" alt="Dataset UI - 게시된 메타데이터." width="560" height="137" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-published-meta.png" />

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-popout-edit-published-rows.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=7fac2d9b7665b77a931df37361ba8827" alt="Dataset UI - 게시된 행." width="838" height="219" data-path="weave/guides/core-types/imgs/datasetui-popout-edit-published-rows.png" />

<div id="delete-a-dataset">
  ### 데이터셋 삭제
</div>

더 이상 필요하지 않은 `Dataset`을 Weave 프로젝트에서 제거하려면 다음 절차를 따르세요.

1. 수정하려는 `Dataset`이 있는 Weave 프로젝트로 이동합니다.

2. 사이드바에서 **Datasets**를 선택합니다. 사용 가능한 `Dataset`이 표시됩니다.

3. **객체** 열에서 삭제하려는 `Dataset`의 이름과 버전을 클릭합니다. 이름, 버전, 작성자, `Dataset` 행 등 `Dataset` 정보가 표시된 팝아웃 모달이 나타납니다.

4. 모달 오른쪽 상단에서 휴지통 아이콘을 클릭합니다.

   `Dataset` 삭제를 확인하는 팝업 모달이 나타납니다.

   <img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/datasetui-delete-modal.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=c1e87d12b76131cf9c0fa524e8ce9d56" alt="Dataset UI - 삭제 확인 모달." width="560" height="358" data-path="weave/guides/core-types/imgs/datasetui-delete-modal.png" />

5. 팝업 모달에서 **Delete**를 클릭해 `Dataset`을 삭제합니다. `Dataset`을 삭제하지 않으려면 **Cancel**을 클릭합니다.

   `Dataset`이 삭제되며, Weave 대시보드의 **Datasets** 탭에 더 이상 표시되지 않습니다.

<div id="add-a-new-agent-trace-to-a-dataset">
  ### 데이터셋에 새 에이전트 트레이스 추가
</div>

에이전트 턴과 도구 Call을 `데이터셋`에 추가하려면 [데이터셋에 에이전트 메시지 추가](/ko/weave/guides/tracking/view-agent-activity#add-agent-messages-to-a-dataset)를 참고하세요.

<div id="add-a-new-trace-to-a-dataset">
  ### 데이터셋에 새 트레이스 추가
</div>

`@weave.op` 데코레이터를 사용하는 Ops 및 Calls에서 생성된 트레이스를 `데이터셋`에 추가하려면:

1. 편집하려는 Weave 프로젝트로 이동합니다.

2. 사이드바에서 **Traces**를 선택합니다.

3. 새 예제를 만들 `Datasets`가 있는 call을 하나 이상 선택합니다.

4. 오른쪽 상단 메뉴에서 **Add selected rows to a dataset** 아이콘(휴지통 아이콘 옆에 있음)을 클릭합니다. 필요하면 **Show latest versions**를 꺼서 사용 가능한 모든 데이터셋의 전체 버전을 표시합니다.

5. **Choose a dataset** 드롭다운에서 예제를 추가할 `데이터셋`을 선택합니다. 그러면 **Configure field mapping** 옵션이 표시됩니다.

6. 선택 사항: **Configure field mapping**에서 call의 필드를 해당 데이터셋 열에 매핑하는 방식을 조정할 수 있습니다.

7. 필드 매핑 구성을 마치면 **Next**를 클릭합니다. 새 `데이터셋`의 미리보기가 표시됩니다.

8. 빈 행(초록색)에 새 예제 값을 추가합니다. **id** 필드는 편집할 수 없으며 Weave가 자동으로 생성합니다.

9. **Add to dataset**을 클릭합니다. 또는 **Configure field mapping** 화면으로 돌아가려면 **Back**을 클릭합니다.

10. 확인 팝업에서 **View the dataset**을 클릭해 변경 사항을 확인합니다. 또는 **Datasets** 탭으로 이동해 `데이터셋`의 업데이트를 확인합니다.

<div id="other-dataset-operations">
  ## 기타 데이터셋 오퍼레이션
</div>

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

<Tabs>
  <Tab title="Python">
    ### 행 선택

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

    ```python lines theme={null}
    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'}]
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext theme={null}
     이 기능은 현재 TypeScript에서 아직 지원되지 않습니다.
    ```
  </Tab>
</Tabs>
