Skip to main content
LLM 애플리케이션은 단일한 정답이 없는 대화형 텍스트를 생성하는 경우가 많아 평가가 어려울 수 있습니다. 이 가이드에서는 LangSmith SDK 또는 UI를 사용하여 오프라인 평가를 위한 LLM-as-a-judge 평가자를 정의하는 방법을 보여줍니다. 참고: 프로덕션 추적에서 실시간으로 평가를 실행하려면 온라인 평가 설정을 참조하세요.

SDK

사전 구축된 평가자

사전 구축된 평가자는 평가를 설정할 때 유용한 시작점입니다. LangSmith에서 사전 구축된 평가자를 사용하는 방법은 사전 구축된 평가자를 참조하세요.

자체 LLM-as-a-judge 평가자 만들기

평가자 로직을 완전히 제어하려면 자체 LLM-as-a-judge 평가자를 만들고 LangSmith SDK(Python / TypeScript)를 사용하여 실행하세요. langsmith>=0.2.0 필요
from langsmith import evaluate, traceable, wrappers, Client
from openai import OpenAI
# Assumes you've installed pydantic
from pydantic import BaseModel

# Optionally wrap the OpenAI client to trace all model calls.
oai_client = wrappers.wrap_openai(OpenAI())

def valid_reasoning(inputs: dict, outputs: dict) -> bool:
    """Use an LLM to judge if the reasoning and the answer are consistent."""
    instructions = """
Given the following question, answer, and reasoning, determine if the reasoning
for the answer is logically valid and consistent with the question and the answer."""

    class Response(BaseModel):
        reasoning_is_valid: bool

    msg = f"Question: {inputs['question']}\nAnswer: {outputs['answer']}\nReasoning: {outputs['reasoning']}"
    response = oai_client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[{"role": "system", "content": instructions,}, {"role": "user", "content": msg}],
        response_format=Response
    )
    return response.choices[0].message.parsed.reasoning_is_valid

# Optionally add the 'traceable' decorator to trace the inputs/outputs of this function.
@traceable
def dummy_app(inputs: dict) -> dict:
    return {"answer": "hmm i'm not sure", "reasoning": "i didn't understand the question"}

ls_client = Client()
dataset = ls_client.create_dataset("big questions")
examples = [
    {"inputs": {"question": "how will the universe end"}},
    {"inputs": {"question": "are we alone"}},
]
ls_client.create_examples(dataset_id=dataset.id, examples=examples)

results = evaluate(
    dummy_app,
    data=dataset,
    evaluators=[valid_reasoning]
)
사용자 정의 평가자를 작성하는 방법에 대한 자세한 내용은 여기를 참조하세요.

UI

사전 구축된 평가자

사전 구축된 평가자는 평가를 설정할 때 유용한 시작점입니다. LangSmith UI는 다음과 같은 사전 구축된 평가자를 지원합니다:
  • Hallucination: 사실적으로 올바르지 않은 출력을 감지합니다. 참조 출력이 필요합니다.
  • Correctness: 참조와의 의미적 유사성을 확인합니다.
  • Conciseness: 답변이 질문에 대한 간결한 응답인지 평가합니다.
  • Code checker: 코드 답변의 정확성을 검증합니다.
다음과 같은 경우 이러한 평가자를 구성할 수 있습니다:

LLM-as-a-judge 평가자 커스터마이징

LLM-as-a-judge 평가자 프롬프트에 특정 지침을 추가하고 입력/출력/참조 출력 중 어떤 부분을 평가자에게 전달할지 구성하세요.

평가자 선택/생성

  • 플레이그라운드 또는 데이터셋에서: +Evaluator 버튼을 선택합니다
  • 추적 프로젝트에서: Add rules를 선택하고 규칙을 구성한 다음 Apply evaluator를 선택합니다
Create your own evaluator option을 선택합니다. 또는 사전 구축된 평가자를 선택하여 편집할 수도 있습니다.

평가자 구성

프롬프트

새 프롬프트를 생성하거나 프롬프트 허브에서 기존 프롬프트를 선택합니다.
  • 자체 프롬프트 생성: 사용자 정의 프롬프트를 인라인으로 생성합니다.
  • 프롬프트 허브에서 프롬프트 가져오기: Select a prompt 드롭다운을 사용하여 기존 프롬프트를 선택합니다. 프롬프트 편집기 내에서 직접 이러한 프롬프트를 편집할 수는 없지만 프롬프트와 사용하는 스키마를 볼 수 있습니다. 변경하려면 플레이그라운드에서 프롬프트를 편집하고 버전을 커밋한 다음 평가자에서 새 프롬프트를 가져오세요.

모델

제공된 옵션에서 원하는 모델을 선택합니다.

변수 매핑

변수 매핑을 사용하여 실행 또는 예제에서 평가자 프롬프트로 전달되는 변수를 지정합니다. 변수 매핑을 돕기 위해 참조용으로 예제(또는 실행)가 제공됩니다. 프롬프트의 변수를 클릭하고 드롭다운을 사용하여 입력, 출력 또는 참조 출력의 관련 부분에 매핑하세요. 프롬프트 변수를 추가하려면 mustache 형식(기본값)을 사용하는 경우 이중 중괄호 {{prompt_var}}로 변수를 입력하거나 f-string 형식을 사용하는 경우 단일 중괄호 {prompt_var}로 입력하세요. 필요에 따라 변수를 제거할 수 있습니다. 예를 들어 간결성과 같은 메트릭을 평가하는 경우 일반적으로 참조 출력이 필요하지 않으므로 해당 변수를 제거할 수 있습니다.

미리보기

프롬프트를 미리보면 오른쪽에 표시된 참조 실행 및 데이터셋 예제를 사용하여 형식화된 프롬프트가 어떻게 보이는지 확인할 수 있습니다.

Few-shot 예제로 평가자 개선

LLM-as-a-judge 평가자를 사람의 선호도에 더 잘 맞추기 위해 LangSmith는 평가자 점수에 대한 사람의 수정을 수집할 수 있습니다. 이 선택이 활성화되면 수정 사항이 자동으로 프롬프트에 few-shot 예제로 삽입됩니다. Few-shot 예제를 설정하고 수정하는 방법을 알아보세요.

피드백 구성

피드백 구성은 LLM-as-a-judge 평가자가 사용할 점수 기준입니다. 이를 평가자가 기반으로 채점할 루브릭으로 생각하세요. 점수는 실행 또는 예제에 피드백으로 추가됩니다. 평가자에 대한 피드백을 정의하는 방법:
  1. 피드백 키 이름 지정: 평가 결과를 볼 때 표시될 이름입니다. 이름은 실험 전체에서 고유해야 합니다.
  2. 설명 추가: 피드백이 나타내는 내용을 설명합니다.
  3. 피드백 유형 선택:
  • Boolean: True/false 피드백.
  • Categorical: 미리 정의된 카테고리에서 선택.
  • Continuous: 지정된 범위 내의 숫자 점수.
내부적으로 피드백 구성은 LLM-as-a-judge 프롬프트에 구조화된 출력으로 추가됩니다. 허브의 기존 프롬프트를 사용하는 경우 평가자가 사용하도록 구성하기 전에 프롬프트에 출력 스키마를 추가해야 합니다. 출력 스키마의 각 최상위 키는 별도의 피드백으로 처리됩니다.

평가자 저장

구성을 완료하면 변경 사항을 저장하세요.
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I