Skip to main content
평가를 실행하기 위해 필요한 세 가지 주요 요소는 다음과 같습니다:
  1. 테스트 입력과 예상 출력의 데이터셋
  2. 평가 대상이 되는 타겟 함수
  3. 타겟 함수의 출력을 평가하는 평가자
이 가이드는 애플리케이션의 어느 부분을 평가하는지에 따라 타겟 함수를 정의하는 방법을 보여줍니다. 데이터셋 생성 방법, 평가자 정의 방법, 그리고 평가 실행의 엔드투엔드 예제는 각 링크를 참조하세요.

타겟 함수 시그니처

코드에서 애플리케이션을 평가하려면 애플리케이션을 실행할 수 있는 방법이 필요합니다. evaluate() 함수를 사용할 때(Python/TypeScript) 타겟 함수 인자를 전달하여 이를 수행합니다. 이 함수는 데이터셋 Example의 입력을 받아 애플리케이션 출력을 dict로 반환하는 함수입니다. 이 함수 내에서 원하는 방식으로 애플리케이션을 호출할 수 있습니다. 또한 원하는 방식으로 출력을 포맷할 수 있습니다. 중요한 점은 정의한 모든 평가자 함수가 타겟 함수에서 반환하는 출력 형식과 호환되어야 한다는 것입니다.
from langsmith import Client

# 'inputs'는 데이터셋에서 제공됩니다.
def dummy_target(inputs: dict) -> dict:
    return {"foo": 1, "bar": "two"}

# 'inputs'는 데이터셋에서 제공됩니다.
# 'outputs'는 타겟 함수에서 제공됩니다.
def evaluator_one(inputs: dict, outputs: dict) -> bool:
    return outputs["foo"] == 2

def evaluator_two(inputs: dict, outputs: dict) -> bool:
    return len(outputs["bar"]) < 3

client = Client()
results = client.evaluate(
    dummy_target,  # <-- 타겟 함수
    data="your-dataset-name",
    evaluators=[evaluator_one, evaluator_two],
    ...
)
evaluate() 함수는 타겟 함수를 자동으로 추적합니다. 즉, 타겟 함수 내에서 추적 가능한 코드를 실행하면 해당 코드도 타겟 트레이스의 하위 실행으로 추적됩니다.

예제: 단일 LLM 호출

from langsmith import wrappers
from openai import OpenAI

# 선택적으로 OpenAI 클라이언트를 래핑하여
# 모든 모델 호출을 자동으로 추적할 수 있습니다.
oai_client = wrappers.wrap_openai(OpenAI())

def target(inputs: dict) -> dict:
  # 이 코드는 데이터셋에 'messages' 키가 있다고 가정합니다.
  # 데이터셋 스키마에 맞게 업데이트할 수 있습니다.
  messages = inputs["messages"]
  response = oai_client.chat.completions.create(
      messages=messages,
      model="gpt-4o-mini",
  )
  return {"answer": response.choices[0].message.content}

예제: Non-LLM 컴포넌트

from langsmith import traceable

# 선택적으로 '@traceable'로 데코레이트하여 이 함수의 모든 호출을 추적할 수 있습니다.
@traceable
def calculator_tool(operation: str, number1: float, number2: float) -> str:
  if operation == "add":
      return str(number1 + number2)
  elif operation == "subtract":
      return str(number1 - number2)
  elif operation == "multiply":
      return str(number1 * number2)
  elif operation == "divide":
      return str(number1 / number2)
  else:
      raise ValueError(f"Unrecognized operation: {operation}.")

# 이 함수를 평가하게 됩니다.
def target(inputs: dict) -> dict:
  # 이 코드는 데이터셋에 `operation`, `num1`, `num2` 키가 있다고 가정합니다.
  operation = inputs["operation"]
  number1 = inputs["num1"]
  number2 = inputs["num2"]
  result = calculator_tool(operation, number1, number2)
  return {"result": result}

예제: 애플리케이션 또는 에이전트

from my_agent import agent

      # 이 함수를 평가하게 됩니다.
def target(inputs: dict) -> dict:
  # 이 코드는 데이터셋에 `messages` 키가 있다고 가정합니다
  messages = inputs["messages"]
  # `invoke`를 에이전트를 호출하는데 사용하는 메서드로 교체하세요
  response = agent.invoke({"messages": messages})
  # 이 코드는 에이전트 출력이 올바른 형식이라고 가정합니다
  return response
데이터셋에 정의된 입력을 받아들이고 평가자에서 사용하려는 출력 형식을 반환하는 LangGraph/LangChain 에이전트가 있다면, 해당 객체를 타겟으로 직접 전달할 수 있습니다:
from my_agent import agent
from langsmith import Client
client = Client()
client.evaluate(agent, ...)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I