View a markdown version of this page

Strands 에이전트 SDK - Amazon Bedrock AgentCore

Strands 에이전트 SDK

Strands Agents SDK를 사용하여 에이전트 프레임워크와 원활하게 통합하여 대화형 에이전트 내에서 자동 메모리 관리 및 검색을 제공합니다.

먼저 세 가지 장기 전략을 모두 사용하여 메모리를 생성합니다. 이 작업은 AgentCore CLI를 사용하거나 아래 예제의 SDK 코드를 통해 수행할 수 있습니다.

AgentCore CLI
  1. AgentCore CLI 메모리 명령은 기존 agentcore 프로젝트 내에서 실행해야 합니다. 아직 프로젝트가 없는 경우 먼저 프로젝트를 생성합니다.

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

    그런 다음 메모리를 추가하고 배포합니다.

    agentcore add memory --name ComprehensiveAgentMemory \ --strategies SEMANTIC,SUMMARIZATION,USER_PREFERENCE agentcore deploy
Interactive
  1. 를 실행agentcore하여 TUI를 연 다음 추가를 선택하고 메모리를 선택합니다.

  2. 메모리 이름을 입력합니다.

    메모리 마법사: ComprehensiveAgentMemory 이름 입력
  3. 세 가지 전략(시맨틱, 요약, 사용자 기본 설정)을 모두 선택합니다.

    메모리 마법사: 세 가지 메모리 전략 모두 선택
  4. 구성을 검토하고 Enter 키를 눌러 확인합니다.

    메모리 마법사: 모든 전략으로 ComprehensiveAgentMemory 확인

    그런 다음를 실행agentcore deploy하여 메모리를 프로비저닝합니다 AWS.

종속성 설치

pip install bedrock-agentcore pip install strands-agents

단기 메모리 추가

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

전략을 사용하여 장기 메모리 추가

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

메시지 일괄 처리

batch_size가 1보다 크면 버퍼가 구성된 크기에 도달하면 메시지가 메모리에 버퍼링되고 단일 API 호출로 AgentCore 메모리로 전송됩니다. 이렇게 하면 처리량이 많은 대화의 API 요청 수가 줄어듭니다.

중요

를 사용할 때는 세션이 완료될 close()with 블록 또는 호출을 사용해야 batch_size > 1 합니다. 그렇지 않으면 아직 배치 임계값에 도달하지 않은 버퍼링된 메시지가 손실됩니다.

권장: 컨텍스트 관리자

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

대안: 명시적 종료()

with 블록을 사용할 수 없는 경우 close() 수동으로를 호출합니다.

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

GitHub에서 더 많은 예제를 사용할 수 있습니다. https://github.com/aws/bedrock-agentcore-sdk-python/tree/main/src/bedrock_agentcore/memory/integrations/strands