> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-sdk-testing-latest.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 객체 추적 및 버전 관리

> W&B Weave에서 모든 JSON 직렬화 가능한 객체를 추적하고 버전 관리합니다

이 페이지에서는 W\&B Weave에서 버전 관리되는 객체를 게시, 가져오기, 삭제, 참조하는 방법을 설명합니다. 여러 run과 시간의 흐름에 걸쳐 데이터셋, 모델 또는 prompt와 같은 구조화된 데이터를 추적해야 할 때 사용하세요.

<div id="objects">
  ## 객체
</div>

**객체**는 버전 관리되는 직렬화 가능한 데이터입니다. Weave는 객체가 변경되면 자동으로 버전을 관리하고 변경 불가능한 이력을 생성합니다. 객체에는 다음이 포함됩니다.

* **Datasets**: 평가를 위한 예제 모음
* **Models**: LLM 로직의 설정 및 파라미터
* **Prompts**: 버전 관리되는 프롬프트 템플릿

```python lines theme={null}
dataset = weave.Dataset(
    name="test-cases",
    rows=[
        {"input": "What is 2+2?", "expected": "4"},
        {"input": "What is the capital of France?", "expected": "Paris"},
    ]
)
weave.publish(dataset)
```

<div id="publish-an-object">
  ## 객체 게시
</div>

Weave의 직렬화 계층은 객체를 저장하고 버전을 관리합니다.

<Tabs>
  <Tab title="Python">
    ```python lines theme={null}
    import weave
    weave.init("your-team-name/your-project-name")
    # 목록을 저장하고 이름을 'cat-names'로 지정합니다
    weave.publish(['felix', 'jimbo', 'billie'], 'cat-names')
    ```
  </Tab>

  <Tab title="TypeScript">
    TypeScript의 게시 기능 지원은 제한적입니다. 모든 객체가 지원되는 것은 아닙니다.

    ```typescript twoslash lines theme={null}
    // @noErrors
    import * as weave from 'weave'

    const client = await weave.init("your-team-name/your-project-name")

    // 배열을 저장하고 이름을 'cat-names'로 지정합니다
    client.publish(['felix', 'jimbo', 'billie'], 'cat-names')
    ```
  </Tab>
</Tabs>

이름을 지정해 객체를 저장하면, 해당 객체가 아직 없을 경우 Weave가 그 객체의 첫 번째 버전을 생성합니다.

<div id="get-an-object-back">
  ## 객체 다시 가져오기
</div>

게시한 후에는 레퍼런스를 사용해 저장된 객체를 가져올 수 있습니다.

<Tabs>
  <Tab title="Python">
    `weave.publish()`는 Ref를 반환합니다. 어떤 Ref에서든 `.get()`을 호출해 해당 객체를 다시 가져올 수 있습니다.

    Ref를 생성한 다음 객체를 다시 가져올 수 있습니다.

    ```python lines theme={null}
    weave.init("your-team-name/your-project-name")
    cat_names = weave.ref('cat-names').get()
    ```
  </Tab>

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

<div id="delete-an-object">
  ## 객체 삭제
</div>

객체의 특정 버전이 더 이상 필요하지 않다면, 해당 ref를 사용해 제거할 수 있습니다.

<Tabs>
  <Tab title="Python">
    객체 버전을 삭제하려면 객체의 ref에서 `.delete()`를 호출하세요.

    ```python lines theme={null}
    weave.init("your-team-name/your-project-name")
    cat_names_ref = weave.ref('cat-names:v1')
    cat_names_ref.delete()
    ```

    삭제된 객체에 접근하면 오류가 발생합니다. 삭제된 객체를 참조하는 객체를 resolve하면, 삭제된 객체 대신 `DeletedRef`가 반환됩니다.
  </Tab>

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

<div id="construct-object-refs">
  ## 객체 ref 만들기
</div>

ref는 저장된 객체와 버전을 고유하게 식별합니다. 다음 섹션에서는 URI 구조와 ref를 구성하는 방법을 설명합니다.

Weave에서 완전 수식된 객체 ref URI는 다음과 같습니다.

```text theme={null}
weave:///[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]/object/[OBJECT-NAME]:[OBJECT-VERSION]
```

* `[YOUR-TEAM-NAME]`: W\&B entity(사용자 이름 또는 팀 이름)
* `[YOUR-PROJECT-NAME]`: W\&B 프로젝트
* `[OBJECT-NAME]`: 객체 이름
* `[OBJECT-VERSION]`: 버전 해시, `v0` 또는 `v1` 같은 string, 또는 `:latest` 같은 별칭입니다. 모든 객체에는 `:latest` 별칭이 있습니다.

몇 가지 방식으로 ref를 구성할 수 있습니다:

* `weave.ref([NAME])`: 객체의 `:latest` 버전을 가져옵니다. `weave.init(...)`를 호출해야 합니다.
* `weave.ref([NAME]:[VERSION])`: 지정한 버전의 객체를 가져옵니다. `weave.init(...)`를 호출해야 합니다.
* `weave.ref([FULLY-QUALIFIED-REF-URI])`: 지정한 정규화된 객체 ref URI에 있는 객체를 가져옵니다. `weave.init()`를 호출할 필요가 없습니다.
