> ## 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 애플리케이션용 프롬프트 버전을 조회하고 관리합니다

[프롬프트를 생성하고 게시](/ko/weave/guides/core-types/prompts.mdx)한 후에는 코드와 프로덕션에서 특정 버전을 참조하고, 조회하고, 사용할 수 있습니다.

`weave.publish`로 프롬프트를 게시하면 W\&B Weave가 불변 버전을 생성합니다. 이름과 버전으로 각 버전을 참조할 수 있으며, `weave.ref(...).get()`으로 코드에서 조회할 수 있고, Weave UI에서 확인할 수 있습니다.

<div id="prompt-versions">
  ## 프롬프트 버전
</div>

Weave는 프롬프트를 **버전 관리되는 객체**로 저장합니다. 이를 통해 프롬프트를 안전하게 반복 개선하면서도 evaluations, 실험, 프로덕션 시스템이 실행에 사용한 정확한 프롬프트 버전을 참조할 수 있습니다.

프롬프트 버전에는 Weave 객체 레퍼런스를 사용해 접근합니다. 이 페이지에서는 Weave가 프롬프트 버전을 어떻게 생성하는지, 코드에서 특정 버전을 어떻게 조회하는지, 그리고 Weave UI에서 버전을 확인하고 비교하는 방법을 설명합니다.

<div id="how-prompt-versions-are-created">
  ## 프롬프트 버전이 생성되는 방법
</div>

Weave는 프롬프트의 모든 버전을 자동으로 추적하여 프롬프트가 어떻게 발전해 가는지에 대한 전체 이력을 생성합니다. 이 버전 관리 시스템은 프롬프트 엔지니어링 워크플로에서 중요합니다. 이를 통해 안전하게 실험하고, 어떤 변경이 성능을 향상했거나 저하시켰는지 추적하며, 필요할 경우 이전 버전으로 되돌릴 수 있습니다. 같은 이름에 내용만 다른 프롬프트를 게시할 때마다 Weave는 모든 이전 버전을 보존하면서 새 버전을 생성합니다.

각 버전은 변경할 수 없습니다. 한 번 생성되면 해당 버전의 내용은 수정할 수 없습니다. 프롬프트를 업데이트한 뒤 다시 게시하면 Weave는 이전 버전을 보존하면서 새 버전을 생성합니다.

버전 관리를 사용하면 다음이 가능합니다.

* 과거 실험을 재현합니다.
* 프롬프트 변경 사항을 안전하게 반복 개선합니다.
* 프롬프트 업데이트를 통제된 방식으로 배포합니다.

<div id="construct-a-fully-qualified-ref-uri">
  ## 전체 ref URI 구성
</div>

코드에서 프롬프트 버전을 가져오기 전에 Weave가 저장된 객체를 어떻게 식별하는지 이해해 두면 도움이 됩니다. 전체 ref URI는 Weave 객체를 고유하게 식별합니다.

전체 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` 같은 버전 인덱스, 또는 `:latest`나 `:production` 같은 별칭입니다. 모든 객체에는 `:latest` 별칭이 있습니다.

예를 들어, 완전 수식된 Weave 프롬프트 URI는 다음과 같습니다:

```text theme={null}
weave:///your-team-name/your-project-name/object/support_prompt:v3
```

<div id="retrieve-a-prompt-version-in-code">
  ## 코드에서 프롬프트 버전 조회
</div>

프롬프트를 조회하려면 이름과 버전에 대한 레퍼런스를 만든 다음 `.get()`을 호출해 불러오세요. ref는 저장된 객체를 가리키며, `.get()`은 해당 객체를 가져와 애플리케이션에서 사용할 수 있게 합니다.

다음과 같은 몇 가지 방식으로 ref를 만들 수 있습니다.

* `weave.ref(<name>)`: 프롬프트의 `:latest` 버전을 조회합니다. `weave.init(...)`을 호출해야 합니다.
* `weave.ref(<name>:<alias_or_version>)`: 별칭, 버전 해시 또는 버전 인덱스로 프롬프트를 조회합니다. `weave.init(...)`을 호출해야 합니다.
* `weave.ref(<fully_qualified_ref_uri>)`: 지정한 [전체 ref URI](#construct-a-fully-qualified-ref-uri)에 있는 프롬프트를 조회합니다. `weave.init(...)`을 호출할 필요가 없습니다.

다음 예제는 애플리케이션에서 사용할 수 있도록 `support_prompt:v3` 버전을 불러옵니다.

```python lines theme={null}
import weave

weave.init("your-team-name/your-project-name")

