AI 함수 최적화

AI 함수 최적화 (AI_FUNCTION_OPTIMIZATION)

프리뷰 기능 — 오픈 (Open). 모든 계정에서 사용할 수 있어요.

AI_FUNCTION_OPTIMIZATION은 레이블이 지정된 데이터셋과 점수 매기기 메트릭을 사용하여 AI 함수의 개선된 구현을 검색해요. 최적화할 AI 함수, 후보 출력을 평가하는 데 사용되는 데이터셋, 최적화할 메트릭, 옵티마이저가 사용할 수 있는 모델을 지정해요. Snowflake는 함수의 프롬프트와 모델 구성을 수정하여 후보 구현을 생성하고, 각 후보를 데이터셋에 대해 평가하며, 품질과 비용을 기록해요.

최적화는 품질·비용 프런티어(frontier)의 후보를 포함한 후보 구현들을 생성해요. 원래 AI 함수는 수정되지 않아요. 최적화된 구현을 사용하려면 선택된 최적화 실행에서 새 AI 함수를 만들어요.

AI_FUNCTION_OPTIMIZATION은 AI 함수 평가(AI function evaluation)와 동일한 평가 모델을 사용해요 — 후보 구현은 지정된 데이터셋과 메트릭에 대해 반복적으로 평가돼요.

출처: Snowflake AI_FUNCTION_OPTIMIZATION 함수 문서

본문

구문 (Syntax)

최적화는 두 문장으로 실행돼요: 최적화 사양으로 실험(experiment)을 생성한 다음 실행하는 것이에요.

CREATE [ OR REPLACE ] EXPERIMENT 
  TYPE = 'AI_FUNCTION_OPTIMIZATION'
  FROM SPECIFICATION $$

  $$;

EXECUTE EXPERIMENT ;

최적화 사양은 다음 형태의 YAML 문서예요:

function:
  function_name: ""   # one of function_name /
  # function_body: ""          #   function_body
metrics:
  - name: 
    # judge_model:     # llm_judge only
    # custom_udf:        # custom only (required)
dataset:
  name: 
  version: 
  column_mapping:                      # optional
    argument_mapping:
      : 
    ground_truth: 
optimization:
  models:
    -           # one or more
  reflection_model: 
  strategy:    # optional
  budget:    # optional

인자 (Arguments)

사양은 CREATE EXPERIMENT 시점에 검증돼요. 알 수 없거나 잘못 입력된 키는 거부돼요.

필수 (Required)

  • function — 최적화할 AI 함수예요. 다음 중 정확히 하나를 제공해요:
    • function_name — 인자 타입 시그니처를 포함한 정규화된 이름, 예를 들어 "my_db.my_schema.redact(VARCHAR)". 이름이 지정된 함수는 CREATE AI FUNCTION으로 생성돼야 하며, 일반 SQL UDF는 거부돼요.
    • function_body — 직접 최적화할 인라인 SQL 표현식 (AI 함수 본문에 넣을 것과 같은 형식).
  • metrics — 정확히 하나의 점수 메트릭 — 단일 매핑 또는 한 요소 리스트. 평가와 동일한 메트릭 집합:
메트릭 필요 사항
exact_match —
fuzzy_match —
contains_match —
redaction_match —
llm_judge 선택 judge_model
custom custom_udf: <udf_name> (필수)

각 메트릭이 무엇을 점수 매기는지 보려면 "AI 함수 평가" 문서를 참고해요.

  • dataset — 후보를 점수 매기는 데 사용되는 레이블 데이터예요. 버전이 지정된 Snowflake 데이터셋(SNOWFLAKE.ML.DATASET)이어야 하며, 일반 테이블/뷰는 허용되지 않아요.
    • name — 정규화된 데이터셋 이름. 필수.
    • version — 데이터셋 버전 (예: v1). 필수.
  • optimization — 검색 방법. 최소한 다음이 필요해요:
    • models — 시도할 하나 이상의 후보 모델 목록. 각 모델은 병렬로 최적화되며, 모든 모델에 걸친 최상의 구현들이 보고된 프런티어를 구성해요.
    • reflection_model — 후보 개선을 생성하는 데 사용되는 모델이에요. 이 모델이 최적화 프로세스를 주도하므로 사용 가능한 가장 강력한 지원 모델을 사용해요. 예를 들어 Claude Opus 모델 또는 최신 세대 GPT 모델을 사용해요.

선택 (Optional)

  • dataset.column_mapping — 함수의 입력과 레이블을 데이터셋 컬럼에 매핑해요. 함수 인자 이름이 데이터셋 컬럼 이름과 다를 때 필요해요.
    • argument_mapping — <function_argument>: <dataset_column> 매핑 (키는 AI 함수의 매개변수 이름 또는 위치 마커 $1, $2, ... 이고, 값은 데이터셋 컬럼 이름).
    • ground_truth — 후보가 점수 매겨지는 레이블 컬럼.
  • optimization.strategy — 최적화 목표 (기본값 quality_first):
전략 최적화 대상
quality_first 메트릭 점수 최대화 (기본값)
balanced 품질과 비용의 균형
cost_first 품질을 유지하면서 비용 최소화
  • optimization.budget — Snowflake가 함수를 최적화하는 데 사용하는 검색 노력의 양을 제어해요. 예산은 각 후보 모델에 독립적으로 적용돼요. 예를 들어 세 개의 후보 모델과 함께 light를 지정하면 각 모델은 자체 light 최적화 예산을 받아요. 더 높은 예산은 일반적으로 더 많은 후보 구현을 생성·평가하므로, 최적화 결과가 개선될 수 있지만 런타임과 크레딧 소비도 증가해요. 사용:
    • ultra-light — 매우 작은 검색. 반복 검색을 사용하는 옵티마이저의 경우 후보 모델당 약 4–6회의 제안 반복에 해당해요.
    • light — 대부분의 최적화 실행에 적합. 후보 모델당 약 10–15회의 제안 반복에 해당해요.
    • medium — 더 넓은 검색. 후보 모델당 약 18–27회의 제안 반복에 해당해요.
    • heavy — 가장 넓은 검색. 후보 모델당 약 27–40회의 제안 반복에 해당해요.
    • auto — Snowflake가 예산을 선택. 현재 auto는 light로 결정돼요.

반환 값 (Returns)

CREATE EXPERIMENT와 EXECUTE EXPERIMENT는 상태 행을 반환해요. EXECUTE EXPERIMENT는 서버리스 컴퓨트에서 비동기적으로 실행되며 즉시 반환돼요. 실험은 실행 트리(runs)를 생성해요:

  • 단일 SEED 실행 — 입력 함수 자체의 평가 (기준선).
  • 하나 이상의 ITER_<N> 실행 — 옵티마이저가 제안하고 평가한 후보 구현. 수락, 거부, 프런티어 후보가 모두 기록돼요 (이름이 아니라 실행 메타데이터로 구분).

실행과 그 메트릭 읽기:

SHOW RUNS IN EXPERIMENT ;
SHOW RUN METRICS IN EXPERIMENT  RUN SEED;
SHOW RUN METRICS IN EXPERIMENT  RUN ITER_7;
SHOW RUN PARAMETERS IN EXPERIMENT  RUN ITER_7;

주요 실행 메트릭과 매개변수:

필드 종류 의미
val_score metric 검증 분할에서의 품질 (0–1)
test_score metric 보류된 테스트 분할에서의 품질 (프런티어 실행만)
cost_compared_to_seed metric SEED 대비 후보 비용 (<1 더 저렴, >1 더 비쌈)
is_frontier metric 교차 모델 품질/비용 프런티어에 있으면 1
run_type param seed, accepted, 또는 rejected
model param 후보의 모델
function_impl param 후보의 튜닝된 구현
parent_candidate param 이 후보가 파생된 실행
rows_evaluated param 점수 매겨진 검증 행 수

