AI 함수 평가

AI 함수 평가 (AI_FUNCTION_EVALUATION)

AI_FUNCTION_EVALUATION은 라벨이 붙은 데이터셋에 대해 AI 함수 또는 Cortex AI 호출의 출력 품질을 측정해요. 평가할 표현식, 기대 출력을 담은 데이터셋, 그리고 점수 지표(metric)를 지정해요. Snowflake는 각 행에 대해 표현식을 실행하고, 생성된 출력을 기대 출력과 비교한 뒤, 비용과 토큰 사용량과 함께 종합 품질 점수를 보고해요.

출처: Snowflake SQL Reference - AI_FUNCTION_EVALUATION

본문

평가를 사용해 같은 데이터셋과 지표로 프롬프트, 모델 또는 함수 구현을 비교하세요. AI 함수 최적화는 같은 평가 모델을 사용해 후보 구현을 측정해요.

평가는 AI_FUNCTION_EVALUATION 실험(experiment)으로 구현돼요. 이 페이지는 평가 명세(specification)와 워크플로를 설명해요. EXPERIMENT 객체와 관련 명령에 대한 자세한 내용은 Experiments를 참고하세요.

구문

평가는 두 문으로 실행돼요: 평가 명세로 실험을 만든 다음 실행해요.

CREATE [ OR REPLACE ] EXPERIMENT <experiment_name>
 TYPE = 'AI_FUNCTION_EVALUATION'
 FROM SPECIFICATION $$
 <evaluation_specification>
 $$;

EXECUTE EXPERIMENT <experiment_name>;

평가 명세는 다음과 같은 형태의 YAML 문서예요.

query_text: <sql_expression_under_test>
metrics:
 - name: <metric_name>
 # judge_model: <model> # llm_judge only
 # custom_udf: <udf> # custom only (required)
dataset:
 name: <dataset_name>
 version: <dataset_version>
 ground_truth: <label_column>
evaluation: # optional
 num_eval_runs: <1-20> # optional; default 1

인자

명세는 CREATE EXPERIMENT 시점에 검증돼요. 알 수 없거나 오타가 있는 키는 거부돼요.

필수

query_text

평가할 AI 호출로, 데이터셋의 열을 이름으로 참조하는 SQL 스칼라 표현식으로 작성돼요. Cortex 기본 제공 함수일 수 있어요. 예를 들어:

query_text: "AI_COMPLETE('claude-sonnet-4-5',
 'Classify the sentiment as POSITIVE, NEGATIVE, or NEUTRAL: ' || review)"

또는 인라인으로 호출되는 사용자 정의 AI 함수일 수 있어요:

query_text: "MY_DB.MY_SCHEMA.CLASSIFY_SENTIMENT(review)"

평가는 중첩된 function: 블록을 사용하지 않아요(그 블록은 최적화 전용이에요). 호출은 query_text로 직접 이름 지어지며 데이터셋 열을 직접 참조해요 — argument_mapping은 없어요.

metrics

정확히 하나의 점수 지표 — 단일 매핑 또는 한 요소 목록. name은 다음 중 하나여야 해요.

둘 이상의 항목이 있는 지표 목록은 거부돼요 — 평가당 지표 하나.

dataset

라벨이 붙은 데이터예요. Snowflake 데이터셋(SNOWFLAKE.ML.DATASET)이어야 해요. 일반 테이블과 뷰는 허용되지 않아요.

  • name — 완전히 한정된 데이터셋 이름.

  • version — 데이터셋 버전(예: v1). 필수.

  • ground_truth — 각 출력이 점수 매겨지는 올바른/라벨 값을 담은 열.

선택

evaluation.num_eval_runs

평가를 반복할 횟수(정수, 1–20, 기본값 1). 반복 실행을 통해 동일한 평가 간의 분산을 측정할 수 있어요(AI 출력은 비결정적이에요). 각 반복은 별도의 실행(EVAL_1, EVAL_2, …)으로 보고돼요.

반환 값

CREATE EXPERIMENT와 EXECUTE EXPERIMENT는 상태 행을 반환해요. EXECUTE EXPERIMENT는 서버리스 컴퓨트에서 비동기로 실행되며 즉시 반환돼요. 실행이 끝나면 결과를 읽으세요.

SHOW RUNS IN EXPERIMENT <experiment_name>;
SHOW RUN METRICS IN EXPERIMENT <experiment_name> RUN EVAL_1;
SHOW RUN PARAMETERS IN EXPERIMENT <experiment_name> RUN EVAL_1;

각 EVAL_<N> 실행은 다음을 보고해요.

  • 지표: score — 종합 지표 값(0–1).

  • 매개변수: model, function_name, rows_evaluated(점수 매겨진 행 수), 그리고 사용자 지정 지표를 사용하면 custom_metric_udf. 수명주기 상태(FINISHED/FAILED/RUNNING)는 최상위 열이 아니라 SHOW RUNS의 metadata JSON 열 안에 있어요. Experiments → 결과 읽기(Reading results)를 참고하세요.

