메인 콘텐츠로 건너뛰기
이 문서는 대화형 노트북입니다. 로컬에서 실행하거나 다음 링크를 사용할 수 있습니다:
이 노트북에서는 최소한의 엔드 투 엔드 예시를 따라가며 W&B Weave 평가를 소개합니다. Weave Model을 정의하고, 이를 작은 데이터셋에 대해 실행하고, 맞춤형 점수화 함수로 출력을 평가한 다음, Weave에서 결과를 검토합니다. 이 문서는 Weave를 처음 사용하는 개발자를 위한 것으로, 더 고급 evaluation 워크플로를 살펴보기 전에 빠르게 직접 실습해 볼 수 있는 출발점을 제공합니다.

사전 요구 사항

Weave 평가를 실행하려면 먼저 다음 사전 요구 사항을 완료하세요.
  1. W&B Weave SDK를 설치하고 API 키로 로그인합니다.
  2. OpenAI SDK를 설치하고 API 키로 로그인합니다.
  3. W&B 프로젝트를 초기화합니다.
# 의존성 설치 및 임포트
!pip install wandb weave openai -q

import os
from getpass import getpass

from openai import OpenAI
from pydantic import BaseModel

import weave

# 🔑 API 키 설정
# 이 셀을 실행하면 `getpass`를 통해 API 키를 입력하라는 메시지가 표시되며, 터미널에 입력 내용이 표시되지 않습니다.
#####
print("---")
print(
    "Create a W&B API key at: https://wandb.ai/settings#apikeys"
)
os.environ["WANDB_API_KEY"] = getpass("Enter your W&B API key: ")
print("---")
print("You can generate your OpenAI API key here: https://platform.openai.com/api-keys")
os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI API key: ")
print("---")
#####

# 🏠 W&B 프로젝트 이름 입력
weave_client = weave.init("MY_PROJECT_NAME")  # 🐝 W&B 프로젝트 이름

첫 번째 평가 실행하기

환경 설정이 완료되었으므로 이제 평가를 정의하고 실행할 준비가 되었습니다. 다음 코드 예제는 Weave의 ModelEvaluation API를 사용해 LLM을 평가하는 방법을 보여줍니다. 먼저 weave.Model을 상속해 Weave 모델을 정의하고, 모델 이름과 프롬프트 형식을 지정한 다음 @weave.oppredict 메서드를 추적합니다. predict 메서드는 프롬프트를 OpenAI로 보내고, Pydantic 스키마(FruitExtract)를 사용해 응답을 구조화된 출력으로 파싱합니다. 그런 다음 입력 문장과 기대 정답으로 구성된 작은 평가 데이터셋을 만듭니다. 다음으로 모델 출력을 대상 레이블과 비교하는 맞춤형 점수화 함수(이 함수도 @weave.op로 추적됨)를 정의합니다. 마지막으로 모든 것을 weave.Evaluation으로 묶고 데이터셋과 scorers를 지정한 뒤, evaluate()를 호출해 평가 파이프라인을 비동기적으로 실행합니다.
# 1. Weave 모델 구성
class FruitExtract(BaseModel):
    fruit: str
    color: str
    flavor: str

class ExtractFruitsModel(weave.Model):
    model_name: str
    prompt_template: str

    @weave.op()
    def predict(self, sentence: str) -> dict:
        client = OpenAI()

        response = client.beta.chat.completions.parse(
            model=self.model_name,
            messages=[
                {
                    "role": "user",
                    "content": self.prompt_template.format(sentence=sentence),
                }
            ],
            response_format=FruitExtract,
        )
        result = response.choices[0].message.parsed
        return result

model = ExtractFruitsModel(
    name="gpt4o",
    model_name="gpt-4o",
    prompt_template='Extract fields ("fruit": <str>, "color": <str>, "flavor": <str>) as json, from the following text : {sentence}',
)

# 2. 샘플 수집
sentences = [
    "There are many fruits that were found on the recently discovered planet Goocrux. There are neoskizzles that grow there, which are purple and taste like candy.",
    "Pounits are a bright green color and are more savory than sweet.",
    "Finally, there are fruits called glowls, which have a very sour and bitter taste which is acidic and caustic, and a pale orange tinge to them.",
]
labels = [
    {"fruit": "neoskizzles", "color": "purple", "flavor": "candy"},
    {"fruit": "pounits", "color": "green", "flavor": "savory"},
    {"fruit": "glowls", "color": "orange", "flavor": "sour, bitter"},
]
examples = [
    {"id": "0", "sentence": sentences[0], "target": labels[0]},
    {"id": "1", "sentence": sentences[1], "target": labels[1]},
    {"id": "2", "sentence": sentences[2], "target": labels[2]},
]

# 3. 평가를 위한 점수화 함수 정의
@weave.op()
def fruit_name_score(target: dict, output: FruitExtract) -> dict:
    target_flavors = [f.strip().lower() for f in target["flavor"].split(",")]
    output_flavors = [f.strip().lower() for f in output.flavor.split(",")]
    # 대상 flavor 중 하나라도 출력 flavor에 포함되어 있는지 확인
    matches = any(tf in of for tf in target_flavors for of in output_flavors)
    return {"correct": matches}

# 4. 평가 실행
evaluation = weave.Evaluation(
    name="fruit_eval",
    dataset=examples,
    scorers=[fruit_name_score],
)
await evaluation.evaluate(model)
평가가 끝나면 Weave는 모델, 데이터셋, 그리고 예시별 점수를 프로젝트에 기록하므로 Weave UI에서 결과를 확인할 수 있습니다.

더 많은 예시를 찾고 계신가요

이제 기본 평가를 실행했으므로, 다음 튜토리얼에서 더 고급 워크플로를 살펴볼 수 있습니다: