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 関数は、処理されたトークンの数に基づいてコンピューティングコストが発生します。100万トークンあたりのクレジット単位での各コストについては、 Snowflakeサービス利用テーブル をご参照ください。トークンは、Snowflake Cortex LLM 関数で処理されるテキストの最小単位で、テキストの4文字にほぼ同じです。トークンに相当する生の入力または出力テキストは、モデルによって異なる場合があります。

COMPLETE 関数は、入力プロンプトから新しいテキストを生成します。入力トークンも出力トークンもコンピューティングコストがかかります。会話やチャットのユーザー体験を提供するために COMPLETE を使用する場合、以前のすべてのプロンプトと応答が、対応するコストを伴って、それぞれの新しい応答を生成するために処理されます。

使用量のクォータ

すべてのSnowflakeのお客様に高水準のパフォーマンスを保証するために、Snowflake Cortex LLM REST API 関数には使用量のクォータが設定されており、これを超えるとリクエストが制限される場合があります。Snowflakeはこれらのクォータを随時調整する可能性があります。下表のクォータはアカウントごとに適用され、モデルごとに独立して適用されます。

関数
(モデル)
1分あたりの処理トークン数(TPM)
毎分(TPM)
1分あたりのリクエスト数(RPM)
分(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 関数を実行します。 account_identifier は、Snowsightへのアクセスに使用する アカウント識別子 の形式を取ります。

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 ロール(または、 ACCOUNTADMIN など、 SECURITYADMIN を付与された別のロール)を使用して行う必要があります。ステップバイステップの手順については、 キーペア認証の構成 をご参照ください。

Tip

Cortex LLM REST API リクエスト専用のユーザーを作ることを検討します。

API リクエストを行うには、公開キーを使って JSON Webトークン (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

リクエストの送信

Cortex LLM REST API へのリクエストは、 API の REST エンドポイントに POSTing することで行います。 Authorization ヘッダーには、あなたの公開キーから生成された JSON Webトークンを含める必要があります。これは、 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 Webトークンです。

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日午前0時からの秒数)。

'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 リクエストを行っています。 jwtpromptaccount_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のセッションの作成 を参照)。そして、コンプリート API を呼び出します。 stream=True が指定された場合のみ、 REST バックエンドが使用されます。

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では動作しません。