건강한 결과: SEED가 기준선 val_score로 완료되고, 하나 이상의 ITER_<N> 실행이 is_frontier = 1로 더 높은 점수에 도달해요.

사용 노트 (Usage Notes)

  • 승자를 골라 구체화하세요. 최적화는 후보를 보고할 뿐, 함수를 변경하지 않아요. 원하는 실행을 CREATE AI FUNCTION … FROM EXPERIMENT <exp> RUN <run>으로 새 AI 함수로 승격하세요.
  • 최고 점수뿐 아니라 프런티어를 읽으세요. strategy: balanced 또는 cost_first에서는 약간 더 낮은 품질이지만 훨씬 저렴한 후보가 최선일 수 있어요. is_frontier가 비지배 집합(non-dominated set)을 표시해요.
  • val_score뿐 아니라 test_score를 읽으세요. val_score는 검증 분할에 과적합할 수 있으며, test_score(보류된 테스트 분할)가 더 정직한 추정이에요.
  • llm_judge 기본 모델. judge_model을 생략하면 기본 판정자는 claude-sonnet-4-5예요. 최적화 경로에서 판정자는 각 행을 0–1 의미론적 정확성 척도로 점수 매겨요.
  • 커스텀 메트릭 UDF 계약. 커스텀 메트릭은 custom_udf가 명명한 UDF를 행당 한 번씩 custom_udf(EXPECTED, PREDICTED)로 호출해요 — 두 개의 VARCHAR 인자(정답이 먼저, 모델 출력이 다음). 0–1 범위의 숫자 score를 가진 VARIANT/OBJECT를 반환해야 해요 (선택적으로 feedback 문자열). 일반 스칼라 UDF로 생성해야 하며 AI 함수가 아니어야 해요.
  • 강력한 reflection_model을 사용하세요. 새 후보의 에이전트식 제안을 수행하므로, Claude Sonnet만큼 강력한 모델(예: claude-sonnet-4-5)을 사용해요. 더 작거나 약한 모델은 종종 사용 가능한 후보를 생성하지 못해요.
  • 여러 후보 모델이 경쟁해요. models에 여러 모델을 나열하면 최적화가, 예를 들어 동일한 품질에 도달하는 더 저렴한 모델을 비교할 수 있게 해요 — cost_compared_to_seed로 표면화됨.
  • 후보 모델은 최대 5개를 사용하세요. models의 각 모델은 별도로 최적화되므로, 모델이 많을수록 실행이 더 느려져요. 5개 이하로 유지하세요 (빠른 반복에는 더 적게).
  • 데이터셋 크기. 약 50–200 행의 레이블 데이터셋이 권장돼요 — 긴 런타임 없이도 안정적으로 최적화할 수 있는 충분한 신호이며, 최대는 1,000 행이에요.
  • ultra-light로 시작하세요. medium/heavy에 비용을 지출하기 전에 작은 예산으로 파이프라인이 종단간 작동하는지 확인하세요.
  • 비용. 실험은 서버리스 컴퓨트에서 실행되고(SERVERLESS_EXPERIMENTS로 계량), 만드는 많은 AI 호출은 Cortex 추론 토큰으로 계량돼요. 더 무거운 예산과 더 많은 모델은 더 많은 비용이 들어요. Experiments → Billing 문서를 참고해요.

액세스 제어 요구사항 (Access Control Requirements)

권한 / 역할 객체 설명
CREATE EXPERIMENT 스키마 실험 생성
데이터베이스 역할 SNOWFLAKE.CORTEX_USER (또는 SNOWFLAKE.AI_FUNCTIONS_USER) — EXECUTE EXPERIMENT에 필요
USAGE 함수 + 데이터셋 데이터베이스/스키마 함수와 레이블 데이터 읽기

예제 (Examples)

레드액션 함수 최적화 (품질 우선)

CREATE OR REPLACE EXPERIMENT my_db.my_schema.redact_opt_exp
  TYPE = 'AI_FUNCTION_OPTIMIZATION'
  FROM SPECIFICATION $$
