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.
Ü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
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 |
---|---|---|
|
string |
Der Bezeichner des zu verwendenden Modells (siehe Auswählen eines Modells) Muss einer der folgenden Werte sein:
|
|
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
Eine genauere Beschreibung dieser Rollen finden Sie unter in der Tabelle COMPLETE Rollen. Bei Eingabeaufforderungen, die aus einer einzelnen Benutzernachricht bestehen, kann |
Optionale JSON-Argumente¶
Argument |
Typ |
Standard |
Beschreibung |
---|---|---|---|
|
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. |
|
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. |
|
Ganzzahl |
4096 |
Die maximale Anzahl von auszugebenden Token Die Ausgabe wird nach dieser Anzahl von Token abgeschnitten. Bemerkung Sie können |
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 |
---|---|---|
|
string |
Eindeutige ID der Anfrage, der gleiche Wert für alle Ereignisse, die als Antwort auf die Anfrage gesendet werden. |
|
number |
UNIX-Zeitstempel (Sekunden seit Mitternacht des 1. Januar 1970) für das Generieren der Antwort. |
|
string |
Bezeichner des Modells. |
|
Array |
Die Antworten des Modells. Jede Antwort ist ein Objekt mit einem |
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
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
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)
Bemerkung
Der Streaming-Modus der Python API funktioniert derzeit nicht in gespeicherten Prozeduren und in Snowsight.