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)を作成し、 リクエスト のヘッダーに渡します。
リクエストの送信¶
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
リクエストボディは、モデル、プロンプトまたは会話履歴、およびオプションを指定する 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 引数¶
引数 |
型 |
説明 |
---|---|---|
|
文字列 |
使用するモデルの識別子(モデルの選択 参照)。これは次のいずれかの値である必要があります。
|
|
配列 |
完了を生成するために使用するプロンプトまたは会話履歴。会話を時系列で表すオブジェクトの配列。各オブジェクトは
これらのロールの詳細については、 COMPLETE ロールテーブル をご参照ください。 単一のユーザーメッセージで構成されるプロンプトの場合、 |
オプションの JSON 引数¶
引数 |
型 |
デフォルト |
説明 |
---|---|---|---|
|
数値 |
1.0 |
言語モデルが出力する可能性のあるトークンの集合を制限することで、言語モデルの多様性を制御する0から1までの値(各値を含む)。 |
|
数値 |
0.0 |
各ステップでどのトークンが選択されるかを制御することにより、言語モデルの出力のランダム性を制御する0から1まで(各値を含む)の値。 |
|
整数 |
4096 |
出力するトークンの最大数。出力はこのトークン数で切り捨てられます。 注釈
|
出力¶
トークンは、サーバー送信イベント(SSEs)を使用して生成されたときに送信されます。各 SSE イベントは message
タイプを使用し、以下の構造を持つ JSON オブジェクトを含みます。
キー |
値のタイプ |
説明 |
---|---|---|
|
文字列 |
リクエストのユニークな ID、リクエストに応答して送られるすべてのイベントに対して同じ値。 |
|
数値 |
応答が生成された UNIX タイムスタンプ(1970年1月1日午前0時からの秒数)。 |
|
文字列 |
モデルの識別子。 |
|
配列 |
モデルの応答それぞれの応答は、 |
ステータスコード¶
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
出力¶
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
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)
注釈
Python API のストリーミングモードは現在、ストアドプロシージャとSnowsightでは動作しません。