[langgraph] Evals
원문 출처: https://langchain-ai.github.io/langgraph/agents/evals/
에이전트의 성능을 평가하려면 LangSmith
평가 기능을 사용할 수 있습니다. 에이전트의 결과(최종 출력 또는 실행 경로 등)를 판단하는 평가자(evaluator) 함수를 먼저 정의해야 합니다. 평가 방식에 따라 참조 출력(reference output)이 필요할 수도, 필요하지 않을 수도 있습니다.
def evaluator(*, outputs: dict, reference_outputs: dict):
# 에이전트 출력과 참조 출력을 비교
output_messages = outputs["messages"]
reference_messages = reference["messages"]
score = compare_messages(output_messages, reference_messages)
return {"key": "evaluator_score", "score": score}
시작하려면 AgentEvals
패키지의 사전 구축된 평가자를 사용할 수 있습니다.
pip install -U agentevals
평가자 생성하기(Create evaluator)
에이전트의 성능을 평가하는 일반적인 방법은, 에이전트가 도구를 호출한 순서(trajectory, 실행 경로)를 참조 경로와 비교하는 것입니다.
import json
from agentevals.trajectory.match import create_trajectory_match_evaluator
outputs = [
{
"role": "assistant",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": json.dumps({"city": "san francisco"}),
}
},
{
"function": {
"name": "get_directions",
"arguments": json.dumps({"destination": "presidio"}),
}
}
],
}
]
reference_outputs = [
{
"role": "assistant",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": json.dumps({"city": "san francisco"}),
}
},
],
}
]
# 평가자 생성
# trajectory_match_mode: superset, strict, unordered, subset 등 선택 가능
# superset은 출력 경로가 참조 경로의 상위 집합이면 유효로 간주
evaluator = create_trajectory_match_evaluator(
trajectory_match_mode="superset", # (1)!
)
# 평가 실행
result = evaluator(
outputs=outputs, reference_outputs=reference_outputs
)
- 경로 비교 방식을 지정합니다.
superset
은 출력 경로가 참조 경로의 상위 집합이면 유효로 간주합니다. 그 외 strict, unordered, subset 등 옵션이 있습니다.
자세한 커스터마이징 방법은 trajectory match evaluator 문서를 참고하세요.
LLM-as-a-judge
LLM을 활용해 경로를 평가하는 LLM-as-a-judge 평가자도 사용할 수 있습니다. 이 방식은 LLM이 경로를 비교해 점수를 산출합니다.
import json
from agentevals.trajectory.llm import (
create_trajectory_llm_as_judge,
TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE
)
evaluator = create_trajectory_llm_as_judge(
prompt=TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE,
model="openai:o3-mini"
)
평가자 실행하기(Run evaluator)
평가자를 실행하려면 먼저 LangSmith 데이터셋을 생성해야 합니다. 사전 구축된 AgentEvals 평가자를 사용하려면 다음과 같은 스키마의 데이터셋이 필요합니다:
- input:
{"messages": [...]}
에이전트에 입력할 메시지 - output:
{"messages": [...]}
에이전트 출력에서 기대하는 메시지 히스토리(trajectory 평가의 경우 assistant 메시지만 포함 가능)
API Reference: create_react_agent
from langsmith import Client
from langgraph.prebuilt import create_react_agent
from agentevals.trajectory.match import create_trajectory_match_evaluator
client = Client()
agent = create_react_agent(...)
evaluator = create_trajectory_match_evaluator(...)
experiment_results = client.evaluate(
lambda inputs: agent.invoke(inputs),
# 데이터셋 이름으로 교체
data="<Name of your dataset>",
evaluators=[evaluator]
)
자세한 내용은 LangGraph 공식 Evals 문서를 참고하세요.
반응형