Pular para o conteúdo principal

APIs do Modo Agente no Genie Agents

As APIs do modo Agente permitem executar o modo Agente programaticamente em vez de por meio da UI do Databricks. Use-os para integrar o modo Agente em seus próprios aplicativos, como chatbots, relatórios agendados e ferramentas internas.

info

Beta

As APIs do modo Agente do Genie Agents estão em versão Beta.

nota

O Modo Agente era anteriormente conhecido como Research Agent. Genie Agents eram anteriormente conhecidos como Genie Spaces.

Como as APIs do modo Agente funcionam

Com as APIs do modo Agent, você envia uma pergunta em linguagem natural para um Genie Agent. Ele cria e refina um plano de pesquisa, executa queries SQL, itera com base em cada resultado e retorna um relatório com citações e tabelas de apoio. Os resultados são transmitidos por transmissão para o seu cliente como Server-Sent Events (SSE).

As APIs abrangem os endpoints, formatos de solicitação e resposta, e tipos de evento de transmissão necessários para se comunicar diretamente com o Modo Agente. Para a visão geral do conceito e a experiência da interface do usuário, consulte Modo Agente no Genie Agents.

Requisitos

Para usar as APIs do modo Agente, seu workspace deve atender aos seguintes requisitos:

Para habilitar as APIs para seu workspace, entre em contato com a equipe de conta da Databricks com os IDs dos workspaces onde você deseja o recurso. Após a aprovação da solicitação, um administrador do workspace ativa a **API do Mode de Agente Genie Agents** no menu **Visualizações**.

Começar

Os exemplos a seguir mostram como enviar um prompt e ler a resposta transmitida.

Envie seu primeiro prompt com curl

A solicitação a seguir envia uma pergunta em linguagem natural a um Genie Agent e transmite a resposta como um SSE:

Bash
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?"}]
}
]
}'

Os eventos chegam como pares de event: e data::

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}}

Leia a transmissão com o cliente Databricks OpenAI (Python)

Instale o cliente:

Bash
pip install databricks-openai

Crie uma resposta e trate cada evento à medida que ele chega:

Python
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}")

Enviar um prompt de acompanhamento

Para continuar uma conversação, passe o conversation_id da primeira resposta:

Python
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={&quot;conversation_id&quot;: conversation_id},
)

O agente mantém o contexto de interações anteriores e pode fazer referência a queries e resultados anteriores.

Referência de API

As APIs do modo Agente abrangem os Endpoint disponíveis, os formatos de solicitação e resposta, o ciclo de vida de eventos SSE, os modelos de dados e os códigos de erro.

URL base

Todos os Endpoint são relativos à seguinte URL base:

https://<workspace-url>/api/2.0/genie/agents
nota

O agent_id em cada caminho é o ID do Genie Agent, o mesmo identificador hexadecimal de 32 caracteres que aparece na URL do Genie Agent.

Endpoint

As APIs fornecem os seguintes endpoints:

Método

Caminho

Descrição

POST

/{agent_id}/responses

Crie uma resposta como uma transmissão SSE.

GET

/{agent_id}/conversations/{conversation_id}/items

Listar todos os itens em uma conversa.

Método

Caminho

Descrição

POST

/{agent_id}/responses

Crie uma resposta como uma transmissão SSE.

GET

/{agent_id}/conversations/{conversation_id}/items

Listar todos os itens em uma conversa.

Criar uma resposta

Cria uma nova resposta do modo Agente. Retorna uma transmissão SSE que entrega itens de saída em tempo real conforme o modo Agente é executado.

POST /{agent_id}/responses

Parâmetros de caminho

O endpoint aceita o seguinte parâmetro de caminho:

Parâmetro

Tipo

Obrigatório

Descrição

agent_id

string

Sim

O ID do Genie Agent. Uma string hexadecimal minúscula de 32 caracteres.

Parâmetro

Tipo

Obrigatório

Descrição

agent_id

string

Sim

O ID do Genie Agent. Uma string hexadecimal minúscula de 32 caracteres.

Corpo da solicitação

O corpo da solicitação aceita os seguintes campos:

campo

Tipo

Obrigatório

Padrão

Descrição

input

array<InputItem>

Sim

Nenhuma

Os itens de entrada. A matriz deve conter exatamente um item message com role: "user" que contém a pergunta. O contexto de múltiplas etapas é gerenciado no lado do servidor, então use conversation_id para acompanhamentos em vez de passar mensagens anteriores em input.

conversation_id

string

Não

null

O ID de uma conversa existente para continuar. Quando omitido, uma nova conversa é criada.

campo

Tipo

Obrigatório

Padrão

Descrição

input

array<InputItem>

Sim

Nenhuma

Os itens de entrada. A matriz deve conter exatamente um item message com role: "user" que contém a pergunta. O contexto de múltiplas etapas é gerenciado no lado do servidor, então use conversation_id para acompanhamentos em vez de passar mensagens anteriores em input.

conversation_id

string

Não

null

O ID de uma conversa existente para continuar. Quando omitido, uma nova conversa é criada.

Ciclo de vida do evento SSE

A transmissão começa com um evento response.created, transmite itens de saída e então termina com um evento terminal:

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)

Cada evento carrega um sequence_number que aumenta monotonicamente e que você pode usar para ordenação.

Tipos de evento SSE

A transmissão emite os seguintes tipos de evento.

response.created

Emitido uma vez no início. Contém um objeto Response com status: "in_progress" e um array output vazio.

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

Emitido quando um novo item de saída aparece pela primeira vez. O item ainda pode estar in_progress.

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

Emitido quando o conteúdo de um item existente é alterado, como quando os resultados de uma query chegam para um function_call_output. Usa a mesma estrutura de payload que response.output_item.added.

response.output_item.done

Emitido quando um item de saída alcança seu estado final. Usa a mesma estrutura de payload que response.output_item.added. Se um item chegar já concluído, os eventos added e done são emitidos em sequência.

response.completed

Evento de sucesso de terminal. Engloba o Response final com todos os itens de saída.

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

Evento de falha de terminal. O Response tem status: "failed" e um objeto error. Um item de mensagem de erro do sistema é emitido como response.output_item.added imediatamente antes deste evento. Para a lista completa de códigos, consulte Códigos de erro de transmissão.

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
}
}

Concorrência

Apenas uma resposta pode ser gerada por conversa por vez. Uma segunda solicitação para uma conversa que já tem uma resposta em andamento retorna um HTTP 409:

HTTP 409
{"error": {"type": "RESOURCE_CONFLICT", "message": "A response is already being generated for conversation <id>"}}

Tempos esgotados

A transmissão SSE tem um tempo limite do lado do servidor de 90 minutos. Como o modo Agente executa raciocínio em várias etapas e execução SQL, mantenha sua conexão HTTP aberta por toda a duração.

Listar itens de conversa

Recupera os itens de saída em uma conversa como uma lista plana. Os itens de todas as rodadas são combinados em ordem cronológica, incluindo mensagens de usuário, raciocínio, queries, resultados e relatórios. Este Endpoint suporta paginação baseada em cursor pelos parâmetros de query after e limit.

GET /{agent_id}/conversations/{conversation_id}/items

Use este endpoint para:

  • Exiba o histórico completo da conversa em seu aplicativo.
  • Recuperar resultados após uma transmissão SSE ser desconectada. Chame este Endpoint após a resposta ser concluída.
  • Busque conversas grandes incrementalmente em vez de carregar todos os itens de uma vez.

Parâmetros de caminho

O endpoint aceita os seguintes parâmetros de caminho:

Parâmetro

Tipo

Obrigatório

Descrição

agent_id

string

Sim

O ID do Genie Agent. Uma string hexadecimal minúscula de 32 caracteres.

conversation_id

string

Sim

O ID da conversa.

Parâmetro

Tipo

Obrigatório

Descrição

agent_id

string

Sim

O ID do Genie Agent. Uma string hexadecimal minúscula de 32 caracteres.

conversation_id

string

Sim

O ID da conversa.

Parâmetros da query

O Endpoint aceita os seguintes parâmetros de query:

Parâmetro

Tipo

Obrigatório

Padrão

Descrição

limit

integer

Não

100

O número máximo de itens a serem retornados. Intervalo: 1 a 100.

after

string

Não

Nenhuma

O cursor de paginação. Passe last_id de uma resposta anterior para buscar a próxima página.

order

string

Não

asc

A ordem de classificação. Use asc para cronológico (mais antigo primeiro) ou desc para cronológico reverso (mais recente primeiro).

Parâmetro

Tipo

Obrigatório

Padrão

Descrição

