Pular para o conteúdo

Agente Python para Agente A2A

O gerador connection pode conectar seu Python 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 infraestrutura 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 Python com um componente Python Agent (Strands ou LangChain)
  2. Um projeto com um componente Agent gerado com --protocol=A2A e --auth=IAM (seja ts#agent ou py#agent)
  3. Ambos os componentes criados com infra: agentcore
  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.
    preferInstallDependencies boolean true Se deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

    O gerador cria um projeto Python compartilhado agent_connection em packages/common/agent_connection/ (se ainda não existir). Módulos cliente por conexão são gerados neste projeto compartilhado:

    • Directorypackages/common/agent_connection
      • Directory<scope>_agent_connection
        • __init__.py Re-exporta clientes por conexão
        • Directorycore
          • agentcore_endpoints.py Resolução de ARN/URL independente de framework
          • agentcore_a2a_client_config.py Configuração de cliente A2A independente de framework (ClientConfig assinado)
          • agentcore_a2a_client_<framework>.py Cliente A2A encapsulando a configuração para o framework do seu agente
          • Directoryauth/ httpx.Auth SigV4 / encaminhamento de sessão independente de framework
        • Directoryapp
          • <target_agent_name>_client_<framework>.py Cliente A2A por conexão para cada agente A2A

    O sufixo do cliente corresponde ao framework do seu agente (_strands ou _langchain). Ambos encapsulam o mesmo ClientConfig assinado independente de framework: o cliente Strands encapsula um A2AAgent Strands, enquanto o cliente LangChain aciona o a2a SDK diretamente, de modo que um agente LangChain não inclui nenhuma dependência Strands.

    Além disso, o gerador:

    • Transforma o agent.py do seu agente para registrar o agente A2A remoto como uma ferramenta usando @tool
    • Adiciona o projeto agent_connection como uma dependência de workspace do seu projeto de agente
    • Atualiza o target dev do agente para depender do target dev do agente de destino

    O gerador transforma o agent.py do seu agente para encapsular o agente A2A remoto como uma ferramenta. O agente remoto é registrado com um delegado decorado com @tool — a importação do decorador e o construtor do agente diferem por framework:

    packages/my-project/my_module/agent/agent.py
    from contextlib import contextmanager
    from strands import Agent, tool
    from my_scope_agent_connection import RemoteAgentClientStrands
    @contextmanager
    def get_agent():
    remote_agent = RemoteAgentClientStrands.create()
    @tool
    def ask_remote_agent(prompt: str) -> str:
    """Delegate a question to the remote RemoteAgent A2A agent and return its reply."""
    return str(remote_agent(prompt))
    yield Agent(
    system_prompt="...",
    tools=[ask_remote_agent],
    )

    Ambos os clientes são diretamente chamáveis, retornando a resposta do agente remoto, e encapsulam um httpx.AsyncClient que assina requisições com SigV4 quando implantado na AWS e usa um endpoint simples http://localhost:<port>/ quando SERVE_LOCAL=true. O cliente Strands encapsula um A2AAgent Strands; o cliente LangChain aciona o a2a SDK diretamente.

    O ID de sessão do AgentCore é propagado para o agente remoto automaticamente via cabeçalho X-Amzn-Bedrock-AgentCore-Runtime-Session-Id, independentemente do framework: o servidor do agente vincula a sessão da requisição de entrada em um contexto assíncrono, e o httpx.Auth assinado do cliente de conexão o carimba em cada chamada de saída — garantindo consistência para Bedrock AgentCore Observability.

    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 do AgentCore

    Execute o agente localmente com:

    Terminal window
    pnpm nx <agent-name>-dev <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. �das. uídas.