对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

使用独立内存服务

MongoDB Atlas Agent Engine 内存服务可以作为独立运行的服务运行,与完整的代理部署分开。使用本指南为内存项目预配内存服务器,并使用 agent-engine-sdk-memory Python软件开发工具包 (SDK)记录和检索外部应用程序的对话上下文。

您可以通过以下模式之一运行内存服务:

  • 托管:内存服务器在Atlas Agent Engine 上运行,应用程序使用服务帐户访问权限令牌与其连接。将此模式用于已部署的应用程序。

  • 本地:内存服务器在由 agentengine CLI托管的本地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 CLI并进行身份验证。要学习;了解更多信息,请参阅安装和身份验证。

  • 通过运行agentengine auth login 访问Atlas助手引擎。

  • 用于生成内存嵌入的 Voyage AI API密钥。

  • 大型语言模型 (LLM)提供商的API密钥,例如 ANTHROPIC_API_KEY。

  • pip 或 uv 以安装Python SDK。

  • 用于存储内存数据的Atlas Flex(最低要求)、M10、M20 或更高层级的集群(推荐)。要预配集群,请参阅设置Atlas资源。

    • 本指南需要Atlas 集群的连接字符串。要学习;了解如何检索连接字符串,请参阅连接到集群指南。

    • 我们建议部署专用的 M10 或更高层级的集群,以容纳不断增长的内存数据和索引计数。 Atlas Flex 是可以支持内存服务的最低集群层。

    • 集群的IP访问列表必须允许来自Atlas Agent Engine 数据平面的流量。要学习;了解如何添加数据平面IP地址,请参阅配置Atlas网络访问部分。

注意

如果关联的Atlas 集群无法创建内存所需的“搜索”和“矢量搜索”索引, Atlas助手引擎会在 Memory: waiting 阶段停止部署,并且可能会超时并显示 Error: context deadline exceeded 错误消息。

1

运行以下命令以搭建仅内存项目。将 "My Project" 替换为您的项目名称。

agentengine create --memory-only --name "My Project"

该命令生成一个项目目录,其中仅包含 project-config.yaml文件,不包含 agent.yaml文件或工作区。

2
  1. 运行以下命令以注册项目。该命令会打印新项目ID:

    agentengine project create "My Project"
  2. 选择处于活动状态的新项目。将 <project-id> 替换为上一个命令打印的项目ID :

    agentengine auth login --project-id <project-id>
3
  1. 打开 project-config.yaml文件,在 memory:区块下设立密钥名称和提取提供商。

  2. 运行以下命令,设立项目所需的密钥:

    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提供商的密钥名称。

  3. 存储内存配置:

    agentengine memory configure

注意

如果未设立MONGODB_URI 密钥或者内存服务无法访问连接字符串指向的集群,则预配将失败。如果预配失败,请确认集群的IP访问列表包含Atlas Agent Engine 数据平面IP地址。

4

启动内存运行时并等待其准备就绪:

agentengine memory apply --wait
5
  1. 运行以下命令,为项目创建服务帐户:

    agentengine service-account create memory-service --project-id <project-id> --role PROJECT_OWNER

    将 <project-id> 占位符替换为您的项目ID。保存命令输出中的客户端ID和客户端密钥。 Atlas Agent Engine 仅显示客户端密钥一次。

  2. 运行以下命令,用客户端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 会提示输入客户端密钥,但不进行回显。

    提示

    访问权限令牌的有效期为一小时。在当前令牌过期之前请求新令牌。

6

使用在上一步中导出的访问权限令牌,从平台的私有注册表安装 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 解析为您在上一步中导出的访问权限令牌。

7

在您的应用程序中,添加以下代码以创建客户端、绑定用户身份、记录发生的轮流,并在以后的对话中检索相关上下文:

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() 结果中。

要在不重新预配服务器的情况下更新内存配置,请执行以下步骤:

  1. 编辑 project-config.yaml文件中的 memory:区块。

  2. 在项目目录中,运行agentengine memory configure 以上传内存配置。

  3. 运行 agentengine memory apply 以应用配置。

要学习;了解如何在平台上配置内存,请参阅配置内存。

本节介绍如何搭建、启动和连接到本地内存堆栈。

在开始本教程之前,请确保您拥有以下资源:

1

运行以下命令,搭建一个仅用于本地开发的内存项目。将 "My Project" 替换为您的项目名称:

agentengine create --memory-only --name "My Project"

该命令会写入一个 project-config.yaml文件,将 memory_only 设置为 true,并指定内存配置模式。

此命令不会生成 agent.yaml文件、agents/目录或代理运行时代码。不能将 --memory-only 标志与 --template、--llm、--memory 或 --open-egress 标志结合使用。

2

在项目目录中创建一个 .env文件,然后在该文件中设立以下变量:

  • VOYAGE_API_KEY:对于 Voyage AI嵌入是必需的

  • LLM提供商密钥,例如 ANTHROPIC_API_KEY:如果在 project-config.yaml 中启用了背景提取,则为必填项

您无需设立MONGODB_URI 变量。 agentengine dev up 命令会自动预配并连接到捆绑的本地MongoDB容器。如果要使用外部MongoDB实例,设立此变量。

3

在项目目录中,运行以下命令以启动本地内存堆栈:

agentengine dev up

对于仅内存项目,此命令仅启动以下容器:

  • mongodb:本地 Atlas 兼容的MongoDB实例

  • memory-server:内存运行时服务

  • oe:SDK 连接的本地业务流程引擎代理

命令输出包括本地 oe 和 memory-server 服务的 URL。复制 oe URL以在后续步骤中使用。

使用以下命令管理本地堆栈:

命令
说明

agentengine dev status

显示本地堆栈的状态。

agentengine dev logs

流式传输所有服务的日志。将 memory-server 作为参数传递给仅流传输该服务的日志。

agentengine dev stop

停止本地堆栈而不删除容器。

agentengine dev clean

停止本地堆栈并删除容器和卷。

4

运行以下命令以安装 agentic-platform-memory包:

pip install agentic-platform-memory
5

导航到您的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

要为在Atlas Agent Engine 上运行的代理启用内存,请参阅为代理添加内存指南。