사용 시 참고 사항

  • 평가는 AI_FUNCTION_EVALUATION 실험으로 구현돼요. 이 페이지는 평가 명세와 워크플로를 설명해요. EXPERIMENT 객체와 관련 명령에 대한 자세한 내용은 Experiments를 참고하세요.

  • 평가는 함수를 수정하지 않아요. 단지 측정만 해요. 함수를 개선하려면 AI_FUNCTION_OPTIMIZATION을 사용하세요.

  • query_text는 데이터셋 열을 이름으로 참조해요. 표현식에서 참조하는 열은 데이터셋 버전에 존재해야 하며, ground_truth 열이 라벨을 제공해요.

  • 데이터셋 크기. 약 50–200행의 라벨이 붙은 데이터셋을 권장해요. 최대값은 1,000행이에요.

  • 평가당 지표 하나. 지표를 비교하려면 별도의 평가를 실행하세요.

  • 안정성을 위한 num_eval_runs. 모델 출력이 다양하므로, 단일 실행은 품질을 과대 또는 과소 평가할 수 있어요. 숫자를 신뢰하기 전에 num_eval_runs: 3–5로 분포를 확인하세요.

  • llm_judge 기본 모델. judge_model을 생략하면 기본 판정자는 claude-sonnet-4-5예요. 판정자는 각 출력을 의미-정확성 루브릭으로 점수 매겨요.

  • 사용자 지정 지표 UDF 계약. 사용자 지정 지표는 custom_udf가 이름 지은 UDF를 행마다 custom_udf(EXPECTED, PREDICTED)로 한 번 호출해요 — 두 VARCHAR 인자(정답(ground truth)이 먼저, 모델 출력이 나중). 0–1의 숫자 score를 가진 VARIANT/OBJECT를 반환해야 해요(선택적으로 feedback 문자열). 일반 스칼라 UDF로 만들며, AI 함수가 아니에요.

  • 비용. 실험은 서버리스 컴퓨트에서 실행되며(SERVERLESS_EXPERIMENTS로 계량), 그 기반 AI 호출은 Cortex 추론 토큰으로 계량돼요.

접근 제어 요구 사항

예시

정확 일치(exact match)로 기본 제공 호출 평가

CREATE OR REPLACE EXPERIMENT my_db.my_schema.sentiment_eval
 TYPE = 'AI_FUNCTION_EVALUATION'
 FROM SPECIFICATION $$
query_text: "AI_COMPLETE('claude-sonnet-4-5',
 'Reply with exactly one word - POSITIVE, NEGATIVE, or NEUTRAL - '
 || 'for the sentiment of: ' || review)"
metrics:
 - name: exact_match
dataset:
 name: my_db.my_schema.reviews_labeled
 version: v1
 ground_truth: expected_sentiment
$$;

EXECUTE EXPERIMENT my_db.my_schema.sentiment_eval;

LLM 판정자로 사용자 AI 함수 평가, 3회 반복

CREATE OR REPLACE EXPERIMENT my_db.my_schema.summary_eval
 TYPE = 'AI_FUNCTION_EVALUATION'
 FROM SPECIFICATION $$
query_text: "MY_DB.MY_SCHEMA.SUMMARIZE(article)"
metrics:
 - name: llm_judge
 judge_model: claude-sonnet-4-5
dataset:
 name: my_db.my_schema.articles_labeled
 version: v1
 ground_truth: reference_summary
evaluation:
 num_eval_runs: 3
$$;

EXECUTE EXPERIMENT my_db.my_schema.summary_eval;

사용자 지정 지표 UDF로 점수 매기기

점수(및 선택적 피드백)를 반환하는 스칼라 UDF를 만든 다음, custom 지표로 참조해요.

CREATE OR REPLACE FUNCTION my_db.my_schema.match_metric(
 EXPECTED VARCHAR, PREDICTED VARCHAR)
 RETURNS VARIANT
 AS $$
 OBJECT_CONSTRUCT(
 'score', IFF(LOWER(EXPECTED) = LOWER(PREDICTED), 1.0, 0.0))
 $$;

CREATE OR REPLACE EXPERIMENT my_db.my_schema.sentiment_custom_eval
 TYPE = 'AI_FUNCTION_EVALUATION'
 FROM SPECIFICATION $$
query_text: "MY_DB.MY_SCHEMA.CLASSIFY_SENTIMENT(review)"
metrics:
 - name: custom
 custom_udf: my_db.my_schema.match_metric
dataset:
 name: my_db.my_schema.reviews_labeled
 version: v1
 ground_truth: expected_sentiment
$$;

EXECUTE EXPERIMENT my_db.my_schema.sentiment_custom_eval;

결과 읽기

SHOW RUNS IN EXPERIMENT my_db.my_schema.summary_eval;
SHOW RUN METRICS IN EXPERIMENT my_db.my_schema.summary_eval RUN EVAL_1;

제한 사항

  • 데이터셋 크기 제한. 데이터셋은 최대 1,000행(약 50–200 권장)을 포함할 수 있어요.

  • 평가당 지표 하나.

  • num_eval_runs 범위는 1–20이에요.

  • 모델 가용성. query_text에 이름 지어진 모델(및 모든 judge_model)은 영역에서 승인되고 제공되어야 해요.

  • 실행 시간 제한. 실험 실행은 20시간으로 제한돼요.

법적 고지

입력과 출력의 데이터 분류는 다음 표에 명시된 대로예요.

추가 정보는 Snowflake AI and ML을 참조하세요.

더 알아보기