에이전트 평가에서 통과율과 개별 실패 함께 읽기

출력 문서에서 빠진 필수 문장을 평가 기준과 대조하는 모습
목차

광고 문구를 짧게 다듬는 에이전트에 “필수 안내 문장을 유지한다”는 지시를 넣었다고 가정하겠습니다. 결과가 읽기 쉽고 짧아졌더라도 그 문장이 빠졌다면 작업은 실패입니다. 전체 출력 중 대부분이 괜찮아 보여도 중요한 조건을 어긴 결과를 따로 확인해야 합니다.

평가, 또는 eval은 입력과 성공 조건을 정하고 에이전트의 결과가 그 조건을 충족하는지 확인하는 작업입니다. 평가를 반복하면 프롬프트 수정 전후의 변화를 비교할 수 있습니다. 비교하려면 통과율의 계산 기준과 개별 결과를 함께 남겨야 합니다.

성공 조건을 검사 가능한 문장으로 바꾸기

“좋은 광고 문구를 만든다”는 기준만으로는 채점자가 무엇을 확인해야 할지 알기 어렵습니다. 문장의 자연스러움, 길이 제한, 필수 문구 보존은 서로 다른 조건입니다. 각 조건을 나누면 문구가 자연스러워도 필수 문장이 빠졌을 때 실패로 판정할 수 있습니다.

다음은 평가 방법을 설명하기 위해 만든 예시입니다. 특정 광고 서비스의 운영 기준이나 법적 요구사항을 나타내지 않습니다.

조건 예시 판정 기준 검사 방식
필수 문장 이벤트 기간은 10월 10일까지입니다.를 그대로 보존 정확한 문자열 포함 여부
길이 공백과 문장부호를 포함해 전체 70자 이하 정의한 문자 계산 방식으로 확인
내용 원문에 없는 혜택이나 조건을 추가하지 않음 원문과 출력의 의미 대조
표현 문장이 문법에 맞고 의미가 이어짐 기준과 예시를 보고 판단

문자열과 길이는 코드로 확인할 수 있습니다. 내용과 표현은 사람이나 언어 모델이 기준을 보고 판단할 수 있습니다. Anthropic의 에이전트 평가 설명은 코드, 모델, 사람이 수행하는 채점을 구분하고 작업에 맞게 조합하는 방식을 다룹니다.

조건 중 필수 항목은 다른 점수가 높아도 통과로 바꾸지 않도록 정의합니다. 자연스러움 점수와 필수 문장 보존을 평균 내면 문장을 삭제한 출력도 높은 점수를 받을 수 있기 때문입니다.

같은 입력을 기준으로 비교할 출력

입력 문구가 다음과 같다고 가정하겠습니다.

신규 가입자에게 웰컴 쿠폰을 제공합니다. 이벤트 기간은 10월 10일까지입니다.

출력 A는 “신규 가입자 웰컴 쿠폰. 이벤트 기간은 10월 10일까지입니다.”이고, 출력 B는 “신규 가입자라면 웰컴 쿠폰을 받아 보세요.”입니다. 두 출력 모두 입력보다 짧지만 B에는 필수 문장이 없습니다. 길이 검사에 통과해도 필수 문장 검사에서는 실패합니다.

같은 입력에서 만든 두 출력 중 필수 안내 문장을 보존한 출력과 삭제한 출력을 대조

표현을 줄이는 과정에서 필수 문장까지 빠진 예시입니다. 초록색은 필수 문장이 남은 출력, 붉은 표시가 있는 부분은 문장이 빠진 출력의 판정 근거입니다.

필수 문장과 길이에 대한 최소 검사는 다음처럼 작성할 수 있습니다. Python의 len()으로 문자열 길이를 계산한다는 조건입니다. 다른 언어나 제품에서는 사용자에게 보이는 문자 수의 계산 방식이 다를 수 있으므로 같은 기준을 적용해야 합니다.

required = "이벤트 기간은 10월 10일까지입니다."

def check_constraints(text):
    return {
        "required_sentence": required in text,
        "length_limit": len(text) <= 70,
    }

이 코드는 문장의 의미나 자연스러움을 판정하지 않습니다. 예를 들어 필수 문장 뒤에 “위 안내는 적용되지 않습니다”라는 내용을 덧붙인 출력은 문자열 검사를 통과할 수 있습니다. 검사 가능한 조건을 코드로 확인하고, 그 검사만으로 확인할 수 없는 조건은 별도로 평가합니다.

통과율에 남지 않는 실패의 내용

