View a markdown version of this page

SDK de agentes Strands - Amazon Bedrock AgentCore

SDK de agentes Strands

Use o SDK Strands Agents para uma integração perfeita com estruturas de agentes, fornecendo gerenciamento e recuperação automáticos de memória em agentes conversacionais.

Primeiro, crie uma memória com todas as três estratégias de longo prazo. Você pode fazer isso com a AgentCore CLI ou por meio do código do SDK nos exemplos abaixo.

exemplo
AgentCore CLI
  1. Os comandos de memória AgentCore CLI devem ser executados dentro de um projeto agentcore existente. Se você ainda não tem um, crie um projeto primeiro:

    agentcore create --name my-agent --no-agent cd my-agent

    Em seguida, adicione memória e implante:

    agentcore add memory --name ComprehensiveAgentMemory \ --strategies SEMANTIC,SUMMARIZATION,USER_PREFERENCE agentcore deploy
Interactive
  1. Execute agentcore para abrir a TUI, selecione adicionar e escolha Memória:

  2. Digite o nome da memória:

    Assistente de memória: insira ComprehensiveAgentMemory o nome
  3. Selecione todas as três estratégias (semântica, resumo, preferência do usuário):

    Assistente de memória: selecione todas as três estratégias de memória
  4. Revise a configuração e pressione Enter para confirmar:

    Assistente de memória: confirme ComprehensiveAgentMemory com todas as estratégias

    Em seguida, execute agentcore deploy para provisionar a memória AWS.

Instale as dependências

pip install bedrock-agentcore pip install strands-agents

Adicione memória de curto prazo

from datetime import datetime from strands import Agent from bedrock_agentcore.memory import MemoryClient from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager client = MemoryClient(region_name="us-east-1") basic_memory = client.create_memory( name="BasicTestMemory", description="Basic memory for testing short-term functionality" ) MEM_ID = basic_memory.get('id') ACTOR_ID = "actor_id_test_%s" % datetime.now().strftime("%Y%m%d%H%M%S") SESSION_ID = "testing_session_id_%s" % datetime.now().strftime("%Y%m%d%H%M%S") # Configure memory agentcore_memory_config = AgentCoreMemoryConfig( memory_id=MEM_ID, session_id=SESSION_ID, actor_id=ACTOR_ID ) # Create session manager session_manager = AgentCoreMemorySessionManager( agentcore_memory_config=agentcore_memory_config, region_name="us-east-1" ) # Create agent agent = Agent( system_prompt="You are a helpful assistant. Use all you know about the user to provide helpful responses.", session_manager=session_manager, ) agent("I like sushi with tuna") # Agent remembers this preference agent("I like pizza") # Agent acknowledges both preferences agent("What should I buy for lunch today?") # Agent suggests options based on remembered preferences

Adicione memória de longo prazo com estratégias

from bedrock_agentcore.memory import MemoryClient from strands import Agent from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager from datetime import datetime # Create comprehensive memory with all built-in strategies client = MemoryClient(region_name="us-east-1") comprehensive_memory = client.create_memory_and_wait( name="ComprehensiveAgentMemory", description="Full-featured memory with all built-in strategies", strategies=[ { "summaryMemoryStrategy": { "name": "SessionSummarizer", "namespaceTemplates": ["/summaries/{actorId}/{sessionId}/"] } }, { "userPreferenceMemoryStrategy": { "name": "PreferenceLearner", "namespaceTemplates": ["/preferences/{actorId}/"] } }, { "semanticMemoryStrategy": { "name": "FactExtractor", "namespaceTemplates": ["/facts/{actorId}/"] } } ] ) MEM_ID = comprehensive_memory.get('id') ACTOR_ID = "actor_id_test_%s" % datetime.now().strftime("%Y%m%d%H%M%S") SESSION_ID = "testing_session_id_%s" % datetime.now().strftime("%Y%m%d%H%M%S") # Configure memory agentcore_memory_config = AgentCoreMemoryConfig( memory_id=MEM_ID, session_id=SESSION_ID, actor_id=ACTOR_ID ) # Create session manager session_manager = AgentCoreMemorySessionManager( agentcore_memory_config=agentcore_memory_config, region_name="us-east-1" ) # Create agent agent = Agent( system_prompt="You are a helpful assistant. Use all you know about the user to provide helpful responses.", session_manager=session_manager, ) agent("I like sushi with tuna") # Agent remembers this preference agent("I like pizza") # Agent acknowledges both preferences agent("What should I buy for lunch today?") # Agent suggests options based on remembered preferences

Combinação de mensagens em lote

Quando batch_size é maior que 1, as mensagens são armazenadas em buffer na memória e enviadas para a AgentCore memória em uma única chamada de API quando o buffer atinge o tamanho configurado. Isso reduz o número de solicitações de API em conversas de alto rendimento.

Importante

Ao usarbatch_size > 1, você deve usar um with bloqueio ou uma chamada close() quando a sessão for concluída. Caso contrário, todas as mensagens armazenadas em buffer que ainda não tenham atingido o limite do lote serão perdidas.

Recomendado: Gerenciador de contexto

from strands import Agent from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager config = AgentCoreMemoryConfig( memory_id=MEM_ID, session_id=SESSION_ID, actor_id=ACTOR_ID, batch_size=10, # Buffer up to 10 messages before sending ) # The `with` block guarantees all buffered messages are flushed on exit with AgentCoreMemorySessionManager(config, region_name='us-east-1') as session_manager: agent = Agent( system_prompt="You are a helpful assistant.", session_manager=session_manager, ) agent("Hello!") agent("Tell me about AWS") # All remaining buffered messages are automatically flushed here

Alternativa: fechamento explícito ()

Se você não conseguir usar um with bloco, ligue close() manualmente:

session_manager = AgentCoreMemorySessionManager(config, region_name='us-east-1') try: agent = Agent( system_prompt="You are a helpful assistant.", session_manager=session_manager, ) agent("Hello!") finally: session_manager.close() # Flush any remaining buffered messages

Mais exemplos estão disponíveis em GitHub: https://github.com/aws/bedrock-agentcore-sdk-python/tree/main/src/bedrock_agentcore/memory/integrations/strands