OpenAI
OpenAI
OpenAI 모델 함수는 Flink SQL이 OpenAI API를 호출해 추론 작업을 수행할 수 있게 해줍니다. SQL로 원격 OpenAI 모델 서비스를 호출해 예측/추론 작업을 처리할 수 있도록 지원합니다.
출처: 문서
본문
개요
이 함수는 Flink SQL을 통해 원격 OpenAI 모델 서비스를 예측/추론 작업에 호출하는 것을 지원합니다. 현재 다음 작업을 지원합니다.
- Chat Completions: 대화를 구성하는 메시지 목록에서 모델 응답을 생성합니다.
- Embeddings: 주어진 입력의 벡터 표현을 얻습니다. 이 표현은 머신러닝 모델과 알고리즘이 쉽게 사용할 수 있습니다.
사용 예시
다음 예시는 chat completions 모델을 만들고 이를 사용해 영화 리뷰의 감성 라벨을 예측합니다.
먼저 다음 SQL 문으로 chat completions 모델을 생성합니다.
CREATE MODEL ai_analyze_sentiment
INPUT (`input` STRING)
OUTPUT (`content` STRING)
WITH (
'provider'='openai',
'endpoint'='https://api.openai.com/v1/chat/completions',
'api-key' = '<YOUR KEY>',
'model'='gpt-3.5-turbo',
'system-prompt' = 'Classify the text below into one of the following labels: [positive, negative, neutral, mixed]. Output only the label.'
);
movie_comment라는 테이블에 다음 데이터가 저장되어 있고, 예측 결과는 print_sink라는 테이블에 저장된다고 가정합니다.
CREATE TEMPORARY VIEW movie_comment(id, movie_name, user_comment, actual_label)
AS VALUES
(1, 'Good Stuff', 'The part where children guess the sounds is my favorite. It's a very romantic narrative compared to other movies I've seen. Very gentle and full of love.', 'positive');
CREATE TEMPORARY TABLE print_sink(
id BIGINT,
movie_name VARCHAR,
predicit_label VARCHAR,
actual_label VARCHAR
) WITH (
'connector' = 'print'
);
그러면 다음 SQL 문으로 영화 리뷰의 감성 라벨을 예측할 수 있습니다.
INSERT INTO print_sink
SELECT id, movie_name, content as predicit_label, actual_label
FROM ML_PREDICT(
TABLE movie_comment,
MODEL ai_analyze_sentiment,
DESCRIPTOR(user_comment));
모델 옵션
공통
| Key | Default | Type | Description |
|---|---|---|---|
| api-key | (none) | String | 인증에 사용하는 OpenAI API 키입니다. |
| context-overflow-action | truncated-tail | Enum | 컨텍스트 오버플로우를 처리하는 동작입니다. 가능한 값: - "truncated-tail": 컨텍스트 꼬리에서 초과된 토큰을 잘라냅니다. - "truncated-tail-log": 컨텍스트 꼬리에서 초과된 토큰을 잘라내고 잘라냄 로그를 기록합니다. - "truncated-head": 컨텍스트 머리에서 초과된 토큰을 잘라냅니다. - "truncated-head-log": 컨텍스트 머리에서 초과된 토큰을 잘라내고 잘라냄 로그를 기록합니다. - "skipped": 해당 입력 행을 건너뜁니다. - "skipped-log": 해당 입력 행을 건너뛰고 건너뜀 로그를 기록합니다. |
| endpoint | (none) | String | OpenAI API 엔드포인트의 전체 URL입니다. 예: https://api.openai.com/v1/chat/completions 또는 https://api.openai.com/v1/embeddings |
| error-handling-strategy | RETRY | Enum | 모델 요청 중 오류를 처리하는 전략입니다. 가능한 값: - "RETRY": 요청 전송을 재시도합니다. - "FAILOVER": 예외를 던져 Flink 작업을 실패시킵니다. - "IGNORE": 오류를 일으킨 입력을 무시하고 계속 진행합니다. 오류 자체는 로그에 기록됩니다. |
| max-context-size | (none) | Integer | 컨텍스트의 최대 토큰 수입니다. 이 임계값을 초과하면 context-overflow-action이 트리거됩니다. |
| model | (none) | String | 모델 이름입니다. 예: gpt-3.5-turbo, text-embedding-ada-002 |
| retry-fallback-strategy | FAILOVER | Enum | 재시도 시도가 모두 소진되었을 때 사용할 폴백 전략입니다. error-handling-strategy가 retry로 설정된 경우 적용됩니다. 가능한 값: - "FAILOVER": 예외를 던져 Flink 작업을 실패시킵니다. - "IGNORE": 오류를 일으킨 입력을 무시하고 계속 진행합니다. 오류 자체는 로그에 기록됩니다. |
| retry-num | 100 | Integer | OpenAI 클라이언트 요청의 재시도 횟수입니다. |
Chat Completions
| Key | Default | Type | Description |
|---|---|---|---|
| max-tokens | (none) | Long | chat completion에서 생성할 수 있는 최대 토큰 수입니다. |
| n | (none) | Long | 각 입력 메시지에 대해 생성할 chat completion 선택지 수입니다. 모든 선택지에서 생성된 토큰 수를 기준으로 요금이 부과되므로 비용을 최소화하려면 n을 1로 유지하세요. |
| presence-penalty | (none) | Double | -2.0과 2.0 사이의 숫자입니다. 양수 값은 지금까지 텍스트에 등장했는지 여부에 따라 새 토큰에 패널티를 주어, 모델이 새로운 주제를 말할 가능성을 높입니다. |
| response-format | (none) | Enum | 응답의 형식입니다. 예: 'text' 또는 'json_object'. 가능한 값: - "text" - "json_object" |
| seed | (none) | Long | 지정하면 모델 플랫폼이 결정적으로 샘플링하도록 최선을 다하며, 같은 seed와 매개변수로 반복 요청 시 같은 결과를 반환해야 합니다. 결정성은 보장되지 않습니다. |
| stop | (none) | String | 모델에 stop 시퀀스로 전달할 문자열의 CSV 목록입니다. |
| system-prompt | "You are a helpful assistant." | String | 채팅의 시스템 메시지입니다. |
| temperature | (none) | Double | 출력의 무작위성 또는 "창의성"을 제어합니다. 일반적인 값은 0.0과 1.0 사이입니다. |
| top-p | (none) | Double | 토큰 선택의 확률 컷오프입니다. 보통 temperature 또는 topP 중 하나만 지정하며 둘 다 지정하지는 않습니다. |
Embeddings
| Key | Default | Type | Description |
|---|---|---|---|
| dimension | (none) | Long | 임베딩 결과 배열의 크기입니다. |
스키마 요구사항
다음 표는 각 작업에 대한 스키마 요구사항을 나열합니다.
| Task | Input Type | Output Type |
|---|---|---|
| Chat Completions | STRING | STRING |
| Embeddings | STRING | ARRAY |
사용 가능한 메타데이터
error-handling-strategy를 ignore로 설정한 경우, 다음 메타데이터 열을 추가로 지정하여 실패에 대한 정보를 스트림에 노출할 수 있습니다.
- error-string(STRING): 오류와 관련된 메시지
- http-status-code(INT): HTTP 상태 코드
- http-headers-map(MAP<STRING, ARRAY>): 응답과 함께 반환된 헤더
출력 스키마에 이 메타데이터 열을 정의했지만 호출이 실패하지 않았다면, 해당 열은 null 값으로 채워집니다.