예시 평가에서 20개 입력 중 18개가 통과했다면 통과율은 90%입니다. 실패한 두 개가 어색한 표현 때문인지 필수 안내 삭제 때문인지에 따라 수정할 대상이 달라집니다. 통과율 옆에 실패한 조건과 입력 ID를 남기면 같은 숫자 안에 들어 있는 차이를 확인할 수 있습니다.

평가할 입력도 쉬운 문구만 모으면 안 됩니다. 필수 문장이 마지막에 있는 입력, 안내 문장이 여러 개인 입력, 사용자가 안내를 지워 달라고 요청한 입력처럼 조건이 충돌할 수 있는 사례를 포함합니다. 이런 입력은 원하는 편집을 수행하면서도 보존해야 할 내용을 유지하는지 확인합니다.

평가 기록에는 입력, 출력, 조건별 판정, 실패 근거를 남깁니다. 도구를 사용하는 에이전트라면 실행 기록도 함께 봅니다. 실행 기록은 확인 가능한 요청, 도구 호출, 반환값과 중간 출력을 뜻합니다. 모든 모델의 내부 추론을 열어 볼 수 있다는 뜻은 아닙니다.

출력만 보면 필수 문장이 빠진 결과만 알 수 있습니다. 기록을 보면 편집 도구에 전달하기 전부터 문장이 빠졌는지, 도구가 반환한 결과에서 빠졌는지, 이후 정리 단계에서 빠졌는지를 구분할 수 있습니다. 문장을 삭제한 단계가 다르면 프롬프트와 도구 중 수정할 대상도 달라집니다.

모델 채점자의 판정도 대조하기

언어 모델에 출력을 채점하게 할 때는 기준과 통과·실패 예시를 함께 제공합니다. “필수 문장을 유지했는지 평가한다”는 지시와 함께 정확히 보존한 출력, 일부만 남긴 출력, 의미를 뒤집은 출력을 보여주면 어떤 차이를 판단해야 하는지 명시할 수 있습니다.

모델의 판정은 사람이 정한 기준과 대조합니다. 예를 들어 같은 출력 20개를 사람이 먼저 판정하고 모델도 판정했을 때 18개가 같다면 이 표본에서의 판정 일치율은 90%입니다. 이것은 에이전트의 통과율과 다른 값입니다. 모델 채점자가 사람과 얼마나 같은 판정을 했는지를 나타냅니다.

일치율만으로 채점 정확성을 확정할 수는 없습니다. 두 판정이 같더라도 기준 자체가 잘못됐을 수 있습니다. 통과 사례가 대부분인 표본에서는 실패를 놓쳐도 일치율이 높게 나올 수 있습니다. 서로 다르게 판정한 사례와 중요한 실패 사례를 열어 보고 기준을 보완합니다.

수정용 사례와 마지막 확인용 사례

실패한 입력 하나만 보고 프롬프트를 고치면 그 입력에는 맞아도 다른 입력에서 문제가 생길 수 있습니다. 필수 문장 삭제가 여러 입력에서 반복되는지 확인하고, 수정 뒤에는 이전에 통과한 입력도 다시 평가합니다. 필수 문장을 보존하는 대신 길이 제한을 계속 넘기는 변화가 생기지 않았는지도 확인합니다.

수정에 계속 사용하는 사례와 마지막 확인에 사용할 사례를 나눕니다. 마지막 확인용 사례까지 매번 보고 프롬프트를 조정하면 그 결과를 새로운 입력에 대한 확인으로 보기 어렵습니다. 입력 모음, 프롬프트, 모델, 채점 기준의 버전을 남겨 비교 조건을 확인할 수 있게 합니다.

생성 결과가 실행마다 달라질 수 있으므로 같은 입력을 여러 번 실행해 반복되는 실패를 살펴볼 수 있습니다. 실행 결과의 통과율인지 입력별 통과율인지도 명시합니다. 서로 다른 계산 단위를 같은 수치로 비교하면 수정 효과를 잘못 판단할 수 있습니다.

필수 안내가 빠지는 문제가 반복되면 해당 문장을 편집 대상에서 분리하고 최종 결과에 다시 결합하는 구조도 검토할 수 있습니다. 이 경우에도 결합 뒤의 의미와 길이를 평가합니다. 실패 기록은 프롬프트에 지시를 추가하는 근거뿐 아니라, 어떤 처리를 코드로 보장할지 정하는 근거가 됩니다.

프롬프트의 함정, Eval로 잡았다

댓글

0

아직 공개된 댓글이 없습니다.