AI_FILTER

AI_FILTER

AI_FILTER() 함수는 자유 형식의 프롬프트 입력을 boolean으로 분류해요. 현재 텍스트와 이미지 필터링을 모두 지원해요.

출처: Snowflake SQL Reference

본문

지역 가용성 (Region availability)

다음 표는 텍스트와 이미지 모두에 대해 AI_FILTER 함수를 사용할 수 있는 지역을 보여줘요.

데이터 타입 AWS US West 2 (Oregon) AWS US East 1 (N. Virginia) AWS Europe Central 1 (Frankfurt) AWS Europe West 1 (Ireland) AWS AP Southeast 2 (Sydney) AWS AP Northeast 1 (Tokyo) Azure East US 2 (Virginia) Azure West Europe (Netherlands) AWS (Cross-Region)
TEXT ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
IMAGE ✔ ✔ ✔ ✔

문법

입력 문자열에 AI_FILTER 적용:

AI_FILTER( <input> [, <return_error_details> ] )

단일 이미지에 AI_FILTER 적용:

AI_FILTER( <predicate> , <input> [, <return_error_details> ] )

PROMPT를 활용해 텍스트와 이미지가 모두 있는 여러 열에 AI_FILTER 적용:

AI_FILTER( PROMPT('<template_string>',  <col_1>, … ) [, <return_error_details> ] )

인자

input (필수) — 입력 문자열을 지정하는 경우, 분류할 텍스트를 담은 문자열이에요.

predicate (필수) — 파일 하나를 필터링하는 경우, 파일 입력을 TRUE 또는 FALSE로 분류할 지침을 담은 문자열이에요.

input (파일) — predicate의 지침에 따라 파일이 분류되는 열이에요. IMAGE FILE을 AI_FILTER 함수의 입력으로 사용할 수 있어요.

PROMPT() 함수로 입력을 포맷하는 경우: 여러 파일 열이 있는 더 복잡한 프롬프트에는 PROMPT를 사용해 입력을 만드는 데 도움을 받을 수 있어요. PROMPT() 함수는 문자열과 FILE 데이터 타입 모두에서 포맷을 지원해요. 자세한 사용법은 Examples 참고.

return_error_details (선택) — 오류 발생 시 오류 세부 정보를 반환할지 나타내는 BOOLEAN 플래그예요. TRUE로 설정하면 함수는 값과 오류 메시지를 담은 OBJECT를 반환하는데, 함수의 성공/실패 여부에 따라 둘 중 하나는 NULL이에요. 자세한 내용은 Error behavior 참고.

반환

지정된 텍스트에 대해 문이 TRUE인지 FALSE인지를 나타내는 Boolean 값을 반환해요.

오류 동작 (Error behavior)

기본적으로 AI_FILTER가 입력을 처리할 수 없으면 함수는 NULL을 반환해요. 쿼리가 여러 행을 처리하면 오류가 있는 행은 NULL을 반환하고 쿼리가 완료되는 것을 막지 않아요.

오류 시 반환 값은 return_error_details 인자에 따라 달라져요. 다음 표는 return_error_details 인자에 따른 반환 값을 보여줘요.

return_error_details 반환 값 설명
FALSE / 전달 안 함 NULL
TRUE value와 error 필드를 가진 OBJECT value: 필터 결과를 나타내는 BOOLEAN 값, 오류가 발생했으면 NULL. error: 오류가 발생했으면 오류 메시지를 담은 VARCHAR, 함수가 성공하면 NULL.

AI 함수의 오류 처리에 대한 자세한 내용은 Snowflake Cortex AI Function: Multirow error handling improvements 문서를 참고하세요.

접근 제어 요구사항

사용자는 SNOWFLAKE.CORTEX_USER 데이터베이스 역할이 부여된 역할을 사용해야 해요. 이 권한에 대한 자세한 내용은 Cortex LLM 권한을 참고하세요.

성능 및 비용 최적화

기본적으로 AI_FILTER는 자격이 되는 쿼리에 내장된 성능 최적화를 포함해요. 이 최적화는 품질에 최소한의 영향을 주면서 2~10배 빠른 성능과 최대 60% 낮은 토큰 사용량을 제공할 수 있어요.

이 최적화는 쿼리 엔진이 적합한 패턴을 감지하면 자동으로 트리거돼요. 다른 쿼리 최적화와 마찬가지로 Snowflake는 이 최적화가 모든 쿼리에 적용된다고 보장하지 않아요. 엔진은 적응형 라우팅(adaptive routing)과 맥락 인식 다시 쓰기(context-aware rewriting)를 활용해 가능한 곳에서 더 효율적인 AI 연산을 실행해요.