prompt = weave.ref("support_prompt:v3").get()
```

<div id="use-prompts-in-production">
  ## 프로덕션에서 프롬프트 사용
</div>

프로덕션 시스템에 프롬프트를 배포할 때는 버전 인덱스나 최신 버전 대신 `production`과 같은 [별칭](#add-prompt-tags-and-aliases)을 사용하세요. 프로덕션 애플리케이션에서는 `weave.ref(<name>:<alias>).get()`으로 프롬프트를 로드하세요.

별칭을 사용하면 프로덕션 동작을 안정적이고 예측 가능하게 유지할 수 있습니다. 새 버전을 프로덕션으로 승격할 준비가 되면 별칭을 해당 버전으로 옮기세요. 그러면 모든 사용자가 자동으로 변경 사항을 반영합니다.

일반적인 워크플로는 다음과 같습니다:

1. 새 프롬프트 버전을 개발하고 테스트합니다.
2. 데이터셋 또는 평가 스위트를 기준으로 새 프롬프트를 평가합니다.
3. `client.set_aliases(new_ref, "production")`으로 `production` 별칭을 새 버전으로 이동합니다.

이 접근 방식을 사용하면 팀이 프로덕션 동작을 예기치 않게 변경하지 않고도 프롬프트를 안전하게 반복 개선할 수 있습니다.

## <a id="view-prompts" aria-label="프롬프트 버전 보기 및 비교" />프롬프트 버전 보기 및 비교

Weave UI를 사용하면 프롬프트의 모든 버전을 탐색하고 버전 간 차이점을 나란히 볼 수 있으므로, 프롬프트가 어떻게 발전해 왔는지 검토하는 데 유용합니다.

UI에서 프롬프트 버전을 보려면 다음 단계를 따르세요.

1. [wandb.ai](https://wandb.ai/)로 이동한 다음 프로젝트를 선택합니다.
2. Weave 프로젝트 사이드바에서 **Assets**를 클릭합니다. Assets 페이지가 열립니다.
3. Assets 페이지에서 **Prompts**를 클릭합니다. 그러면 프로젝트의 프롬프트가 나열된 Prompts 페이지가 열립니다.
4. **Versions** 열에서 보려는 프롬프트의 **(x) Versions**를 클릭합니다. 프롬프트 버전 목록이 열립니다.

<img src="https://mintcdn.com/wb-21fd5541/XuuaAkn-Q5DZfV3b/weave/guides/core-types/imgs/prompt-object.png?fit=max&auto=format&n=XuuaAkn-Q5DZfV3b&q=85&s=2a076bd88ae8a2c1aa6ba62b54a8eb17" alt="선택한 프롬프트의 버전을 보여주는 Prompt Assets UI." width="987" height="405" data-path="weave/guides/core-types/imgs/prompt-object.png" />

1. (선택) 프롬프트 버전을 비교하려면 나열된 프롬프트 옆의 체크박스를 클릭한 다음 테이블 툴바에서 **Compare** 버튼을 클릭합니다. 이렇게 하면 프롬프트 간 차이점을 확인할 수 있습니다.

<img src="https://mintcdn.com/wb-21fd5541/6UHHO9Wn0FEtNKHz/weave/guides/core-types/imgs/prompt-comparison.png?fit=max&auto=format&n=6UHHO9Wn0FEtNKHz&q=85&s=2a0e557afced38dc250ad155ed8b6509" alt="두 개의 서로 다른 프롬프트 버전 간 차이점을 보여주는 Compare prompts UI." width="3144" height="1290" data-path="weave/guides/core-types/imgs/prompt-comparison.png" />

<div id="add-prompt-tags-and-aliases">
  ## 프롬프트 태그 및 별칭 추가
</div>

별칭과 태그를 사용해 프롬프트 버전을 정리할 수 있습니다. 이러한 레이블은 개발, 평가, 프로덕션 워크플로 전반에서 특정 버전을 식별하고 참조하는 데 도움이 됩니다.

* 별칭: 단일 프롬프트 버전을 가리키는 고유한 이름입니다. 언제든 별칭이 다른 버전을 가리키도록 변경할 수 있으므로, `production` 또는 `staging`처럼 안정적인 참조에 유용합니다.
* 태그: 버전에 지정하는 설명용 레이블입니다. 하나의 버전에는 여러 태그를 지정할 수 있습니다. `reviewed` 또는 `passed-eval`처럼 버전을 분류하고 필터링할 때 태그를 사용합니다.

UI에서 프롬프트의 별칭과 태그를 설정하려면 다음 단계를 따르세요.

1. Weave 프로젝트 사이드바에서 **Assets**를 클릭합니다. 그러면 Assets 페이지가 열립니다.
2. Assets 페이지에서 **Prompts**를 클릭합니다. 표에서 할당된 **Aliases**와 **Tags**를 볼 수 있습니다.
3. Prompts 표에서 변경하려는 프롬프트의 링크를 클릭합니다.
4. 선택한 프롬프트의 세부 정보 패널에서 제목 표시줄에 프롬프트 이름과 특정 버전이 표시됩니다. 업데이트하려는 프롬프트 버전을 선택합니다.
5. 패널 툴바에서 컨트롤을 사용해 이 특정 버전에 할당된 별칭과 태그를 추가하거나 제거합니다.

<img src="https://mintcdn.com/wb-21fd5541/saazGndG7tH2E_xh/weave/guides/core-types/imgs/prompt-alias-tags.png?fit=max&auto=format&n=saazGndG7tH2E_xh&q=85&s=f510d478e3ac43afe250357c440591b1" alt="Prompts 페이지의 프롬프트 세부 정보 패널에서 선택한 프롬프트 버전과 Aliases 및 Tags 컨트롤이 표시된 모습입니다." width="1489" height="477" data-path="weave/guides/core-types/imgs/prompt-alias-tags.png" />

<div id="modify-tags-and-aliases-in-code">
  ### 코드에서 태그와 별칭 수정
</div>

다음과 같은 작업을 위해 코드에서 태그와 별칭을 관리할 수도 있습니다.

* 태그와 별칭을 인라인으로 지정해 프롬프트를 게시합니다.
* 별칭이 특정 버전을 가리키도록 설정하고, 이를 해석해 프롬프트를 로드합니다.
* 버전에 태그와 별칭을 추가, 제거하거나 목록으로 확인합니다.

다음 코드 예시는 `my-prompt` 프롬프트를 프로젝트에 세 개의 버전으로 추가하며, 각 버전에는 여러 태그와 별칭이 있습니다. 프로젝트에 맞게 `'your-team-name/your-project-name'`을 수정하세요.

<CodeGroup>
  ```python Python lines theme={null}
  import weave

  // TODO: 'your-team-name/your-project-name'을 올바른 값으로 설정하세요.
  client = weave.init('your-team-name/your-project-name')

  # 프롬프트의 두 버전을 게시합니다.
  v0_ref = weave.publish(
      weave.StringPrompt("Answer the user's question: {question}"),
      name="my-prompt",
  )
  v1_ref = weave.publish(
      weave.StringPrompt("Answer the user's question helpfully and concisely: {question}"),
      name="my-prompt",
  )

  # --- 별칭: 특정 버전을 가리키는 이름 있는 포인터입니다. ---

  # 버전에 별칭을 지정합니다.
  client.set_aliases(v0_ref, "staging")
  client.set_aliases(v1_ref, "production")

  # 버전의 별칭을 조회합니다.
  client.get_aliases(v1_ref)  # ["production", "latest"]

  # 다른 버전에 별칭을 설정해 별칭을 이동합니다.
  client.set_aliases(v0_ref, "production")  # v1에서 자동으로 분리됩니다.

  # 별칭을 해석해 객체를 로드합니다.
  prompt = weave.ref("my-prompt:production").get()

  # 프로젝트의 모든 별칭을 나열합니다.
  client.list_aliases()

  # 별칭을 제거합니다.
  client.remove_aliases(v0_ref, "production")

  # --- 태그: 특정 버전에 지정된 레이블입니다. ---

  # 버전에 태그를 추가합니다.
  client.add_tags(v0_ref, ["reviewed", "passed-eval"])
  client.add_tags(v1_ref, ["reviewed", "needs-improvement"])

  # 버전의 태그를 조회합니다.
  client.get_tags(v0_ref)  # ["passed-eval", "reviewed"]

  # 프로젝트의 모든 고유 태그를 나열합니다.
  client.list_tags()

  # 버전에서 태그를 제거합니다.
  client.remove_tags(v1_ref, ["needs-improvement"])

  # --- 결합: 단일 Call로 둘 다 가져옵니다. ---

  tags, aliases = client.get_tags_and_aliases(v0_ref)

  # --- 태그와 별칭을 인라인으로 지정해 게시합니다. ---

  ref = weave.publish(
      weave.StringPrompt("Be brief: {question}"),
      name="my-prompt",
      tags=["reviewed"],
      aliases=["production"],
  )

  ```

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

예시를 실행하면 Weave가 Weave 대시보드의 객체 링크를 출력합니다. 링크를 따라가 프롬프트를 확인하세요.