function:
  function_name: "my_db.my_schema.redact(VARCHAR)"
metrics:
  - name: redaction_match
dataset:
  name: my_db.my_schema.redaction_ds
  version: v1
  column_mapping:
    argument_mapping:
      text: text_col          # function arg -> dataset column
    ground_truth: expected_output
optimization:
  models:
    - claude-haiku-4-5
  reflection_model: claude-sonnet-4-5
  strategy: quality_first
  budget: ultra-light
$$;

EXECUTE EXPERIMENT my_db.my_schema.redact_opt_exp;

비용을 위한 모델 비교 (균형)

CREATE OR REPLACE EXPERIMENT my_db.my_schema.classify_opt_exp
  TYPE = 'AI_FUNCTION_OPTIMIZATION'
  FROM SPECIFICATION $$
function:
  function_name: "my_db.my_schema.classify_ticket(VARCHAR)"
metrics:
  - name: exact_match
dataset:
  name: my_db.my_schema.tickets_ds
  version: v1
  column_mapping:
    argument_mapping:
      body: ticket_body
    ground_truth: expected_label
optimization:
  models:
    - openai-gpt-5-nano
    - claude-haiku-4-5
  reflection_model: claude-sonnet-4-5
  strategy: balanced
  budget: medium
$$;

EXECUTE EXPERIMENT my_db.my_schema.classify_opt_exp;

프런티어 검사 후 승자 승격

SHOW RUNS IN EXPERIMENT my_db.my_schema.redact_opt_exp;
SHOW RUN METRICS IN EXPERIMENT my_db.my_schema.redact_opt_exp RUN ITER_7;

CREATE OR REPLACE AI FUNCTION my_db.my_schema.redact_tuned(text VARCHAR)
  RETURNS VARCHAR
  FROM EXPERIMENT my_db.my_schema.redact_opt_exp RUN ITER_7;

제한 사항 (Limitations)

  • 공개 프리뷰. 최적화는 공개 프리뷰 상태이며 계정에 단계적으로 출시되고 있어요.
  • 대상은 AI 함수 또는 인라인 본문이어야 해요. function_name은 CREATE AI FUNCTION 객체를 참조해야 하며, 일반 UDF는 거부돼요.
  • 정확히 하나의 AI_COMPLETE 호출. 최적화는 단일 AI_COMPLETE 호출을 튜닝해요: 함수(또는 function_body)는 AI_COMPLETE를 정확히 한 번 호출해야 하며, 모든 최적화된 후보는 정확히 하나의 AI_COMPLETE 호출을 포함해요. AI_COMPLETE 호출이 0개 또는 여러 개인 함수는 최적화가 지원되지 않아요.
  • 데이터셋 객체만. 데이터셋은 버전이 지정된 SNOWFLAKE.ML.DATASET 객체여야 해요.
  • 데이터셋 크기 제한. 데이터셋은 최대 1,000 행(권장 약 50–200 행)을 포함할 수 있어요.
  • 최적화당 하나의 메트릭.
  • 모델 허용 목록. 후보 및 리플렉션 모델은 계정에서 최적화에 대해 승인/가격 책정되고 지역에서 제공되어야 해요. 거부된 모델은 실험을 실패시켜요.
  • mode / optimize_mode / validation_fraction은 지원되지 않으며 사양 검증에서 거부돼요.
  • 실행 시간 제한. 실험 실행은 20시간으로 제한되며, 더 긴 실행은 종료돼요. 더 작은 데이터셋, 더 적은 후보 모델, 또는 더 가벼운 예산으로 런타임을 줄이세요.

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

입력 데이터 분류 출력 데이터 분류 지정
사용 데이터(Usage Data) 고객 데이터(Customer Data) 일반 공개 함수는 Covered AI Features이고, 프리뷰 함수는 Preview AI Features예요. [1]

[1] AI 이용 약관 및 허용 가능한 사용 정책에서 사용되는 정의 용어를 나타내요. 추가 정보는 Snowflake AI 및 ML 문서를 참고해요.

더 알아보기