limit

integer

Não

100

O número máximo de itens a serem retornados. Intervalo: 1 a 100.

after

string

Não

Nenhuma

O cursor de paginação. Passe last_id de uma resposta anterior para buscar a próxima página.

order

string

Não

asc

A ordem de classificação. Use asc para cronológico (mais antigo primeiro) ou desc para cronológico reverso (mais recente primeiro).

Exemplos de solicitações

Recuperar todos os itens em uma conversa:

GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items

Limitar o tamanho da página:

GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?limit=5

Retorne os itens mais recentes primeiro:

GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?order=desc&limit=5

Buscar a próxima página:

GET /api/2.0/genie/agents/01f14fe4e338.../conversations/01f14fe4e338.../items?limit=5&after=01f14fe4f24e10beacaa1720d4b79b59_output

Resposta

A resposta tem Content-Type: application/json e é um envelope de lista paginada com "object": "list":

JSON
{
"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"
}

O campo status de nível superior reflete o estado da resposta mais recente na conversa. É "in_progress" enquanto uma resposta está em transmissão, e "completed" ou "failed" depois que ela termina. Monitore este campo para detectar quando uma resposta terminou.

Paginação

A resposta inclui três campos de paginação:

campo

Tipo

Descrição

first_id

string

A ID do primeiro item na página atual. Ausente quando data está vazio.

last_id

string

A ID do último item na página atual. Passe-o como after para buscar a próxima página. Ausente quando data estiver vazio.

has_more

boolean

true quando mais itens seguem esta página.

campo

Tipo

Descrição

first_id

string

A ID do primeiro item na página atual. Ausente quando data está vazio.

last_id

string

A ID do último item na página atual. Passe-o como after para buscar a próxima página. Ausente quando data estiver vazio.

has_more

boolean

true quando mais itens seguem esta página.

Para paginar todos os itens, solicite páginas até que has_more seja false:

Python
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"]

O array data contém itens de saída em ordem cronológica. As mensagens de entrada do usuário aparecem como message itens com um sufixo _input no ID.

Entenda a resposta

Esta seção explica como os itens de saída se encaixam para formar uma resposta completa do modo Agente.

Fluxo de itens de saída

Uma resposta típica do modo Agent produz itens de saída na seguinte ordem:

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

O agente pode executar várias queries em sequência, refinando sua análise com base em cada resultado. Uma única resposta pode conter muitos ciclos de raciocínio, query e resultado antes do relatório final.

Como chamada de função e saída de chamada de função se pareiam

Cada query SQL produz um par de itens de saída vinculados por call_id:

  • function_call é a query que o agente executa. O campo arguments é uma string codificada em JSON que descreve a invocação da ferramenta.
  • function_call_output é o resultado. Depois que o item for concluído, o campo output contém o título da query seguido por uma tabela markdown dos dados.

O call_id é idêntico em ambos os itens. O function_call_output.id é sempre {call_id}_output.

Analisar o relatório

O item de saída final é um message com role: "assistant". Seu array content contém vários fragmentos output_text de dois tipos:

  • Blocos de texto contêm análise narrativa com links de citação embutidos.
  • Os blocos de tabela contêm resultados de query embutidos renderizados como tabelas markdown. Cada bloco de tabela carrega metadata com os dados de resultado de query estruturados, para que seu cliente possa renderizar tabelas ou gráficos avançados programaticamente.

O fragmento de tabela a seguir inclui tanto o markdown renderizado quanto o metadata estruturado:

JSON
{
"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"
}
}

Um objeto de chunk de tabela metadata contém os seguintes campos:

campo

Tipo

Descrição

columns

array<ColumnInfo>

As definições da coluna.

preview_rows

array<array<string>>

As linhas de resultado truncadas.

total_row_count

integer

A contagem total de linhas, quando conhecida.

status

string

Ou "available" ou "fetch_failed".

sql

string

A query SQL que produziu os resultados.

campo

Tipo

Descrição

columns

array<ColumnInfo>

As definições da coluna.

preview_rows

array<array<string>>

As linhas de resultado truncadas.

total_row_count

integer

A contagem total de linhas, quando conhecida.

status

string

Ou "available" ou "fetch_failed".

sql

string

A query SQL que produziu os resultados.

Citações

Os fragmentos de texto no relatório contêm citações em linha que link cada afirmação à query SQL que a suporta. Cada citação é um link markdown da forma [N](url), onde N é um número de rodapé sequencial e url aponta para a interface do usuário do Genie Agent com a query relevante focada.

O URL de citação tem o seguinte formato:

https://<workspace-url>/genie/rooms/<space_id>/chats/<conversation_id>?o=<workspace_id>&gra_focus=<attachment_id>

A URL contém os seguintes componentes:

Componente

Descrição

space_id

O ID do Genie Agent, o mesmo valor que agent_id.

conversation_id

A conversa que contém a query citada.

workspace_id

O ID numérico do Workspace.

attachment_id

O ID de anexo da query, que identifica o resultado da query SQL específico.

Componente

Descrição

space_id

O ID do Genie Agent, o mesmo valor que agent_id.

conversation_id

A conversa que contém a query citada.

workspace_id

O ID numérico do Workspace.

attachment_id

O ID de anexo da query, que identifica o resultado da query SQL específico.

Para renderizar citações, siga estas orientações com base no seu cliente:

  • Os renderizadores Markdown exibem citações como links de rodapé clicáveis automaticamente.
  • Para texto simples, reduza [N](url) para [N] ou remova a citação.
  • Para uma interface do usuário personalizada, analise o parâmetro de query gra_focus na URL para identificar a query citada, depois faça a correspondência com os itens function_call_output na conversa.

As citações são desduplicadas. Se a mesma query for citada várias vezes, cada referência usa o mesmo número de índice e URL.

Modelos de dados

Esta seção descreve os objetos que as APIs retornam.

Resposta

O objeto Response é retornado nos eventos SSE response.created, response.completed e response.failed.

campo

Tipo

Descrição

object

string

Sempre "response".

id

string

O ID de resposta exclusivo.

model

string

Sempre "genie-agent".

status

string

Ou "in_progress", "completed" ou "failed".

output

array<OutputItem>

Os itens de saída produzidos pela resposta.

conversation_id

string

A conversa à qual a resposta pertence.

created_at

integer

A hora Unix epoch em segundos quando a resposta foi criada.

error

ErrorInfo

Presente quando status é "failed".

campo

Tipo

Descrição

object

string

Sempre "response".

id

string

O ID de resposta exclusivo.

model

string

Sempre "genie-agent".

status

string

Ou "in_progress", "completed" ou "failed".

output

array<OutputItem>

Os itens de saída produzidos pela resposta.

conversation_id

string

A conversa à qual a resposta pertence.

created_at

integer

A hora Unix epoch em segundos quando a resposta foi criada.

error

ErrorInfo

Presente quando status é "failed".

Informações de Erro

O objeto ErrorInfo descreve uma falha:

campo

Tipo

Descrição

type

string

Um de: server_error, invalid_request, not_found, model_error, ou too_many_requests.

message

string

Uma descrição legível por humanos. Para erros internos, isto é sempre "An internal error occurred".

code

string

Um código de erro opcional com mais detalhes, como "sql_execution_error" ou "warehouse_access_denied". Consulte Códigos de erro de transmissão.

campo

Tipo

Descrição

type

string

Um de: server_error, invalid_request, not_found, model_error, ou too_many_requests.

message

string

Uma descrição legível por humanos. Para erros internos, isto é sempre "An internal error occurred".

code

string

Um código de erro opcional com mais detalhes, como "sql_execution_error" ou "warehouse_access_denied". Consulte Códigos de erro de transmissão.

Itens de saída

Os itens de saída são polimórficos no campo type. Os seguintes tipos estão disponíveis.

reasoning

O raciocínio interno do agente à medida que o modo Agente é executado.

campo

Tipo

Descrição

type

string

"reasoning".

id

string

A ID exclusiva do item.

status

string

Ou "in_progress" ou "completed".

content

array<ContentItem>

Contém reasoning_text itens.

summary

array<string>

Sempre []. Reservado para uso futuro.

campo

Tipo

Descrição

type

string

"reasoning".

id

string

A ID exclusiva do item.

status

string

Ou "in_progress" ou "completed".

content

array<ContentItem>

Contém reasoning_text itens.

summary

array<string>

Sempre []. Reservado para uso futuro.

function_call

Uma invocação de ferramenta, que é uma execução de query SQL.

campo

Tipo

Descrição

type

string

"function_call".

id

string

A ID exclusiva do item.

call_id

string

