Cortex LLM REST API

Snowflake Cortex LLM-Funktionen bieten Funktionen für die Verarbeitung natürlicher Sprache auf der Grundlage einer Vielzahl von großen Sprachmodellen (Large Language Models (LLMs)) unter Verwendung von SQL oder Python. Weitere Informationen dazu finden Sie unter Large Language Model (LLM)-Funktionen (Snowflake Cortex).

Der Snowflake Cortex LLM REST API ermöglicht Ihnen den Zugriff auf die Funktion COMPLETE von jeder Sprache aus, die HTTP POST-Anfragen stellen kann. So können Sie hochmoderne AI-Funktionalität in Ihre Anwendungen einbringen. Für die Nutzung dieser API ist kein Warehouse erforderlich.

Die Cortex LLM REST API sendet die generierten Token als vom Server gesendete Ereignisse an den Benutzer zurück.

Hinweise zu Kosten

Snowflake Cortex LLM REST API-Anfragen verursachen Kosten, die sich nach der Anzahl der verarbeiteten Token richten. Die Kosten für jede Funktion in Credits pro Million Token finden Sie in der Snowflake Service Consumption Table. Ein Token ist die kleinste Texteinheit, die von den Snowflake Cortex-LLM-Funktionen verarbeitet wird, und entspricht etwa vier Textzeichen. Das Verhältnis des ein-/ausgegebene Rohtextes zur Tokenanzahl kann je nach Modell variieren.

Die Funktion COMPLETE erzeugt neuen Text nach einer Eingabeaufforderung. Sowohl für Eingabe- als auch für Ausgabe-Token fallen Computekosten an. Wenn Sie COMPLETE verwenden, um ein Konversations- oder Chat-Benutzererlebnis zu bieten, werden alle vorherigen Aufforderungen und Antworten verarbeitet, um jede neue Antwort zu generieren, mit entsprechenden Kosten.

Nutzungskontingente

Um einen hohen Leistungsstandard für alle Snowflake-Kunden sicherzustellen, unterliegen die Snowflake Cortex-LLMRESTAPI-Anfragen Nutzungskontingenten, bei deren Überschreitung Anfragen gedrosselt werden können. Snowflake kann diese Kontingente von Zeit zu Zeit anpassen. Die Quoten in der folgenden Tabelle gelten pro Konto und werden für jedes Modell separat angewendet.

