Agentmodus-APIs in Genie Agents

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:

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_call ist die Abfrage, die der Agent ausführt. Das arguments Feld ist eine JSON-codierte Zeichenfolge, die den Toolaufruf beschreibt.
  • function_call_output ist das Ergebnis. Nach Abschluss des Elements enthält das output Feld 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 metadata die 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_focus Abfrageparameter aus der URL, um die zitierte Abfrage zu identifizieren, und stimmen Sie dann mit den function_call_output Elementen 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.