Cortex Analyst REST API¶
Verwenden Sie diese API, um Fragen zu Ihren Daten mit Abfragen in natürlicher Sprache zu beantworten.
Meldung senden¶
POST /api/v2/cortex/analyst/message
Erzeugt eine SQL-Abfrage für die angegebene Frage unter Verwendung eines semantischen Modells oder einer semantischen Ansicht, die in der Anfrage angegeben ist. Es können ein oder mehrere Modelle angegeben werden. Wenn mehrere Modelle angegeben werden, wählt Cortex Analyst das am besten geeignete aus. Sie können Multi-Turn-Konversationen führen, bei denen Sie Folgefragen stellen können, die auf früheren Abfragen aufbauen. Weitere Informationen dazu finden Sie unter Multi-Turn-Konversationen in Cortex Analyst.
Die Anfrage enthält eine Frage des Benutzers; die Antwort enthält die Frage des Benutzers und die Antwort des Analysten. Jede Meldung in einer Antwort kann mehrere Inhaltsblöcke unterschiedlichen Typs enthalten. Drei Werte, die derzeit für das Feld type
des Inhaltsobjekts unterstützt werden, sind: text
, suggestions
und sql
.
Die Antworten können nach Abschluss der Verarbeitung auf einmal oder schrittweise nach ihrer Erstellung gesendet werden.
Header der Anforderung¶
Header |
Beschreibung |
---|---|
|
(Erforderliche) Autorisierungstoken. Weitere Informationen dazu finden Sie unter Authentifizierung am Server. |
|
(Erforderlich) Anwendung/json |
|
(Optional) Typ des Autorisierungs-Tokens. Die Standardeinstellung ist OAuth. Weitere Informationen dazu finden Sie unter Authentifizierung am Server. |
Text der Anforderung¶
Im Anfrage-Body:
Setzen Sie das letzte Feld
messages[].role
auf die Rolle des Sprechers, dieuser
sein muss.Nehmen Sie die Frage des Benutzers in das Objekt
content
auf. In diesem Objekt:Setzen Sie
type
auftext
.Stellen Sie
text
auf die Frage des Benutzers ein.
Fügen Sie einen der folgenden Punkte ein:
Die Spezifikation des semantischen Modells in YAML.
Der Pfad zu der YAML-Datei, die die Spezifikation des semantischen Modells enthält. Diese Datei muss sich in einem Stagingbereich befinden.
Der Name der semantischen Ansicht.
Die folgende Tabelle beschreibt die Felder, die Sie im Body der Anfrage festlegen können:
Feld |
Beschreibung |
---|---|
|
(Erforderlich) Die Rolle der Entität, die die Meldung erstellt. Derzeit wird nur Typ: string:enum Beispiel: |
|
(Erforderlich) Das Inhaltsobjekt, das Teil einer Meldung ist. Typ: Objekt
|
|
(Erforderlich) Der Inhaltstyp. Derzeit wird nur Typ: string:enum Beispiel: |
|
(Erforderlich) Die Frage des Benutzers. Typ: Zeichenfolge Beispiel: |
|
Pfad zur Datei des semantischen Modells YAML. Muss eine vollständig qualifizierte Stagingbereich-URL sein, einschließlich der Datenbank und des Schemas. Um mehrere semantische Modelle anzugeben, verwenden Sie das Feld Wenn Sie stattdessen die YAML-Spezifikation direkt in der Anfrage bereitstellen möchten, setzen Sie das Feld Typ: Zeichenfolge Beispiel: |
|
Eine Zeichenfolge, die das gesamte semantische Modell YAML enthält. Um mehrere semantische Modelle anzugeben, verwenden Sie stattdessen das Feld Wenn Sie stattdessen auf eine YAML-Spezifikation in einer Datei verweisen möchten, laden Sie die Datei in einen Stagingbereich hoch und setzen das Feld Typ: Zeichenfolge |
|
Ein Array mit JSON-Objekten, von denen jedes ein Feld Diese Felder haben die gleiche Semantik wie die Felder
Für jede Abfrage wählt Cortex Analyst das am besten geeignete Modell oder die am besten geeignete Ansicht aus der Liste aus. Diese Funktion vereinfacht die Interaktion des Benutzers mit Cortex Analyst. Sie müssen keine Datenquelle für die Abfrage auswählen und Sie müssen sich nicht darum kümmern, welches semantische Modell oder welche semantische Ansicht Sie jeweils verwenden. Geben Sie einfach bei jeder Abfrage alle Ihre Modelle oder Ansichten an und lassen Sie Cortex Analyst herausfinden, welche davon verwendet werden soll. Typ: Array Tipp Für Cortex Analyst ist es nicht erforderlich, dass Sie mehr als ein Modell oder eine Ansicht angeben. Wenn Sie ein einzelnes Modell oder eine Ansicht angeben, entspricht die Anfrage funktionell einer Anfrage, die ein Feld Der Vorteil der Verwendung von |
|
Vollständig qualifizierter Name der semantischen Ansicht. Beispiel: {
/* ... */
"semantic_view": "MY_DB.MY_SCHEMA.SEMANTIC_VIEW"
/* ... */
}
Wenn der Name zwischen Groß- und Kleinschreibung unterscheidet oder Zeichen enthält, die in einem nicht in Anführungszeichen gesetzten Bezeichner nicht erlaubt sind, müssen Sie den Namen in doppelte Anführungszeichen einschließen, denen ein umgekehrter Schrägstrich vorangesetzt ist. Zum Beispiel, wenn der Datenbankname, der Schemaname und der Ansichtsname Bindestriche ( {
/* ... */
"semantic_view": "\"my-database\".\"my-schema\".\"\"my-semantic-view\"\""
/* ... */
}
Um mehrere semantische Ansichten anzugeben, verwenden Sie das Feld Typ: Zeichenfolge |
|
(Optional) Bei der Einstellung Typ: Boolean |
Wichtig
Sie müssen eines der folgenden Felder im Body der Anfrage angeben:
semantic_model_file
semantic_model
semantic_models
semantic_view
Beispiel für die Angabe eines semantischen Modells in einer Datei in einem Stagingbereich¶
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "which company had the most revenue?"
}
]
}
],
"semantic_model_file": "@my_db.my_schema.my_stage/my_semantic_model.yaml"
}
Beispiel für die Angabe einer semantischen Ansicht¶
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "which company had the most revenue?"
}
]
}
],
"semantic_view": "MY_DB.MY_SCH.MY_SEMANTIC_VIEW"
}
Antwort ohne Streaming¶
Diese Operation kann die unten aufgeführten Antwortcodes zurückgeben. Die Antwort hat immer die folgende Struktur. Derzeit werden drei Inhaltstypen für die Antwort unterstützt: text
, suggestion
und sql
. Die Inhaltstypen suggestion
und sql
schließen sich gegenseitig aus, d. h. wenn die Antwort einen Inhaltstyp sql
enthält, enthält sie keinen Inhaltstyp suggestion
und umgekehrt. Der Inhaltstyp suggestion
ist nur dann in einer Antwort enthalten, wenn die Frage des Benutzers mehrdeutig war und Cortex Analyst keine SQL-Anweisung für diese Abfrage liefern konnte.
Wenn die Anfrage ein semantic_models
-Feld enthält, enthält die Antwort ein semantic_model_selection
-Feld, das angibt, welches semantische Modell für die Anfrage gewählt wurde.
Um die Vorwärtskompatibilität zu gewährleisten, stellen Sie sicher, dass Ihre Implementierung den Inhaltstyp berücksichtigt und Typen verarbeitet.
Code |
Beschreibung |
---|---|
200 |
Die Anweisung wurde erfolgreich ausgeführt. Meldung Der Body der Antwort enthält ein Meldungsobjekt, das die folgenden Felder enthält:
|
In der Standardeinstellung wird die Antwort auf einmal zurückgegeben, nachdem Cortex Analyst die Frage des Benutzers vollständig bearbeitet hat. Siehe Streaming-Antwort für das Format der Antworten im Streaming-Modus.
{ "request_id": "75d343ee-699c-483f-83a1-e314609fb563", "message": { "role": "analyst", "content": [ { "type": "text", "text": "We interpreted your question as ..." }, { "type": "sql", "statement": "SELECT * FROM table", "confidence": { "verified_query_used": { "name": "My verified query", "question": "What was the total revenue?", "sql": "SELECT * FROM table2", "verified_at": 1714497970, "verified_by": "Jane Doe" } } } ] }, "warnings": [ { "message": "Table table1 has (30) columns, which exceeds the recommended maximum of 10" }, { "message": "Table table2 has (40) columns, which exceeds the recommended maximum of 10" } ], "response_metadata": { "model_names": [ "claude-3-5-sonnet" ], "cortex_search_retrieval": [ { "service": "my_db.my_schema.my_search_service", "response_body": { "results": [ { "CUST_NAME": "customer1" } ], "request_id": "request1" }, "query": "'customer1'" } ], "question_category": "CLEAR_SQL" } }
Streaming-Antwort¶
Im Streaming-Modus kann Ihr Client die Antworten empfangen, sobald sie von Cortex Analyst generiert werden, anstatt darauf zu warten, dass die gesamte Antwort generiert wird. Dies verbessert die wahrgenommene Reaktionsfähigkeit Ihrer Anwendung, insbesondere bei lang laufenden Abfragen, da die Benutzer die Ausgabe viel früher sehen. Streaming-Antworten liefern auch Statusinformationen, die Ihnen helfen können, zu verstehen, an welcher Stelle Cortex Analyst bei der Erzeugung einer Antwort steht, sowie Warnungen, die Ihnen helfen können zu verstehen, was schief gelaufen ist, wenn Cortex Analyst nicht wie erwartet funktioniert.
Um eine Streaming-Antwort zu erhalten, setzen Sie das Feld stream
im Anfrage-Body auf true
. Streaming-Antworten verwenden vom Server gesendete Ereignisse.
Cortex Analyst sendet fünf verschiedene Arten von Ereignissen in einer Streaming-Antwort:
status
: Informiert Sie über den aktuellen Status des SQL-Generierungsprozesses.message.content.delta
: Enthält einen Teil der Antwort. Dieses Ereignis wird mehrmals gesendet.error
: Zeigt an, dass Cortex Analyst auf einen Fehler gestoßen ist und die Bearbeitung der Anfrage nicht fortsetzen kann. Es werden keine weiterenmessage.content.delta
-Ereignisse gesendet.warnings
: Enthält alle während der Verarbeitung aufgetretenen Warnungen. Warnungen stoppen die Verarbeitung nicht.response_metadata
: Wird am Ende einer Antwort gesendet, um Daten zur Verarbeitung der Anfrage anzuzeigen.done
: Wird gesendet, um anzuzeigen, dass die Verarbeitung abgeschlossen ist und keine weiterenmessage.content.delta
-Ereignisse gesendet werden.
Von diesen sind die message.content.delta
-Ereignisse am wichtigsten zu verstehen, da sie den eigentlichen Inhalt der Antwort enthalten. Jedes delta
enthält Token aus einem Feld der vollständigen Antwort. Es ist möglich, dass jedes delta
-Ereignis alles zwischen einem einzelnen Zeichen und der gesamten Antwort enthält und dass sie unterschiedlich lang sein können. Sie erhalten diese Token, sobald sie generiert werden. Es liegt an Ihnen, sie zu der endgültigen Antwort zusammenzusetzen.
Wichtig
Die Ereignisse verschiedener Antworten (selbst sehr ähnlicher) können variieren. Es gibt keine Garantie, dass die Ereignisse in der gleichen Reihenfolge oder mit dem gleichen Inhalt gesendet werden.
Einfaches Beispiel¶
Im Folgenden finden Sie ein Beispiel-Antwort ohne Streaming auf eine einfache Abfrage:
{
"message": {
"role": "analyst",
"content": [
{
"type": "text",
"text": "This is how we interpreted your question and this is how the sql is generated"
},
{
"type": "sql",
"statement": "SELECT * FROM table"
}
]
}
}
Und dies ist eine mögliche Reihe von Streaming-Ereignissen für diese Antwort (eine andere Reihe von Ereignissen ist ebenfalls möglich):
event: status
data: { status: "interpreting_question" }
event: message.content.delta
data: {
index: 0,
type: "text",
text_delta: "This is how we interpreted your question"
}
event: status
data: { status: "generating_sql" }
event: status
data: { status: "validating_sql" }
event: message.content.delta
data: {
index: 0,
type: "text",
text_delta: " and this is how the sql is generated"
}
event: message.content.delta
data: {
index: 1,
type: "sql",
statement_delta: "SELECT * FROM table"
}
event: status
data: { status: "done" }
Verwenden Sie das Feld index
in den message.content.delta
-Antworten, um festzustellen, zu welchem Feld in der vollständigen Antwort das Ereignis gehört. In diesem Beispiel verwenden die ersten beiden Ereignisse von delta
den Index 0, d. h. sie sind Teil des ersten Feldes (Element 0) im content
-Array der Antwort ohne Streaming. In ähnlicher Weise verwendet das delta
-Ereignis, das die SQL-Antwort enthält, den Index 1.
Beispiel mit Vorschlägen¶
Dieses Beispiel enthält Fragenvorschläge für eine mehrdeutige Frage. Im Folgenden finden Sie die Antwort ohne Streaming:
{
"message": {
"role": "analyst",
"content": [
{
"type": "text",
"text": "Your question is ambigous, here are some alternatives:"
},
{
"type": "suggestions",
"suggestions": [
"which company had the most revenue?",
"which company placed the most orders?"
]
}
]
}
}
Und hier ist eine mögliche Reihe von Streaming-Ereignissen, die diese Antwort darstellen:
event: status
data: { status: "interpreting_question" }
event: message.content.delta
data: {
index: 0,
type: "text",
text_delta: "Your question is ambigous,"
}
event: status
data: { status: "generating_suggestions" }
event: message.content.delta
data: {
index: 0,
type: "text",
text_delta: " here are some alternatives:"
}
event: message.content.delta
data: {
index: 1,
type: "suggestions",
suggestions_delta: {
index: 0,
suggestion_delta: "which company had",
}
}
event: message.content.delta
data: {
index: 1,
type: "suggestions",
suggestions_delta: {
index: 0,
suggestion_delta: " the most revenue?",
}
}
event: message.content.delta
data: {
index: 1,
type: "suggestions",
suggestions_delta: {
index: 1,
suggestion_delta: "which company placed",
}
}
event: message.content.delta
data: {
index: 1,
type: "suggestions",
suggestions_delta: {
index: 1,
suggestion_delta: " the most orders?",
}
}
event: status
data: { status: "done" }
In diesem Beispiel ist das Feld content
der Antwort ohne Streaming ein Array. Eines der Elemente von content
ist das Array suggestions
. Die Bedeutung der index
-Felder für die Delta-Ereignisse text
und suggestions
bezieht sich also auf den Speicherort der Elemente in diesen beiden verschiedenen Arrays. Sie müssen diese Indizes separat verfolgen, wenn Sie die vollständige Antwort zusammenstellen.
Bemerkung
Derzeit wird die erzeugte SQL-Anweisung immer in einem einzigen Ereignis gesendet. Das wird in Zukunft vielleicht nicht mehr der Fall sein. Ihr Client muss darauf vorbereitet sein, die SQL-Anweisung in mehreren Ereignissen zu erhalten.
Andere Beispiele¶
Sie finden einen Streamlit-Streaming-Client für Cortex Analyst im Cortex Analyst GitHub Repo. Diese Demo muss lokal ausgeführt werden; SiS unterstützt derzeit kein Streaming.
Eine interaktive Demonstration von Streaming-Antworten finden Sie auf dem Cortex Analyst Spielplatz im AI/ML Studio (in Snowsight).
Schemata für Streaming-Ereignisse¶
Im Folgenden finden Sie die OpenAPI/Swagger-Schemata der Ereignisse, die von Cortex Analyst in einer Streaming-Antwort gesendet werden.
- Status
- message.content.delta
- Fehler
StreamingError: type: object properties: message: type: string description: A description of the error code: type: string description: The Snowflake error code categorizing the error request_id: type: string description: Unique request ID
- Warnungen
Warnings: type: object description: Warnings found while processing the request properties: warnings: type: array items: $ref: "#/components/schemas/Warning" Warning: type: object title: The warning object description: Represents a warning within a chat. properties: message: type: string description: A human-readable message describing the warning
- response_metadata
ResponseMetadata: type: object description: Details about request processing
Feedback senden¶
POST /api/v2/cortex/analyst/feedback
Liefert qualitatives Feedback von Benutzern. Innerhalb von Snowsight wird das Feedback in Semantic Model Admins unter Monitoring angezeigt.
Header der Anforderung¶
Header |
Beschreibung |
---|---|
|
(Erforderliche) Autorisierungstoken. Weitere Informationen dazu finden Sie unter Authentifizierung am Server. |
|
(Erforderlich) Anwendung/json |
Text der Anforderung¶
Feld |
Beschreibung |
---|---|
|
(Erforderlich) Die ID der Anfrage, die Sie zum Senden einer Meldung gestellt haben. Wird im Feld Typ: Zeichenfolge Beispiel: |
|
(Erforderlich) Ob das Feedback positiv oder negativ ist. Typ: Boolean Beispiel:
|
|
(Optional) Die Feedback-Meldung des Benutzers. Beispiel: |
Antwort¶
Leerer Antworttext mit Statuscode 200.
Anforderungen an die Zugriffssteuerung¶
Informationen zu den erforderlichen Berechtigungen finden Sie unter Anforderungen an die Zugriffssteuerung.
Einzelheiten zum Authentifizieren auf API finden Sie unter Authentifizierung von Snowflake REST APIs mit Snowflake.