Funktion
(Modell)
Verarbeitete Token
pro Minute (TPM)
Anfragen pro
Minute (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-Endpunkt

Der /api/v2/cortex/inference:complete Endpunkt führt die SQL COMPLETE-Funktion aus. Hat die Form:

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

wobei account_identifier der Kontobezeichner ist, den Sie für den Zugriff auf Snowsight verwenden.

Bemerkung

Derzeit wird nur die Funktion COMPLETE unterstützt. Zusätzliche Funktionen werden möglicherweise in einer zukünftigen Version des Cortex LLM REST API unterstützt.

Einrichten der Authentifizierung

Die Authentifizierung gegenüber die Cortex LLM REST API verwendet Schlüsselpaar-Authentifizierung. Dazu ist es erforderlich, ein Schlüsselpaar RSA zu erstellen und den öffentlichen Schlüssel einem Benutzer zuzuweisen. Dies muss mit der Rolle SECURITYADMIN (oder einer anderen Rolle, der SECURITYADMIN zugewiesen wurde, wie ACCOUNTADMIN) geschehen. Eine schrittweise Anleitung finden Sie unter Konfigurieren der Schlüsselpaar-Authentifizierung.

Tipp

Erwägen Sie die Einrichtung eines eigenen Benutzers für Cortex LLM REST API-Anfragen.

Um API-Anfragen zu stellen, verwenden Sie den öffentlichen Schlüssel, um ein JSON-Web-Token (JWT) zu erstellen und es in den Headern der Anfrage zu übergeben.

Festlegen der Autorisierung

Sobald Sie ein Schlüsselpaar erstellt und dessen öffentlichen Schlüssel einem Benutzer zugewiesen haben, muss die Standardrolle dieses Benutzers die Datenbankrolle snowflake.cortex_user haben, die die Berechtigungen zur Nutzung der LLM-Funktionen enthält. In den meisten Fällen verfügen die Benutzer bereits über diese Berechtigung, da sie der Rolle PUBLIC automatisch erteilt wird und alle Rollen PUBLIC erben.

Wenn Ihr Snowflake-Administrator es vorzieht, einzelne Benutzer zuzulassen, hat er möglicherweise der Rolle PUBLIC die Rolle snowflake.cortex_user widerrufen und muss diese Rolle den Benutzern, die den Cortex LLM REST API verwenden können sollen, wie folgt zuweisen.

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

Wichtig

REST API-Anfragen verwenden die Standardrolle des Benutzers, sodass diese Rolle über die erforderlichen Berechtigungen verfügen muss. Sie können die Standardrolle eines Benutzers mit ALTER USER … SET DEFAULT ROLE ändern.

ALTER USER MY_USER SET DEFAULT_ROLE=MY_ROLE
Copy

Übermitteln von Anforderungen

Sie stellen eine Anfrage an die Cortex LLM REST-API über POSTing an den REST-Endpunkt der API. Der Header von Authorization muss ein JSON-Web-Token enthalten, das aus Ihrem öffentlichen Schlüssel generiert wurde. Dies können Sie mit snowsql über den folgenden Befehl tun. Der generierte JWT läuft nach einer Stunde ab.

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

Der Body der Anfrage ist ein JSON-Objekt, das das Modell, den Verlauf der Eingabeaufforderung oder des Gesprächs und die Optionen angibt. Weitere Informationen finden Sie unter der folgenden API-Referenz.

API-Referenz

POST /api/v2/cortex/inference:complete

Schließt eine Eingabeaufforderung oder eine Konversation unter Verwendung des angegebenen großen Sprachmodells (Large Language Model) ab. Der Body der Anfrage ist ein JSON-Objekt, das die Argumente enthält.

Dieser Endpunkt entspricht der Funktion COMPLETE SQL.

Erforderliche Header

X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT

Definiert die Art des Tokens für die Autorisierung.

Authorization: Bearer jwt.

Autorisierung für die Anfrage. jwt ist ein gültiges JSON-Web-Token.

Content-Type: application/json

Gibt an, dass der Body der Anfrage im JSON-Format vorliegt.

Accept: application/json, text/event-stream

Gibt an, dass die Antwort entweder JSON (Fehlerfall) oder vom Server gesendete Ereignisse enthalten wird.

Erforderliche JSON-Argumente

Argument

Typ

Beschreibung

model

string

Der Bezeichner des zu verwendenden Modells (siehe Auswählen eines Modells) Muss einer der folgenden Werte sein:

  • 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

Array

Der Prompt oder der Konversationsverlauf, die zum Erstellen einer Vervollständigung (Completion) verwendet werden sollen. Ein Array von Objekten, die eine Konversation in chronologischer Reihenfolge darstellen. Jedes Objekt muss einen content-Schlüssel enthalten und kann auch einen role-Schlüssel enthalten.

  • content: Eine Zeichenkette, die eine Systemmeldung, eine Benutzereingabe oder eine vorherige Antwort des Modells enthält.

  • role: Eine Zeichenfolge, die die Rolle der Meldung angibt, entweder 'system', 'user' oder 'assistant'.

Eine genauere Beschreibung dieser Rollen finden Sie unter in der Tabelle COMPLETE Rollen.

Bei Eingabeaufforderungen, die aus einer einzelnen Benutzernachricht bestehen, kann role weggelassen werden; es wird dann angenommen, dass es user ist.

Optionale JSON-Argumente

Argument

Typ

Standard

Beschreibung

top_p

number

1.0

Ein Wert von 0 bis 1 (einschließlich), der die Vielfalt des Sprachmodells steuert, indem er das Set an möglichen Token, die das Modell ausgibt, einschränkt.

temperature

number

0,0

Ein Wert von 0 bis 1 (einschließlich), der die Zufälligkeit der Ausgabe des Sprachmodells steuert, indem er beeinflusst, welches mögliche Token bei jedem Schritt ausgewählt wird.

max_tokens

Ganzzahl

4096

Die maximale Anzahl von auszugebenden Token Die Ausgabe wird nach dieser Anzahl von Token abgeschnitten.

Bemerkung

Sie können max_tokens auf eine Zahl festlegen, die größer als 4.096 ist, aber nicht größer als die Modellbeschränkung. Siehe Modelleinschränkungen für die Token-Beschränkung eines jeden Modells.

Ausgabe

Token werden gesendet, sobald sie durch vom Server gesendete Ereignisse erzeugt werden (SSEs). Jedes SSE-Ereignis verwendet den Typ message und enthält ein JSON-Objekt mit der folgenden Struktur.

Schlüssel

Werttyp

Beschreibung

'id'

string

Eindeutige ID der Anfrage, der gleiche Wert für alle Ereignisse, die als Antwort auf die Anfrage gesendet werden.

'created'

number

UNIX-Zeitstempel (Sekunden seit Mitternacht des 1. Januar 1970) für das Generieren der Antwort.

'model'

string

Bezeichner des Modells.

'choices'

Array

Die Antworten des Modells. Jede Antwort ist ein Objekt mit einem 'delta'-Schlüssel, dessen Wert ein Objekt ist, dessen 'content'-Schlüssel die vom Modell erzeugten neuen Token enthält. Derzeit wird nur eine Antwort bereitgestellt.

Statuscodes

Die Snowflake Cortex LLM REST API verwendet die folgenden HTTP-Statuscodes, um den erfolgreichen Abschluss oder verschiedene Fehlerzustände anzuzeigen.

200 OK

Anfrage erfolgreich abgeschlossen. Der Body der Antwort enthält die Ausgabe des Modells.

400 invalid options object

Die optionalen Argumente haben ungültige Werte.

400 unknown model model_name

Das angegebene Modell ist nicht vorhanden.

400 max tokens of count exceeded

Die Anfrage hat die maximale Anzahl der vom Modell unterstützten Token überschritten (siehe Modelleinschränkungen).

400 all requests were throttled by remote service

Die Anfrage wurde aufgrund einer hohen Nutzung gedrosselt. Versuchen Sie es später noch einmal.

402 budget exceeded

Das Budget für den Modellverbrauch wurde überschritten.

403 Not Authorized

Konto nicht für REST API aktiviert, oder die Standardrolle des aufrufenden Benutzers hat nicht die Datenbankrolle snowflake.cortex_user.

429 too many requests

Die Anfrage wurde abgelehnt, weil das Nutzungskontingent überschritten wurde. Bitte versuchen Sie Ihre Anfrage später.

503 inference timed out

Die Anfrage hat zu lange gedauert.

Beispiel

Das folgende Beispiel verwendet curl, um eine COMPLETE-Anfrage zu stellen. Ersetzen Sie jwt, prompt und account_identifier durch die entsprechenden Werte in diesem Befehl.

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

Ausgabe

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

Um die Python-API zu installieren, verwenden Sie:

pip install snowflake-ml-python
Copy

Die Python-API ist ab Version 1.6.1 im snowflake-ml-python-Paket enthalten.

Beispiel

Um die Python-API zu verwenden, erstellen Sie zunächst eine Snowflake-Sitzung (siehe Erstellen einer Sitzung für Snowpark Python). Rufen Sie dann die Complete-API auf. Das REST-Backend wird nur verwendet, wenn stream=True angegeben ist.

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

Bemerkung

Der Streaming-Modus der Python API funktioniert derzeit nicht in gespeicherten Prozeduren und in Snowsight.