Weave Scorers — 출력 품질 점수 매기기
Weave Scorers — 출력 품질 점수 매기기
AI가 낸 출력이 '얼마나 좋은지'는 숫자로 매겨야 비교가 가능해요. Weave에서 이 역할을 하는 게 **Scorer(스코어러)**예요. AI의 출력을 받아 분석하고, 결과를 {키: 값} 사전으로 돌려주면서 평가 지표를 만들어요. 필요하면 입력 데이터를 기준(reference)으로 삼을 수도 있고, 판정 이유 같은 부가 정보도 함께 돌려줄 수 있어요.
Scorer 종류
Weave는 두 가지 Scorer 방식을 지원해요.
- 함수 기반(Function-based):
@weave.op로 장식된 Python 함수 - 클래스 기반(Class-based): 복잡한 평가에 쓰는
weave.Scorer상속 클래스
Scorer는 반드시 사전을 돌려야 하고, 여러 지표나 중첩 지표, LLM 판정기의 판단 텍스트처럼 숫자가 아닌 값도 담을 수 있어요.
import weave
@weave.op
def evaluate_uppercase(text: str) -> dict:
return {"text_is_uppercase": text.isupper()}
my_eval = weave.Evaluation(
dataset=[{"text": "HELLO WORLD"}],
scorers=[evaluate_uppercase]
)
클래스 기반 예시
LLM 판정기처럼 프롬프트를 바꾸거나 여러 함수 호출이 필요하면 Scorer를 상속받아요. score 메서드를 @weave.op로 장식하고 사전을 돌려주면 돼요.
class SummarizationScorer(Scorer):
model_id: str = "gpt-4o"
system_prompt: str = "Evaluate whether the summary is good."
@weave.op
def call_llm(self, summary: str, processed_text: str) -> dict:
res = llm_client.chat.completions.create(
messages=[{"role": "system", "content": self.system_prompt},
{"role": "user", "content": summary}])
return {"summary_quality": res}
@weave.op
def score(self, output: str, text: str) -> dict:
eval_result = self.call_llm(summary=output, processed_text=processed_text)
return {"summary_quality": eval_result}
컬럼 매핑과 점수 요약
스코어 함수의 인자 이름이 데이터셋 컬럼과 안 맞으면 column_map으로 연결해요.
scorer = SummarizationScorer(column_map={"text": "news_article"})
평가 실행 시 각 행의 점수를 계산한 뒤, 마지막 요약 점수는 auto_summarize가 만들고 summarize 메서드로 재정의할 수도 있어요. 개별 호출에 점수를 붙이고 싶으면 .call()과 call.apply_scorer()를 쓰면 돼요. 모든 점수 결과는 Weave DB에 저장되고 UI나 API로 조회할 수 있어요.