借助记忆库,您可以根据用户与代理之间的对话构建长期记忆。然后,记忆库会通过添加、更新和移除记忆来整合和自行整理特定用户的记忆。本页面介绍了如何触发记忆生成并获取记忆。
当您触发记忆生成时,记忆库会自动执行以下操作:
提取:从用户与代理的对话中提取有关用户的信息。
整合:用于标识是否应删除或更新具有相同范围的现有记忆。记忆库会在合并新记忆与现有记忆之前,检查新记忆是否重复或矛盾。
并非所有用户代理互动都会导致系统创建或更新回忆。记忆库只会保留被认为对未来互动有价值的信息,这些信息可能包括以下类型:
- 与用户相关的信息,例如偏好设置、姓名、关系、爱好和重要日期。例如,“我在 Google 工作”“我喜欢靠过道的座位”或“我的结婚纪念日是 12 月 31 日”。
- 关键对话事件和任务结果。例如,“我预订了从 JFK 机场往返 SFO 机场的机票。我将于 2025 年 6 月 1 日出发,并于 2025 年 6 月 7 日返回。”
- 用户明确要求代理记住的信息。例如,如果用户说“记住,我主要使用 Python”,记忆库会生成一条记忆,例如“我主要使用 Python”。
记忆只能从源内容中的文本、内嵌文件和文件数据中提取。生成回忆时,系统会忽略所有其他内容,包括函数调用和响应。
回忆可以从用户提供的图片、视频和音频中提取。如果记忆库认为多模态输入提供的上下文对未来的互动有意义,则可能会创建文本记忆,其中包含从输入中提取的信息。例如,如果用户提供了一张金毛寻回犬的图片,并附上“这是我的狗”的文字,记忆库就会生成“我的狗是金毛寻回犬”之类的记忆。
设置环境
在开始生成记忆之前,您需要设置环境和 Agent Engine 实例。本部分假定您已设置 Python 开发环境,或者正在使用具有 Python 开发环境的运行时(例如 Colab)。
导入库
安装 Vertex AI SDK:
pip install google-cloud-aiplatform>=1.100.0
设置 Vertex AI SDK 客户端
import vertexai
client = vertexai.Client(
project="PROJECT_ID",
location="LOCATION",
)
替换以下内容:
- PROJECT_ID:您的项目 ID。
- LOCATION:您的区域。 Vertex AI Agent Engine 记忆库仅支持
us-central1
。
配置 Agent Engine 实例
如需从记忆库中提取记忆,您首先需要一个 Agent Engine 实例。您可以创建新实例,也可以获取现有实例。新实例是空的,除非您先创建或生成回忆。
创建
agent_engine = client.agent_engines.create()
使用现有的
agent_engine = client.agent_engines.get(name="AGENT_ENGINE_NAME")
替换以下内容:
- AGENT_ENGINE_NAME:代理引擎的名称。格式应为
projects/.../locations/.../reasoningEngines/...
。您只能在us-central1
中使用 Agent Engine 实例作为 Vertex AI Agent Engine 记忆库。
生成回忆
您可以在会话结束时或会话期间定期使用 GenerateMemories
触发记忆生成。记忆生成功能会从源对话中提取关键上下文,并将其与同一范围内的现有记忆相结合。例如,您可以使用 {"user_id": "123", "session_id": "456"}
等范围创建会话级记忆。具有相同范围的记忆可以合并并一起检索。
调用 GenerateMemories
时,您必须通过 Agent Engine 会话或直接通过 JSON 格式提供源对话:
Agent Engine 会话
借助 Agent Engine 会话,记忆库可以使用会话事件作为对话来源来生成记忆内容。
为了确定生成的记忆的范围,记忆库默认会从会话中提取并使用用户 ID。例如,如果会话的 user_id
为“123”,则记忆的范围存储为 {"user_id": "123"}
。您还可以直接提供 scope
,这会替换使用会话的 user_id
作为范围。
client.agent_engines.generate_memories(
name=agent_engine.api_resource.name,
vertex_session_source={
"session": "SESSION_NAME"
},
# Optional when using Agent Engine Sessions. Defaults to {"user_id": session.user_id}.
scope=SCOPE,
config={
"wait_for_completion": True
}
)
替换以下内容:
SESSION_NAME:会话名称。
(可选)SCOPE:一个字典,用于表示生成的回忆的范围。例如
{"session_id": "MY_SESSION"}
。只有具有相同范围的记忆才会被考虑用于整合。如果未提供,则系统会使用{"user_id": session.user_id}
。
JSON 格式
如果您使用的会话存储方式与 Agent Engine 会话不同,请直接以 JSON 格式提供源对话:
client.agent_engines.generate_memories(
name=agent_engine.api_resource.name,
direct_contents_source={
"events": EVENTS
},
scope=SCOPE,
config={
"wait_for_completion": True
}
)
替换以下内容:
- EVENTS:内容字典列表。例如:
[
{
"content": {
"role": "user",
"parts": [
{"text": "I'm work with LLM agents!"}
]
}
}
]
- SCOPE:一个字典,表示生成的记忆的范围。例如
{"session_id": "MY_SESSION"}
。只有具有相同范围的记忆才会被考虑用于整合。
GenerateMemories
返回一个 AgentEngineGenerateMemoriesOperation
,其中包含生成的记忆列表:
AgentEngineGenerateMemoriesOperation(
name="projects/.../locations/.../reasoningEngines/.../operations/...",
done=True,
response=GenerateMemoriesResponse(
generatedMemories=[
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.CREATED: "CREATED">,
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.UPDATED: "UPDATED">,
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.DELETED: "DELETED">,
),
]
)
)
每个生成的记忆都包含对该记忆执行的 action
:
CREATED
:表示添加了新的记忆,代表现有记忆未捕获的新概念。UPDATED
:表示现有记忆已更新,如果记忆涵盖的概念与新提取的信息类似,就会发生这种情况。记忆中的事实可能会更新为新信息,也可能保持不变。DELETED
:表示系统已删除现有记忆,因为其信息与从对话中提取的新信息相矛盾。
对于 CREATED
或 UPDATED
回忆,您可以使用 GetMemories
检索回忆的完整内容。检索 DELETED
个记忆会导致 404 错误。