Slide 27
Slide 27 text
27
Amazon Bedrock AgentCore Memoryの構築①
メモリの構築は簡単で、以下でOK
resource "aws_bedrockagentcore_memory" "example" {
name = "Example_Memory"
description = "Example Memory"
event_expiry_duration = 7
}
メモリをコードからAPI経由で呼び出す
_bac = boto3.Session().client("bedrock-agentcore")
def add_memory_event(actor: str, session_id: str, payload: list[dict]) -> None:
try:
response = _bac.create_event(
memoryId=os.environ["AWS_BEDROCK_AGENTCORE_MEMORY_ID"],
actorId=actor,
sessionId=session_id,
eventTimestamp=datetime.now(timezone.utc),
payload=payload,
)
except Exception as e:
print(f"agent() error: {e}", exc_info=True)
def get_memory(actor: str, session_id: str):
payload = []
paginator = _bac.get_paginator("list_events")
for page in paginator.paginate(
memoryId=os.environ["AWS_BEDROCK_AGENTCORE_MEMORY_ID"],
sessionId=session_id, actorId=actor, includePayloads=True, maxResults=5
):
for event in page.get("events", []):
payload.append(
{
"role": event["payload"][0]["conversational"]["role"].lower(),
"content": [event["payload"][0]["conversational"]["content"]],
"event_time_stamp": event["eventTimestamp"],
}
)
sorted_payload = sorted(payload, key=lambda x: x["event_time_stamp"])
for sorted_payload_item in reversed(sorted_payload):
if sorted_payload_item["role"] == "user":
sorted_payload_item["content"].append({"cachePoint": {"type": "default"}})
return sorted_payload
カスタムの暗号化要件があるならencryption_key_arnでKMSキーを
設定する(デフォルトはAWSマネージドキー)
メモリは保存件数に応じて料金がかかるので、
event_expiry_duration を適宜設定する
Prompt Cachingを利用する場合
Amazon Bedrock AgentCoreのPublic Preview発表
直後はこの書き方しかできなかったが、今は
Strands Agentsがいい感じに対応してくれる