O ID de correlação que se vincula ao function_call_output correspondente.

status

string

"completed".

name

string

"execute_sql".

arguments

string

Uma string JSON, por exemplo {"title": "Human-readable query title", "sql": "SELECT ..."}. O conjunto de keys pode mudar, portanto o cliente não deve depender de um esquema fixo.

campo

Tipo

Descrição

type

string

"function_call".

id

string

A ID exclusiva do item.

call_id

string

O ID de correlação que se vincula ao function_call_output correspondente.

status

string

"completed".

name

string

"execute_sql".

arguments

string

Uma string JSON, por exemplo {"title": "Human-readable query title", "sql": "SELECT ..."}. O conjunto de keys pode mudar, portanto o cliente não deve depender de um esquema fixo.

function_call_output

O resultado de uma invocação de ferramenta, emparelhado com um function_call a call_id.

campo

Tipo

Descrição

type

string

"function_call_output".

id

string

Sempre {call_id}_output.

call_id

string

Corresponde ao function_call correspondente.

status

string

Ou "in_progress" ou "completed".

output

string

O resultado da consulta. Consulte a seguinte tabela de ciclo de vida.

campo

Tipo

Descrição

type

string

"function_call_output".

id

string

Sempre {call_id}_output.

call_id

string

Corresponde ao function_call correspondente.

status

string

Ou "in_progress" ou "completed".

output

string

O resultado da consulta. Consulte a seguinte tabela de ciclo de vida.

O campo output evolui à medida que o item avança:

Status

output Conteúdo

in_progress

Somente o título da query.

completed

O título da query, uma linha em branco e, em seguida, a tabela de resultados markdown.

Status

output Conteúdo

in_progress

Somente o título da query.

completed

O título da query, uma linha em branco e, em seguida, a tabela de resultados markdown.

nota

Dados de resultados de query estruturada, como colunas, linhas e SQL, estão disponíveis nos blocos de tabela do relatório, não no item function_call_output. Consulte Analisar o relatório.

message

Uma mensagem de texto. Uma mensagem aparece em uma das três funções:

Função

Quando

Descrição

"user"

Entrada

A pergunta do usuário. Aparece em GET respostas com um sufixo _input no ID.

"assistant"

Relatório

O relatório estruturado final com texto e blocos de tabela embutidos.

"system"

Erro ou cancelar

Emitido quando uma resposta falha ou é cancelada.

Função

Quando

Descrição

"user"

Entrada

A pergunta do usuário. Aparece em GET respostas com um sufixo _input no ID.

"assistant"

Relatório

O relatório estruturado final com texto e blocos de tabela embutidos.

"system"

Erro ou cancelar

Emitido quando uma resposta falha ou é cancelada.

O objeto message contém os seguintes campos:

campo

Tipo

Descrição

type

string

"message".

role

string

Ou "user", "assistant" ou "system".

content

array<ContentItem>

O conteúdo da mensagem. Consulte Analisar o relatório para mensagens do assistente.

id

string

A ID exclusiva do item. As mensagens do sistema usam {responseId}_error ou {responseId}_cancelled.

status

string

Ou "completed", "failed" ou "cancelled".

campo

Tipo

Descrição

type

string

"message".

role

string

Ou "user", "assistant" ou "system".

content

array<ContentItem>

O conteúdo da mensagem. Consulte Analisar o relatório para mensagens do assistente.

id

string

A ID exclusiva do item. As mensagens do sistema usam {responseId}_error ou {responseId}_cancelled.

status

string

Ou "completed", "failed" ou "cancelled".

Quando uma resposta falha, o erro estruturado é entregue no campo error do objeto Response (consulte ErrorInfo) e no evento response.failed, não no item message do sistema.

Itens de conteúdo

As APIs usam os seguintes tipos de item de conteúdo:

Tipo

Campos

Usado em

input_text

text

Mensagens do usuário (entrada).

output_text

text, metadata

Mensagens do assistente (blocos de relatório). Blocos de texto contêm [N](url) links de citação. Blocos de tabela contêm metadata com dados de resultado de query estruturados.

reasoning_text

text

Itens de raciocínio.

Tipo

Campos

Usado em

input_text

text

Mensagens do usuário (entrada).

output_text

text, metadata

Mensagens do assistente (blocos de relatório). Blocos de texto contêm [N](url) links de citação. Blocos de tabela contêm metadata com dados de resultado de query estruturados.

