Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mithilfe von Agentmodus-APIs können Sie den Agentmodus programmgesteuert anstelle der Azure Databricks UI ausführen. Verwenden Sie sie, um den Agent-Modus in Ihre eigenen Anwendungen zu integrieren, z. B. Chatbots, geplante Berichte und interne Tools.
Important
Die APIs für den Genie Agents-Agent-Modus befinden sich in der Betaversion.
Note
Der Agent-Modus wurde früher als Recherche-Agent bezeichnet. Genie Agents waren früher als Genie Spaces bekannt.
Funktionsweise von AGENT-Modus-APIs
Mit den AGENT-Modus-APIs senden Sie eine Frage in natürlicher Sprache an einen Genie-Agent. Er erstellt und optimiert einen Forschungsplan, führt SQL-Abfragen aus, durchläuft auf jedem Ergebnis und gibt einen Bericht mit Zitaten und unterstützenden Tabellen zurück. Results stream to your client as Server-Sent Events (SSE).
Die APIs decken die Endpunkte, Anforderungs- und Antwortformate sowie Streamingereignistypen ab, die für die direkte Kommunikation mit dem Agent-Modus erforderlich sind. Die Konzeptübersicht und die Benutzeroberfläche finden Sie im Agent-Modus in Genie Agents.
Anforderungen
Um die Agentmodus-APIs zu verwenden, muss Ihr Arbeitsbereich die folgenden Anforderungen erfüllen:
- Unity-Katalog ist aktiviert. Siehe Was ist Unity Catalog?.
- Partnergestützte KI-Features sind aktiviert. Siehe partnergestützte KI-Features.
- Sie verfügen über einen Genie Agent mit klaren Anweisungen und Tabellenmetadaten. Der Agentmodus basiert auf diesem Kontext, um über Ihre Daten zu gründen. Siehe Kuratiert einen effektiven Genie Agent.
Um die APIs für Ihren Arbeitsbereich zu aktivieren, wenden Sie sich an Ihr Azure Databricks Kontoteam mit den Arbeitsbereichs-IDs, in denen Sie das Feature verwenden möchten. Nachdem die Anforderung genehmigt wurde, aktiviert ein Arbeitsbereichsadministrator die Api für den Genie Agents-Agent-Modus über das Menü "Vorschau" .
Get started
Die folgenden Beispiele zeigen, wie Sie eine Eingabeaufforderung senden und die gestreamte Antwort lesen.
Senden Der ersten Eingabeaufforderung mit curl
Die folgende Anforderung sendet eine Natürliche-Sprache-Frage an einen Genie Agent und streamt die Antwort als SSE:
curl -N --no-buffer \
-X POST "https://${DATABRICKS_HOST}/api/2.0/genie/agents/${AGENT_ID}/responses" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": [
{
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "What were our top 10 customers by revenue last quarter?"}]
}
]
}'
Ereignisse kommen als event: und data: Paare an:
event: response.created
data: {"type":"response.created","sequence_number":0,"response":{"object":"response","id":"01f14fe4e34b...","model":"genie-agent","status":"in_progress","output":[],"conversation_id":"01f14fe4e338..."}}
event: response.output_item.added
data: {"type":"response.output_item.added","output_index":0,"sequence_number":1,"item":{"type":"reasoning","id":"01f14fe4f248...","status":"in_progress","content":[{"type":"reasoning_text","text":"I need to find revenue data..."}],"summary":[]}}
event: response.completed
data: {"type":"response.completed","sequence_number":42,"response":{"object":"response","id":"01f14fe4e34b...","model":"genie-agent","status":"completed","output":[...],"conversation_id":"01f14fe4e338...","created_at":1748383200}}
Lesen des Datenstroms mit dem Databricks OpenAI-Client (Python)
Installieren Sie den Client:
pip install databricks-openai
Erstellen Sie eine Antwort, und behandeln Sie jedes Ereignis, sobald es eintrifft:
from databricks.sdk import WorkspaceClient
from databricks_openai import DatabricksOpenAI
AGENT_ID = "<your-agent-id>" # Same as your Genie Agent ID
w = WorkspaceClient()
host = f"https://{w.config.host}" if not w.config.host.startswith("http") else w.config.host
client = DatabricksOpenAI(workspace_client=w)
client.base_url = f"{host}/api/2.0/genie/agents/{AGENT_ID}"
stream = client.responses.create(
model="genie-agent",
input=[
{
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "What were our top 10 customers by revenue last quarter?"}],
}
],
stream=True,
)
conversation_id = None
for event in stream:
if event.type == "response.created":
conversation_id = event.response.conversation_id
elif event.type == "response.output_item.done":
print(f"Output item: {event.item.type}")
elif event.type == "response.completed":
print(f"Done: {event.response.status}")
elif event.type == "response.failed":
print(f"Failed: {event.response.error}")
Senden einer Nachverfolgungsaufforderung
Um eine Unterhaltung fortzusetzen, übergeben Sie die conversation_id Von der ersten Antwort:
stream = client.responses.create(
model="genie-agent",
input=[
{
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "Break that down by region"}],
}
],
stream=True,
extra_body={"conversation_id": conversation_id},
)
Der Agent behält den Kontext aus vorherigen Blättern bei und kann auf frühere Abfragen und Ergebnisse verweisen.
API-Referenz
Die Agentmodus-APIs decken die verfügbaren Endpunkte, die Anforderungs- und Antwortformate, den SSE-Ereignislebenszyklus, die Datenmodelle und die Fehlercodes ab.
Stamm-URL
Alle Endpunkte sind relativ zur folgenden Basis-URL:
https://<workspace-url>/api/2.0/genie/agents
Note
Bei agent_id jedem Pfad handelt es sich um die Genie-Agent-ID, die gleiche 32-stellige hexadezimale ID, die in der Genie Agent-URL angezeigt wird.
Endpoints
Die APIs stellen die folgenden Endpunkte bereit:
| Methode | Pfad | Description |
|---|---|---|
POST |
/{agent_id}/responses |
Erstellen Sie eine Antwort als SSE-Stream. |
GET |
/{agent_id}/conversations/{conversation_id}/items |
Listet alle Elemente in einer Unterhaltung auf. |
Erstellen einer Antwort
Erstellt eine neue Agentmodusantwort. Gibt einen SSE-Datenstrom zurück, der Ausgabeelemente in Echtzeit liefert, während der Agent-Modus ausgeführt wird.
POST /{agent_id}/responses
Pfadparameter
Der Endpunkt akzeptiert den folgenden Pfadparameter:
| Parameter | Type | Erforderlich | Description |
|---|---|---|---|
agent_id |
string |
Yes | Die ID des Genie Agent. Eine 32-stellige hexadezimale Zeichenfolge. |
Anforderungstext
Der Anforderungstext akzeptiert die folgenden Felder:
| Feld | Type | Erforderlich | Default | Description |
|---|---|---|---|---|
input |
array<InputItem> |
Yes | Nichts | Die Eingabeelemente. Das Array muss genau ein message Element enthalten, bei role: "user" dem die Frage enthalten ist. Multi-Turn-Kontext ist serverseitig verwaltet. Verwenden Sie conversation_id daher zur Nachverfolgung, anstatt vorherige Nachrichten zu inputübergeben. |
conversation_id |
string |
No | null |
Die ID einer vorhandenen Unterhaltung, die fortgesetzt werden soll. Wenn sie weggelassen wird, wird eine neue Unterhaltung erstellt. |
SSE-Ereignislebenszyklus
Der Datenstrom wird mit einem response.created Ereignis geöffnet, Ausgabeelemente streamt und dann mit einem Terminalereignis geschlossen:
response.created (once, stream opened)
-> response.output_item.added (0..N, new item appears)
-> response.output_item.updated (0..N, item content changed)
-> response.output_item.done (0..N, item finalized)
-> response.completed (once, terminal success)
OR response.failed (once, terminal failure)
Jedes Ereignis erhöht monotonisch sequence_number , dass Sie für die Sortierung verwenden können.
SSE-Ereignistypen
Der Datenstrom gibt die folgenden Ereignistypen aus.
response.created
Wird einmal am Anfang ausgegeben. Enthält ein Response Objekt mit status: "in_progress" und ein leeres output Array.
event: response.created
data: {
"type": "response.created",
"sequence_number": 0,
"response": {
"object": "response",
"id": "01f15a22a7a816299374da7bc4264025",
"model": "genie-agent",
"status": "in_progress",
"output": [],
"conversation_id": "01f15a22a79a1699ab5e7f59563c5655",
"created_at": 1748383200
}
}
response.output_item.added
Wird ausgegeben, wenn zuerst ein neues Ausgabeelement angezeigt wird. Das Element ist in_progressmöglicherweise noch vorhanden.
event: response.output_item.added
data: {
"type": "response.output_item.added",
"output_index": 0,
"sequence_number": 1,
"item": {
"type": "reasoning",
"id": "01f14fe4f24818d79f3e5963c31ec151",
"status": "in_progress",
"content": [
{"type": "reasoning_text", "text": "I need to find the revenue data..."}
],
"summary": []
}
}
response.output_item.updated
Wird ausgegeben, wenn sich der Inhalt eines vorhandenen Elements ändert, z. B. wenn Abfrageergebnisse für ein Element function_call_outputeingehen. Verwendet das gleiche Nutzlast-Shape wie response.output_item.added.
response.output_item.done
Wird ausgegeben, wenn ein Ausgabeelement seinen endgültigen Zustand erreicht. Verwendet das gleiche Nutzlast-Shape wie response.output_item.added. Wenn ein Element bereits abgeschlossen ist, werden sowohl die Ereignisse als auch die addeddone Ereignisse in Folge ausgegeben.
response.completed
Terminal-Erfolgsereignis. Umschließt das Finale Response mit allen Ausgabeelementen.
event: response.completed
data: {
"type": "response.completed",
"sequence_number": 42,
"response": {
"object": "response",
"id": "01f14fe4e34b1b2293908bcece575499",
"model": "genie-agent",
"status": "completed",
"output": [ ... ],
"conversation_id": "01f14fe4e33816c6aa264b4661f998ea",
"created_at": 1748383200
}
}
response.failed
Terminalfehlerereignis. Das Response Hat status: "failed" und ein error Objekt. Ein Systemfehlermeldungselement wird unmittelbar response.output_item.added vor diesem Ereignis ausgegeben. Die vollständige Liste der Codes finden Sie unter Streamingfehlercodes.
event: response.failed
data: {
"type": "response.failed",
"sequence_number": 5,
"response": {
"object": "response",
"id": "01f14fe4e34b1b2293908bcece575499",
"model": "genie-agent",
"status": "failed",
"output": [ ... ],
"error": {
"type": "server_error",
"code": "sql_execution_error",
"message": "Table 'sales' does not exist"
},
"conversation_id": "01f14fe4e33816c6aa264b4661f998ea",
"created_at": 1748383200
}
}
Konkurrenz
Pro Unterhaltung kann jeweils nur eine Antwort generiert werden. Eine zweite Anforderung an eine Unterhaltung, die bereits über eine laufende Antwort verfügt, gibt einen HTTP 409 zurück:
HTTP 409
{"error": {"type": "RESOURCE_CONFLICT", "message": "A response is already being generated for conversation <id>"}}
Timeouts
Der SSE-Stream hat einen serverseitigen Timeout von 90 Minuten. Da der Agentmodus mehrstufige Gründe und SQL-Ausführung ausführt, lassen Sie Die HTTP-Verbindung für die gesamte Dauer geöffnet.
Auflisten von Unterhaltungselementen
Ruft die Ausgabeelemente in einer Unterhaltung als flache Liste ab. Elemente aus allen Wendungen werden in chronologischer Reihenfolge kombiniert, einschließlich Benutzernachrichten, Gründe, Abfragen, Ergebnisse und Berichte. Dieser Endpunkt unterstützt die cursorbasierte Paginierung durch die after Parameter und limit Abfrageparameter.
GET /{agent_id}/conversations/{conversation_id}/items
Verwenden Sie diesen Endpunkt, um:
- Zeigen Sie den vollständigen Unterhaltungsverlauf in Ihrer Anwendung an.
- Wiederherstellen von Ergebnissen, nachdem ein SSE-Datenstrom getrennt wurde. Rufen Sie diesen Endpunkt nach Abschluss der Antwort auf.
- Rufen Sie große Unterhaltungen inkrementell ab, anstatt alle Elemente gleichzeitig zu laden.
Pfadparameter
Der Endpunkt akzeptiert die folgenden Pfadparameter:
| Parameter | Type | Erforderlich | Description |
|---|---|---|---|
agent_id |
string |
Yes | Die ID des Genie Agent. Eine 32-stellige hexadezimale Zeichenfolge. |
conversation_id |
string |
Yes | Die ID der Unterhaltung. |
Abfrageparameter
Der Endpunkt akzeptiert die folgenden Abfrageparameter:
| Parameter | Type | Erforderlich | Default | Description |
|---|---|---|---|---|
limit |
integer |
No | 100 | Die maximale Anzahl der zurückzugebenden Elemente. Bereich: 1 bis 100. |
after |
string |
No | Nichts | Der Paginierungscursor. Übergeben Sie last_id eine vorherige Antwort, um die nächste Seite abzurufen. |
order |
string |
No | asc |
Die Sortierreihenfolge. Wird für chronologisch (älteste erste) oder desc für umgekehrte chronologische (neueste erste) verwendetasc. |
Beispielanforderungen
Abrufen aller Elemente in einer Unterhaltung:
GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items
Beschränken Sie die Seitengröße:
GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?limit=5
Geben Sie zuerst die neuesten Elemente zurück:
GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?order=desc&limit=5
Rufen Sie die nächste Seite ab:
GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?limit=5&after=01f14fe4f24e10beacaa1720d4b79b59_output
Antwort
Die Antwort hat Content-Type: application/json und ist ein paginierter Listenumschlag mit "object": "list":
{
"data": [
{
"type": "message",
"role": "user",
"content": [{ "type": "input_text", "text": "What were our top 10 customers by revenue last quarter?" }],
"id": "01f14fe4e34b1b2293908bcece575499_input",
"status": "completed"
},
{
"type": "reasoning",
"id": "01f14fe4f24818d79f3e5963c31ec151",
"status": "completed",
"content": [{ "type": "reasoning_text", "text": "I'll query the revenue table grouped by customer..." }],
"summary": []
},
{
"type": "function_call",
"id": "01f14fe4f24e10beacaa1720d4b79b59",
"call_id": "01f14fe4f24e10beacaa1720d4b79b59",
"status": "completed",
"name": "execute_sql",
"arguments": "{\"title\": \"Top 10 Customers\", \"sql\": \"SELECT customer, SUM(revenue) AS total FROM sales GROUP BY customer ORDER BY total DESC LIMIT 10\"}"
},
{
"type": "function_call_output",
"id": "01f14fe4f24e10beacaa1720d4b79b59_output",
"call_id": "01f14fe4f24e10beacaa1720d4b79b59",
"status": "completed",
"output": "Top 10 Customers\n\n| customer | total |\n| --- | --- |\n| Acme Corp | 1500000 |\n| Globex | 1200000 |"
},
{
"type": "message",
"id": "01f14fe5383f184a97ca1178af0d9356",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Here are your top 10 customers by revenue last quarter [1](https://host/genie/rooms/01f14fe4e338.../chats/01f14fe4e338...?o=12345&gra_focus=01f14fe4f24e...)."
},
{
"type": "output_text",
"text": "| customer | total |\n| --- | --- |\n| Acme Corp | 1500000 |\n| Globex | 1200000 |",
"metadata": {
"columns": [
{ "name": "customer", "type": "STRING" },
{ "name": "total", "type": "DOUBLE" }
],
"preview_rows": [
["Acme Corp", "1500000"],
["Globex", "1200000"]
],
"total_row_count": 10,
"status": "available",
"sql": "SELECT customer, SUM(revenue) AS total FROM sales GROUP BY customer ORDER BY total DESC LIMIT 10"
}
},
{
"type": "output_text",
"text": "Acme Corp leads with $1.5M [1](https://host/genie/rooms/01f14fe4e338.../chats/01f14fe4e338...?o=12345&gra_focus=01f14fe4f24e...), followed by Globex at $1.2M [1](https://host/genie/rooms/01f14fe4e338.../chats/01f14fe4e338...?o=12345&gra_focus=01f14fe4f24e...)..."
}
]
}
],
"first_id": "01f14fe4e34b1b2293908bcece575499_input",
"last_id": "01f14fe5383f184a97ca1178af0d9356",
"has_more": false,
"status": "completed",
"object": "list"
}
Das Feld auf oberster Ebene status spiegelt den Status der neuesten Antwort in der Unterhaltung wider.
"in_progress" Während eine Antwort gestreamt wird, oder "completed""failed" nachdem sie beendet wurde. Dieses Feld wird abgefragt, um zu erkennen, wann eine Antwort abgeschlossen ist.
Paginierung
Die Antwort enthält drei Paginierungsfelder:
| Feld | Type | Description |
|---|---|---|
first_id |
string |
Die ID des ersten Elements auf der aktuellen Seite. Fehlt, wenn data leer ist. |
last_id |
string |
Die ID des letzten Elements auf der aktuellen Seite. Übergeben Sie sie, um after die nächste Seite abzurufen. Fehlt, wenn data leer ist. |
has_more |
boolean |
true wenn weitere Elemente auf dieser Seite folgen. |
Um alle Elemente zu paginieren, fordern Sie Seiten an, bis has_more :false
items = []
after = None
while True:
params = {"limit": 10}
if after:
params["after"] = after
page = client.get(f"/conversations/{conv_id}/items", params=params)
items.extend(page["data"])
if not page["has_more"]:
break
after = page["last_id"]
Das data Array enthält Ausgabeelemente in chronologischer Reihenfolge. Benutzereingabemeldungen werden als message Elemente mit einem _input Suffix auf der ID angezeigt.
Verstehen der Antwort
In diesem Abschnitt wird erläutert, wie die Ausgabeelemente zusammenpassen, um eine vollständige Agentmodusantwort zu bilden.
Ausgabeelementfluss
Eine typische Agentmodusantwort erzeugt Ausgabeelemente in der folgenden Reihenfolge:
reasoning The agent's plan and analysis
|
function_call A SQL query the agent runs
|
function_call_output The query results, paired with the function_call above
|
... (reasoning, function_call, and function_call_output repeat for each query) ...
|
message The final report, with structured text and inline tables
Der Agent kann mehrere Abfragen sequenziert ausführen und seine Analyse basierend auf jedem Ergebnis verfeinern. Eine einzelne Antwort kann viele Gründe, Abfragen und Ergebniszyklen vor dem Abschlussbericht enthalten.
Wie function_call und function_call_output Paar
Jede SQL-Abfrage erzeugt ein Paar von Ausgabeelementen, die mit call_id:
-
function_callist die Abfrage, die der Agent ausführt. DasargumentsFeld ist eine JSON-codierte Zeichenfolge, die den Toolaufruf beschreibt. -
function_call_outputist das Ergebnis. Nach Abschluss des Elements enthält dasoutputFeld den Abfragetitel gefolgt von einer Markdowntabelle der Daten.
Dies call_id ist für beide Elemente identisch. Dies function_call_output.id ist immer {call_id}_output.
Analysieren des Berichts
Das endgültige Ausgabeelement ist ein message mit role: "assistant". Das content Array enthält mehrere output_text Blöcke von zwei Arten:
- Textabschnitte enthalten eine narrative Analyse mit Inline-Zitatlinks.
- Tabellenblöcke enthalten Inlineabfrageergebnisse, die als Markdowntabellen gerendert werden. Jeder Tabellenabschnitt enthält
metadatadie strukturierten Abfrageergebnisdaten, sodass Der Client umfangreiche Tabellen oder Diagramme programmgesteuert rendern kann.
Der folgende Tabellenabschnitt enthält sowohl den gerenderten Markdown als auch den strukturierten metadata:
{
"type": "output_text",
"text": "| customer | total |\n| --- | --- |\n| Acme Corp | 1500000 |\n| Globex | 1200000 |",
"metadata": {
"columns": [
{ "name": "customer", "type": "STRING" },
{ "name": "total", "type": "DOUBLE" }
],
"preview_rows": [
["Acme Corp", "1500000"],
["Globex", "1200000"]
],
"total_row_count": 10,
"status": "available",
"sql": "SELECT customer, SUM(revenue) AS total FROM sales GROUP BY customer ORDER BY total DESC LIMIT 10"
}
}
Ein Tabellenabschnittsobjekt metadata enthält die folgenden Felder:
| Feld | Type | Description |
|---|---|---|
columns |
array<ColumnInfo> |
Die Spaltendefinitionen. |
preview_rows |
array<array<string>> |
Die abgeschnittenen Ergebniszeilen. |
total_row_count |
integer |
Die Gesamtzahl der Zeilen, wenn bekannt. |
status |
string |
Entweder "available" oder "fetch_failed". |
sql |
string |
Die SQL-Abfrage, die die Ergebnisse erzeugt hat. |
Zitate
Textblöcke im Bericht enthalten Inlinezitate, die jeden Anspruch mit der SQL-Abfrage verknüpfen, die ihn unterstützt. Jedes Zitat ist ein Markdownlink des Formulars [N](url), wobei N es sich um eine sequenzielle Fußnotennummer handelt und url auf die Ui des Genie-Agents verweist, wobei die relevante Abfrage fokussiert ist.
Die Zitat-URL weist das folgende Format auf:
https://<workspace-url>/genie/rooms/<space_id>/chats/<conversation_id>?o=<workspace_id>&gra_focus=<attachment_id>
Die URL enthält die folgenden Komponenten:
| Bestandteil | Description |
|---|---|
space_id |
Die Genie Agent ID, derselbe Wert wie agent_id. |
conversation_id |
Die Unterhaltung, die die zitierte Abfrage enthält. |
workspace_id |
Die id des numerischen Arbeitsbereichs. |
attachment_id |
Die Id der Abfrageanlage, die das spezifische SQL-Abfrageergebnis identifiziert. |
Um Zitate zu rendern, befolgen Sie diese Anleitung basierend auf Ihrem Client:
- Markdown-Renderer zeigen Zitate automatisch als klickbare Fußnotenlinks an.
- Bei Nur-Text können Sie das Zitat reduzieren
[N](url)[N]oder entfernen. - Analysieren Sie für eine benutzerdefinierte Benutzeroberfläche den
gra_focusAbfrageparameter aus der URL, um die zitierte Abfrage zu identifizieren, und stimmen Sie dann mit denfunction_call_outputElementen in der Unterhaltung überein.
Zitate werden dedupliziert. Wenn dieselbe Abfrage mehrmals zitiert wird, verwendet jeder Verweis dieselbe Indexnummer und URL.
Datenmodelle
In diesem Abschnitt werden die Objekte beschrieben, die von den APIs zurückgegeben werden.
Antwort
Das Response Objekt wird in den response.createdEreignissen , response.completedund response.failed SSE zurückgegeben.
| Feld | Type | Description |
|---|---|---|
object |
string |
Immer "response". |
id |
string |
Die eindeutige Antwort-ID. |
model |
string |
Immer "genie-agent". |
status |
string |
Entweder "in_progress", "completed" oder "failed". |
output |
array<OutputItem> |
Die ausgabeelemente, die von der Antwort erstellt wurden. |
conversation_id |
string |
Die Unterhaltung, zu der die Antwort gehört. |
created_at |
integer |
Die Unix-Epoche in Sekunden, als die Antwort erstellt wurde. |
error |
ErrorInfo |
Vorhanden, wenn status das ist "failed". |
ErrorInfo
Das ErrorInfo Objekt beschreibt einen Fehler:
| Feld | Type | Description |
|---|---|---|
type |
string |
Eines von: server_error, , , invalid_request, not_found, oder model_errortoo_many_requests. |
message |
string |
Eine für Menschen lesbare Beschreibung. Bei internen Fehlern ist dies immer "An internal error occurred"der Fall. |
code |
string |
Optionaler Fehlercode mit weiteren Details, z "sql_execution_error" . B. oder "warehouse_access_denied". Siehe Streamingfehlercodes. |
Ausgabeelemente
Ausgabeelemente sind für das type Feld polymorph. Die folgenden Typen sind verfügbar.
reasoning
Die interne Begründung des Agents als Agentmodus wird ausgeführt.
| Feld | Type | Description |
|---|---|---|
type |
string |
"reasoning". |
id |
string |
Die eindeutige Element-ID. |
status |
string |
Entweder "in_progress" oder "completed". |
content |
array<ContentItem> |
Enthält reasoning_text Elemente. |
summary |
array<string> |
Immer []. Reserviert für zukünftige Verwendung. |
function_call
Ein Toolaufruf, bei dem es sich um eine SQL-Abfrageausführung handelt.
| Feld | Type | Description |
|---|---|---|
type |
string |
"function_call". |
id |
string |
Die eindeutige Element-ID. |
call_id |
string |
Die Korrelations-ID, die mit der gekoppelten Verknüpft ist function_call_output. |
status |
string |
"completed". |
name |
string |
"execute_sql". |
arguments |
string |
Eine JSON-Zeichenfolge, z. B {"title": "Human-readable query title", "sql": "SELECT ..."}. . Der Schlüsselsatz kann sich ändern, sodass Ihr Client nicht von einem festen Schema abhängig sein sollte. |
function_call_output
Das Ergebnis eines Toolaufrufs, gepaart mit einem durch function_callcall_id.
| Feld | Type | Description |
|---|---|---|
type |
string |
"function_call_output". |
id |
string |
Immer {call_id}_output. |
call_id |
string |
Entspricht dem entsprechenden function_call. |
status |
string |
Entweder "in_progress" oder "completed". |
output |
string |
Das Abfrageergebnis. Siehe die folgende Lifecycle-Tabelle. |
Das output Feld wird weiterentwickelt, wenn das Element voranschreitet:
| Status |
output Inhalt |
|---|---|
in_progress |
Der Abfragetitel ist nur. |
completed |
Der Abfragetitel, eine leere Zeile und dann die Markdown-Ergebnistabelle. |
Note
Strukturierte Abfrageergebnisdaten, z. B. Spalten, Zeilen und SQL, sind in den Tabellenblöcken des Berichts verfügbar, nicht für das function_call_output Element. Siehe Analysieren des Berichts.
message
Eine Textnachricht. Eine Meldung wird in einer von drei Rollen angezeigt:
| Rolle | Wann | Description |
|---|---|---|
"user" |
Eingabe | Die Frage des Benutzers. Wird in GET Antworten mit einem _input Suffix für die ID angezeigt. |
"assistant" |
Bericht | Der endgültige strukturierte Bericht mit Text und Inlinetabellenblöcken. |
"system" |
Fehler oder Abbrechen | Wird ausgegeben, wenn eine Antwort fehlschlägt oder abgebrochen wird. |
Das message Objekt enthält die folgenden Felder:
| Feld | Type | Description |
|---|---|---|
type |
string |
"message". |
role |
string |
Entweder "user", "assistant" oder "system". |
content |
array<ContentItem> |
Der Nachrichteninhalt. Siehe Analysieren des Berichts für Assistentennachrichten. |
id |
string |
Die eindeutige Element-ID. Systemnachrichten verwenden {responseId}_error oder {responseId}_cancelled. |
status |
string |
Entweder "completed", "failed" oder "cancelled". |
Wenn eine Antwort fehlschlägt, wird der strukturierte Fehler im Feld des Responseerror Objekts (siehe ErrorInfo) und im response.failed Ereignis und nicht im Systemelement message übermittelt.
Inhaltselemente
Die APIs verwenden die folgenden Inhaltselementtypen:
| Type | Felder | Verwendet in |
|---|---|---|
input_text |
text |
Benutzernachrichten (Eingabe). |
output_text |
text, metadata |
Assistentennachrichten (Berichtsblöcke). Textabschnitte enthalten [N](url) Zitatlinks. Tabellenblöcke enthalten metadata strukturierte Abfrageergebnisdaten. |
reasoning_text |
text |
Elemente mit Gründen versehen. |
Spalteninformation
Das ColumnInfo Objekt beschreibt eine Spalte:
| Feld | Type | Description |
|---|---|---|
name |
string |
Der Spaltenname. |
type |
string |
Der Spaltendatentyp, z "STRING". B. , "DOUBLE", oder "BIGINT". |
Fehlerbehandlung
Die APIs geben zwei Arten von Fehlern zurück: HTTP-Fehler vor dem Start des Datenstroms und Streamingfehler, die einen geöffneten Datenstrom beenden.
HTTP-Fehler
HTTP-Fehler werden als standardmäßige JSON-Antworten zurückgegeben, bevor der SSE-Stream gestartet wird:
{ "error": { "type": "ERROR_CODE", "message": "Human-readable description" } }
Die folgenden HTTP-Fehler können auftreten:
| HTTP-Status | Fehlercode | Zustand |
|---|---|---|
400 |
INVALID_PARAMETER_VALUE |
Ein Pfadparameter fehlt, die Eingabeelemente fehlen oder ungültig, oder die letzte Eingabe ist keine Benutzernachricht. |
404 |
FEATURE_DISABLED |
Der Arbeitsbereich ist nicht in der Vorschau registriert, oder ein Arbeitsbereichsadministrator hat die Vorschau nicht aktiviert. |
403 |
PERMISSION_DENIED |
Der Anrufer verfügt über keine CAN VIEW-Berechtigung für den Genie Agent. |
404 |
NOT_FOUND |
Der Genie Agent oder die Unterhaltung ist nicht vorhanden. |
409 |
RESOURCE_CONFLICT |
Für die Unterhaltung wird bereits eine Antwort generiert. |
500 |
INTERNAL_ERROR |
Unerwarteter Serverfehler. |
Streamingfehlercodes
Wenn ein Fehler im Mittleren Datenstrom auftritt, wird eine Systemfehlermeldung (role: "system", ) als response.output_item.added, gefolgt vom response.failed Ereignis status: "failed"ausgegeben. Das error Objekt auf dem Response Schlepper trägt ein type und ein code.
Das type Feld ist einer der folgenden Spezifikationstypen:
type |
Description |
|---|---|
server_error |
Interner Serverfehler, den der Client nicht verursacht hat. |
invalid_request |
Eine falsch formatierte oder semantisch ungültige Anforderung oder ein Berechtigungsproblem, auf das der Benutzer reagieren kann. |
not_found |
Eine referenzierte Ressource ist nicht vorhanden. |
model_error |
Fehler beim Verarbeiten einer andernfalls gültigen Anforderung. |
too_many_requests |
Die Anforderung war eingeschränkt. |
Das code Feld enthält weitere Details:
code |
type |
Description |
|---|---|---|
internal_error |
server_error |
Unerwarteter Serverfehler. Die Nachricht ist immer "An internal error occurred". |
sql_execution_error |
server_error |
Fehler bei der Ausführung einer SQL-Abfrage. |
upstream_unavailable |
server_error |
Eine Upstreamabhängigkeit ist vorübergehend nicht verfügbar. |
timeout |
server_error |
Die Anforderung oder ein Upstream-Anruf timeout. |
model_unavailable |
model_error |
Das Modell ist vorübergehend nicht verfügbar. |
context_length_exceeded |
model_error |
Der Unterhaltungsverlauf hat das Kontextfenster des Modells überschritten. |
content_filtered |
model_error |
Ein Inhaltsfilter hat die Antwort blockiert. |
rate_limit_exceeded |
too_many_requests |
Zu viele gleichzeitige Anforderungen oder ein Vorlaufratenlimit wurde erreicht. |
budget_exceeded |
too_many_requests |
Der Arbeitsbereich hat sein Nutzungsbudget für den Agentmodus überschritten. |
warehouse_access_denied |
invalid_request |
Der Aufrufer verfügt nicht über die Berechtigung zum Verwenden des konfigurierten SQL-Lagerlagers. |
no_tables_available |
invalid_request |
Im Genie-Agent sind keine abfragbaren Tabellen verfügbar. |
invalid_request |
invalid_request |
Die Anforderung war falsch formatiert oder fehlen erforderliche Felder. |
permission_denied |
invalid_request |
Die Berechtigung des Anrufers oder die Delegierung ist während der Ausführung fehlgeschlagen. |
conflict |
invalid_request |
Ein gleichzeitiger Vorgang ist mit der Anforderung in Konflikt geraten. |
warehouse_not_found |
not_found |
Das konfigurierte SQL Warehouse ist nicht vorhanden oder wurde gelöscht. |
not_found |
not_found |
Eine referenzierte Ressource wurde während der Ausführung nicht gefunden. |
Häufig gestellte Fragen
Die folgenden Fragen behandeln allgemeine Themen für die Agentmodus-APIs.
Wie lange dauern Antworten?
Die Reaktionszeit hängt von der Komplexität der Frage ab. Einzelabfragefragen können in weniger als einer Minute abgeschlossen werden. Die Recherche mit mehreren Abfragen kann mehrere Minuten dauern. Der Datenstrom hat einen serverseitigen Timeout von 90 Minuten.
Kann ich anstelle des Streamings abfragen?
Ja. Senden Sie die Anforderung, um eine Antwort zu erstellen, und verwenden Sie dann die Unterhaltungs-ID aus dem response.created Ereignis, um die Unterhaltungselemente abzurufen. Der Endpunkt für Elemente gibt den vollständigen Unterhaltungsverlauf zurück, einschließlich laufender Antworten. Abrufen des Felds auf oberster Ebene status in der Elementlistenantwort, bis es oder completedfailed.
Wie funktioniert eine Multi-Turn-Unterhaltung?
Übergeben Sie die Unterhaltungs-ID aus einer vorherigen Antwort in Ihrer nächsten Anforderung. Der Agent hat Zugriff auf alle vorherigen Abfragen und Ergebnisse in der Unterhaltung und kann im Bericht darauf verweisen.
Ist das Markdown-Ausgabeformat stabil?
Textinhalte, einschließlich Berichtsblöcken, Grundursachentext und Abfrageergebnisausgabe, werden in Markdown zurückgegeben. Die genaue Markdownstruktur, z. B. Überschriftenebenen und Tabellenformatierung, wird vom Modell generiert und ist nicht garantiert über Anforderungen oder API-Versionen hinweg stabil. Behandeln Sie die Markdownausgabe als formatierten Text mit bestem Aufwand, und verwenden Sie die strukturierten Felder, z. B. Spalten und Vorschauzeilen, als stabile, maschinenlesbare Darstellung der Daten.
Kann ich Visualisierungen abrufen?
Ja. Abrufen von Visualisierungen mit dem Endpunkt "Anlagenvisualisierung der Downloadnachricht". Siehe GET /api/2.0/genie/spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}/query-result/visualization in der REST-API-Referenz.
Laufen Abfrageergebnisse ab?
Ja. SQL-Abfrageergebnisse folgen derselben Ablaufrichtlinie wie die Anweisungsausführungs-API. Nach Ablauf der Ergebnisse gibt die Anweisungs-ID sie nicht mehr zurück. Die Vorschauzeilen in den Antwortmetadaten bleiben vom Endpunkt für Unterhaltungselemente verfügbar.
Wie weiß ich, welche Tabellen der Agent abfragen kann?
Der Agent kann nur Tabellen abfragen, die Sie dem Genie-Agent hinzufügen. Sie kann nicht auf Ihren vollständigen Katalog zugreifen. Um optimale Ergebnisse zu erzielen, fügen Sie Spaltenbeschreibungen, Beispielabfragen und Verknüpfungsanweisungen hinzu. Siehe Kuratiert einen effektiven Genie Agent.