계정에서 이 최적화를 비활성화하려면 계정 관리자에게 문의하세요.

사용 노트

최적의 성능을 위해 다음 지침을 따르세요.

  • AI_FILTER에 보내는 열에 NULL 값이 없도록 하세요.
  • 입력 문자열 또는 PROMPT() 인자에 영어의 일반 텍스트를 사용하세요.
  • 입력 텍스트 지침에 세부 정보를 제공하세요. 예를 들어 "sounds satisfied" 같은 문 대신 "In the following support transcript, the customer sounds satisfied"를 사용하세요.
  • 입력을 질문 형태로 표현하는 것을 고려하세요. 예를 들어 "In the following support transcript, does the customer sound satisfied?"

예제

AI_FILTER: 텍스트

문자열 상수에 대한 단순 스칼라 Boolean 함수로 호출할 수 있어요.

SELECT AI_FILTER('Is Canada in North America?');
TRUE

CONCAT, || 지침을 텍스트 열과 함께 사용해 이 함수를 쓸 수 있어요:

WITH reviews AS (
            SELECT 'Wow... Loved this place.' AS review
  UNION ALL SELECT 'The pizza is not good.'
)
SELECT * FROM reviews
WHERE AI_FILTER(CONCAT('The reviewer enjoyed the restaurant: ', review));

여러 열에 걸친 더 쉬운 템플릿 포맷을 위해 Snowflake는 PROMPT를 제공해요. 예:

WITH reviews AS (

SELECT 'Wow... Loved this place.' AS review
UNION ALL SELECT 'The pizza is not good.'
)
SELECT * FROM reviews
WHERE AI_FILTER(PROMPT('The reviewer enjoyed the restaurant: {0}', review));
+--------------------------+
| REVIEW                   |
|--------------------------|
| Wow... Loved this place. |
+--------------------------+

AI_FILTER의 품질을 평가할 때 열에 걸쳐 후보 predicate를 비교하는 것이 도움이 될 수 있어요.

WITH country AS (
          SELECT 'Switzerland' AS country,
UNION ALL SELECT 'Korea'
),
region AS (
            SELECT 'Asia' AS region,
  UNION ALL SELECT 'Europe'
)
SELECT country,
      region,
      AI_FILTER(PROMPT('{0} is in {1}', country, region)) AS result
FROM country CROSS JOIN region ;
+-------------+-------+--------+
| COUNTRY     |REGION | RESULT |
|-------------+-------+--------|
| Switzerland |Europe | TRUE   |
|-------------+-------+--------|
| Switzerland | Asia  | FALSE  |
|-------------+-------+--------|
| Korea       |Europe | FALSE  |
+-------------+-------+--------|
| Korea       | Asia  | TRUE   |
+-------------+-------+--------+

AI_FILTER를 JOIN과 함께 사용

AI_FILTER를 JOIN과 함께 사용해 자연어 프롬프트로 두 테이블을 연결하는 것을 표현할 수 있어요. AI가 추론할 수 있어요.

다음 예제는 AI_FILTER 함수를 담은 프롬프트로 RESUMES 테이블과 JOBS 테이블을 조인해요.

SELECT *
FROM RESUMES
JOIN JOBS
ON AI_FILTER(PROMPT('Evaluate if this resume {0} fits this job description {1}', RESUME.contents, JOBS.jd));

AI_FILTER: 이미지

다음 예제들은 지침에 따라 이미지 파일을 필터링해요.

지침 predicate와 이미지 파일 열을 제공해 이미지를 필터링해요:

WITH pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
FL_GET_RELATIVE_PATH(img) AS file_path FROM pictures
WHERE AI_FILTER('Is this a picture of a cat?', img);
WITH pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
    FL_GET_RELATIVE_PATH(img) AS file_path FROM pictures
WHERE AI_FILTER(PROMPT('{0} is a cat picture', img));
+--------------------------+
|        FILE_PATH         |
|--------------------------|
|        2cats.jpg         |
+--------------------------+
|        cat1.png          |
+--------------------------+
|      orange_cat.jpg      |
+--------------------------+

제한 사항

  • Snowflake AI 함수는 다음 종류의 스테이지의 스테이지 파일로 만든 FILE에는 동작하지 않아요.
    • 암호화 모드 TYPE = 'SNOWFLAKE_FULL'인 내부 스테이지
    • 고객 측 암호화 모드가 있는 외부 스테이지:
      • TYPE = 'AWS_CSE'
      • TYPE = 'AZURE_CSE'
    • 사용자 스테이지, 테이블 스테이지
    • 이중 따옴표로 묶인 이름의 스테이지

법적 고지

법적 고지는 Snowflake AI and ML을 참고하세요.

더 알아보기 (Learn more)