基于 NVIDIA NeMo Agent Toolkit 与 Amazon S3 Vectors 构建智能体持久化内存
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
随着自主 AI 智能体从简单的单轮提示词响应演变为复杂的长周期决策引擎,状态管理与内存持久化已成为企业级架构设计的核心瓶颈。即使大语言模型的上下文窗口已经扩展至数百万 Token,在面临跨会话持久记忆、高吞吐检索以及细粒度权限控制等企业级诉求时,纯上下文存储依然显得力不从心且成本高昂。
为了在不引发推理成本剧增的前提下保持连续的上下文感知能力,生产级系统普遍采用解耦的内存架构。NVIDIA NeMo Agent Toolkit (NAT) 为构建、编排和扩展智能体微服务提供了极具弹性的底层框架。当 NAT 与利用对象存储实现超大规模、高性价比向量检索的 Amazon S3 Vectors 相结合,并部署于 Amazon Elastic Kubernetes Service (Amazon EKS) 上时,开发者便能够构建出兼具高扩展性与低成本的企业级智能体内存子系统。
本文将深入探讨 NAT 内存子系统的架构设计,手把手教你实现生产可用的 custom S3 Vectors 内存提供者,并在 EKS 上完成云原生部署,最后以多智能体金融投资研究系统为例展示实际应用。在构建高性能智能体集群时,往往需要跨多种大模型进行低延迟路由,开发者可以通过 n1n.ai 统一接入 Claude 3.5 Sonnet、DeepSeek-V3 等主流模型,确保 API 调用稳定高效。
架构解析:NAT 智能体内存子系统原理
NVIDIA NeMo Agent Toolkit 将智能体的执行解耦为任务编排、工具交互与状态持久化三大层级。其中,内存子系统作为语义核心,负责记录智能体的操作历史、索引非结构化背景知识,并实现跨会话的历史决策检索。
+-----------------------------------------------------------------------+
| Amazon EKS 集群微服务架构 |
| |
| +---------------------+ +-------------------+ +---------------+ |
| | 市场数据采集智能体 | | 合规风控智能体 | | 投资分析智能体| |
| +----------+----------+ +---------+---------+ +-------+-------+ |
| | | | |
| +------------------------+---------------------+ |
| | |
| [NVIDIA NeMo Agent Toolkit] |
| +-------------------------+ |
| | 内存子系统抽象层 (NAT) | |
| +------------+------------+ |
| | |
+-------------------------------------|---------------------------------+
| AWS SDK / Boto3
v
+-------------------------------+
| Amazon S3 Vectors |
| +-------------------------+ |
| | 向量索引与元数据存储 | |
| +-------------------------+ |
+-------------------------------+
NAT 框架将智能体内存清晰地划分为三个层级:
- 情景内存(Episodic Memory):记录单次交易或会话期间的逐轮对话动态与中间执行日志。
- 语义内存(Semantic Memory):存储领域知识、已摄取的文档以及通过 RAG 检索可达的向量嵌入。
- 程序内存(Procedural Memory):保留操作策略、工具使用指令以及从先前任务迭代中总结的自我反思日志。
通过引入 Amazon S3 Vectors 作为语义内存与程序内存的底层存储,系统能够摆脱传统内存型向量数据库的容量限制,获得近乎无限的水平扩展能力与极高的成本效益。
自定义编写 Amazon S3 Vectors 内存提供者
NAT 提供了高度可扩展的抽象基类 BaseMemoryProvider。下面我们使用 Python 和 boto3 开发一个可直接用于生产环境的 S3 Vectors 内存提供者组件。
1. 核心 Provider 代码实现
import os
import json
import logging
from typing import List, Dict, Any, Optional
import boto3
from botocore.exceptions import BotoCoreError, ClientError
# NAT 原生基类引用
from nemo_agent_toolkit.memory.base import BaseMemoryProvider, MemoryRecord
logger = logging.getLogger(__name__)
class S3VectorMemoryProvider(BaseMemoryProvider):