온라인 코드 평가자 설정하기
온라인 코드 평가자 설정하기
온라인 평가는 프로덕션 트레이스에 실시간 피드백을 제공해요. 이를 통해 문제를 식별하고, 개선을 측정하며, 시간이 지나도 일관된 품질을 보장하는 방식으로 애플리케이션 성능을 지속적으로 모니터링할 수 있어요.
코드 평가자를 사용하면 LangSmith 안에서 Python이나 JavaScript로 평가자를 직접 작성할 수 있어요. 주로 데이터의 구조나 통계적 속성을 검증하는 데 사용돼요.
참고: 온라인 평가자가 트레이스 내의 어떤 런에서 실행되면, 해당 트레이스는 자동으로 확장 데이터 보존으로 업그레이드돼요. 이 업그레이드는 트레이스 요금에 영향을 주지만, 평가 기준을 충족하는 트레이스(일반적으로 분석에 가장 가치 있는 것들)를 조사용으로 보존해 줘요.
출처: 문서
본문
온라인 평가자 보기
Tracing 페이지로 이동해 트레이싱 프로젝트를 선택하세요. 해당 프로젝트의 기존 온라인 평가자를 보려면 Evaluators 탭을 클릭하세요.
온라인 평가자 구성하기
1. 온라인 평가자로 이동
Tracing 페이지로 이동해 트레이싱 프로젝트를 선택하세요. Evaluators 탭을 클릭한 다음 + Evaluator를 클릭해 Add Evaluator 패널을 여세요. Create from scratch 아래에서 Code Evaluator를 선택해 새 평가자를 만들거나, Attach an existing evaluator 아래에서 워크스페이스의 기존 코드 평가자를 선택하세요.
2. 평가자 이름 지정
평가자 이름을 지정하세요. 이 이름은 코드에서 평가자를 참조할 때 사용되며, 이 평가자가 생성하는 피드백의 이름이기도 해요.
3. 필터 만들기
예를 들어 다음 기준에 따라 특정 평가자를 적용하고 싶을 수 있어요:
- 사용자가 피드백을 남겨 응답이 만족스럽지 않다고 표시한 런
- 특정 도구 호출을 실행하는 런. 도구 호출 필터링을 참조하세요.
- 특정 메타데이터와 일치하는 런(예:
plan_type으로 트레이스를 기록하고 엔터프라이즈 고객의 트레이스에만 평가를 실행하고 싶은 경우). 트레이스에 메타데이터 추가를 참조하세요.
평가자는 트레이스 필터링(ClickHouse)에 설명된 것과 동일한 필드와 연산자를 사용하는 필터 빌더를 사용해요.
이전 평가자의 피드백을 처리하려면 이 평가자를 피드백 키로 필터링한 다음 확장 통계 포함을 설정하세요. 예를 들어 has(feedback_key, "answer_usefulness")를 사용하면 answer_usefulness 피드백이 존재할 때 실행돼요. 필터는 피드백을 만든 평가자가 아니라 피드백 키를 기준으로 하므로, 해당 키를 가진 어떤 소스의 피드백이든 코드 평가자를 트리거해요.
팁: 평가자용 필터를 만들 때 런을 검사하는 것이 도움이 되는 경우가 많아요. 평가자 구성 패널을 연 상태에서 런을 검사하고 필터를 적용할 수 있어요. 런 테이블에 적용한 필터는 평가자의 필터에 자동으로 반영돼요.
4. (선택) 샘플링 비율 구성
샘플링 비율을 구성해 필터링된 런 중 자동화 작업을 트리거하는 비율을 조절하세요. 예를 들어 비용을 통제하기 위해 평가자를 전체 트레이스의 10%에만 적용하고 싶다면 샘플링 비율을 0.1로 설정하면 돼요.
5. (선택) 과거 런에 규칙 적용
Apply to past runs을 켜고 "Backfill from" 날짜를 입력해 과거 런에 규칙을 적용하세요. 이는 규칙을 만들 때만 가능해요. 참고: 백필은 백그라운드 작업으로 처리되므로 결과가 즉시 보이지 않아요.
백필 진행 상황을 추적하려면 트레이싱 프로젝트 안의 Evaluators 탭으로 이동해 만든 평가자의 Logs 버튼을 클릭해 로그를 볼 수 있어요. 온라인 평가자 로그는 자동화 규칙 로그와 유사해요.
- 평가자 이름 추가
- 선택적으로 평가자를 적용할 런을 필터링하거나 샘플링 비율을 구성하세요.
- Apply Evaluator 선택
평가 함수 작성하기
참고: 코드 평가자 제한 사항.
허용 라이브러리: 모든 표준 라이브러리 함수와 다음 공개 패키지를 가져올 수 있어요:
numpy (v2.2.2): "numpy" pandas (v1.5.2): "pandas" jsonschema (v4.21.1): "jsonschema" scipy (v1.14.1): "scipy" sklearn (v1.26.4): "scikit-learn"네트워크 접근: 코드 평가자에서는 인터넷에 접근할 수 없어요.
코드 평가자는 인라인으로 작성해야 해요. LangSmith에서 코드 평가자를 설정하기 전에 로컬에서 테스트해 볼 것을 권장해요.
UI에는 시작 코드와 함께 코드를 인라인으로 작성할 수 있는 패널이 있어요.
코드 평가자는 인자 하나를 받아요:
Run(참조). 평가할 샘플링된 런을 나타내요.
그리고 단일 값을 반환해요:
- 피드백 딕셔너리: 키가 반환하려는 피드백 유형이고 값이 해당 피드백 키에 부여할 점수인 딕셔너리예요. 예를 들어
{"correctness": 1, "silliness": 0}은 런에 두 가지 유형의 피드백(하나는 정확하다는 것, 다른 하나는 silly하지 않다는 것)을 만들 거예요.
다음 예시는 실험의 각 런에 알려진 JSON 필드가 있는지 검증하는 함수를 보여줘요.
import json
def perform_eval(run):
output_to_validate = run['outputs']
is_valid_json = 0
# assert you can serialize/deserialize as json
try:
json.loads(json.dumps(output_to_validate))
except Exception as e:
return { "formatted": False }
# assert output facts exist
if "facts" not in output_to_validate:
return { "formatted": False }
# assert required fields exist
if "years_mentioned" not in output_to_validate["facts"]:
return { "formatted": False }
return {"formatted": True}
function perform_eval(run) {
const outputToValidate = run.outputs;
// Assert you can serialize/deserialize as json
try {
JSON.stringify(outputToValidate);
JSON.parse(JSON.stringify(outputToValidate));
} catch (e) {
return { "formatted": false };
}
// Assert output facts exist
if (!("facts" in outputToValidate)) {
return { "formatted": false };
}
// Assert required fields exist
if (!outputToValidate["facts"].hasOwnProperty("years_mentioned")) {
return { "formatted": false };
}
return { "formatted": true };
}
평가 함수 테스트 및 저장
저장하기 전에 Test Code를 클릭해 최근 런에서 평가자 함수를 테스트해서 코드가 제대로 실행되는지 확인할 수 있어요.
Save하면 온라인 평가자가 새로 샘플링된 런(백필 옵션을 선택했다면 백필된 런들도)에 대해 실행돼요.
동영상 튜토리얼을 선호한다면 Introduction to LangSmith Course의 Online Evaluations 동영상을 확인하세요.