Overview
MongoDB Atlas Agent Engine 内存服务可以作为独立运行的服务运行,与完整的代理部署分开。使用本指南为内存项目预配内存服务器,并使用 agent-engine-sdk-memory Python软件开发工具包 (SDK)记录和检索外部应用程序的对话上下文。
您可以通过以下模式之一运行内存服务:
托管:内存服务器在Atlas Agent Engine 上运行,应用程序使用服务帐户访问权限令牌与其连接。将此模式用于已部署的应用程序。
本地:内存服务器在由
agentengineCLI托管的本地Docker容器中运行,应用程序直接与其连接。使用此模式在本地进行开发和测试。
托管内存服务
在托管模式下,agent-engine-sdk-memory SDK 使用服务帐户访问权限令牌连接到托管内存网关。网关从服务帐户中读取组织和项目。对于每个对话,您将 user_id 和 session_id 值传递给 SDK,以将对话的内存范围限定为该用户和会话。
托管模式下可以使用以下功能:
record_turn()、build_context()和search()SDK 方法,用于记录和检索对话上下文语义、情景、程序和分类搜索
直接创建和读取操作,采用
save_*、get_*或list_*形式自定义内存类型,使用通用
save()和retrieve()方法
本地内存服务
在本地模式下,agentic-platform-memory SDK 直接连接到 agentengine dev up 命令在计算机上启动的本地编排引擎 (oe) 代理。您必须将 base_url 值设立为本地 oe URL。请勿为该连接设立project_id 或访问权限令牌。
本地模式下可以使用以下功能:
record_turn()、build_context()和search()SDK 方法,用于记录和检索对话上下文语义、情景、程序和分类搜索
直接创建和读取操作,采用
save_*、get_*或list_*形式
不能在本地模式下使用自定义内存类型。
配置托管内存服务
本节介绍如何创建托管在Atlas助手引擎上的仅内存项目。
先决条件
在开始本教程之前,请确保您拥有以下资源:
通过运行
agentengine auth login访问Atlas助手引擎。用于生成内存嵌入的 Voyage AI API密钥。
大型语言模型 (LLM)提供商的API密钥,例如
ANTHROPIC_API_KEY。pip或uv以安装Python SDK。用于存储内存数据的Atlas Flex(最低要求)、
M10、M20或更高层级的集群(推荐)。要预配集群,请参阅设置Atlas资源。我们建议部署专用的
M10或更高层级的集群,以容纳不断增长的内存数据和索引计数。 Atlas Flex 是可以支持内存服务的最低集群层。
注意
如果关联的Atlas 集群无法创建内存所需的“搜索”和“矢量搜索”索引, Atlas助手引擎会在 Memory: waiting 阶段停止部署,并且可能会超时并显示 Error: context deadline exceeded 错误消息。
步骤
配置内存设置。
打开
project-config.yaml文件,在memory:区块下设立密钥名称和提取提供商。运行以下命令,设立项目所需的密钥:
agentengine secret set MONGODB_URI --value "<value>" --project-id <project-id> agentengine secret set VOYAGE_API_KEY --value "<value>" --project-id <project-id> agentengine secret set ANTHROPIC_API_KEY --value "<value>" --project-id <project-id> 将以下占位符值替换为:
<value>:密钥的值。MONGODB_URI: Atlas 集群的连接字符串。VOYAGE_API_KEY:您的 Voyage AI密钥。ANTHROPIC_API_KEY:您的 LLM提供商密钥。
<project-id>:agentengine project create命令返回的项目对象ID 。此标志是必需的,因为仅内存工作流程不包含agents.yaml文件。
如果您使用其他提供商,请将
ANTHROPIC_API_KEY替换为您的 LLM提供商的密钥名称。存储内存配置:
agentengine memory configure
注意
如果未设立MONGODB_URI 密钥或者内存服务无法访问连接字符串指向的集群,则预配将失败。如果预配失败,请确认集群的IP访问列表包含Atlas Agent Engine 数据平面IP地址。
创建服务帐户并检索访问权限令牌。
运行以下命令,为项目创建服务帐户:
agentengine service-account create memory-service --project-id <project-id> --role PROJECT_OWNER 将
<project-id>占位符替换为您的项目ID。保存命令输出中的客户端ID和客户端密钥。 Atlas Agent Engine 仅显示客户端密钥一次。运行以下命令,用客户端ID和客户端密钥交换访问权限令牌:
export ACCESS_TOKEN=$(curl --fail-with-body --silent --show-error \ --user <client-id> \ --data grant_type=client_credentials \ "https://agentengine.mongodb.com/api/v1/oauth/token" | jq -er .access_token) 将
<client-id>占位符替换为您的客户端ID。curl会提示输入客户端密钥,但不进行回显。提示
访问权限令牌的有效期为一小时。在当前令牌过期之前请求新令牌。
安装Python SDK。
使用在上一步中导出的访问权限令牌,从平台的私有注册表安装 agent-engine-sdk-memory包:
pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
uv pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
URL使用 username:password 格式。 ignore 是占位符用户名,因为注册表仅使用密码字段中的访问权限令牌进行身份验证。 $ACCESS_TOKEN 解析为您在上一步中导出的访问权限令牌。
记录和检索对话上下文。
在您的应用程序中,添加以下代码以创建客户端、绑定用户身份、记录发生的轮流,并在以后的对话中检索相关上下文:
from agent_engine_sdk_memory import ( Memory, MemoryRequestContext, ) # Create the client using your access token. memory = Memory(service_account_token="<your-access-token>") # Bind the user and session for this conversation. chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) # Record turns as they happen. chat.record_turn( role="user", content="I always fly out of Boston.", ) chat.record_turn( role="assistant", content="Got it, Boston is saved as your home airport.", ) # In a later conversation, recall what matters. later = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_456", ) ) context = later.build_context( query="Where should the flight book from?" ) hits = later.search("home airport", top_k=5)
注意
记录转弯不会立即产生长期记忆。内存服务以异步方式将轮次合并为长期内存。写入后,记录的轮次可能不会立即出现在 search() 或 build_context() 结果中。
更新内存配置
要在不重新预配服务器的情况下更新内存配置,请执行以下步骤:
编辑
project-config.yaml文件中的memory:区块。在项目目录中,运行
agentengine memory configure以上传内存配置。运行
agentengine memory apply以应用配置。
配置本地内存服务
本节介绍如何搭建、启动和连接到本地内存堆栈。
先决条件
在开始本教程之前,请确保您拥有以下资源:
已安装
agentengineCLI 。要学习;了解更多信息,请参阅安装和身份验证。用于生成内存嵌入的 Voyage AI API密钥。
大型语言模型 (LLM)提供商(例如
ANTHROPIC_API_KEY)的API密钥(如果您启用背景提取)。pip或uv以安装Python SDK。
步骤
启动本地堆栈。
在项目目录中,运行以下命令以启动本地内存堆栈:
agentengine dev up
对于仅内存项目,此命令仅启动以下容器:
mongodb:本地 Atlas 兼容的MongoDB实例memory-server:内存运行时服务oe:SDK 连接的本地业务流程引擎代理
命令输出包括本地 oe 和 memory-server 服务的 URL。复制 oe URL以在后续步骤中使用。
使用以下命令管理本地堆栈:
命令 | 说明 |
|---|---|
| 显示本地堆栈的状态。 |
| 流式传输所有服务的日志。将 |
| 停止本地堆栈而不删除容器。 |
| 停止本地堆栈并删除容器和卷。 |
将 SDK 连接到本地堆栈。
导航到您的Python应用程序目录。此目录可以与您在第一步中创建的项目目录分开。
然后,通过将以下代码添加到应用程序来连接到本地堆栈。将 http://localhost:<oe-port> 替换为从 agentengine dev up 命令输出中复制的URL 。
from agentic_platform_memory import Memory, MemoryRequestContext # Set the base_url to the local oe URL printed by "agentengine dev up". memory = Memory(base_url="http://localhost:<oe-port>") # Bind conversation identity. session = memory.bind( MemoryRequestContext( user_id="user_123", session_id="session_456", ) ) # Record a turn. session.record_turn(role="user", content="I prefer window seats on flights.") # Build context. context = session.build_context( query="What seat preferences are known?", enabled_sources={"stm", "semantic", "episodic"}, ) print(context.formatted_context)
排除本地连接错误
运行本地内存堆栈时,您可能会看到 MemoryRouteNotFoundError (404) 错误。要解决此错误,请确保不要设立project_id 值。
SDK 使用 project_id 值来识别接收请求的URL路径。当未设立project_id 时(与本地连接一样),SDK 会将请求发送到本地 oe 代理提供服务的路径。当 project_id 已设立时,SDK 会将请求发送到项目范围的路径,只有托管的Atlas Agent Engine 才能服务该路径。本地堆栈不为项目范围的路径提供服务,因此发送到此路径的请求会生成错误。
如果通过托管工作流在Shell中设立了过时的 AGENTIC_MEMORY_PROJECT_ID 环境变量,SDK 会请求项目范围的路由,该路由会针对本地堆栈返回 MemoryRouteNotFoundError 。在连接到本地堆栈之前,通过运行以下命令取消设置此变量:
unset AGENTIC_MEMORY_PROJECT_ID