메인 콘텐츠로 건너뛰기
프롬프트를 생성하고 게시한 후에는 코드와 프로덕션에서 특정 버전을 참조하고, 조회하고, 사용할 수 있습니다. weave.publish로 프롬프트를 게시하면 W&B Weave가 불변 버전을 생성합니다. 각 버전은 이름과 버전으로 참조할 수 있으며, weave.ref(...).get()으로 코드에서 조회할 수 있고, Weave UI에서 확인할 수 있습니다.

프롬프트 버전

Weave의 프롬프트는 버전 관리되는 객체로 저장됩니다. 이를 통해 프롬프트를 안전하게 반복 개선하면서도 evaluations, 실험, 프로덕션 시스템이 실행에 사용한 정확한 프롬프트 버전을 참조할 수 있습니다. 프롬프트 버전은 Weave 객체 레퍼런스를 사용해 접근합니다. 이 페이지에서는 프롬프트 버전이 어떻게 생성되는지, 코드에서 특정 버전을 어떻게 조회하는지, 그리고 Weave UI에서 버전을 확인하고 비교하는 방법을 설명합니다.

프롬프트 버전이 생성되는 방법

Weave는 프롬프트의 모든 버전을 자동으로 추적하여 프롬프트가 어떻게 발전해 가는지에 대한 전체 이력을 생성합니다. 이 버전 관리 시스템은 프롬프트 엔지니어링 워크플로에서 매우 중요합니다. 이를 통해 안전하게 실험하고, 어떤 변경이 성능을 향상했거나 저하시켰는지 추적하며, 필요할 경우 이전 버전으로 쉽게 되돌릴 수 있습니다. 같은 이름에 내용만 다른 프롬프트를 게시할 때마다 Weave는 모든 이전 버전을 보존하면서 새 버전을 생성합니다. 각 버전은 변경할 수 없습니다. 한 번 생성되면 해당 버전의 내용은 수정할 수 없습니다. 프롬프트를 업데이트한 뒤 다시 게시하면 Weave는 이전 버전을 보존하면서 새 버전을 생성합니다. 버전 관리를 사용하면 다음이 가능합니다.
  • 과거 실험을 재현합니다.
  • 프롬프트 변경 사항을 안전하게 반복 개선합니다.
  • 프롬프트 업데이트를 통제된 방식으로 배포합니다.

전체 ref URI 구성

Weave 객체는 전체 ref URI를 사용해 고유하게 식별할 수 있습니다. 전체 Weave 객체 ref URI는 다음과 같습니다:
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는 다음과 같습니다:
weave:///your-team-name/your-project-name/object/support_prompt:v3

코드에서 프롬프트 버전 조회

프롬프트를 조회하려면 이름과 버전에 대한 레퍼런스를 만든 다음 .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에 있는 프롬프트를 조회합니다. weave.init(...)을 호출할 필요가 없습니다.
다음 예제는 애플리케이션에서 사용할 수 있도록 support_prompt:v3 버전을 불러옵니다.
import weave

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

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

프로덕션에서 프롬프트 사용

프로덕션 시스템에 프롬프트를 배포할 때는 버전 인덱스나 최신 버전 대신 production과 같은 별칭을 사용하세요. 프로덕션 애플리케이션에서는 weave.ref(<name>:<alias>).get()으로 프롬프트를 로드하세요. 별칭을 사용하면 프로덕션 동작을 안정적이고 예측 가능하게 유지할 수 있습니다. 새 버전을 프로덕션으로 승격할 준비가 되면 별칭을 해당 버전으로 옮기세요. 그러면 모든 사용자가 자동으로 변경 사항을 반영합니다. 일반적인 워크플로는 다음과 같습니다:
  1. 새 프롬프트 버전을 개발하고 테스트합니다.
  2. 데이터셋 또는 평가 스위트를 기준으로 새 프롬프트를 평가합니다.
  3. client.set_aliases(new_ref, "production")으로 production 별칭을 새 버전으로 이동합니다.
이 접근 방식을 사용하면 팀이 프로덕션 동작을 예기치 않게 변경하지 않고도 프롬프트를 안전하게 반복 개선할 수 있습니다.

프롬프트 버전 보기 및 비교

UI에서 프롬프트 버전을 보려면 다음 단계를 따르세요.
  1. wandb.ai로 이동한 다음 프로젝트를 선택합니다.
  2. Weave 프로젝트 사이드바에서 Assets를 클릭합니다. Assets 페이지가 열립니다.
  3. Assets 페이지에서 Prompts를 클릭합니다. 그러면 프로젝트의 프롬프트가 나열된 Prompts 페이지가 열립니다.
  4. Versions 열에서 보려는 프롬프트의 (x) Versions를 클릭합니다. 프롬프트 버전 목록이 열립니다.
선택한 프롬프트의 버전을 보여주는 Prompt Assets UI.
  1. (선택) 나열된 프롬프트 옆의 체크박스를 클릭한 다음 테이블 툴바에서 Compare 버튼을 클릭하면 프롬프트 버전을 비교할 수 있습니다. 이렇게 하면 프롬프트 간 차이점을 확인할 수 있습니다.
두 개의 서로 다른 프롬프트 버전 간 차이점을 보여주는 Compare prompts UI.

프롬프트 태그 및 별칭 추가

별칭과 태그를 사용해 프롬프트 버전을 정리할 수 있습니다. 이러한 레이블은 특정 버전을 식별하고 참조하는 데 도움이 됩니다.
  • 별칭: 단일 프롬프트 버전을 가리키는 고유한 이름입니다. 언제든 별칭이 다른 버전을 가리키도록 변경할 수 있으므로, 프로덕션이나 스테이징처럼 안정적인 참조에 유용합니다.
  • 태그: 버전에 연결된 설명용 레이블입니다. 하나의 버전에는 여러 태그를 지정할 수 있습니다. 검토 완료 또는 평가 통과처럼 버전을 분류하고 필터링할 때 태그를 사용합니다.
UI에서 프롬프트의 별칭과 태그를 설정하려면 다음 단계를 따르세요.
  1. Weave 프로젝트 사이드바에서 Assets를 클릭합니다. 그러면 Assets 페이지가 열립니다.
  2. Assets 페이지에서 Prompts를 클릭합니다. 표에서 할당된 AliasesTags를 볼 수 있습니다.
  3. Prompts 표에서 변경하려는 프롬프트의 링크를 클릭합니다.
  4. 선택한 프롬프트의 세부 정보 패널에서 제목 표시줄에 프롬프트 이름과 특정 버전이 표시됩니다. 업데이트하려는 프롬프트 버전을 선택합니다.
  5. 패널 툴바에서 컨트롤을 사용해 이 특정 버전에 할당된 별칭과 태그를 추가하거나 제거합니다.
Prompts 페이지의 프롬프트 세부 정보 패널에서 선택한 프롬프트 버전과 Aliases 및 Tags 컨트롤이 표시된 모습입니다.

코드에서 태그와 별칭 수정하기

태그와 별칭은 다음과 같은 작업을 위해 코드로도 관리할 수 있습니다.
  • 태그와 별칭을 인라인으로 지정해 프롬프트를 게시합니다.
  • 특정 버전을 가리키도록 별칭을 지정하고, 이를 해석해 프롬프트를 로드합니다.
  • 버전에 태그와 별칭을 추가, 제거, 또는 나열합니다.
다음 코드 예제는 세 가지 버전이 있는 프롬프트 my-prompt를 프로젝트에 추가하며, 각 버전에는 여러 태그와 별칭이 있습니다. 프로젝트에 맞게 'your-team-name/your-project-name'를 수정하세요.
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"],
)

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