reasoning_text

text

Itens de raciocínio.

ColumnInfo

O objeto ColumnInfo descreve uma coluna:

campo

Tipo

Descrição

name

string

O nome da coluna.

type

string

O tipo de dados da coluna, como "STRING", "DOUBLE" ou "BIGINT".

campo

Tipo

Descrição

name

string

O nome da coluna.

type

string

O tipo de dados da coluna, como "STRING", "DOUBLE" ou "BIGINT".

Tratamento de erros

As APIs retornam dois tipos de erros: erros HTTP antes do início da transmissão e erros de transmissão que encerram uma transmissão aberta.

Erros HTTP

Erros HTTP são retornados como respostas JSON padrão antes do início da transmissão SSE:

JSON
{ "error": { "type": "ERROR_CODE", "message": "Human-readable description" } }

Os seguintes erros HTTP podem ocorrer:

Status HTTP

Código de erro

Condição

400

INVALID_PARAMETER_VALUE

Um parâmetro de caminho está ausente, os itens de entrada estão ausentes ou são inválidos, ou a última entrada não é uma mensagem do usuário.

404

FEATURE_DISABLED

O Workspace não está inscrito na pré-visualização, ou um administrador do Workspace não ativou a pré-visualização.

403

PERMISSION_DENIED

O chamador não tem permissão CAN VIEW no Genie Agent.

404

NOT_FOUND

O Genie Agent ou a conversa não existe.

409

RESOURCE_CONFLICT

Uma resposta já está sendo gerada para a conversa.

500

INTERNAL_ERROR

Ocorreu um erro inesperado do servidor.

Status HTTP

Código de erro

Condição

400

INVALID_PARAMETER_VALUE

Um parâmetro de caminho está ausente, os itens de entrada estão ausentes ou são inválidos, ou a última entrada não é uma mensagem do usuário.

404

FEATURE_DISABLED

O Workspace não está inscrito na pré-visualização, ou um administrador do Workspace não ativou a pré-visualização.

403

PERMISSION_DENIED

O chamador não tem permissão CAN VIEW no Genie Agent.

404

NOT_FOUND

O Genie Agent ou a conversa não existe.

409

RESOURCE_CONFLICT

Uma resposta já está sendo gerada para a conversa.

500

INTERNAL_ERROR

Ocorreu um erro inesperado do servidor.

Códigos de erro de transmissão

Quando uma falha ocorre na transmissão, uma mensagem de erro do sistema (role: "system", status: "failed") é emitida como response.output_item.added, seguida pelo evento response.failed. O objeto error em Response possui type e code.

O campo type é um dos seguintes tipos de especificação:

type

Descrição

server_error

Uma falha interna do servidor que o cliente não causou.

invalid_request

Uma solicitação malformada ou semanticamente inválida, ou um problema de permissão em que o usuário pode agir.

not_found

Um recurso referenciado não existe.

model_error

O modelo falhou ao processar uma solicitação que era válida.

too_many_requests

A solicitação foi limitada por taxa.

type

Descrição

server_error

Uma falha interna do servidor que o cliente não causou.

invalid_request

Uma solicitação malformada ou semanticamente inválida, ou um problema de permissão em que o usuário pode agir.

not_found

Um recurso referenciado não existe.

model_error

O modelo falhou ao processar uma solicitação que era válida.

too_many_requests

A solicitação foi limitada por taxa.

O campo code fornece mais detalhes:

code

type

Descrição

internal_error

server_error

Um erro inesperado do servidor. A mensagem é sempre "An internal error occurred".

sql_execution_error

server_error

Uma query SQL falhou ao ser executada.

upstream_unavailable

server_error

Uma dependência está temporariamente indisponível.

timeout

server_error

A solicitação ou uma chamada upstream atingiu o tempo limite.

model_unavailable

model_error

O modelo está temporariamente indisponível.

context_length_exceeded

model_error

O histórico da conversa excedeu a janela de contexto do modelo.

content_filtered

model_error

Um filtro de conteúdo bloqueou a resposta.

rate_limit_exceeded

too_many_requests

Muitas solicitações concorrentes ou um limite de taxa upstream foi atingido.

budget_exceeded

too_many_requests

O workspace excedeu seu orçamento de uso para o modo de Agente.

warehouse_access_denied

invalid_request

