Cortex LLM REST API

Snowflake Cortex LLM 함수는 SQL 또는 Python을 사용하여 다양한 대규모 언어 모델(LLMs)로 구동되는 자연어 처리 기능을 제공합니다. 자세한 내용은 대규모 언어 모델(LLM) 함수(Snowflake Cortex) 섹션을 참조하십시오.

Snowflake Cortex LLM REST API를 사용하면 HTTP POST 요청을 할 수 있는 모든 프로그래밍 언어에서 COMPLETE 함수 에 액세스할 수 있으므로 최신 AI 기능을 애플리케이션에 적용할 수 있습니다. 이 API를 사용하면 웨어하우스가 필요하지 않습니다.

Cortex LLM REST API는 생성된 토큰을 서버에서 전송한 이벤트 로 사용자에게 다시 스트리밍합니다.

비용 고려 사항

Snowflake Cortex LLM REST API 요청은 처리된 토큰 수에 따라 컴퓨팅 비용이 발생합니다. 백만 토큰당 크레딧으로 표시되는 각 함수의 비용은 Snowflake 서비스 사용 테이블 을 참조하십시오. 토큰은 Snowflake Cortex LLM 함수가 처리하는 가장 작은 텍스트 단위로, 대략 텍스트 4자와 같습니다. 원시 입력 또는 출력 텍스트와 토큰의 동등성은 모델에 따라 다를 수 있습니다.

COMPLETE 함수는 입력 프롬프트가 주어지면 새 텍스트를 생성합니다. 입력 토큰과 출력 토큰 모두 컴퓨팅 비용이 발생합니다. COMPLETE를 사용하여 대화 또는 채팅 사용자 경험을 제공하는 경우 이전의 모든 프롬프트와 응답이 처리되어 각각의 새로운 응답이 생성되며 그에 따른 비용이 발생합니다.

사용 할당량

모든 Snowflake 고객에게 높은 수준의 성능을 보장하기 위해, Snowflake Cortex LLM RESTAPI 요청에는 그 이상 사용할 경우 요청이 제한될 수 있는 사용 할당량이 적용됩니다. Snowflake는 때때로 이러한 할당량을 조정할 수 있습니다. 아래 테이블의 할당량은 계정별로 적용되며 각 모델에 독립적으로 적용됩니다.

함수
(모델)
분당
처리된 토큰(TPM)
분당
요청 수(RPM)
COMPLETE
(llama2-70b-chat)

200,000

100

COMPLETE
(llama3-8b)

400,000

200

COMPLETE
(llama3-70b)

200,000

100

COMPLETE
(llama3.1-8b)

400,000

200

COMPLETE
(llama3.1-70b)

200,000

100

COMPLETE
(llama3.1-405b)

100,000

50

COMPLETE
(reka-core)

200,000

100

COMPLETE
(reka-flash)

200,000

100

COMPLETE
(mistral-large)

200,000

100

COMPLETE
(mixtral-8x7b)

200,000

100

COMPLETE
(mistral-7b)

400,000

200

COMPLETE
(jamba-instruct)

100,000

50

COMPLETE
(gemma-7b)

400,000

200

COMPLETE 엔드포인트

/api/v2/cortex/inference:complete 엔드포인트는 SQL COMPLETE 함수를 실행합니다. 이는 다음과 같은 형식을 갖습니다.

POST https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/inference:complete

여기서 account_identifier 는 Snowsight에 액세스하는 데 사용하는 계정 식별자 입니다.

참고

현재는 COMPLETE 함수만 지원됩니다. Cortex LLM REST API의 향후 버전에서는 추가 함수가 지원될 수 있습니다.

인증 설정하기

Cortex LLM REST API의 인증에는 키 페어 인증 이 사용됩니다. 이를 위해서는 RSA 키 페어를 생성하고 해당 공개 키를 사용자에게 할당해야 하며, 이 작업은 SECURITYADMIN 역할(또는 SECURITYADMIN이 부여된 다른 역할, 예: ACCOUNTADMIN)을 사용하여 수행되어야 합니다. 단계별 지침은 키 페어 인증 구성하기 섹션을 참조하십시오.

Cortex LLM REST API 요청을 위한 전용 사용자 생성을 고려

API 요청을 하려면 공개 키를 사용하여 JSON 웹 토큰 (JWT)을 생성하고 요청 의 헤더에 전달합니다.

승인 설정하기

키 페어를 생성하고 사용자에게 공개 키를 할당한 후 해당 사용자의 기본 역할은 LLM 함수를 사용할 수 있는 권한이 포함된 snowflake.cortex_user 데이터베이스 역할을 가져야 합니다. 대부분의 경우 PUBLIC 역할에 이 권한이 자동으로 부여되고 모든 역할이 PUBLIC을 상속하므로 사용자는 이미 이 권한을 가지고 있습니다.

Snowflake 관리자가 개별 사용자를 옵트인하는 것을 선호하는 경우 PUBLIC에서 snowflake.cortex_user 를 취소했을 수 있으며, 다음과 같이 Cortex LLM REST API를 사용할 수 있어야 하는 사용자에게 이 역할을 부여해야 합니다.

GRANT DATABASE ROLE snowflake.cortex_user TO ROLE MY_ROLE;
GRANT ROLE MY_ROLE TO USER MY_USER;
Copy

중요

REST API 요청은 사용자의 기본 역할을 사용하므로 해당 역할에는 필요한 권한이 있어야 합니다. ALTER USER … SET DEFAULT ROLE을 사용하여 사용자의 기본 역할을 변경할 수 있습니다.

ALTER USER MY_USER SET DEFAULT_ROLE=MY_ROLE
Copy

요청 제출하기

POSTing이 API의 REST 엔드포인트로 Cortex LLM REST API에 요청을 보냅니다. Authorization 헤더에는 공개 키에서 생성된 JSON 웹 토큰이 포함되어야 하며, 다음 명령을 통해 snowsql 을 사용하여 이를 수행할 수 있습니다. 생성된 JWT는 1시간 후에 만료됩니다.

snowsql -a <account_identifier> -u <user> --private-key-path <path>/rsa_key.p8 --generate-jwt
Copy

요청 본문은 모델, 프롬프트 또는 대화 기록, 옵션을 지정하는 JSON 오브젝트입니다. 자세한 내용은 다음 API 참조를 참조하십시오.

API 참조

POST /api/v2/cortex/inference:complete

지정된 대형 언어 모델을 사용하여 프롬프트 또는 대화를 완성합니다. 요청 본문은 인자를 포함하는 JSON 오브젝트입니다.

이 엔드포인트는 COMPLETE SQL 함수에 해당합니다.

필수 헤더

X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT

승인 토큰의 유형을 정의합니다.

Authorization: Bearer jwt.

요청에 대한 승인입니다. jwt 는 유효한 JSON 웹 토큰입니다.

Content-Type: application/json

요청 본문이 JSON 형식임을 지정합니다.

Accept: application/json, text/event-stream

응답에 JSON(오류 사례) 또는 서버에서 보낸 이벤트가 포함되도록 지정합니다.

필수 JSON 인자

인자

타입

설명

model

문자열

사용할 모델의 식별자(모델 선택하기 참조). 다음 값 중 하나여야 합니다.

  • gemma-7b

  • jamba-1.5-mini

  • jamba-1.5-large

  • jamba-instruct

  • llama2-70b-chat

  • llama3-8b

  • llama3-70b

  • llama3.1-8b

  • llama3.1-70b

  • llama3.1-405b

  • llama3.2-1b

  • llama3.2-3b

  • mistral-large

  • mistral-large2

  • mistral-7b

  • mixtral-8x7b

  • reka-core

  • reka-flash

  • snowflake-arctic

messages

배열

완성된 항목을 생성하는 데 사용되는 프롬프트 또는 대화 기록입니다. 시간순으로 대화를 나타내는 오브젝트 배열입니다. 각 오브젝트에는 content 키가 포함되어야 하며 role 키도 포함될 수 있습니다.

  • content: 시스템 메시지, 사용자의 프롬프트 또는 모델의 이전 응답이 포함된 문자열입니다.

  • role: 메시지의 역할을 나타내는 문자열로, 'system', 'user', 또는 'assistant' 중 하나입니다.

이러한 역할에 대한 자세한 설명은 COMPLETE 역할 테이블 을 참조하십시오.

단일 사용자 메시지로 구성된 프롬프트의 경우 role 을 생략할 수 있으며, 이 경우 user 로 간주됩니다.

선택적 JSON 인자

인자

타입

기본값

설명

top_p

숫자

1.0

모델이 출력하는 가능한 토큰 세트를 제한하여 언어 모델의 다양성을 제어하는 0~1 사이의 값(포함)입니다.

temperature

숫자

0.0

각 단계에서 선택 가능한 토큰에 영향을 주어 언어 모델 출력의 무작위성을 제어하는 0~1 사이의 값(포함)입니다.

max_tokens

정수

4096

출력할 토큰의 최대 개수입니다. 토큰 수가 초과되면 출력이 잘립니다.

참고

max_tokens 를 4,096보다 큰 숫자로 설정할 수 있지만, 모델 제한을 초과하면 안 됩니다. 각 모델의 토큰 한도는 모델 제한 사항 섹션을 참조하십시오.

출력

토큰은 서버 전송 이벤트(SSEs)를 사용하여 생성되는 대로 전송됩니다. 각 SSE 이벤트는 message 유형을 사용하며 다음과 같은 구조의 JSON 오브젝트를 포함합니다.

값 타입

설명

'id'

문자열

요청의 고유 ID로, 요청에 대한 응답으로 전송된 모든 이벤트에 대해 동일한 값입니다.

'created'

숫자

응답이 생성된 시점의 UNIX 타임스탬프(1970년 1월 1일 자정 이후에 경과된 초).

'model'

문자열

모델의 식별자.

'choices'

배열

모델의 응답. 각 응답은 값이 오브젝트인 'delta' 키를 포함하는 오브젝트이며, 'content' 키에는 모델에서 생성된 새 토큰이 포함됩니다. 현재, 응답은 1개만 제공됩니다.

상태 코드

Snowflake Cortex LLM REST API는 다음 HTTP 상태 코드를 사용하여 성공적인 완료 또는 다양한 오류 상태를 나타냅니다.

200 OK

요청이 성공적으로 완료되었습니다. 응답의 본문에는 모델의 출력이 포함됩니다.

400 invalid options object

선택적 인자의 값이 잘못되었습니다.

400 unknown model model_name

지정한 모델이 존재하지 않습니다.

400 max tokens of count exceeded

요청이 모델에서 지원하는 최대 토큰 수를 초과했습니다(모델 제한 사항 참조).

400 all requests were throttled by remote service

사용률이 높아 요청이 제한되었습니다. 나중에 다시 시도하십시오.

402 budget exceeded

모델 소비 예산이 초과되었습니다.

403 Not Authorized

계정이 REST API를 사용하도록 설정되어 있지 않거나 호출 사용자의 기본 역할에 snowflake.cortex_user 데이터베이스 역할이 없습니다.

429 too many requests

사용 할당량을 초과했기 때문에 요청이 거부되었습니다. 나중에 요청을 다시 시도하십시오.

503 inference timed out

요청 시간이 너무 오래 걸렸습니다.

다음 예제는 curl 을 사용하여 COMPLETE 요청을 하는 예제입니다. 이 명령에서 jwt, prompt, account_identifier 를 적절한 값으로 바꿉니다.

curl -X POST \
    -H 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \
    -H "Authorization: Bearer <jwt>" \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json, text/event-stream' \
    -d '{
    "model": "mistral-large",
    "messages": [
        {
            "content": "<prompt>"
        }
    ],
    "top_p": 0,
    "temperature": 0
    }' \
https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/inference:complete
Copy

출력

data: {
data:  "id": "65c5e2ac-529b-461e-8a8c-f80655e6bd3f",
data:  "created": 1723493954,
data:  "model": "mistral-7b",
data:  "choices": [
data:    {
data:      "delta": {
data:        "content": "Cor"
data:        }
data:      }
data:     ],
data:  "usage": {
data:    "prompt_tokens": 57,
data:    "completion_tokens": 1,
data:    "total_tokens": 58
data:  }
data: }

data: {
data:  "id": "65c5e2ac-529b-461e-8a8c-f80655e6bd3f",
data:  "created": 1723493954,
data:  "model": "mistral-7b",
data:  "choices": [
data:    {
data:      "delta": {
data:        "content": "tex"
data:        }
data:      }
data:     ],
data:  "usage": {
data:    "prompt_tokens": 57,
data:    "completion_tokens": 2,
data:    "total_tokens": 59
data:  }
data: }

Python API

Python API를 설치하려면 다음을 사용합니다.

pip install snowflake-ml-python
Copy

Python API는 버전 1.6.1부터 snowflake-ml-python 패키지에 포함되어 있습니다.

Python API를 사용하려면 먼저 Snowflake 세션을 생성(Snowpark Python 세션 만들기 참조)합니다. 그런 다음 Complete API를 호출합니다. REST 백엔드는 stream=True 가 지정된 경우에만 사용됩니다.

from snowflake.snowpark import Session
from snowflake.cortex import Complete

session = Session.builder.configs(...).create()

stream = Complete(
  "mistral-7b",
  "What are unique features of the Snowflake SQL dialect?",
  session=session,
  stream=True)

for update in stream:
  print(update)
Copy

참고

Python API의 스트리밍 모드는 현재 저장 프로시저와 Snowsight에서 작동하지 않습니다.