이 가이드에서는 챗봇에 대한 평가 환경을 설정하는 방법을 안내합니다.
이 과정을 통해 고정된 데이터셋을 기반으로 애플리케이션의 성능을 신속하고 신뢰성 있게 측정할 수 있습니다.
이러한 인사이트를 빠르게 얻으면, 자신 있게 반복 개발할 수 있습니다.
이 튜토리얼에서는 다음을 다룹니다.
- 성능 측정을 위한 초기 골든 데이터셋(golden dataset) 생성
- 성능 측정에 사용할 평가 지표(metrics) 정의
- 다양한 프롬프트 또는 모델로 평가 실행
- 결과를 수동으로 비교
- 결과를 시간에 따라 추적
- CI/CD에서 자동화된 테스트 설정
자세한 평가 워크플로우는 How-to 가이드와 evaluate 및 aevaluate(비동기 평가) 레퍼런스 문서를 참고하세요.
1. 환경 설정(Setup)
필요한 의존성을 설치합니다.
이 튜토리얼에서는 OpenAI를 사용하지만, LangSmith는 어떤 모델과도 함께 사용할 수 있습니다.
pip install -U langsmith openai
LangSmith 트레이싱을 활성화하려면 환경 변수를 설정하세요.
export LANGSMITH_TRACING="true"
export LANGSMITH_API_KEY="<Your LangSmith API key>"
export OPENAI_API_KEY="<Your OpenAI API key>"
2. 데이터셋 생성(Create a dataset)
애플리케이션을 테스트하고 평가하려면 평가할 데이터포인트를 정의해야 합니다.
- 스키마: 각 데이터포인트는 최소한 애플리케이션의 입력값을 포함해야 하며, 가능하다면 기대 출력값도 정의하는 것이 좋습니다. 완벽한 기대 출력을 정의하지 못해도 괜찮습니다. 평가는 반복적인 과정입니다.
- 수량: 몇 개를 준비해야 할지에 대한 정답은 없지만, 10~50개만으로도 충분한 가치를 얻을 수 있습니다. 처음에는 소수의 예시로 시작해도 됩니다.
- 수집 방법: 대부분의 팀은 처음 10~20개 데이터포인트를 수작업으로 만듭니다. 이후 실제 사용자 데이터를 참고해 점차 확장해 나갑니다.
아래는 5개의 QA(질문-답변) 예시 데이터셋을 LangSmith에 업로드하는 코드입니다.
from langsmith import Client
client = Client()
# 데이터셋 정의
dataset_name = "QA Example Dataset"
dataset = client.create_dataset(dataset_name)
client.create_examples(
dataset_id=dataset.id,
examples=[
{
"inputs": {"question": "What is LangChain?"},
"outputs": {"answer": "A framework for building LLM applications"},
},
{
"inputs": {"question": "What is LangSmith?"},
"outputs": {"answer": "A platform for observing and evaluating LLM applications"},
},
{
"inputs": {"question": "What is OpenAI?"},
"outputs": {"answer": "A company that creates Large Language Models"},
},
{
"inputs": {"question": "What is Google?"},
"outputs": {"answer": "A technology company known for search"},
},
{
"inputs": {"question": "What is Mistral?"},
"outputs": {"answer": "A company that creates Large Language Models"},
}
]
)
LangSmith UI의 Datasets & Testing
페이지에서 QA Example Dataset
을 확인할 수 있습니다.
3. 평가 지표 정의(Define metrics)
데이터셋을 만든 후, 응답을 평가할 지표(metrics)를 정의할 수 있습니다.
예상 답변이 있다면, 실제 답변과 비교하여 평가할 수 있습니다.
(이하 코드 예시 및 평가자 정의는 원문 참고)
4. 평가 실행(Run Evaluations)
정의한 평가자와 데이터셋을 사용해 다양한 프롬프트, 모델로 평가를 실행할 수 있습니다.
(여러 모델, 프롬프트, 평가자 조합에 대한 코드 예시는 원문 참고)
5. 결과 비교(Comparing results)
여러 번의 평가 결과를 LangSmith UI의 Experiments
탭에서 비교할 수 있습니다.
여러 실험을 나란히 비교하거나, 상세 정보를 확인할 수 있습니다.
6. CI/CD에서 자동화된 테스트 설정(Set up automated testing to run in CI/CD)
이제 평가를 자동화하여 CI/CD 파이프라인에서 실행할 수 있습니다.
예를 들어, 특정 평가 지표(예: concision 점수)가 80% 이상이어야 통과하도록 테스트를 작성할 수 있습니다.
def test_length_score() -> None:
"""Test that the length score is at least 80%."""
experiment_results = evaluate(
ls_target, # Your AI system
data=dataset_name, # The data to predict and grade over
evaluators=[concision, correctness], # The evaluators to score the results
)
# This will be cleaned up in the next release:
feedback = client.list_feedback(
run_ids=[r.id for r in client.list_runs(project_name=experiment_results.experiment_name)],
feedback_key="concision"
)
scores = [f.score for f in feedback]
assert sum(scores) / len(scores) >= 0.8, "Aggregate score should be at least .8"
7. 결과 추적(Track results over time)
LangSmith UI의 Experiments
탭에서 시간에 따른 평가 결과를 추적할 수 있습니다.
Git 브랜치 등과 연동하여 코드 변경과 실험 결과를 함께 관리할 수 있습니다.
결론(Conclusion)
이 튜토리얼에서는
- 초기 테스트셋 생성
- 평가 지표 정의
- 실험 실행 및 비교
- CI/CD 자동화
- 결과 추적
까지의 전체 과정을 다루었습니다.
평가는 반복적이고 지속적인 과정입니다.
실제 운영 데이터에 대한 평가 등 다양한 방법도 있으니, 추가 정보는 How-to 가이드와 온라인 평가 가이드를 참고하세요.
참고 코드(Reference code)
(원문에 있는 전체 코드 스니펫은 공식 문서에서 확인하실 수 있습니다.)
이 번역은 [Cursor 웹사이트 번역 가이드]의 규칙을 준수하여 작성되었습니다.
참고: