Agente Python
Gere um agente de IA em Python para construir agentes com ferramentas, e opcionalmente implante-o no Amazon Bedrock AgentCore Runtime. Escolha o framework do agente com a opção framework: Strands (o padrão) ou LangChain (construído sobre LangGraph).
O gerador expõe seu agente através de um protocol de servidor. Ambos os frameworks suportam HTTP (o padrão), o protocolo Agent-to-Agent (A2A) para interoperabilidade com outros agentes compatíveis com A2A, e o protocolo AG-UI para integração direta com frontend via CopilotKit.
Gerar um Agente
Seção intitulada “Gerar um Agente”Você pode gerar um Agente Python de duas formas:
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - py#agent - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:py#agentyarn nx g @aws/nx-plugin:py#agentnpx nx g @aws/nx-plugin:py#agentbunx nx g @aws/nx-plugin:py#agentVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:py#agent --dry-runyarn nx g @aws/nx-plugin:py#agent --dry-runnpx nx g @aws/nx-plugin:py#agent --dry-runbunx nx g @aws/nx-plugin:py#agent --dry-run| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| project Obrigatório | string | - | O projeto ao qual adicionar o Agent |
| framework | strands | langchain | strands | O SDK do agente a ser usado. |
| name | string | - | O nome do seu Agent (padrão: agent) |
| auth | iam | cognito | iam | O método usado para autenticar com seu Agent. Aplicável apenas quando infra está definido (ignorado quando infra é none). |
| protocol | http | a2a | ag-ui | http | O protocolo do servidor para o seu Agent. HTTP expõe um servidor HTTP FastAPI. A2A expõe um servidor de protocolo Agent-to-Agent. AG-UI expõe um servidor de protocolo Agent-User Interaction para integração direta com frontend. |
| iac | inherit | cdk | terraform | inherit | O provedor IaC preferido. Por padrão, isso é herdado da sua seleção inicial. |
| infra | agentcore | none | agentcore | O tipo de infraestrutura para hospedar seu Agent. |
| 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 geradores subsequentes possam computar o grafo de projetos Nx); instale uma vez no final. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador adicionará os seguintes arquivos ao seu projeto Python existente. Os arquivos gerados dependem do protocol escolhido:
Protocolo HTTP (padrão)
Seção intitulada “Protocolo HTTP (padrão)”Directoryyour-project/
Directoryyour_module/
Directoryagent/ (ou nome personalizado se especificado)
- __init__.py Inicialização do pacote Python
- init.py Configuração da aplicação FastAPI com middleware CORS e tratamento de erros
- agent.py Definição principal do agente com ferramentas de exemplo
- main.py Ponto de entrada FastAPI para Bedrock AgentCore Runtime
- Dockerfile Ponto de entrada para hospedar seu agente (excluído quando
infraéNone)
- pyproject.toml Atualizado com dependências do Strands
- project.json Atualizado com alvos de serviço do agente
Protocolo A2A
Seção intitulada “Protocolo A2A”O ponto de entrada expõe seu agente através do protocolo A2A (Strands usa o Strands A2A Server; LangChain envolve o grafo em um executor a2a-sdk), montado em uma aplicação FastAPI:
Directoryyour-project/
Directoryyour_module/
Directoryagent/ (ou nome personalizado se especificado)
- __init__.py Inicialização do pacote Python
- agent.py Definição principal do agente com ferramentas de exemplo
- main.py Ponto de entrada do servidor A2A
- Dockerfile Ponto de entrada para hospedar seu agente (excluído quando
infraéNone)
- pyproject.toml Atualizado com dependências do framework e A2A
- project.json Atualizado com alvos de serviço do agente
Protocolo AG-UI
Seção intitulada “Protocolo AG-UI”O ponto de entrada expõe seu agente via protocolo AG-UI para integração direta com frontend usando CopilotKit. Agentes Strands usam a integração ag-ui-strands; agentes LangChain usam ag-ui-langgraph:
Directoryyour-project/
Directoryyour_module/
Directoryagent/ (ou nome personalizado se especificado)
- __init__.py Inicialização do pacote Python
- agent.py Definição principal do agente com ferramentas de exemplo
- main.py Ponto de entrada do servidor AG-UI
- Dockerfile Ponto de entrada para hospedar seu agente (excluído quando
infraéNone)
- pyproject.toml Atualizado com dependências do framework e AG-UI
- project.json Atualizado com alvos de serviço do agente
Infraestrutura
Seção intitulada “Infraestrutura”Como este gerador fornece infraestrutura como código com base no iacProvider escolhido, ele criará um projeto em packages/common que inclui os constructs CDK ou módulos Terraform relevantes.
O projeto comum de infraestrutura como código está estruturado da seguinte forma:
Directorypackages/common/constructs
Directorysrc
Directoryapp/ Constructs para infraestrutura específica de um projeto/gerador
- …
Directorycore/ Constructs genéricos reutilizados pelos constructs em
app- …
- index.ts Ponto de entrada exportando os constructs de
app
- project.json Metas de build e configuração do projeto
Directorypackages/common/terraform
Directorysrc
Directoryapp/ Módulos Terraform para infraestrutura específica de um projeto/gerador
- …
Directorycore/ Módulos genéricos reutilizados pelos módulos em
app- …
- project.json Metas de build e configuração do projeto
Para implantar seu Agente, os seguintes arquivos são gerados:
Directorypackages/common/constructs/src
Directoryapp
Directoryagents
Directory<project-name>
- <project-name>.ts Construct CDK para implantar seu agente
Directorypackages/common/terraform/src
Directoryapp
Directoryagents
Directory<project-name>
- <project-name>.tf Módulo para implantar seu agente
Directorycore
Directoryagent-core
- runtime.tf Módulo genérico para implantação no Bedrock AgentCore Runtime
Se você selecionou None para infra, nenhum construct CDK ou módulo Terraform é gerado — o Agente só pode ser executado localmente. A opção auth é ignorada neste modo, pois não há endpoint hospedado para autenticar.
Arquitetura
Seção intitulada “Arquitetura”Quando implantado no Bedrock AgentCore Runtime, o agente é construído em uma imagem de contêiner, enviado para o Amazon ECR e executado no AgentCore Runtime. Os clientes invocam o endpoint do plano de dados do AgentCore Runtime, que encaminha as solicitações para o seu agente. O agente chama o Amazon Bedrock para inferência de modelo e pode invocar ferramentas, servidores MCP ou APIs downstream.
Com infra: None, nenhuma infraestrutura AWS é gerada. O agente é executado como um processo local e chama o Amazon Bedrock para inferência de modelo.
Trabalhando com Seu Agente
Seção intitulada “Trabalhando com Seu Agente”Você pode editar agent.py para adicionar ferramentas, configurar o modelo e personalizar o prompt do sistema. A API depende do framework que você escolheu.
Adicionando Ferramentas
Seção intitulada “Adicionando Ferramentas”Ferramentas são funções que o agente de IA pode chamar para executar ações. Ambos os frameworks usam uma abordagem baseada em decoradores para definir ferramentas, derivam o nome e a descrição da ferramenta a partir do nome da função e da docstring, e geram o schema de entrada a partir de suas dicas de tipo.
from strands import Agent, tool
@tooldef calculate_sum(numbers: list[int]) -> int: """Calculate the sum of a list of numbers""" return sum(numbers)
@tooldef get_weather(city: str) -> str: """Get weather information for a city""" # Your weather API integration here return f"Weather in {city}: Sunny, 25°C"
# Add tools to your agentagent = Agent( system_prompt="You are a helpful assistant with access to various tools.", tools=[calculate_sum, get_weather],)from langchain.agents import create_agentfrom langchain_aws import ChatBedrockConversefrom langchain_core.tools import tool
@tooldef calculate_sum(numbers: list[int]) -> int: """Calculate the sum of a list of numbers""" return sum(numbers)
@tooldef get_weather(city: str) -> str: """Get weather information for a city""" # Your weather API integration here return f"Weather in {city}: Sunny, 25°C"
# Add tools to your agentagent = create_agent( model=ChatBedrockConverse(model=MODEL_ID, region_name=REGION), tools=[calculate_sum, get_weather], system_prompt="You are a helpful assistant with access to various tools.",)Usando Ferramentas Pré-construídas
Seção intitulada “Usando Ferramentas Pré-construídas”Strands fornece uma coleção de ferramentas pré-construídas através do pacote strands-tools:
from strands_tools import current_time, http_request, file_read
agent = Agent( system_prompt="You are a helpful assistant.", tools=[current_time, http_request, file_read],)LangChain fornece um grande ecossistema de ferramentas e integrações. Instale o pacote de integração relevante e então passe as ferramentas para create_agent:
from langchain_community.tools import DuckDuckGoSearchRun
agent = create_agent( model=ChatBedrockConverse(model=MODEL_ID, region_name=REGION), tools=[DuckDuckGoSearchRun()], system_prompt="You are a helpful assistant.",)Configuração de Modelo
Seção intitulada “Configuração de Modelo”Por padrão, agentes Strands usam Claude 4 Sonnet, mas você pode personalizar o provedor de modelo. Consulte a documentação do Strands sobre provedores de modelos para opções de configuração:
from strands import Agentfrom strands.models import BedrockModel
# Create a BedrockModelbedrock_model = BedrockModel( model_id="anthropic.claude-sonnet-4-20250514-v1:0", region_name="us-west-2", temperature=0.3,)
agent = Agent(model=bedrock_model)Agentes LangChain usam um modelo ChatBedrockConverse. O agente gerado lê o id do modelo e a região das variáveis de ambiente MODEL_ID e AWS_REGION, mas você pode configurar o modelo diretamente em agent.py:
from langchain_aws import ChatBedrockConverse
model = ChatBedrockConverse( model="anthropic.claude-sonnet-4-20250514-v1:0", region_name="us-west-2", temperature=0.3,)Consumindo Servidores MCP
Seção intitulada “Consumindo Servidores MCP”Para consumir servidores MCP criados usando os geradores py#mcp-server ou ts#mcp-server, você pode usar o gerador connection, que conecta as ferramentas do servidor MCP ao seu agente para ambos os frameworks.
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulte o guia do gerador connection para detalhes sobre como a conexão é configurada.
Para outros servidores MCP, consulte a documentação MCP do Strands ou LangChain.
Para um guia mais detalhado sobre escrita de agentes, consulte a documentação do Strands ou LangChain.
Protocolo
Seção intitulada “Protocolo”O protocolo de servidor do seu agente determina como ele se comunica. Todas as opções são servidas pelo FastAPI — o ponto de entrada difere:
- HTTP (padrão): Um servidor FastAPI padrão com um endpoint
/invocationspersonalizado, CORS e streaming. Melhor para integrações de clientes personalizados. - A2A: Um servidor Agent-to-Agent montado em uma aplicação FastAPI (Strands usa o Strands A2A Server; LangChain usa o
a2a-sdkagnóstico de framework). Melhor quando seu agente precisa ser descoberto e invocado por outros agentes compatíveis com A2A. - AG-UI: O protocolo AG-UI via SSE (Strands usa
ag-ui-strands; LangChain usaag-ui-langgraph). Melhor para integração direta com frontend usando CopilotKit em um website React.
O ponto de entrada do servidor difere por framework (Strands produz um Agent gerenciado por contexto, enquanto LangChain conduz um grafo create_agent compilado), mas o contrato externo para cada protocolo é o mesmo.
Todos os protocolos expõem /ping para o contrato de verificação de saúde do runtime AgentCore. Agentes A2A escutam na porta 9000; agentes HTTP e AG-UI escutam na porta 8080. O Dockerfile e a infraestrutura gerados são configurados para você.
Servidor FastAPI (protocolo HTTP)
Seção intitulada “Servidor FastAPI (protocolo HTTP)”O servidor HTTP gerado inclui:
- Configuração da aplicação FastAPI com middleware CORS
- Middleware de tratamento de erros
- Geração de schema OpenAPI
- Endpoint de verificação de saúde (
/ping) - Endpoint de invocação do agente (
/invocations)
Personalizando Entradas e Saídas de Invocação com Pydantic
Seção intitulada “Personalizando Entradas e Saídas de Invocação com Pydantic”O endpoint de invocação do agente usa modelos Pydantic para definir e validar os schemas de requisição e resposta. Você pode personalizar esses modelos em main.py para atender aos requisitos do seu agente.
Definindo Modelos de Entrada
Seção intitulada “Definindo Modelos de Entrada”O modelo padrão InvokeInput aceita uma mensagem.
from pydantic import BaseModel
class InvokeInput(BaseModel): message: strVocê pode estender este modelo para incluir quaisquer campos adicionais que seu agente necessite.
O ID de sessão é extraído do cabeçalho HTTP x-amzn-bedrock-agentcore-runtime-session-id, consistente com o contrato de sessão do Bedrock AgentCore Runtime. Se o cabeçalho não for fornecido, um UUID aleatório é gerado como fallback.
Definindo Modelos de Saída
Seção intitulada “Definindo Modelos de Saída”Para respostas em streaming, o gerador fornece JsonStreamingResponse que serializa automaticamente modelos Pydantic para o formato JSON Lines (application/jsonl). Este formato é compatível com a especificação de streaming do OpenAPI 3.2 e funciona perfeitamente com o cliente TypeScript gerado.
Por padrão, o agente produz objetos StreamChunk contendo o texto de resposta do agente:
class StreamChunk(BaseModel): content: strVocê pode personalizar o modelo StreamChunk para atender às suas necessidades:
from pydantic import BaseModel
class StreamChunk(BaseModel): content: str timestamp: str token_count: intExiste uma solicitação de recurso aberta para suporte nativo no FastAPI.
Bedrock AgentCore Python SDK
Seção intitulada “Bedrock AgentCore Python SDK”O gerador inclui uma dependência no Bedrock AgentCore Python SDK para as constantes PingStatus. Se desejar, é simples usar BedrockAgentCoreApp em vez de FastAPI, porém note que a segurança de tipos é perdida.
Você pode encontrar mais detalhes sobre as capacidades do SDK na documentação aqui.
Servidor A2A (protocolo A2A)
Seção intitulada “Servidor A2A (protocolo A2A)”O main.py gerado monta um servidor A2A em uma aplicação FastAPI pai que também expõe /ping. Agentes Strands usam o A2AServer do Strands; agentes LangChain envolvem o grafo compilado em um AgentExecutor do a2a-sdk. Quando implantado no AgentCore, o ponto de entrada resolve o ARN público do runtime a partir do AppConfig e o anuncia no cartão do agente.
A maioria dos usuários não precisará modificar este arquivo; edite agent.py para alterar ferramentas ou o prompt do sistema. O servidor A2A popula o cartão do agente (/.well-known/agent-card.json) a partir do name e description do agente.
Servidor AG-UI (protocolo AG-UI)
Seção intitulada “Servidor AG-UI (protocolo AG-UI)”O main.py gerado expõe um único endpoint POST que transmite eventos AG-UI via Server-Sent Events (SSE), além de /ping para a verificação de saúde do runtime AgentCore. A conexão depende do framework:
- Strands: envolve seu
Agentem umag_ui_strands.StrandsAgente cria a aplicação FastAPI viacreate_strands_app(). - LangChain: envolve o grafo compilado em um
ag_ui_langgraph.LangGraphAgente o serve a partir de um loop FastAPI/invocationsfeito manualmente.
A maioria dos usuários não precisará modificar este arquivo — edite agent.py para alterar ferramentas ou o prompt do sistema.
Executando Seu Agente
Seção intitulada “Executando Seu Agente”Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”Para executar seu Agente (e tudo conectado a ele) localmente, use o alvo dev do projeto:
pnpm nx dev your-projectyarn nx dev your-projectnpx nx dev your-projectbunx nx dev your-projectSe você adicionou múltiplos componentes ao seu projeto (agentes, servidores MCP, etc.), isso inicia todos eles. Para executar apenas este agente, use seu alvo <your-agent-name>-dev:
pnpm nx agent-dev your-projectyarn nx agent-dev your-projectnpx nx agent-dev your-projectbunx nx agent-dev your-projectIsso usa uv run para executar seu Agente usando o Bedrock AgentCore Python SDK.
Converse com Seu Agente
Seção intitulada “Converse com Seu Agente”O gerador configura um alvo Nx <your-agent-name>-chat que o coloca em um chat interativo de terminal com seu agente.
O alvo de chat é executado de forma independente. Por padrão, ele se conecta ao seu agente em execução local, então inicie primeiro o alvo <your-agent-name>-dev do agente (em um terminal separado):
pnpm nx agent-dev your-projectyarn nx agent-dev your-projectnpx nx agent-dev your-projectbunx nx agent-dev your-projectEm seguida, em outro terminal, inicie o chat:
pnpm nx run your-project:agent-chatyarn nx run your-project:agent-chatnpx nx run your-project:agent-chatbunx nx run your-project:agent-chatO gerador emite um scripts/<your-agent-name>/chat.ts para cada protocolo. Ele se conecta ao agente local por padrão, ou ao seu agente implantado quando RUNTIME_CONFIG_APP_ID está definido (veja Converse com seu agente implantado abaixo).
Para agentes HTTP, o script de chat usa um cliente TypeScript com segurança de tipos gerado a partir da especificação OpenAPI do agente. O gerador também emite:
scripts/<your-agent-name>_openapi.py— um pequeno script que exporta a especificação OpenAPI do agente- Um alvo Nx
<your-agent-name>-openapique o executa - Um alvo Nx
<your-agent-name>-generate-clientque produz um cliente TypeScript com segurança de tipos emscripts/<your-agent-name>/generated/
Quando você personalizar a forma de entrada do agente (por exemplo, adicionar novos campos a InvokeInput), atualize chat.ts para passar os novos campos ao invocar o agente e o resto funciona automaticamente.
Converse com seu agente implantado
Seção intitulada “Converse com seu agente implantado”Para conversar com seu agente implantado no Bedrock AgentCore, defina a variável de ambiente RUNTIME_CONFIG_APP_ID para o id da aplicação AppConfig da implantação (saída como RuntimeConfigApplicationId pela stack implantada). O script de chat resolve o ARN de runtime do seu agente a partir da configuração de runtime e se conecta ao endpoint implantado:
Para agentes autenticados por IAM, as requisições são assinadas com SigV4 usando suas credenciais AWS padrão. Certifique-se de que o ambiente tenha credenciais AWS com permissão para invocar o runtime:
RUNTIME_CONFIG_APP_ID=<app-id> pnpm nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> yarn nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> npx nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> bunx nx run your-project:agent-chatPara agentes autenticados por Cognito, forneça um token de acesso Cognito através da variável de ambiente AGENT_ACCESS_TOKEN, que é enviado como um bearer token:
RUNTIME_CONFIG_APP_ID=<app-id> AGENT_ACCESS_TOKEN=<access-token> pnpm nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> AGENT_ACCESS_TOKEN=<access-token> yarn nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> AGENT_ACCESS_TOKEN=<access-token> npx nx run your-project:agent-chatRUNTIME_CONFIG_APP_ID=<app-id> AGENT_ACCESS_TOKEN=<access-token> bunx nx run your-project:agent-chatVocê pode obter um token de acesso usando o comando cognito-idp admin-initiate-auth da AWS CLI, por exemplo:
aws cognito-idp admin-initiate-auth \ --user-pool-id <user-pool-id> \ --client-id <user-pool-client-id> \ --auth-flow ADMIN_NO_SRP_AUTH \ --auth-parameters USERNAME=<username>,PASSWORD=<password> \ --query 'AuthenticationResult.AccessToken' \ --output textImplantando Seu Agente no Bedrock AgentCore Runtime
Seção intitulada “Implantando Seu Agente no Bedrock AgentCore Runtime”Infraestrutura como Código
Seção intitulada “Infraestrutura como Código”Se você selecionou agentcore para infra, a infraestrutura CDK ou Terraform relevante é gerada, que você pode usar para implantar seu Agent no Amazon Bedrock AgentCore Runtime.
Um construto CDK é gerado para o seu agente, nomeado com base no name que você escolheu ao executar o gerador, ou <ProjectName>Agent por padrão.
Você pode usar este construto CDK em uma aplicação CDK:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { new MyProjectAgent(this, 'MyProjectAgent'); }}Um módulo Terraform é gerado para você, nomeado com base no name que você escolheu ao executar o gerador, ou <ProjectName>-agent por padrão.
Passe as saídas do módulo runtime_config_appconfig compartilhado para o módulo do agente:
module "my_project_agent" { source = "../../common/terraform/src/app/agents/my-project-agent"
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn}Autenticação
Seção intitulada “Autenticação”O gerador fornece uma opção auth para configurar a autenticação para o seu Agent. Você pode escolher entre autenticação IAM (padrão) ou Cognito ao gerar seu agente.
Por padrão, seu Agent será protegido usando autenticação IAM, basta implantá-lo sem nenhum argumento:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { new MyProjectAgent(this, 'MyProjectAgent'); }}Você pode conceder acesso para invocar seu agente no Bedrock AgentCore Runtime usando o método grantInvokeAccess, por exemplo:
import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const agent = new MyProjectAgent(this, 'MyProjectAgent'); const lambdaFunction = new Function(this, ...);
agent.grantInvokeAccess(lambdaFunction); }}# Agentmodule "my_project_agent" { # Relative path to the generated module in the common/terraform project source = "../../common/terraform/src/app/agents/my-project-agent"
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn}Para conceder acesso para invocar seu agente, você precisará adicionar uma política como a seguinte, referenciando a saída module.my_project_agent.agent_core_runtime_arn:
{ Effect = "Allow" Action = [ "bedrock-agentcore:InvokeAgentRuntime" ] Resource = [ module.my_project_agent.agent_core_runtime_arn, "${module.my_project_agent.agent_core_runtime_arn}/*" ]}Autenticação Cognito
Seção intitulada “Autenticação Cognito”Quando você seleciona autenticação Cognito, o gerador configura o agente para usar Cognito para autenticação.
O construto gerado aceita uma propriedade identity que configura a autenticação Cognito:
import { MyProjectAgent, UserIdentity } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const identity = new UserIdentity(this, 'Identity');
new MyProjectAgent(this, 'MyProjectAgent', { identity, }); }}O construto UserIdentity pode ser gerado usando o gerador ts#website#auth, ou você pode criar seu próprio UserPool e UserPoolClient CDK.
O módulo gerado aceita variáveis user_pool_id e user_pool_client_ids para autenticação Cognito:
module "user_identity" { source = "../../common/terraform/src/core/user-identity"}
module "my_project_agent" { source = "../../common/terraform/src/app/agents/my-project-agent"
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn
user_pool_id = module.user_identity.user_pool_id user_pool_client_ids = [module.user_identity.user_pool_client_id]}Alvos Bundle e Docker
Seção intitulada “Alvos Bundle e Docker”Para construir seu Agente para o Bedrock AgentCore Runtime, um alvo bundle é adicionado ao seu projeto, que:
- Exporta suas dependências Python para um arquivo
requirements.txtusandouv export - Instala dependências para a plataforma alvo (
aarch64-manylinux_2_28) usandouv pip install
Um alvo docker específico para seu Agente também é adicionado, que copia o Dockerfile e os artefatos empacotados para um diretório de contexto docker. Isso co-localiza o Dockerfile com a saída construída, permitindo que o CDK construa a imagem Docker diretamente usando AgentRuntimeArtifact.fromAsset.
Observabilidade
Seção intitulada “Observabilidade”Seu agente é configurado automaticamente com observabilidade usando o AWS Distro for Open Telemetry (ADOT), através da configuração de auto-instrumentação em seu Dockerfile.
Você pode encontrar traces no Console AWS CloudWatch, selecionando “GenAI Observability” no menu. Note que para os traces serem populados, você precisará habilitar o Transaction Search.
Para mais detalhes, consulte a documentação do AgentCore sobre observabilidade.
Invocando seu Agente
Seção intitulada “Invocando seu Agente”Invocar o Servidor Local
Seção intitulada “Invocar o Servidor Local”Para invocar um Agente executando localmente através do alvo <your-agent-name>-serve, você pode enviar uma requisição POST simples para /invocations na porta em que seu agente local está sendo executado. Por exemplo, com curl:
curl -N -X POST http://localhost:8081/invocations \ -d '{"message": "what is 3 + 5?"}' \ -H "Content-Type: application/json"Invocar o Agente Implantado
Seção intitulada “Invocar o Agente Implantado”Para invocar seu Agent implantado no Bedrock AgentCore Runtime, você pode enviar uma requisição POST para o endpoint do dataplane do Bedrock AgentCore Runtime com seu ARN de runtime codificado em URL.
Você pode obter o ARN de runtime da sua infraestrutura da seguinte forma:
import { CfnOutput } from 'aws-cdk-lib';import { MyProjectAgent } from ':my-scope/common-constructs';
export class ExampleStack extends Stack { constructor(scope: Construct, id: string) { const agent = new MyProjectAgent(this, 'MyProjectAgent');
new CfnOutput(this, 'AgentArn', { value: agent.agentCoreRuntime.agentRuntimeArn, }); }}# Agentmodule "my_project_agent" { # Relative path to the generated module in the common/terraform project source = "../../common/terraform/src/app/agents/my-project-agent"
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn}
output "agent_arn" { value = module.my_project_agent.agent_core_runtime_arn}O ARN terá o seguinte formato: arn:aws:bedrock-agentcore:<region>:<account>:runtime/<agent-runtime-id>.
Você pode então codificar o ARN em URL substituindo : por %3A e / por %2F.
A URL do dataplane do Bedrock AgentCore Runtime para invocar o agent é a seguinte:
https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocationsA maneira exata de invocar esta URL depende do método de autenticação usado.
Autenticação IAM
Seção intitulada “Autenticação IAM”Para Autenticação IAM, a requisição deve ser assinada usando AWS Signature Version 4 (SigV4).
acurl <region> bedrock-agentcore -N -X POST \'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \-d '{"message": "what is 3 + 5?"}' \-H 'Content-Type: application/json'Curl habilitado com Sigv4
Você pode adicionar o seguinte script ao seu arquivo .bashrc (e executar source nele) ou colar o seguinte no mesmo terminal em que deseja executar o comando.
acurl () { REGION=$1 SERVICE=$2 shift; shift; curl --aws-sigv4 "aws:amz:$REGION:$SERVICE" --user "$(aws configure get aws_access_key_id):$(aws configure get aws_secret_access_key)" -H "X-Amz-Security-Token: $(aws configure get aws_session_token)" "$@"}Para fazer uma requisição curl autenticada com sigv4, invoque acurl da seguinte forma:
acurl <region> <service> <other-curl-arguments>Por exemplo:
API Gateway
Seção intitulada “API Gateway”acurl ap-southeast-2 execute-api -X GET https://xxxStreaming Lambda function url
Seção intitulada “Streaming Lambda function url”acurl ap-southeast-2 lambda -N -X POST https://xxxVocê pode adicionar a seguinte função ao seu perfil do PowerShell ou colar o seguinte na mesma sessão do PowerShell em que deseja executar o comando.
# PowerShell profile or current sessionfunction acurl { param( [Parameter(Mandatory=$true)][string]$Region, [Parameter(Mandatory=$true)][string]$Service, [Parameter(ValueFromRemainingArguments=$true)][string[]]$CurlArgs )
$AccessKey = aws configure get aws_access_key_id $SecretKey = aws configure get aws_secret_access_key $SessionToken = aws configure get aws_session_token
& curl --aws-sigv4 "aws:amz:$Region`:$Service" --user "$AccessKey`:$SecretKey" -H "X-Amz-Security-Token: $SessionToken" @CurlArgs}Para fazer uma requisição curl autenticada com sigv4, invoque acurl usando estes exemplos:
API Gateway
Seção intitulada “API Gateway”acurl ap-southeast-2 execute-api -X GET https://xxxStreaming Lambda function url
Seção intitulada “Streaming Lambda function url”acurl ap-southeast-2 lambda -N -X POST https://xxxAutenticação JWT / Cognito
Seção intitulada “Autenticação JWT / Cognito”Para Autenticação Cognito, passe o Token de Acesso Cognito no cabeçalho Authorization:
curl -N -X POST 'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \ -d '{"message": "what is 3 + 5?"}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <access-token>"Você pode obter o token de acesso usando o comando cognito-idp admin-initiate-auth da AWS CLI, por exemplo:
aws cognito-idp admin-initiate-auth \ --user-pool-id <user-pool-id> \ --client-id <user-pool-client-id> \ --auth-flow ADMIN_NO_SRP_AUTH \ --auth-parameters USERNAME=<username>,PASSWORD=<password> \ --region <region> \ --query 'AuthenticationResult.AccessToken' \ --output textNavegador / Website React
Seção intitulada “Navegador / Website React”Para invocar seu Agente a partir de um website React, você pode usar o gerador connection, que configura automaticamente um cliente com a autenticação correta (IAM ou Cognito).
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulte o guia do gerador connection para detalhes sobre como a conexão é configurada.
Invocando um Agente A2A como Ferramenta
Seção intitulada “Invocando um Agente A2A como Ferramenta”Para delegar trabalho deste agente para um agente A2A remoto (seja TypeScript ou Python), use o gerador connection. Ele fornece um cliente autenticado com SigV4 para o agente alvo e transforma via AST o agent.py deste agente para registrar o agente A2A remoto como um delegado decorado com @tool.
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulte o guia do gerador connection para detalhes sobre como a conexão é configurada.
Invocando um Agente AG-UI
Seção intitulada “Invocando um Agente AG-UI”Para invocar seu agente AG-UI a partir de um website React, use o gerador connection, que configura um cliente CopilotKit configurado para seu agente implantado com a autenticação correta (IAM ou Cognito).
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runConsulte o guia do gerador connection para detalhes sobre como a conexão é configurada.
Conexões
Seção intitulada “Conexões”Use o gerador connection para integrar este projeto com outros em seu workspace. As seguintes conexões envolvem este projeto: