As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Otimize seu agente para o Amazon Bedrock AgentCore Runtime V2
O Amazon Bedrock AgentCore Runtime V2 inicia seu agente restaurando um snapshot. Isso muda a forma como você estrutura o código do agente. O trabalho que seu agente realiza na inicialização é capturado no snapshot e compartilhado por cada instância restaurada. Em vez disso, produza qualquer valor que deva ser diferente entre as solicitações ou que possa expirar em seu manipulador de solicitações. Este tópico descreve como estruturar seu agente em torno do trabalho de inicialização e do trabalho por solicitação para que ele permaneça correto após cada restauração. Para obter uma visão geral da versão V2 da plataforma, consulte Versões Versões da plataforma da plataforma.
Seu agente tem dois contextos de execução:
- Startup
-
Código que é executado uma vez no início do processo, antes que o AgentCore Runtime tire o instantâneo. AgentCore O Runtime captura esse código no snapshot e cada instância herda seus resultados.
- Tratamento de solicitações
-
O código em seu
/invocationsmanipulador. Esse código é executado em todas as solicitações em todas as instâncias.
Use uma regra para decidir onde o código pertence. Calcule um valor na inicialização se ele permanecer o mesmo durante toda a vida útil do instantâneo. Calcule-o em seu manipulador se ele variar de acordo com a solicitação ou se puder expirar. AgentCore O Runtime tira um instantâneo por versão do agente e o usa até que você crie ou atualize o agente, então a vida útil do instantâneo é a vida útil dessa versão.
Inicialize uma vez na inicialização
Faça um trabalho caro e reutilizável no início do processo, antes do snapshot. Por exemplo, importe dependências, carregue pesos do modelo ou leia a configuração estática do seu pacote de implantação. Com o AgentCore SDK, faça esse trabalho no escopo do módulo, antes de ligarapp.run(). Seu agente não escuta na porta 8080 até que seja app.run() executado, portanto, nenhuma /ping pode ser bem-sucedida e nenhum instantâneo pode ser obtido até que o trabalho de inicialização seja concluído. O instantâneo captura um agente totalmente inicializado por construção e você não precisa se conectar. /ping Conclua a inicialização em até 120 segundos após a inicialização. Se seu agente não ficar íntegro a tempo, o tempo de execução falhará na verificação de integridade. Para obter mais informações sobre os /invocations endpoints /ping e, consulte Compreender o contrato AgentCore de serviço Runtime.
import json, pathlib from bedrock_agentcore.runtime import BedrockAgentCoreApp # Runs once at import, before app.run() starts the server and before the # snapshot. Every restored instance inherits these objects. MODEL = load_model_weights() SETTINGS = json.loads((pathlib.Path(__file__).parent / "agent.json").read_text()) app = BedrockAgentCoreApp() @app.entrypoint def invoke(payload): # Per-request work runs here on every instance. ... app.run() # starts listening on 8080; the snapshot is taken after this
Se seu agente executar seu próprio servidor HTTP em vez do AgentCore SDK, reporte um status íntegro /ping somente após a conclusão da inicialização, para que o snapshot capture um agente totalmente inicializado.
Leia somente dados na inicialização que sejam iguais para todas as instâncias e que não expirem. Gerencie valores urgentes, como credenciais de curta duração, em seu manipulador.
nota
Não compute nada na inicialização que você altere sem reimplantar. Por exemplo, um catálogo de ferramentas obtido do AgentCore Gateway parece um valor inicial ideal porque é lento e caro de carregar, mas armazená-lo em cache na inicialização congela o inventário de ferramentas do seu agente no momento do snapshot.
Mantenha o estado por solicitação atualizado
O snapshot é capturado uma vez e compartilhado por cada instância restaurada, portanto, qualquer valor que seu agente gera na inicialização é idêntico em todas as instâncias e fixado no momento do snapshot. Manipule valores que o instantâneo não pode carregar em seu /invocations manipulador. A tabela a seguir descreve os valores a serem computados em seu manipulador em vez de na inicialização.
| Para fazer isso | Faça isso no manipulador | Motivo |
|---|---|---|
|
Gere valores, identificadores ou tokens aleatórios |
Ligue |
|
|
Leia a hora atual |
Calcule-o para cada solicitação |
Um carimbo de data/hora capturado na inicialização é fixado no momento do instantâneo. |
|
Meça o tempo decorrido |
Pegue o carimbo de data/hora de referência em seu manipulador |
|
|
Use credenciais ou tokens |
Atualize-os quando eles expirarem |
As credenciais carregadas na inicialização podem expirar antes do início de uma instância. |
|
Identifique a instância ou o trabalhador |
Gere um id por solicitação; não o derive do host |
Cada instância restaurada relata o mesmo nome de host ( |
Crie clientes reutilizáveis na inicialização e calcule valores por solicitação em cada chamada.
import os, time # Build reusable clients at startup, before the snapshot. Exercise them here too # (for example, with a warm-up call) so the setup the client caches — endpoint and # credential resolution, connection pool — is captured in the snapshot. client = build_client() warm_up(client) @app.entrypoint def invoke(payload): creds = get_credentials() # refreshed when expired, not read at startup request_id = os.urandom(16).hex() # unique per request now = time.time() # current time, not snapshot time # Handle the request.
Use bibliotecas criptográficas seguras para instantâneos
Quando o AgentCore Runtime restaura uma instância a partir de um snapshot, uma biblioteca criptográfica que armazenou em cache um estado aleatório na inicialização pode reutilizar esse estado em todas as instâncias. Suas bibliotecas criptográficas devem usar uma compilação segura para instantâneos (segura para instantâneos) que é redistribuída após uma restauração.
- Implantações diretas de código
-
A imagem base gerenciada pelo serviço já inclui uma compilação segura para instantâneos de suas bibliotecas criptográficas, portanto, você não precisa realizar nenhuma ação em relação a elas.
- Bring-your-own bibliotecas criptográficas
-
Se você trouxer suas próprias bibliotecas criptográficas, por exemplo, em um agente de contêiner, use compilações seguras para instantâneos para que elas sejam redistribuídas após uma restauração. No Amazon Linux 2023, use
openssl-snapsafe-libs.
Redes
- Crie clientes na inicialização e espere uma reconexão transparente
-
O soquete que você abre na inicialização não sobrevive a uma restauração, mas a configuração que sua biblioteca cliente armazena em cache em torno dele — análise do modelo de serviço, resolução de endpoints, resolução de credenciais e pool de conexões — sobrevive. Construa e exercite seus clientes na inicialização e espere que a primeira chamada após uma restauração restabeleça a conexão de forma transparente.
- Não use o nome do host ou o PID como um identificador de instância exclusivo
-
Cada instância restaurada começa com o mesmo snapshot e relata o mesmo nome de host e ID de processo. Gere um identificador exclusivo em cada solicitação.
- Evite a vinculação a uma porta de origem fixa
-
Depois de uma restauração, a conexão mantida no momento do snapshot é restabelecida e uma porta de origem fixa pode colidir com essa substituição dentro da instância. As instâncias restauradas são microVMs separadas com seus próprios namespaces de rede, portanto, o conflito está dentro de uma instância, não entre elas.