Visão geral
Neste guia, você pode aprender como invocar um agente implementado no MongoDB Atlas Agent Engine. O guia mostra como chamar a API de invocação, invocar um agente a partir da CLI, encaminhar cabeçalhos personalizados para seu agente e retomar execuções suspensas.
Para gerar a chave de API ou as credenciais da conta de serviço que essas solicitações usam, consulte Gerenciar chaves de API e contas de serviço.
API de invocação
A API de invocação é a API que os clientes usam para chamar um agente implementado. O Mecanismo do Agente Atlas expõe esses pontos de extremidade em nome do agente, portanto, o código do agente não precisa definir nenhuma rota HTTP ou iniciar um servidor da web.
Invoque seu agente
Para invocar um agente, envie uma solicitação POST para o endpoint da API /api/v1/projects/{project_id}/workspaces/{workspace_id}/invoke. A resposta retorna o resultado da execução e o status da execução. A plataforma retorna o ID da sessão no cabeçalho de resposta X-Session-ID.
O exemplo curl a seguir utiliza estes espaços reservados:
$API_KEY: Sua chave de API do Atlas Agent Engine$PROJECT_ID: ID do projeto$WORKSPACE_ID: ID do seu workspace
Selecione a guia do idioma de sua preferência para visualizar uma solicitação de invocação de amostra:
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/invoke" \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, agent!"}'
import httpx response = httpx.post( f"https://agentengine.mongodb.com/api/v1/projects/{project_id}/workspaces/{workspace_id}/invoke", headers={"Authorization": f"Bearer {api_key}"}, json={"message": "Hello, agent!"}, timeout=60.0, ) result = response.json()
A resposta se assemelha à seguinte saída:
{ "success": true, "response": "<agent output>", "execution_id": "string", "status": "completed" }
Se a execução for suspensa para revisão humana, a resposta também incluirá os campos suspend_reason e suspend_context. Para saber mais, consulte Suspender, revisar e retomar o ciclo de vida no guiaHuman-in-the-Loop.
Transmita a saída do seu agente
Para transmitir a saída de um agente conforme ela é produzida, envie uma solicitação POST para o endpoint da API /api/v1/projects/{project_id}/workspaces/{workspace_id}/invokeStream. A plataforma retorna a resposta como um fluxo de armações do Server-Sent Events (SSE). O stream mantém a conexão aberta até que a execução seja concluída ou falhe.
Cada armação SSE começa com o prefixo data: e contém um único objeto JSON . O exemplo a seguir mostra o formato de um quadro de streaming:
data: {"chunk_type": "text", "content": "Hello, agent!", "metadata": {}, "execution_id": "string"}
Um framework pode incluir os seguintes campos:
Campo | Descrição |
|---|---|
| Identifica o tipo de chunk. A seção a seguir lista os valores possíveis. |
| A carga útil do chunk. Para chunks |
| Metadados estruturados que descrevem o chunk. |
| Identifica a execução que produz o chunk. A plataforma inclui este campo quando o ID de execução está disponível. |
Tipos de chunks
A tabela a seguir descreve os tipos de chunk que um stream pode carregar:
Tipo de chunk | Descrição |
|---|---|
| Um incremento da saída gerada do agente. |
| Uma atualização de progresso que uma ferramenta emite durante a execução. |
| Marca o início da execução de um subagente. A plataforma emite este chunk somente quando as grades de proteção estão desativadas. |
| Marca o fim da execução de um subagente. A plataforma emite este chunk somente quando as grades de proteção estão desativadas. |
| Marca o fim do stream após a conclusão da execução. |
| Marca o fim do stream após a falha da execução. O quadro também carrega a mensagem de erro. |
Se a execução falhar, o stream enviará um chunk error que inclui a mensagem de erro. Em seguida, o fluxo fecha.
Saída personalizada para agentes aceitos
Se você definir o sinalizador features.use_custom_parser como true no arquivo agent.yaml, o stream carregará apenas os eventos personalizados que o analisador de saída do agente ou suas chamadas emit_custom_event() produzirem. A plataforma encaminha cada evento personalizado como um único framework data:, de modo que o framework contenha exatamente o objeto JSON que o agente emitiu. O fluxo não inclui os blocos padrão, como os conjuntos text, step ou done, e fecha quando a execução é concluída.
A plataforma fornece eventos personalizados somente no endpoint invokeStream. O endpoint síncrono invoke retorna a saída final do agente.
Quando esse sinalizador de recurso não está habilitado, o stream usa o formato de chunk descrito anteriormente nesta seção. O stream não fornece eventos personalizados, e uma chamada emit_custom_event() no código do agente gera um erro.
Outros pontos de extremidade
O Atlas Agent Engine também expõe os seguintes pontos de conexão de API para streaming, pesquisa, retomada e interrupção de execuções:
Método e caminho | Propósito |
|---|---|
| Transmite a saída do agente de forma incremental à medida que ela é produzida usando o protocolo Server-Sent Events. |
| Status de execução e resultado da pesquisa. |
| Retoma uma execução suspensa. O corpo da solicitação carrega a decisão do revisor. Para saber mais, consulte Usar a API no guiaHuman-in-the-Loop. |
| Cancela uma execução em andamento, interrompe o trabalho no lado do servidor e libera a computação da sessão. Para saber mais, consulte Cancelar uma sessão. |
| Interrompe a ferramenta a bordo ou as chamadas LLM sem encerrar a sessão. Para saber mais, consulte Interromper uma Ferramenta ou Chamada LLM. |
Cada endpoint executions/** requer o parâmetro de query workspace_id. O gateway usa esse valor para rotear a solicitação para o Mecanismo de orquestração do espaço de trabalho proprietário.
Observação
Cancelar ou interromper uma execução que já atingiu um status terminal é idempotente. A resposta da solicitação relata que a solicitação não fez nenhuma alteração.
Ciclo de vida do status de execução
Uma execução passa pelos status pending, running e, em seguida, completed ou error.
Se a execução for suspensa para revisão humana, ela passará por status adicionais antes de ser concluída. Para saber mais sobre o ciclo de vida de suspensão e retomada, consulte Suspender, revisar e retomar o ciclo de vida no guiaHuman-in-the-Loop.
Se você cancelar uma execução, ela atingirá o status cancelled. Esse status é diferente de completed e error, para que os clientes de API e UI possam distinguir uma execução deliberadamente interrompida de uma que concluiu ou falhou. Para saber mais, consulte Cancelar uma sessão.
Erros completos do pool
O Atlas Agent Engine não dimensiona automaticamente os sistemas do agente . O campo scaling.replicas no arquivo agent.yaml define uma contagem fixa de sandbox, e cada sessão reserva uma sandbox de agente e uma sandbox de ferramenta para sua vida útil. Como resultado, este campo define o número de sessões que um sistema pode atender simultaneamente.
O campo scaling.replicas aceita um valor de 1 a 512 e padroniza para 4 quando você o omite. Quando cada sandbox é reservada, uma nova solicitação de invocação falha com um erro pool full.
O limite de sandbox simultânea 512 se aplica ao Mecanismo de orquestração, que tem como escopo um projeto e pode atender a mais de um agente. Os valores scaling.replicas de todos os agentes em um projeto contam para o mesmo teto. Para executar mais sandboxes do que um projeto permite, distribua seus agentes em vários projetos.
Para evitar que as solicitações de invocação esgotem o pool, reutilize os IDs de sessão nas solicitações. As solicitações que compartilham um ID de sessão reutilizam uma reserva, mas as solicitações que omitem um ID de sessão usam um novo par de sandboxes. Um ID de sessão deve ter 1 a 128 caracteres e pode conter letras, números, sublinhados (_) e hífens (-). Passe o ID da sessão na opção --session do comando agentengine invoke ou no cabeçalho X-Session-ID de uma solicitação de API.
Se suas solicitações de invocação exigirem isolamento por sessão, você não poderá reutilizar um ID de sessão. Para atender a mais sessões ao mesmo tempo, aumente o valor scaling.replicas ou reduza os valores scaling.agent_idle_ttl_seconds e scaling.tool_idle_ttl_seconds para que as sessões ociosas liberem suas sandboxes mais cedo.
Como o Atlas Agent Engine captura valores scaling no tempo de construção, você deve construir e distribuir o agente novamente para que uma alteração entre em vigor. Para saber mais sobre esses campos, consulte Referência do contrato do agente. Para revisar todas as limitações que se aplicam durante a visualização pública, consulte Limitações do mecanismo do agente do MongoDB Atlas .
Encaminhar cabeçalhos personalizados
Nesta seção, você pode aprender como passar cabeçalhos HTTP personalizados, como IDs de usuário, do seu aplicação para um agente em execução no Atlas Agent Engine. Seu agente pode então ler esses cabeçalhos no tempo de execução usando o método get_current_custom_headers().
Como funciona
Em uma solicitação de invocação ou retomada, o API Gateway processa cabeçalhos HTTP com o prefixo X-Mdb-Agent-Engine-Custom- executando as seguintes etapas:
O gateway de API extrai o cabeçalho.
O gateway remove o prefixo e torna o nome do cabeçalho em minúsculas. Por exemplo,
X-Mdb-Agent-Engine-Custom-Authorizationtorna-seauthorization.O gateway encaminha os cabeçalhos para o agente como um dicionário.
Os cabeçalhos são encaminhados na memória por meio do pipeline de execução, nunca são persistidos no banco de dados e descartados pelo pipeline quando a execução é concluída.
Observação
O Atlas Agent Engine não persiste cabeçalhos personalizados. Seu aplicação deve reenviá-los em cada solicitação, incluindo solicitações de currículo.
Limites
A tabela a seguir mostra os limites para cabeçalhos personalizados:
Limite | Valor |
|---|---|
Número máximo de cabeçalhos personalizados | 50 |
Tamanho máximo por cabeçalho | 8 KiB |
Enviar cabeçalhos personalizados
Adicione cabeçalhos prefixados X-Mdb-Agent-Engine-Custom- à sua solicitação de invocação. O API Gateway remove o prefixo antes que o agente o receba.
Os exemplos a seguir usam os mesmos espaços reservados que os exemplos de API de invocação. Eles também usam espaços reservados para os cabeçalhos personalizados que você deseja encaminhar.
Selecione a guia do seu idioma preferido para ver um exemplo de solicitação de invocação com cabeçalhos personalizados:
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/invoke" \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "X-Mdb-Agent-Engine-Custom-Authorization: my-user-id" \ -H "X-Mdb-Agent-Engine-Custom-Tenant-Id: acme-corp" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, agent!"}'
import httpx response = httpx.post( f"https://agentengine.mongodb.com/api/v1/projects/{project_id}/workspaces/{workspace_id}/invoke", headers={ "Authorization": f"Bearer {api_key}", "X-Mdb-Agent-Engine-Custom-Authorization": "my-user-id", "X-Mdb-Agent-Engine-Custom-Tenant-Id": "acme-corp", }, json={"message": "Hello, agent!"}, )
O agente recebe o seguinte dicionário depois que você executa o código anterior:
{"authorization": "my-user-id", "tenant-id": "acme-corp"}
Leia cabeçalhos no seu agente
Use o método get_current_custom_headers() de agent_engine_runner_shared dentro de qualquer ferramenta para acessar os cabeçalhos que o API Gateway encaminhou ao agente. O seguinte código Python mostra como usar get_current_custom_headers() para acessar os cabeçalhos encaminhados:
from agent_engine_sdk_langgraph import App from agent_engine_runner_shared import get_current_custom_headers app = App(app_name="My Agent") def call_external_api(query: str) -> str: """Call an external API using the caller's user ID.""" headers = get_current_custom_headers() user_id = headers.get("authorization", "") tenant = headers.get("tenant-id", "") response = httpx.get( "https://api.example.com/data", headers={"Authorization": user_id, "X-Tenant-Id": tenant}, params={"q": query}, ) return response.text
O método get_current_custom_headers() retorna um dict[str, str]. Se o gateway não enviar nenhum cabeçalho personalizado, o método retornará um dicionário vazio.
Retomar solicitações
O encaminhamento de cabeçalhos personalizados também funciona com solicitações de currículo. Como o Atlas Agent Engine não persiste cabeçalhos personalizados, você deve reenviar os mesmos cabeçalhos X-Mdb-Agent-Engine-Custom- ao retomar uma execução suspensa. Para obter um exemplo de solicitação de retomada que encaminha cabeçalhos personalizados, consulte Usar a API no guiaHuman-in-the-Loop.
Interromper um agente em execução
O cancelamento de uma solicitação do seu cliente fecha apenas o seu lado da conexão. A execução continua em execução no servidor até que você a interrompa por meio do Atlas Agent Engine.
O Atlas Agent Engine oferece as seguintes maneiras de interromper o trabalho que já está em execução:
Cancele a sessão para encerrar a execução e liberar sua computação. Para saber mais, consulte Cancelar uma sessão.
Pare a execução da interface do usuário do Playground. Para saber mais, consulte Interromper uma corrida no Playground.
Interrompa uma única ferramenta em andamento ou chamada LLM e deixe o agente continuar a execução. Para saber mais, consulte Interromper uma Ferramenta ou Chamada LLM.
Marque a sessão como concluída no código do agente quando o agente não precisar mais dela. Para saber mais, consulte Marcar uma sessão como concluída no seu agente.
Cancelar uma sessão
Para cancelar uma execução em andamento, envie uma solicitação POST para o endpoint /api/v1/projects/{project_id}/executions/{execution_id}/cancel e defina o parâmetro de query workspace_id. A solicitação não recebe um corpo.
Selecione a guia do idioma de sua preferência para ver um exemplo de cancelamento de uma execução:
curl -X POST "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/executions/$EXECUTION_ID/cancel?workspace_id=$WORKSPACE_ID" \ -H "Authorization: Bearer $API_KEY"
import httpx response = httpx.post( f"https://agentengine.mongodb.com/api/v1/projects/{project_id}/executions/{execution_id}/cancel", params={"workspace_id": workspace_id}, headers={"Authorization": f"Bearer {api_key}"}, )
A resposta se assemelha à seguinte saída:
{ "execution_id": "string", "cancelled": true, "status": "cancelled" }
O campo cancelled informa se esta solicitação definiu o status de execução para cancelled. O valor do campo é true para uma execução cancelled e false quando a solicitação não fez a transição da execução porque já havia atingido um status de terminal, incluindo cancelled de uma solicitação anterior. Quando o valor do campo é false, o campo status relata o status do terminal registrado.
Quando você cancela uma execução, o Atlas Agent Engine faz o seguinte:
Cancela chamadas de ferramentas ou LLM em andamento e desmonta a sandbox do agente e a sandbox de ferramentas da sessão e libera o slot de capacidade. Uma nova execução pode reutilizar o slot.
Cancela todas as outras execuções ao vivo na mesma sessão, incluindo execuções de agente profundo e agente a agente que são filhas da execução de destino.
Termina um fluxo de resposta aberto em vez de deixar o fluxo aberto até que ele expire.
Cobrança o tempo de execução que a sessão acumulou até o cancelamento.
Observação
Você não pode retomar uma execução cancelada. Para enviar outra mensagem para o agente, invoque o agente novamente. A solicitação inicia uma nova execução em vez de retomar a cancelada.
Parar uma corrida no playground
Você também pode interromper uma execução na interface do usuário do Playground em vez de chamar o ponto de extremidade da API cancel. Interromper uma corrida a partir do Playground tem o mesmo efeito que cancelar a sessão. Para saber mais, consulte Cancelar uma sessão.
Para interromper uma execução do Playground, execute as seguintes etapas:
Interromper uma ferramenta ou chamada LLM
A interrupção de uma ferramenta ou chamada LLM interrompe apenas essa chamada. A sessão permanece ativa e o agente continua sua execução a partir do resultado interrompido. Interrompa uma chamada quando uma única chamada estiver presa ou indesejável e você não quiser cancelar a sessão inteira.
Para interromper uma chamada, envie uma solicitação de POST para o ponto de extremidade da API /api/v1/projects/{project_id}/executions/{execution_id}/interrupt. A solicitação usa os seguintes parâmetros:
Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Parâmetro de consulta | Sim | O espaço de trabalho que possui a execução. O Atlas Agent Engine usa esse valor para rotear a solicitação de interrupção para o Mecanismo de orquestração desse espaço de trabalho. Se você omitir este parâmetro, a solicitação falhará com uma mensagem de erro |
| campo Corpo | No | A etapa de execução da única chamada a ser interrompida. Se você omitir este campo, o Atlas Agent Engine interromperá todas as chamadas que estão em andamento. |
Selecione a guia do seu idioma preferido para ver um exemplo de interrupção de uma ferramenta ou chamada LLM:
curl -X POST "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/executions/$EXECUTION_ID/interrupt?workspace_id=$WORKSPACE_ID" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"step_number": 12}'
import httpx response = httpx.post( f"https://agentengine.mongodb.com/api/v1/projects/{project_id}/executions/{execution_id}/interrupt", params={"workspace_id": workspace_id}, headers={"Authorization": f"Bearer {api_key}"}, json={"step_number": 12}, )
A resposta se assemelha à seguinte saída:
{ "execution_id": "string", "interrupted": true, "interrupted_steps": [ 12 ], "pending": false, "outcome": "aborted" }
O campo outcome descreve o resultado da solicitação de interrupção e retorna um dos seguintes valores:
Valor | Descrição |
|---|---|
| O Atlas Agent Engine interrompeu uma chamada em andamento. O campo |
| Não havia nenhuma chamada em andamento, portanto, o Atlas Agent Engine aplica a solicitação de interrupção à próxima ferramenta de execução ou chamada LLM. O campo |
| Já existe uma solicitação de interrupção preparada não expirada. O Atlas Agent Engine não estendeu sua expiração. |
| A execução já atingiu um status terminal. |
| O valor |
A interrupção de uma chamada é idempotente e não altera o status de execução. Se você interromper todas as chamadas em uma etapa, o agente encerrará essa chamada em vez de tentar novamente as chamadas. Se você interromper apenas algumas das chamadas em uma etapa, o agente continuará normalmente.
Observação
O Atlas Agent Engine pode interromper uma chamada vinculada a E/S, como uma chamada LLM ou uma chamada de ferramenta de rede. No entanto, uma ferramenta que executa uma computação local limitada pela CPU pode não parar até que ela termine.
Marcar uma sessão como encerrada do seu agente
Uma sessão mantém a sandbox do agente e a sandbox da ferramenta até que o tempo limite ocioso expire. Se você marcar uma sessão como concluída, seu agente poderá liberar essa computação imediatamente em vez de esperar o tempo limite.
Selecione a guia do seu idioma preferido para ver um exemplo de marcação de uma sessão concluída pelo seu agente:
status = app.finish_session()
const status = app.finishSession();
A curva atual continua em execução e retorna seu resultado. Após a conclusão da vez, o Mecanismo do Atlas cancela quaisquer execuções do subagente ativas e libera os pods da sessão.
O método retorna um dos seguintes valores:
Python | TypeScript | Descrição |
|---|---|---|
|
| O Atlas Agent Engine aceitou a solicitação. |
|
| O agente já solicitou que o Atlas Agent Engine concluísse esta sessão. |
|
| Não há sessão para terminar. O método retorna esse valor quando você o chama fora da execução de um agente , como a partir de um script local ou de uma sandbox de ferramenta, ou após o término do turno. |
O método não gera um erro nem lança uma exceção quando não há sessão para concluir.
Uma reviravolta que suspende a análise humana ou falha mantém seus recursos para que você possa retomá-la e diagnosticá-la. Essa sessão retorna ao tempo limite ocioso. Para saber mais sobre os tempos limite ociosos, consulte Erros completos do pool.
Invoque um agente a partir da CLI
O comando agentengine invoke invoca um agente implementado a partir do terminal sem escrever nenhum código de cliente HTTP. Ele lê o espaço de trabalho do arquivo .agentengine/state.json do diretório atual por padrão.
Se você executar o comando sem uma mensagem em um terminal interativo, ele iniciará uma sessão de chat de streaming e reutilizará o ID de sessão retornado em cada vez. Nesse modo interativo, a CLI apresenta automaticamente um prompt de revisão in-line quando o agente suspende a invocação para a revisão ser humano-in-the-loop (HITL).
Sintaxe do comando
agentengine invoke [message] [flags] agentengine invoke --file <path> [flags]
A tabela a seguir descreve os sinalizadores disponíveis:
bandeira | Descrição |
|---|---|
| Transmitir chunks de resposta à medida que eles chegam. Para saber como a plataforma formata a saída transmitida, consulte Transmitir a saída do seu agente. |
| ID da sessão de conversa para ser retomado ou reutilizado em cada volta. |
| ID do usuário a ser passado para o agente implementado. Um chamador de conta de serviço não pode usar esse sinalizador para agir como outro usuário, conforme descrito na nota sobre Identidade de memória da conta de serviço. |
| Leia a mensagem de um arquivo em vez de um argumento posicional. |
| objeto de metadados JSON encaminhado para o agente junto com a mensagem. Você deve especificar um objeto JSON válido. Este sinalizador pode ser combinado com |
| JSON |
| JSON bruto de saída, incluindo ID de sessão e blocos transmitidos. |
| (Somente Monorepo) Invoque um espaço de trabalho específico por nome. |
| ID do espaço de trabalho da plataforma, que ignora a resolução do espaço de trabalho local. |
| ID do projeto da plataforma . |
| ID da organização. |
| URL base da API da plataforma . |
| Contexto local nomeado de |
| Tempo máximo de espera para cada solicitação de invocação. O valor padrão é |
Importante
Identidade de memória da conta de serviço
Quando uma conta de serviço invoca um agente implementado, o Atlas Agent Engine utiliza a própria identidade da conta de serviço como a identidade da memória de tempo de execução. A plataforma ignora qualquer valor user_id de usuário final que a solicitação de invocação ou o sinalizador agentengine invoke --user-id forneça.
As operações automáticas de registro, extração, consolidação e app.memory usam essa identidade resolvida. Como resultado, as invocações que autenticam por meio da mesma conta de serviço compartilham um escopo de usuário de memória.
Esta limitação se aplica apenas aos agentes implementados que uma conta de serviço invoca. O serviço de memória autônomo do, com escopo de projeto, não é afetado. Este serviço continua a aceitar valores user_id e session_id explícitos do chamador.
Para isolar a memória pelo usuário final, chame o serviço de memória autônomo do seu aplicação e passe um valor user_id e session_id explícito para cada chamada. Para saber mais, consulte Usar o serviço de memória independente.
Exemplos
O seguinte comando invoca o agente com uma única mensagem:
agentengine invoke "What can you do?"
O comando a seguir transmite a resposta do agente conforme ela é produzida:
agentengine invoke --stream "Draft a release note"
O seguinte comando retoma ou continua uma sessão nomeada:
agentengine invoke --session my-session "Follow up question"
O comando a seguir lê uma mensagem de um arquivo e gera JSON bruto:
cat prompt.txt | agentengine invoke --json
Comandos de carga útil interativos
Ao executar o agentengine invoke no modo interativo, você pode gerenciar a carga útil entre as voltas usando um dos seguintes comandos:
Entrada | Comportamento |
|---|---|
| Define a carga útil atual para o objeto JSON fornecido. A CLI encaminha a carga útil com cada mensagem subsequente até que você a limpe. |
| Exibe a carga útil atual como JSON formatado ou imprime |
| Limpa a carga útil atual. |
Análise interativa do HITL
Quando um agente suspende a revisão de humanos no loop (HITL) no modo interativo, a CLI imprime o contexto da suspensão e solicita uma decisão in-line. Para saber como a CLI apresenta o prompt de revisão e como retomar a execução,consulte Usar a CLI no guiaHuman-in-the-Loop.
Próximos passos
Depois de invocar um agente, você pode monitorar o desempenho e a atividade do agente. Para saber mais, consulte o guia Monitorar.