亚马逊云科技提供开箱即用的托管服务,通过AI Agent构建平台Bedrock AgentCore中的记忆模块帮助开发者更快捷地为AI Agent赋能记忆功能。
概述
图1-Bedrock AgentCore中的记忆模块核心功能展示
Amazon Bedrock AgentCore 的 Memory 模块是一个由亚马逊云科技托管的持久化记忆系统,用于存储和管理 AI Agent 的对话和知识。它提供短期记忆(short-term memory)和长期记忆(long-term memory)两种模式。短期记忆负责在一次会话中记录最近的最近几轮对话,确保代理能够“记住”当前对话的上下文。长期记忆则从对话中提取结构化的关键信息,在多个会话之间保留知识,使Agent能够“学习”用户偏好、事实和摘要等信息。
Memory 模块在架构上采用分层存储策略:短期记忆层存储原始交互事件作为即时上下文,长期记忆层存储从事件提取的概要知识。Memory 服务背后实现了自动的信息处理流水线:当新的事件被存储时,如果 Memory 配置了长期记忆策略,服务会异步地对事件内容进行分析(例如调用基础模型)来提炼出可长期保存的知识片段。
所有数据由 亚马逊云科技以加密方式存储,并使用命名空间(namespace)进行隔离分区,确保不同应用或用户的记忆数据彼此分隔。这一完全托管的记忆基础设施让开发者无需自己搭建数据库或向量存储,就能方便地让 Agent 拥有记忆功能。
Memory系统工作流程
以下序列图展示了AgentCore Memory从初始化到记忆检索的完整工作流程:
图2 – Bedrock AgentCore Memory从初始化到记忆检索的完整工作流程序列图
在这个流程中,大语言模型主要起到两个作用:记忆提取和上下文注入
用LLM进行记忆提取(Memory → LLM):Memory 的长期记忆依赖于对对话内容的自动分析和提炼,这由 LLM完成。AgentCore Memory 内置了多种记忆策略(Memory Strategy)来定义如何将原始对话转化为结构化长期记忆。例如:
- SemanticMemoryStrategy(语义记忆策略):从对话中抽取出事实和知识,以便日后查询。
- SummaryMemoryStrategy(摘要策略):为每个会话生成对话摘要,提炼主要内容。
- UserPreferenceMemoryStrategy(用户偏好策略):捕获用户的偏好、风格和重复选择等信息。
使用内置策略时,无需额外配置模型,AgentCore Memory 服务会在后台使用预置的模型来完成提取和归纳。当开发者调用 CreateEvent
保存新事件后,这些策略会被自动触发,异步运行LLM分析内容并产生长期记忆记录(memory records)。长期记忆记录生成后存储于 Memory 中,对应特定的命名空间和类型(如事实、摘要、偏好),每条记录也有唯一ID以供检索。
此外,AgentCore 允许自定义记忆策略(CustomMemoryStrategy),开发者可提供自定义的提示词(prompt)和选择特定的基础模型来执行记忆提取,例如只提取某类domain知识。
上下文注入(Memory → Prompt):Memory 提供存储和检索API,供应用在调用LLM推理时提取相关记忆并注入对话上下文中。也就是说,大语言模型在生成回复时,可以通过 Memory 提供的内容获得额外的上下文信息。例如,开发者可以在每次生成回复前,调用 list_events
获取当前会话最近N条对话记录,将其附加到 LLM 的提示中,以维护对话连续性。对于跨会话的信息,可以使用 retrieve_memories
接口通过语义查询长期记忆,例如查询某用户的偏好或某主题的事实知识,然后把检索到的内容纳入提示。这种机制确保LLM在回答新问题时,不仅有当前对话文本,还能利用 Memory 中沉淀的历史知识,提高响应的相关性和智能性。
Memory as tool:Memory 模块还可以与Agent框架的推理流程集成,实现自动的上下文注入。AgentCore Memory 可被包装成一个工具(Tool)供 LLM 调用。以 Strands Agents 框架为例,开发者通过 AgentCoreMemoryToolProvider
将 Memory 注册为工具,使得当模型需要回忆信息时,可以自主调用如 “agent_core_memory
” 工具执行 retrieve
动作来查询记忆,或用 record 动作将新的信息存入记忆。这种工具调用方式也通过Model Context Protocol (MCP) 等标准,让 LLM 在推理中动态决定何时读写记忆,使Agent能够更加自主地管理上下文。
基于Strands Agents框架搭建agent:
from strands_tools.agent_core_memory import AgentCoreMemoryToolProvider
strands_provider = AgentCoreMemoryToolProvider(
memory_id=memory.get("id"),
actor_id="CaliforniaPerson",
session_id="TalkingAboutFood",
namespace="/users/CaliforniaPerson",
region="us-west-2"
)
agent = Agent(tools=strands_provider.tools)
Memory核心组件和储存方式
以下类图展示了AgentCore Memory的核心组件和它们之间的关系:
图3 – Bedrock AgentCore Memory的核心组件的Class Disgram
Memory 模块以记忆存储(Memory Store)的形式存在。开发者可通过 SDK 创建一个 Memory 实例来作为特定用途的记忆库,每个 Memory 实例都有唯一的 ID。记忆事件(Event)是 Memory 中基本的数据单元,用于存储一次交互的信息,包括参与者、会话标识和消息内容等。每个事件记录包含以下关键属性:
- actorId:参与者ID,用于标识是谁的记忆。例如可以是终端用户ID,或特定Agent标识等。
- sessionId:会话ID,用于将一系列相关交互归组为同一会话(对话)。
- payload:承载实际内容的数据,可以是对话消息(包括角色和消息内容)、工具调用、系统事件等。Memory允许一次事件存储多个消息片段,方便批量写入多轮交互。
- eventId:事件的唯一标识符,支持通过ID精确检索事件。
基于这些储存的Memory, SDK提供了很多API来和储存的memory交互,完成例如创建提取删除等。
API操作
记忆管理
CreateMemory
: 创建记忆资源
GetMemory
: 获取记忆详情
ListMemories
: 列出所有记忆资源
UpdateMemory
: 更新记忆配置
DeleteMemory
: 删除记忆资源
短期记忆操作
CreateEvent
: 创建事件
GetEvent
: 获取特定事件
ListEvents
: 列出会话中的事件
DeleteEvent
: 删除特定事件
长期记忆操作
RetrieveMemoryRecords
: 语义搜索记忆记录
ListMemoryRecords
: 列出命名空间中的记忆记录
DeleteMemoryRecord
: 删除特定记忆记录
基本步骤:
- 安装SDK:
pip install bedrock-agentcore
- 创建Memory客户端:
client = MemoryClient(region_name="us-west-2")
- 创建记忆资源:
memory = client.create_memory(name="MyMemory")
- 基于不同记忆需求,完成流程:
短期记忆工作流程
- 事件创建: 使用
CreateEvent
操作捕获每个交互
- 会话管理: 通过
sessionId
维护对话上下文
- 历史检索: 使用
ListEvents
和 GetEvent
访问过往交互
长期记忆工作流程
- 策略配置: 在
CreateMemory
操作中添加记忆策略
- 异步提取: 后台自动从原始事件中提取洞察
- 记忆整合: 将新提取的信息与现有信息合并
- 语义检索: 使用
RetrieveMemoryRecords
进行智能搜索
API代码示例
基本步骤:
- 安装SDK:
pip install bedrock-agentcore
- 创建Memory客户端:
client = MemoryClient(region_name="us-west-2")
- 创建记忆资源:
memory = client.create_memory(name="MyMemory")
- 开始存储事件:
client.create_event(memory_id, actor_id, session_id, messages)
创建短期记忆
from bedrock_agentcore.memory import MemoryClient
client = MemoryClient(region_name="us-west-2")
memory = client.create_memory(
name="CustomerSupportAgentMemory",
description="Memory for customer support conversations"
)
创建长期记忆
memory = client.create_memory_and_wait(
name="MyAgentMemory",
strategies=[{
"summaryMemoryStrategy": {
"name": "SessionSummarizer",
"namespaces": ["/summaries/{actorId}/{sessionId}"]
}
}]
)
创建事件
client.create_event(
memory_id=memory.get("id"),
actor_id="User84",
session_id="OrderSupportSession1",
messages=[
("Hi, I'm having trouble with my order #12345", "USER"),
("I'm sorry to hear that. Let me look up your order.", "ASSISTANT")
]
)
检索记忆
memories = client.retrieve_memories(
memory_id=memory.get("id"),
namespace="/summaries/User84/OrderSupportSession1",
query="can you summarize the support issue"
)
Memory策略处理逻辑
由上述内容,我们可以简单总结以下流程图展示记忆策略的处理逻辑:
图4 – Bedrock AgentCore Memory的记忆处理策略的流程图
在单次会话的多轮对话中,短期记忆充当了“对话缓冲区”的角色。每当用户和Agent交互一个回合,Agent可以将本轮对话(包括用户消息、Agent回复,以及Agent调用工具的动作和结果)记录为一个Memory事件。这些事件按时间顺序累积在当前 session 下,Agent 随后可以通过调用 list_events 获取最近若干轮对话历史,将其提供给LLM作为上下文,从而让Agent的回复建立在完整的对话背景之上。通过Memory维护的对话历史,Agent无需依赖LLM自身的窗口去“记住”所有内容,而是可以在需要时检索相关内容并注入提示。这有效避免了长对话中上下文窗口溢出或遗忘的问题,使多回合对话更连贯。
Memory 对用户状态的管理则依赖于长期记忆功能。随着用户在多次会话中的互动,Agent 可以逐步积累关于该用户的偏好、习惯和历史请求等信息。例如,AgentCore 内置的用户偏好策略会自动提炼用户经常提及的偏爱设置(如喜好的编程风格、常用品牌等)并存入长期记忆。当用户在未来的会话中与Agent互动时,Agent 可以查询这些长期记忆来个性化当前对话。跨会话的记忆由 Memory 的 actorId 来区分不同用户:只要为同一用户使用相同的 actorId,AgentCore Memory 就能将该用户各次会话的长期记忆关联在一起。
Memory 的维护和历史数据管理
作为托管服务,Bedrock AgentCore Memory 提供了持久化存储来保留对话历史和提取出的知识。短期记忆和长期记忆的数据都会持久保存于 Memory Store 中,除非被显式删除或设置了过期策略。
短期记忆一般用于会话实时上下文,但实际上事件数据会存储在服务端,即使同一会话暂时结束,下次仍可检索先前的事件记录,除非应用选择不再使用它们。
长期记忆则是明确为跨会话持久化设计的,提取出的偏好、事实、摘要等会长久保存,供未来的对话查询。尤其对于需要跨多个用户会话共享的知识,可以将多个Agent或会话指向同一个 Memory 实例,以实现知识的统一管理。
在创建事件时,开发者可以设置一个 eventExpiryDuration 参数,为该事件指定自动过期时间。一旦事件超过设定的保留时长,系统将自动删除它,从而避免长期保存无用的短期对话数据。这在隐私和成本考虑上非常实用:对于不需要长期保留的对话细节,可以让系统自动清理。同时,Memory 提供 DeleteEvent API,可用于手动删除特定事件。这些机制使开发者能够按需控制历史数据的保留长度,确保 Memory 中的信息既不过期丢失重要知识,也不会无限增长占用资源。
需要注意的是,Memory 长期记忆记录的生成是异步的。当添加新的事件后,提取策略需要一些时间(通常1-2分钟)在后台将其处理为长期记忆。开发者应在提取过程完成后再检索长期记忆内容(例如通过轮询或适当的延迟)。长期记忆记录一旦生成,将存储于指定的命名空间下。
命名空间是一种逻辑隔离/分类手段,通常采用类似路径的格式表示层次结构。例如,UserPreference 策略可以使用命名空间前缀/users/{actorId}来区分不同用户的偏好数据;Summary 策略可以用/summaries/{actorId}/{sessionId}来归档每次会话的摘要。开发者也可以自定义命名空间,以适合自己的数据组织需求。
/strategy/{strategyId}/actor/{actorId}/session/{sessionId}
这样就可以基于不同颗粒度进行存储和搜索了,从细到粗比如:按会话—按参与者—按策略组织—跨所有策略。
Memory案例展示
接下来的案例通过构建一个智能宠物管家系统,展示如何使用 Amazon Bedrock AgentCore Memory 的四种记忆策略来实现AI应用的长期记忆管理。
四种记忆策略详解
长期记忆可以应用如下四种记忆策略,使用的时候可以指定一个,也可以同时指定多个策略。
1. 语义记忆 (Semantic Memory)
存储事实性知识和基本信息
{
StrategyType.SEMANTIC.value: {
"name": "PetKnowledgeBase",
"description": "存储宠物基本信息、品种特征、健康状况等事实性知识",
"namespaces": ["/pets/{actorId}/knowledge"]
}
}
存储示例:
- “Max是一只3岁的金毛寻回犬,性格友好活泼”
- “Max已完成狂犬病疫苗接种,体重28kg正常”
2. 偏好记忆 (User Preference Memory)
跟踪个性化偏好和习惯
{
StrategyType.USER_PREFERENCE.value: {
"name": "PetPreferences",
"description": "跟踪每个宠物的个性化偏好和习惯",
"namespaces": ["/pets/{actorId}/preferences"]
}
}
存储格式(JSON):
{
"context": "Max特别喜欢鸡肉,每次都吃得很香",
"preference": "喜欢鸡肉食物",
"categories": ["饮食", "偏好"]
}
3. 摘要记忆 (Summary Memory)
创建活动时间线摘要
{
StrategyType.SUMMARY.value: {
"name": "PetActivitySummary",
"description": "创建和维护宠物日常活动的时间线摘要",
"namespaces": ["/pets/{actorId}/summaries/{sessionId}"]
}
}
存储格式(XML):
<summary>
<topic name="训练进展">
Max学会了握手技能,只用了3次练习就掌握了。
</topic>
<topic name="饮食习惯">
Max特别喜欢鸡肉,护理员Alice建议每天给200g。
</topic>
</summary>
4. 自定义记忆 (Custom Memory) – 核心特性
自定义记忆策略是AgentCore Memory的最强大特性,允许开发者自定义记忆提取逻辑。
配置结构
{
StrategyType.CUSTOM.value: {
"name": "PetRoleSpecificMemory",
"description": "针对不同宠物护理角色的专业记忆提取和管理",
"namespaces": ["/pets/{actorId}/professional"],
"configuration": {
"semanticOverride": {
"extraction": {
"appendToPrompt": CUSTOM_EXTRACTION_PROMPT, # 自定义提取提示词
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0" # 指定提取模型
}
}
}
}
}
自定义提取Prompt设计
CUSTOM_EXTRACTION_PROMPT = """
根据当前激活的角色,专门提取相关领域的信息并添加角色标签:
护理员角色:日常护理、饮食管理、清洁卫生、生活习惯
- 提取格式:[护理员] 时间戳 | 活动类型 | 详细描述 | 重要性(1-10)
训练师角色:行为训练、技能培养、纪律管理、训练进度
- 提取格式:[训练师] 时间戳 | 技能名称 | 掌握程度 | 重要性(1-10)
医疗助手角色:健康监测、疫苗提醒、医疗建议、症状记录
- 提取格式:[医疗助手] 时间戳 | 健康项目 | 状态描述 | 重要性(1-10)
请仅提取与当前角色相关的专业信息,忽略无关内容。
"""
提取效果预期:
输入文本:
"训练师Bob专业训练报告:Max今天完成了高级服从性训练,坐下指令响应时间2秒,握手动作标准度95%。"
Custom Memory提取结果:
"[训练师] 2025-08-01 | 高级服从训练 | Max完成高级服从性训练,对于坐下指令的响应时间为2秒,握手动作的标准度为95% | 9"
核心实现代码与结果示例
1. 环境设置和Memory创建
可以同时应用以上4中策略。
from bedrock_agentcore.memory import MemoryClientfrom bedrock_agentcore.memory.constants import StrategyTypefrom datetime import datetime
# 基本配置
REGION = "us-west-2"
SESSION_ID = f"pet_butler_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
ACTOR_ID = "pet_max"
ROLE_ARN = "<<INSERT-YOUR-IAM-ROLE>>"
# 创建Memory客户端
client = MemoryClient(region_name=REGION)
# 创建Memory实例(包含四种策略)
memory = client.create_memory_and_wait(
name="PetButler",
strategies=strategies, # 上述四种策略配置
description="智能宠物管家系统",
event_expiry_days=90,
memory_execution_role_arn=ROLE_ARN
)
memory_id = memory['memoryId']
2. 添加对话事件
# 创建对话事件
demo_events = [
# 训练相关事件
("Max今天学会了握手,3次练习就掌握了!训练师Bob说这是个重要的技能。", "USER"),
("太棒了!Max学习能力很强,我会记录这个训练成果。", "ASSISTANT"),
("训练师Bob还教了Max坐下和跟随指令,但跟随还需要练习,有时会走神。", "USER"),
("了解,我会记录Max的训练进度,跟随指令需要加强练习。", "ASSISTANT"),
# 护理相关事件
("Max特别喜欢鸡肉,每次都吃得很香,护理员Alice建议每天给200g。", "USER"),
("好的,我会记住Max的饮食偏好和分量建议。", "ASSISTANT"),
("护理员Alice说Max每周需要洗澡两次,用温水,洗后要吹干毛发。他很乖,不抵触洗澡。", "USER"),
("记录了Max的洗澡需求和行为表现,他在清洁方面很配合。", "ASSISTANT"),
# 医疗相关事件
("疫苗接种:狂犬病疫苗已完成,体重28kg正常,医疗助手Dr.Chen说健康状况良好。", "USER"),
("很好,我会记录Max的疫苗接种和健康检查结果。", "ASSISTANT"),
("医疗助手Dr.Chen提醒下次体检时间是3个月后,需要检查心脏和关节。Max有轻微的关节炎家族史。", "USER"),
("了解,我会设置提醒并关注Max的关节健康。", "ASSISTANT"),
# 社交和行为相关
("Max社交能力很好,和其他狗狗玩得很开心,但看到松鼠会过度兴奋,需要训练师Bob继续训练。", "USER"),
("记录了Max的社交特点和需要改善的行为。", "ASSISTANT"),
("护理员Alice发现Max最近睡眠质量很好,每天晚上10点就会自己回窝休息,早上6点起床。", "USER"),
("很好,Max的作息规律很健康,这对他的整体健康很有益。", "ASSISTANT"),
# Custom Strategy专业报告事件
("训练师Bob专业训练报告:Max今天完成了高级服从性训练,坐下指令响应时间2秒,握手动作标准度95%。", "USER"),
("护理员Alice日常护理检查:Max毛发光泽度评分8.5/10,皮肤无异常,体重28.2kg稳定。", "USER"),
("医疗助手Dr.Chen体检报告:Max心率72bpm正常,体温38.3°C正常范围,血压120mmHg。", "USER")
]
# 添加到记忆系统
client.create_event(
memory_id=memory_id,
actor_id=ACTOR_ID,
session_id=SESSION_ID,
messages=demo_events
)
将上述对话事件加入记忆系统后,我们可以查询到结果数量分布如下:
- 语义记忆: 10条记录(基本信息和事实知识)
- 偏好记忆: 6条记录(个性化偏好)
- 摘要记忆: 1条记录(活动摘要)
- 专业记忆: 9条记录(自定义提取的角色专业信息)
部分记忆结果可视化如下:
图5 – 基于Bedrock AgentCore Memory构建的智能宠物管家记忆结果可视化展示
3. 记忆检索
多策略记忆存储到长期之后,检索长期记忆的时候不需要指定具体的策略,而是基于相似度进行匹配。
# 查询记忆
memories = client.retrieve_memories(
memory_id=memory_id,
actor_id=ACTOR_ID,
namespace=f"/pets/{ACTOR_ID}/knowledge",
query="Max学会了什么技能?",
top_k=5
)
# 处理结果
for memory in memories:
content = memory.get('content', {}).get('text', '')
score = memory.get('score', 0)
print(f"相关性: {score:.3f} | 内容: {content}")
通过retrieve_memories方法,可以快速从记忆中提取相关记忆,多个queries的测试结果如下:
|
测试场景 |
召回时间 |
结果 |
召回结果相关性 |
1 |
Max学会了什么技能? |
0.321s |
Max在训练中学会了握手,只需要3次练习就掌握了这项技能… |
0.594 |
2 |
Max的饮食偏好? |
0.348s |
{“context”:”User mentioned that Max especially likes chicken meat and eats it very deliciously”,”preference”:”Likes chic… |
0.488 |
3 |
健康状况如何? |
0.343s |
医疗助手Dr.Chen体检报告显示Max心率72bpm、体温38.3°C、血压120mmHg均在正常范围… |
0.385 |
4. 与Agent集成
可通过如下代码,使用Stands Agents框架搭建agent,将上述记忆作为工具,快速构建宠物管家agent:
f
from strands import Agentfrom strands_tools.agent_core_memory import AgentCoreMemoryToolProvider
# 创建记忆工具提供者
memory_provider = AgentCoreMemoryToolProvider(
memory_id=memory_id,
actor_id=ACTOR_ID,
session_id=SESSION_ID,
namespace=f"/pets/{ACTOR_ID}/knowledge"
)
# 创建智能Agent
pet_agent = Agent(
tools=memory_provider.tools,
system_prompt="""你是智能宠物管家,为宠物Max提供专业护理服务。
请充分利用记忆功能提供个性化服务。"""
)
# 对话示例
response = pet_agent("Max最近学会了什么新技能?")
接下来展示与agent的对话结果,以及随着对话进行记忆的更新情况。
第一轮对话:基本信息查询
用户: “请告诉我Max的基本信息和最近的活动情况”
Agent:
你好!我是Max的智能宠物管家,很高兴为你服务!
首先,让我为你介绍Max的基本信息:
- **姓名**:Max
- **品种**:Golden Retriever(金毛寻回犬)
- **年龄**:3岁
- **性格**:友好、活泼、聪明
现在让我查看一下Max最近的活动记录:
Tool #1: agent_core_memory
根据我的记录,Max最近的活动和状况非常不错!让我为你总结一下:
## 🏥 健康状况
- **最新体检**:各项指标正常
- 心率:72 bpm
- 体温:38.3°C
- 血压:120 mmHg
- **体重**:28.2 kg
- **疫苗接种**:已完成狂犬病疫苗接种
- **毛发状况**:光泽度达到8.5/10,非常健康
- **注意事项**:有轻微关节炎家族史,预计3个月后进行心脏和关节专项检查
## 🎓 训练进度
Max在训练方面表现优秀:
- **握手技能**:只用3次练习就掌握了,学习能力很强!
- **高级服从性训练**:已完成
- 坐下指令:响应时间2秒
- 握手动作:标准度达95%
- **跟随指令**:正在学习中,偶尔会走神(这很正常,需要耐心)
## 🎯 社交能力
- 社交能力良好
- 对松鼠表现出过度兴奋,需要继续训练控制
## 🛁 日常护理
- **洗澡频率**:每周两次,使用温水
- **洗澡表现**:完全不抵触,配合度很高
- **睡眠作息**:非常规律,每晚10点自主回窝休息,早上6点起床
## 🍖 饮食偏好
- **最爱食物**:鸡肉
- **建议摄入量**:每天200g
总的来说,Max是一只非常健康、聪明且训练有素的金毛!他的学习能力强,性格温顺,作息规律。继续保持现在的护理方式就很好了!
有什么特别想了解的方面,或者需要我为Max安排什么特别的护理吗?🐕✨
第二轮对话:添加新信息
用户: “Max今天表现很好,学会了新的捡球指令,而且很喜欢新买的玩具球。请记录这些信息。”
Agent:
太棒了!Max学会新技能了!🎾 让我为他记录这个重要的进步:
Tool #2: agent_core_memory
完美!已经成功记录了Max今天的优秀表现!🎉
**📈 Max的训练进度更新:**
- ✅ 握手指令:已熟练掌握
- ✅ 高级服从性训练:已完成
- ✅ **捡球指令:今天新学会!** 🆕
- 🔄 跟随指令:还在练习中
**🎾 玩具偏好:**
- 对新买的玩具球表现出很高的兴趣和喜爱
Max真的很聪明!金毛寻回犬本来就擅长捡拾游戏,看来他的天赋得到了很好的发挥。捡球不仅是很好的运动,还能:
- 增强你们之间的互动和感情
- 提供充足的体能训练
- 锻炼他的专注力和反应能力
建议你可以:
1. 继续用玩具球进行捡球训练,巩固这个新技能
2. 逐渐增加难度,比如扔得更远或在不同环境中练习
3. 记得给Max充足的赞美和奖励,保持他的积极性
Max今天真是个好孩子!继续保持这样的训练节奏,他一定会越来越棒的!🐕⭐
第三轮对话:记忆召回测试
用户: “Max最近学会了什么新技能?他的训练进度如何?”
Agent:
让我为你查看Max最近的训练进度和技能学习情况:
Tool #3: agent_core_memory
现在让我再查看一下最新的捡球技能记录:
Tool #4: agent_core_memory
根据我的记录,让我为你整理Max最近学会的技能和训练进度:🎓
**最近新掌握的技能:**
- **🎾 捡球指令** - 就在今天刚学会!而且对新买的玩具球表现出很高的兴趣和喜爱
### ✅ 已熟练掌握的技能:
1. **握手指令**
- 学习速度:仅用3次练习就掌握
- 熟练度:标准度达95%
- 状态:完全掌握
2. **高级服从性训练**
- 坐下指令:响应时间仅2秒
- 整体完成度:已完成全部课程
3. **捡球指令**
- 刚刚学会的新技能!🆕
- 对玩具球表现出浓厚兴趣
### 🔄 正在练习中的技能:
1. **跟随指令**
- 进度:学习中
- 挑战:有时会走神
- 建议:需要继续耐心训练,这很正常
### 🎯 需要改善的行为:
1. **社交控制**
- 整体社交能力良好
- 需要改善:对松鼠表现过度兴奋
- 状态:需要继续训练
Max的训练进度**非常优秀**!他展现出了:
- **快速学习能力**:握手技能仅用3次就掌握
- **高度配合性**:各项指令响应积极
- **持续进步**:今天又掌握了新的捡球技能
- **天赋展现**:作为金毛寻回犬,在捡拾类游戏上表现出色
**建议下一步训练重点:**
1. 继续巩固捡球技能,可以增加难度和变化
2. 专注改善跟随指令的专注度
3. 加强对小动物的自控训练
Max真是个学习能力超强的好孩子!🐕⭐ 他的进步让人印象深刻呢!
5.多agent协作
AgentCore Memory通过共享记忆实例和独立命名空间机制,实现了多Agent间的高效协作。每个Agent在保持专业独立性的同时,能够访问共享的记忆资源,形成协同工作的智能体系统。
from strands import Agentfrom strands_tools.agent_core_memory import AgentCoreMemoryToolProvider
# 定义三个专业Agent角色
AGENT_ROLES = {
'chen': {
'name': '医疗助手Dr.Chen',
'avatar': '👨⚕️',
'actor_id': 'agent_chen',
'expertise': '健康监测、疫苗提醒、医疗建议、症状记录'
},
'alice': {
'name': '护理员Alice',
'avatar': '👩⚕️',
'actor_id': 'agent_alice',
'expertise': '日常护理、饮食管理、清洁卫生、生活习惯'
},
'bob': {
'name': '训练师Bob',
'avatar': '🏃♂️',
'actor_id': 'agent_bob',
'expertise': '行为训练、技能培养、纪律管理、训练进度'
}
}
def create_multi_agent_system(memory_id, session_id):
"""创建多Agent协作系统"""
agents = {}
for role_key, role_info in AGENT_ROLES.items():
# 每个Agent使用独立的actor_id和命名空间
provider = AgentCoreMemoryToolProvider(
memory_id=memory_id,
actor_id=role_info['actor_id'],
session_id=session_id,
namespace=f"/pets/{role_info['actor_id']}/knowledge"
)
# 创建专业化的Agent
agents[role_key] = Agent(
tools=provider.tools,
system_prompt=f"""
你是{role_info['name']},专门负责宠物Max的{role_info['expertise']}。
请根据你的专业领域提供建议,并与其他专业团队成员协作。
"""
)
return agents
用户: “我发现Max今天食欲不振,精神不佳,请专业团队帮忙检查和处理。”
Dr.Chen 医疗检查:
我是Dr.Chen,我会立即为Max的情况做记录并协助处理。让我先记录下Max今天的症状。
Tool #1: agent_core_memory
已记录Max的症状。针对Max出现的食欲不振和精神不佳症状,我建议采取以下专业处理措施:
## 立即关注要点:
1. **观察体温** - 检查是否发热
2. **检查口腔** - 查看牙龈颜色、口气异常
3. **观察排便情况** - 是否正常排便排尿
4. **活动能力** - 走路是否异常,是否愿意活动
## 建议处理方案:
1. **暂时提供易消化食物** - 如煮熟的鸡胸肉、白米饭
2. **确保充足饮水** - 监测饮水量
3. **提供安静舒适的休息环境**
4. **密切观察症状变化**
## 紧急情况指标:
如果Max出现以下情况,请立即就医:
- 持续呕吐或腹泻
- 体温异常(正常体温38-39°C)
- 呼吸急促或困难
- 完全拒食超过24小时
- 明显疼痛表现
请问Max还有其他具体症状吗?比如呕吐、腹泻、体温变化等?这些信息有助于我提供更精确的建议。
Alice 护理建议:
我立即记录Max今天的状况,并为您提供护理建议。
Tool #1: agent_core_memory
根据Max今天的症状,作为专业护理员,我为您提供以下护理建议:
## 即时护理措施
**1. 观察和监测**
- 密切观察Max的体温、呼吸频率和心率
- 记录进食量、饮水量和排便情况
- 注意是否有呕吐、腹泻等其他症状
**2. 环境调整**
- 为Max准备安静、温暖、舒适的休息环境
- 减少噪音和干扰,让它充分休息
- 保持室内空气流通但避免直吹
**3. 饮食护理**
- 暂时提供易消化的流质食物
- 少量多次喂食,不强迫进食
- 确保充足的清洁饮水供应
- 可以尝试温热的鸡汤或专用营养液
**4. 基础护理**
- 轻柔按摩腹部,促进消化
- 保持口腔和身体清洁
- 避免剧烈运动,但可以适当的轻缓活动
## 后续关注要点
- 如症状持续超过24小时或恶化,立即联系Dr.Chen
- 记录每日的食欲、精神状态变化
- 定期测量体重,关注是否有明显下降
请问Dr.Chen的初步检查结果如何?这样我可以提供更针对性的护理方案。
Bob 训练调整:
我理解您对Max健康状况的担心。作为训练师,我会立即记录这个重要信息,并协调相关事宜。
Tool #1: agent_core_memory
我已经记录了Max的健康状况,并立即采取以下措施:
## 🚨 紧急处理方案
**1. 健康检查优先**
- 我会立即联系专业兽医团队对Max进行全面健康检查
- 暂停所有训练活动,避免给Max造成额外压力
- 密切观察Max的症状变化
**2. 训练计划调整**
- **暂停期**:所有训练项目立即暂停,直到健康问题解决
- **恢复期**:根据兽医建议,制定渐进式训练恢复计划
- **强度调整**:恢复训练时将降低训练强度和时长
**3. 特别关注事项**
- 监控Max的食欲、精神状态和行为变化
- 确保Max有充足的休息和舒适的环境
- 配合兽医的治疗方案
**4. 后续安排**
- 等待专业团队的检查结果
- 根据诊断结果调整长期训练策略
- 制定适合Max当前状况的温和训练方案
Max的健康是第一位的!请您放心,我会与专业团队密切合作,确保Max得到最好的照护。有任何关于Max状况的更新,请及时告知我。
多Agent协作完成后,系统在各自的命名空间中存储了专业记忆:
INFO:bedrock_agentcore.memory.client:Retrieved 1 memories from namespace: /pets/agent_alice/knowledge
护理员Alice 的记忆:
📊 找到 1 条记忆
1. Max today experienced loss of appetite and poor spirits, and was examined by Dr....
INFO:bedrock_agentcore.memory.client:Retrieved 1 memories from namespace: /pets/agent_bob/knowledge
训练师Bob 的记忆:
📊 找到 1 条记忆
1. Max currently experiencing health issues including loss of appetite, poor mental...
INFO:bedrock_agentcore.memory.client:Retrieved 1 memories from namespace: /pets/agent_chen/knowledge
医疗助手Dr.Chen 的记忆:
📊 找到 1 条记忆
1. Max is experiencing symptoms of decreased appetite and low energy, which require...
使用Bedrock AgentCore Memory的最佳实践
最佳实践是为每个唯一用户使用固定的 actorId,这样 Memory 模块就能持续累积该用户的历史,并在需要时提供给Agent。
在多用户或者多Agent的复杂对话场景下,Memory 也支持灵活的上下文管理。由于 Memory 的事件记录包含 actorId 和 sessionId,系统可以区分“谁在说”(用户还是Agent)以及“哪个会话”。这意味着在一个群组对话(multiple actors)或者多个Agent协作的情境下,可以通过给不同参与方设定不同的 actorId 来分别跟踪各自的发言和状态。如果有多个Agent协同完成任务,他们也可以共享同一个 Memory Store 或各自拥有Memory,再通过某种协调机制交换必要的记忆。
AgentCore Memory 提供命名空间来自定义长期记忆的隔离范围,因此甚至可以实现部分共享:例如,让两个Agent共享某些公共知识(存在公共的namespace),但各自维护独立的用户偏好(存在各自用户命名空间)。
总的来说,在多回合、多主体的对话中,Memory 模块通过结构化地存储对话和提炼知识,成为维护上下文连续性和用户状态的关键组件,使Agent能够做到“记忆长期,理解当下”。
其他最佳实践
- 性能优化,比如使用适当的命名空间颗粒度,合理设置事件保留期限,优化搜索查询的具体性;
- 数据管理上定期清理过时的记忆记录,实施数据隐私保护措施,监控记忆存储使用情况;
- 如果遇到报错,可以实施重试机制,监控异步处理状态,处理记忆提取失败情况。
其他技术资料链接
Strands Agent
https://aws.amazon.com/cn/blogs/china/practical-guide-to-building-agentic-ai-applications-for-aws-china-region/
AgentCore Memory官方文档
https://docs.aws.amazon.com/zh_cn/bedrock-agentcore/latest/devguide/memory.html
AgentCore代码样例
GitHub – awslabs/amazon-bedrock-agentcore-sample
相关博客:
《Agentic AI基础设施深度实践经验思考系列(三):Agent记忆模块的最佳实践》
本文将深入探讨 Agent应用中的记忆需求、记忆类型、技术组件和主流开源框架,并介绍基于亚马逊云科技的数据产品自行构建记忆模块,以及基于Agent构建平台Bedrock AgentCore的Agent memory的托管方案。
《相得益彰:Mem0 记忆框架与亚马逊云科技的企业级 AI 实践》
本文将详细探讨mem0记忆框架和亚马逊云科技服务的集成方案。
*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。
本篇作者