O chamador não tem permissão para usar o SQL warehouse configurado.

no_tables_available

invalid_request

Nenhuma tabela consultável está disponível no Genie Agent.

invalid_request

invalid_request

A solicitação estava malformada ou faltavam campos obrigatórios.

permission_denied

invalid_request

O chamador perdeu a permissão ou a delegação falhou durante a execução.

conflict

invalid_request

Uma operação concorrente entrou em conflito com a solicitação.

warehouse_not_found

not_found

O SQL warehouse configurado não existe ou foi excluído.

not_found

not_found

Um recurso referenciado não foi encontrado durante a execução.

code

type

Descrição

internal_error

server_error

Um erro inesperado do servidor. A mensagem é sempre "An internal error occurred".

sql_execution_error

server_error

Uma query SQL falhou ao ser executada.

upstream_unavailable

server_error

Uma dependência está temporariamente indisponível.

timeout

server_error

A solicitação ou uma chamada upstream atingiu o tempo limite.

model_unavailable

model_error

O modelo está temporariamente indisponível.

context_length_exceeded

model_error

O histórico da conversa excedeu a janela de contexto do modelo.

content_filtered

model_error

Um filtro de conteúdo bloqueou a resposta.

rate_limit_exceeded

too_many_requests

Muitas solicitações concorrentes ou um limite de taxa upstream foi atingido.

budget_exceeded

too_many_requests

O workspace excedeu seu orçamento de uso para o modo de Agente.

warehouse_access_denied

invalid_request

O chamador não tem permissão para usar o SQL warehouse configurado.

no_tables_available

invalid_request

Nenhuma tabela consultável está disponível no Genie Agent.

invalid_request

invalid_request

A solicitação estava malformada ou faltavam campos obrigatórios.

permission_denied

invalid_request

O chamador perdeu a permissão ou a delegação falhou durante a execução.

conflict

invalid_request

Uma operação concorrente entrou em conflito com a solicitação.

warehouse_not_found

not_found

O SQL warehouse configurado não existe ou foi excluído.

not_found

not_found

Um recurso referenciado não foi encontrado durante a execução.

Perguntas Frequentes

As perguntas a seguir abrangem tópicos comuns para as APIs do modo Agente.

Quanto tempo levam as respostas?

O tempo de resposta depende da complexidade da pergunta. Perguntas de single-query podem ser concluídas em menos de um minuto. A pesquisa multi-query pode levar vários minutos. A transmissão tem um tempo limite do lado do servidor de 90 minutos.

Posso consultar em vez de transmissão?

Sim. Envie a solicitação para criar uma resposta, depois use o ID da conversa do evento response.created para recuperar os itens da conversa. O endpoint de itens retorna o histórico completo da conversa, incluindo respostas em andamento. Consulte o campo de nível superior status na resposta da lista de itens até que seja completed ou failed.

Como funciona uma conversa em vários turnos?

Passe o ID da conversa de uma resposta anterior na sua próxima solicitação. O agente tem acesso a todas as queries anteriores e resultados na conversa, e pode referenciá-los no relatório.

O formato de saída de markdown é estável?

O conteúdo de texto, incluindo partes de relatório, texto de raciocínio e saída de resultado de query, é retornado em markdown. A estrutura markdown exata, como níveis de cabeçalho e formatação de tabela, é gerada pelo modelo e não é garantida como estável entre solicitações ou versões de API. Trate a saída markdown como texto formatado de melhor esforço e use os campos estruturados, como colunas e linhas de visualização, como a representação estável e legível por máquina dos dados.

Posso recuperar visualizações?

Sim. Recupere visualizações com o endpoint de visualização de anexo de mensagem para download. Consulte GET /api/2.0/genie/spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}/query-result/visualization na referência da API REST.

Os resultados da query expiram?

Sim. Os resultados da query SQL seguem a mesma política de expiração que a API de Execução de Instrução. Depois que os resultados expiram, o ID do comando não os retorna mais. As linhas de visualização nos metadados da resposta permanecem disponíveis no Endpoint de itens de conversação.

Como saber quais tabelas o agente pode query?

O agente pode query somente tabelas que você adiciona ao Genie Agent. Não é possível acessar seu catálogo completo. Para obter os melhores resultados, adicione descrições de coluna, queries de exemplo e instruções de join. Consulte Organizar um Genie Agent eficaz.