Pular para o conteúdo

Agente TypeScript Strands para Agente A2A

O gerador connection pode conectar seu TypeScript Strands Agent a um agente A2A remoto — seja TypeScript ou Python — para que seu agente possa delegar a outro agente como uma ferramenta.

O gerador configura toda a fiação necessária para que seu agente possa descobrir e invocar o agente A2A remoto, tanto quando implantado na AWS (via Bedrock AgentCore) quanto quando executado localmente.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto TypeScript com um componente Strands Agent (qualquer protocolo)
  2. Um projeto com um componente Strands Agent gerado com --protocol=A2A e --auth=IAM (seja ts#strands-agent ou py#strands-agent)
  3. Ambos os componentes criados com computeType: BedrockAgentCoreRuntime
  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - connection
  5. Preencha os parâmetros obrigatórios
    • Clique em Generate

    Selecione seu projeto de agente host como origem e seu projeto de agente A2A como destino. Se seus projetos contiverem múltiplos componentes, especifique as opções sourceComponent e targetComponent para desambiguar.

    Parâmetro Tipo Padrão Descrição
    sourceProject Obrigatório string - O projeto de origem
    targetProject Obrigatório string - O projeto de destino para conectar
    sourceComponent string - O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.
    targetComponent string - O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.

    O gerador cria um pacote compartilhado agent-connection e modifica o código do seu agente:

    • Directorypackages/common/agent-connection
      • Directorysrc
        • Directoryapp
          • <target-agent-name>-client.ts Cliente de alto nível para o agente A2A conectado
        • Directorycore
          • agentcore-a2a-client.ts Cliente A2A AgentCore de baixo nível com autenticação SigV4
        • index.ts Exporta todos os clientes
      • project.json
      • tsconfig.json

    Além disso, ele:

    • Transforma o agent.ts do seu agente para registrar o agente A2A remoto como uma tool Strands
    • Atualiza o target serve-local do agente para depender do target serve-local do agente de destino
    • Instala as dependências necessárias

    O gerador transforma o agent.ts do seu agente para envolver o agente A2A remoto como uma ferramenta:

    packages/example/src/my-agent/agent.ts
    import { Agent, tool } from '@strands-agents/sdk';
    import { RemoteAgentClient } from ':my-scope/agent-connection';
    import { z } from 'zod';
    export const getAgent = async (sessionId: string) => {
    const remoteAgent = await RemoteAgentClient.create(sessionId);
    const remoteAgentTool = tool({
    name: 'askRemoteAgent',
    description: 'Delegate a question to the remote RemoteAgent A2A agent and return its reply.',
    inputSchema: z.object({ prompt: z.string() }),
    callback: async ({ prompt }) => (await remoteAgent.invoke(prompt)).toString(),
    });
    return new Agent({
    systemPrompt: '...',
    tools: [remoteAgentTool],
    });
    };

    O parâmetro sessionId é conectado através do chamador, garantindo consistência para Bedrock AgentCore Observability.

    Internamente, RemoteAgentClient.create(sessionId) retorna um A2AAgent Strands configurado com um clientFactory de assinatura SigV4 quando implantado na AWS, e um endpoint simples http://localhost:<port>/ quando SERVE_LOCAL=true.

    Após executar o gerador de conexão, você precisa conceder ao agente host permissão para invocar o agente A2A remoto.

    packages/infra/src/stacks/application-stack.ts
    const remoteAgent = new RemoteAgent(this, 'RemoteAgent');
    const myAgent = new MyAgent(this, 'MyAgent');
    // Grant the host agent permission to invoke the remote A2A agent
    remoteAgent.grantInvokeAccess(myAgent);

    grantInvokeAccess em um agente A2A configura tanto bedrock-agentcore:InvokeAgentRuntime quanto bedrock-agentcore:GetAgentCard — o cliente A2A precisa de ambos para buscar o cartão do agente e enviar mensagens.

    O ARN do runtime AgentCore do agente remoto é automaticamente registrado no namespace agentcore da Runtime Configuration pelo construto CDK gerado, para que o agente host possa descobri-lo em tempo de execução.

    O gerador configura o target serve-local do agente host para:

    1. Iniciar o(s) agente(s) A2A conectado(s) automaticamente
    2. Definir SERVE_LOCAL=true para que o cliente gerado se conecte diretamente a http://localhost:<port>/ em vez de AgentCore

    Execute o agente localmente com:

    Terminal window
    pnpm nx <agent-name>-serve-local <project-name>

    Isso iniciará tanto o agente host quanto todos os agentes A2A conectados, com o agente host chamando os agentes remotos via HTTP simples em suas portas locais atribuídas.