Para chamar um agente registrado específico, forneça o campo opcional agentsSpec na solicitação de API REST streamAssist ou na chamada da biblioteca de cliente. A API AgentsSpec define a especificação dos agentes usados para atender à solicitação. O assistente encaminha consultas diretamente para esse agente e preserva o contexto da sessão entre as interações.
Resumo
| Especificação | Detalhes |
|---|---|
| Método de API | projects.locations.collections.engines.assistants.streamAssist |
| Versões do endpoint | v1alpha para descobrir IDs de agentes; v1 para chamar streamAssist |
| Parâmetro principal | agentsSpec.agentSpecs[].agentId |
| Tipos de agentes compatíveis | Agentes de chat do Core Assistant, do Deep Research e do Agent Designer (antigamente, de pouco código) |
| Permissão do IAM obrigatória | discoveryengine.assistants.assist |
| Escopo do OAuth obrigatório | https://www.googleapis.com/auth/cloud-platform |
Antes de começar
- Ative a API Discovery Engine (
discoveryengine.googleapis.com) no seu Google Cloud projeto. - Verifique se o principal (conta de usuário ou conta de serviço) tem um papel que concede a permissão do IAM
discoveryengine.assistants.assist, como Editor do Discovery Engine (roles/discoveryengine.editor) ou Administrador do Gemini Enterprise (roles/discoveryengine.agentspaceAdmin). - Verifique se o app Gemini Enterprise (mecanismo) foi criado e contém pelo menos um agente registrado.
- Se você fizer a autenticação usando o Application Default Credentials (ADC), verifique se o cliente envia o cabeçalho do projeto de cota:
-H "X-Goog-User-Project: PROJECT_ID".
Encontrar o ID e o local do app
O URL streamAssist exige o ID do mecanismo e o local dele (global, us ou eu). Se você só souber o nome de exibição do app, liste os mecanismos no projeto para localizar o ID subjacente:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines"
Na resposta, o formato do name do mecanismo é projects/{project}/locations/{location}/collections/default_collection/engines/{ENGINE_ID}. O segmento ENGINE_ID é o APP_ID necessário na chamada.
Encontrar o ID do agente
O agentId é o segmento final do nome completo do recurso do agente na API Discovery Engine:
projects/{project}/locations/{location}/collections/{collection}/engines/{engine}/assistants/{assistant}/agents/{AGENT_ID}
Os agentes registrados usam um ID numérico longo (por exemplo, 15492003793394502655) em vez de um nome de exibição amigável. Forneça apenas essa string numérica final {AGENT_ID} na solicitação.
Para listar os agentes registrados no app e descobrir os IDs numéricos deles, chame a coleção agents no endpoint v1alpha:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant/agents"
Cada recurso de agente retornado inclui os seguintes campos:
name: o caminho completo do recurso que termina em{AGENT_ID}.displayName: o nome legível mostrado no Google Cloud console.state: o estado operacional (comoENABLEDouPRIVATE).- Um objeto de definição que indica o tipo de agente (como
a2aAgentDefinitionoulowCodeAgentDefinition).
Consulte a referência da API REST agents para o esquema completo de recursos do agente.
Enviar consultas para agentes
Para enviar consultas a um agente específico, crie a solicitação com o agentsSpec apropriado e execute-a usando bibliotecas de cliente ou REST.
Estrutura do corpo da solicitação
Para encaminhar uma consulta a um agente específico, inclua o objeto agentsSpec opcional no corpo da solicitação POST:
{
"query": {
"text": "QUERY_TEXT"
},
"session": "SESSION_RESOURCE_NAME",
"agentsSpec": {
"agentSpecs": [
{
"agentId": "AGENT_ID"
}
]
}
}
Referência de campo
agentsSpec(objeto, opcional): especificação dos agentes usados para atender à solicitação.agentsSpec.agentSpecs[](matriz, opcional): uma lista de especificações de agentes. É possível especificar vários agentes nessa matriz.agentsSpec.agentSpecs[].agentId(string, obrigatório na especificação): o ID que identifica o recurso do agente registrado. Precisa estar em conformidade com a RFC-1034 com um comprimento máximo de 63 caracteres.
Consulte a referência da API REST streamAssist para o esquema completo da solicitação.
Chamar streamAssist
REST
O comando curl a seguir envia uma consulta a um agente específico usando a API REST:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant:streamAssist" \ -d '{ "query": { "text": "List all contact cards." }, "agentsSpec": { "agentSpecs": [ { "agentId": "AGENT_ID" } ] } }'
Substitua os seguintes marcadores de posição:
LOCATION: a multirregião para o nome do host e o caminho do recurso (global,usoueu). Se o app estiver no localglobal, omita o prefixo de local do nome do host (discoveryengine.googleapis.com).PROJECT_ID: o ID do projeto do Google Cloud .APP_ID: o ID do mecanismo do Gemini Enterprise (descoberto em Encontrar o ID e o local do app).AGENT_ID: o ID numérico do agente (descoberto em Encontrar o ID do agente).
Python
Este exemplo do Python chama streamAssist usando a biblioteca de cliente google-cloud-discoveryengine:
# Install library: pip install google-cloud-discoveryengine from google.api_core.client_options import ClientOptions from google.cloud import discoveryengine_v1 as discoveryengine # TODO(developer): Replace placeholder values with your project and agent details. project_id = "PROJECT_ID" location = "LOCATION" # For example: "us", "eu", or "global" engine_id = "APP_ID" agent_id = "AGENT_ID" # The numeric agent ID query_text = "List all contact cards." client_options = ( ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com") if location != "global" else None ) client = discoveryengine.AssistantServiceClient(client_options=client_options) assistant_path = client.assistant_path( project=project_id, location=location, collection="default_collection", engine=engine_id, assistant="default_assistant", ) request = discoveryengine.StreamAssistRequest( name=assistant_path, query=discoveryengine.Query(text=query_text), agents_spec=discoveryengine.StreamAssistRequest.AgentsSpec( agent_specs=[ discoveryengine.StreamAssistRequest.AgentsSpec.AgentSpec( agent_id=agent_id, ) ] ), ) for response in client.stream_assist(request=request): for reply in response.answer.replies: # Filter out model reasoning fragments (thought: true) if hasattr(reply, "grounded_content") and reply.grounded_content.content: print(reply.grounded_content.content.text, end="", flush=True) print()
Entender a resposta de streaming
O endpoint streamAssist retorna um stream de blocos JSON por REST ou um iterador de objetos de resposta em bibliotecas de cliente:
- Texto da resposta: o texto de resposta incremental chega em
answer.replies[].groundedContent.content.text. Concatene esses fragmentos de texto na ordem de recebimento para reconstruir a resposta completa. - Fragmentos de raciocínio: os fragmentos marcados com
"thought": truerepresentam o processo de raciocínio interno do modelo. Filtre esses fragmentos ao apresentar a saída final aos usuários finais. - Estado de execução: o campo
answer.stateprogride deIN_PROGRESSpara um estado terminal:SUCCEEDED: a solicitação foi concluída e gerou uma resposta.SKIPPED: a consulta foi ignorada ou ignorada. InspecioneassistSkippedReasonspara mais detalhes (comoNON_ASSIST_SEEKING_QUERY_IGNOREDpara saudações breves).FAILED: a invocação encontrou um erro de execução.
- Continuidade da sessão: o bloco de terminal inclui
sessionInfo.session(o nome do recurso da sessão) e umassistToken.
Continuar a conversa na mesma sessão
Para manter o contexto entre as interações, transmita a string session de sessionInfo em solicitações subsequentes:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant:streamAssist" \
-d '{
"session": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
"query": {
"text": "Who is John Doe?"
},
"agentsSpec": {
"agentSpecs": [
{
"agentId": "AGENT_ID"
}
]
}
}'
Se você omitir o campo session ou especificar - como o ID da sessão, a API vai gerar uma sessão nova e isolada automaticamente.
Limitações
As limitações a seguir se aplicam ao chamar agentes com streamAssist:
- Tipos de agentes não compatíveis:
- Agentes de fluxo de trabalho não são compatíveis.
- Agentes A2A ou ADK registrados em um app do Gemini Enterprise não são compatíveis com
streamAssist. Para chamar um agente A2A diretamente usando o endpoint de registro, consulte Chamar um agente usando o endpoint A2A de registro.
- Ações mutativas: a API
streamAssisté otimizada para consultas conversacionais e recuperação somente leitura em conectores. A execução programática de ferramentas e ações mutativas (como rascunho de e-mail, criação de eventos de agenda ou mensagens de chat) não é compatível comstreamAssist. Tentar invocar um fluxo de trabalho de agente que executa ações mutativas pode resultar em falhas silenciosas ou loops de execução não fundamentados.
Solução de problemas
Use a tabela a seguir para resolver erros comuns de invocação streamAssist:
| Sintoma | Causa provável | Resolução |
|---|---|---|
| HTTP 404 ao listar agentes | Chamar agents no endpoint v1 ou v1beta. |
Envie a solicitação de lista para o endpoint v1alpha. |
A resposta parece genérica, apesar de definir agentsSpec |
agentId numérico inválido ou a consulta é muito genérica para acionar o comportamento do domínio. |
Confirme o ID numérico exato na lista de agentes v1alpha; envie uma consulta específica do domínio; verifique o texto de resposta para saber se há palavras específicas do agente. |
| Nenhum erro retornado, mas o agente de destino não foi executado | agentId malformado causou um fallback silencioso para a orquestração padrão. |
Verifique se o agentId consiste apenas em dígitos e corresponde exatamente a um ID da lista de registro. |
O estado da resposta retorna SKIPPED |
A entrada foi avaliada como uma consulta que não busca assistência (como uma saudação breve). | Envie uma consulta de tarefa substantiva; inspecione assistSkippedReasons no payload da resposta. |
HTTP 401 ou HTTP 403 Permission Denied |
Escopo do OAuth ausente, papel do IAM insuficiente ou cabeçalho do projeto de cota ausente. | Verifique se o autor da chamada tem discoveryengine.assistants.assist; verifique se o escopo do OAuth inclui cloud-platform; adicione -H "X-Goog-User-Project: PROJECT_ID" se estiver usando o ADC. |
A seguir
- Receber resultados da pesquisa do StreamAssist
- Referência da API REST streamAssist
- Visão geral dos agentes