AI 함수
AI 함수는 ClickHouse에 내장된 함수로, AI를 호출하거나 임베딩을 생성해 데이터를 처리하고, 정보를 추출하거나, 데이터를 분류하는 등의 작업에 사용할 수 있습니다...
AI 함수는 예측하기 어려운 출력을 반환할 수 있습니다. 결과는 프롬프트의 품질과 사용된 모델에 크게 좌우됩니다.
모든 함수는 다음을 제공하는 공통 인프라를 사용합니다:
- 할당량 적용: 토큰에 대한 쿼리별 제한(
ai_function_max_input_tokens_per_query,ai_function_max_output_tokens_per_query)과 API 호출에 대한 쿼리별 제한(ai_function_max_api_calls_per_query). - 백오프를 사용한 재시도: 일시적인 실패는 재시도되며(
ai_function_max_retries), 이때 지수 백오프가 적용됩니다(ai_function_retry_initial_delay_ms).
설정
AI 함수는 프로바이더 자격 증명과 설정을 저장하는 명명된 컬렉션(named collection) 을 참조합니다. 각 함수의 첫 번째 인수는 이 컬렉션의 이름입니다.
프로바이더 자격 증명이 포함된 명명된 컬렉션을 생성하는 예시 문:
명명된 컬렉션 매개변수
| 매개변수 | Type | Default | 설명 |
|---|---|---|---|
provider | String | — | 모델 프로바이더입니다. 지원값: 'openai', 'anthropic'입니다. 아래 참고를 확인하십시오. |
endpoint | String | — | API 엔드포인트 URL입니다. |
model | String | — | 모델 이름입니다(예: 'gpt-4o-mini', 'text-embedding-3-small'). |
api_key | String | — | 프로바이더 인증 키입니다. |
max_tokens | UInt64 | 1024 | API 호출당 출력 토큰의 최대 개수입니다. |
api_version | String | — | API 버전 문자열입니다. Anthropic에서 사용합니다('2023-06-01'). |
provider = 'openai'로 설정하고 endpoint가 서비스을 가리키도록 지정하면 OpenAI 호환 API(예: vLLM, Ollama, LiteLLM)를 사용할 수 있습니다.
쿼리 수준 설정
모든 AI 관련 설정은 설정 문서의 ai_function_ 접두사 항목 아래에 나열되어 있습니다.
엔드포인트 호스트 제한
AI 명명된 컬렉션의 endpoint URL은 서버가 자체 신원으로 연결하는 아웃바운드 대상이며, 요청 헤더에 해당 명명된 컬렉션의 api_key를 담아 전송합니다. 기본적으로 ClickHouse는 모든 호스트를 허용합니다. 함수를 특정 프로바이더 집합으로 제한하려면 서버 설정에서 remote_url_allow_hosts를 구성하십시오. 예:
이 설정은 서버 전체에 적용되며, HTTP를 사용하는 모든 기능에 영향을 줍니다.
지원되는 프로바이더
| 프로바이더 | provider 값 | 채팅 기능 | 비고 |
|---|---|---|---|
| OpenAI | 'openai' | 예 | 기본 프로바이더입니다. |
| Anthropic | 'anthropic' | 예 | /v1/messages 엔드포인트를 사용합니다. |
관측성
AI 함수 활동은 ClickHouse ProfileEvents를 통해 추적할 수 있습니다:
| ProfileEvent | Description |
|---|---|
AIAPICalls | AI 프로바이더로 전송된 HTTP 요청 수입니다. |
AIInputTokens | 소비된 총 입력 토큰 수입니다. |
AIOutputTokens | 소비된 총 출력 토큰 수입니다. |
AIRowsProcessed | 결과를 반환한 행 수입니다. |
AIRowsSkipped | 건너뛴 행 수입니다(QUOTA를 초과했거나 ai_function_throw_on_error = 0에서 오류가 발생한 경우). |
다음과 같이 이러한 이벤트를 쿼리하십시오:
aiClassify
도입 버전: v26.4.0
주어진 텍스트를 LLM 프로바이더를 사용해 제공된 카테고리 중 하나로 분류합니다.
이 함수는 텍스트를 고정된 분류 프롬프트 및 JSON schema 응답 형식과 함께 전송하며,
모델이 제공된 레이블 중 정확히 하나만 반환하도록 제한합니다. 응답이 {"category": "..."} 형태의 JSON
객체로 반환되면 해당 레이블을 추출하여 레이블 문자열을 반환합니다.
첫 번째 인수는 프로바이더, model, 엔드포인트, API key를 지정하는 명명된 컬렉션입니다.
구문
별칭: AIClassify
인수
collection— 프로바이더 자격 증명과 설정이 포함된 명명된 컬렉션의 이름입니다.Stringtext— 분류할 텍스트입니다.Stringcategories— 후보 범주 레이블의 상수 목록입니다.Array(String)temperature— 무작위성 수준을 제어하는 샘플링 온도입니다. 기본값:0.0.Float64
반환값
제공된 범주 레이블 중 하나를 반환합니다. 요청이 실패하고 ai_function_throw_on_error가 비활성화된 경우에는 컬럼 타입의 기본값(빈 문자열)을 반환합니다. String
예시
감정 분류
컬럼 분류하기
aiExtract
도입 버전: v26.4.0
LLM 프로바이더를 사용해 비정형 텍스트에서 구조화된 정보를 추출합니다.
세 번째 인수는 자유 형식의 자연어 지시문(예: 'the main complaint')이거나
'{"field_a": "description of field a", "field_b": "description of field b"}' 형식의 JSON으로 인코딩된 schema일 수 있습니다.
지시문 모드에서 함수는 추출된 값을 일반 문자열로 반환하며, 아무것도 찾지 못한 경우 빈 문자열을 반환합니다.
schema 모드에서 함수는 요청된 schema와 키가 일치하는 JSON 객체 문자열을 반환하며, 누락된 필드는 null입니다.
첫 번째 인수는 프로바이더, model, 엔드포인트, API key를 지정하는 명명된 컬렉션입니다.
구문
별칭: AIExtract
인수
collection— 프로바이더 자격 증명과 설정이 포함된 명명된 컬렉션의 이름입니다.Stringtext— 정보를 추출할 텍스트입니다.Stringinstruction_or_schema— 자유 형식의 추출 지침 또는 추출할 필드를 설명하는 상수 JSON 객체입니다.const Stringtemperature— 무작위성을 제어하는 샘플링 온도입니다. 기본값은0.0입니다.const Float64
반환값
단일 추출 값(지침 모드) 또는 JSON 객체 문자열(schema 모드)입니다. 요청이 실패하고 ai_function_throw_on_error가 비활성화되어 있으면 컬럼 타입의 기본값(빈 문자열)을 반환합니다. String
예시
자유 형식 지침
schema 추출
aiGenerate
도입 버전: v26.4.0
LLM 프로바이더를 사용해 프롬프트로부터 자유 형식 텍스트 콘텐츠를 생성합니다.
이 함수는 구성된 AI 프로바이더에 프롬프트를 전송하고 생성된 텍스트를 반환합니다.
모델의 동작(예: 어조, 형식, 역할)을 유도하기 위해 선택적으로 system prompt를 제공할 수 있습니다.
system prompt를 지정하지 않으면 기본 system prompt는 다음과 같습니다: You are a helpful assistant. Provide a clear and concise response.
첫 번째 인수는 프로바이더, 모델, 엔드포인트, API key를 지정하는 명명된 컬렉션입니다.
구문
별칭: AIGenerate
인수
collection— 프로바이더 자격 증명과 설정이 포함된 명명된 컬렉션의 이름입니다.Stringprompt— 모델에 보낼 사용자 프롬프트 또는 질문입니다.Stringsystem_prompt— 모델의 동작(예: 페르소나, 출력 형식)을 안내하는 선택적 상수 시스템 수준 지시문이며, 각 프롬프트와 함께 전송됩니다.Stringtemperature— 무작위성을 제어하는 샘플링 온도입니다. 기본값은0.7입니다.Float64
반환값
생성된 텍스트 응답 또는 요청이 실패하고 ai_function_throw_on_error가 비활성화된 경우 컬럼 타입의 기본값(빈 문자열)입니다. String
예시
간단한 질문
시스템 프롬프트 사용 시
컬럼 값 요약하기
aiTranslate
도입 버전: v26.4.0
LLM 프로바이더를 사용하여 지정된 대상 언어로 주어진 텍스트를 번역합니다.
추가 스타일 또는 방언 지침은 네 번째 인수로 전달할 수 있습니다(예: '기술 용어는 번역하지 않음').
첫 번째 인수는 프로바이더, 모델, 엔드포인트, API key를 지정하는 명명된 컬렉션입니다.
구문
별칭: AITranslate
인수
collection— 프로바이더 자격 증명과 설정이 포함된 명명된 컬렉션의 이름입니다.Stringtext— 번역할 텍스트입니다.Stringtarget_language— 대상 언어 이름 또는 BCP-47 코드입니다(예:'French','es-MX').Stringinstructions— 번역기에 전달할 선택적 상수 추가 지침입니다.Stringtemperature— 무작위성을 제어하는 샘플링 온도입니다. 기본값:0.3.Float64
반환값
번역된 텍스트 또는 요청이 실패했고 ai_function_throw_on_error가 비활성화된 경우 컬럼 타입의 기본값(빈 문자열)입니다. String
예시
프랑스어로 번역
스타일 지침에 따라 일본어로 번역