AI 함수 평가
AI 함수 평가 (AI_FUNCTION_EVALUATION)
AI_FUNCTION_EVALUATION은 라벨이 붙은 데이터셋에 대해 AI 함수 또는 Cortex AI 호출의 출력 품질을 측정해요. 평가할 표현식, 기대 출력을 담은 데이터셋, 그리고 점수 지표(metric)를 지정해요. Snowflake는 각 행에 대해 표현식을 실행하고, 생성된 출력을 기대 출력과 비교한 뒤, 비용과 토큰 사용량과 함께 종합 품질 점수를 보고해요.
본문
평가를 사용해 같은 데이터셋과 지표로 프롬프트, 모델 또는 함수 구현을 비교하세요. 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을 참조하세요.