您可以将MongoDB与 Vercel AI SDK 集成,为跨会话持续存在的代理配置内存。本教程创建一个MongoDB内存提供商,构建一个保存和调用内存的代理,并运行该代理两次以显示它从上次运行中检索信息。
在本教程中,您将执行以下任务:
设置您的环境。
构建具有持久内存的代理。
运行代理并查看输出。
背景
Vercel AI SDK 是一个用于构建AI应用程序和代理的 TypeScript框架。 @mongodb-developer/vercel-ai-memory包为使用 SDK 构建的代理提供MongoDB支持的持久内存。该包将内存存储在五层中。要学习;了解有关内存层的更多信息,请参阅将MongoDB与 Vercel AI SDK 集成。
本教程使用该包向代理公开的内存工具命令。该模型会调用 session_recent 命令来恢复每次运行开始时的对话历史记录,并调用 session_append 和 semantic_save 命令来存储新信息。
先决条件
要完成本教程,您必须具备以下资源:
以下MongoDB 集群类型之一:
使用 Python 和 Docker 创建的本地 Atlas 部署。安装
atlas-local-lib-py(pip install atlas-local-lib-py),以编程方式创建和管理本地部署。要了解更多信息,请参阅 atlas-local-lib-py 存储库。安装了Search 和向量搜索的 MongoDB Community 集群。
OpenAI API密钥。您必须拥有一个具有可用于API请求的积分的 OpenAI 帐户。要学习;了解有关注册 OpenAI 帐户的更多信息,请参阅 OpenAI API网站。
Voyage AI API 密钥。要创建 API 密钥,请参阅 管理 Voyage AI 模型 API 密钥。
本教程将配置一个基本URL ,用于将嵌入请求路由到 MongoDB 的 Voyage AI端点。如果您直接从 Voyage AI生成API密钥,删除内存提供商步骤中指定的
baseURL选项。Node.js 和npm。
设置环境
在本部分中,您将通过安装所需的依赖项、设置环境变量和创建项目文件来准备环境。
设置环境变量。
在您的 vercel-ai-mongodb-project 目录中,创建一个 .env 文件并添加以下代码:
OPENAI_API_KEY="<openai-api-key>"VOYAGE_API_KEY="<voyage-api-key>"MONGODB_URI="<connection-string>"将 <connection-string> 替换为您的 Atlas 集群或本地部署的连接字符串。
连接字符串应使用以下格式:
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net重要: 确保连接字符串包含数据库用户的凭证。要学习有关查找连接字符串的更多信息,请参阅通过客户端库连接到集群。
创建项目文件。
在 vercel-ai-mongodb-project目录中,创建名为 main.ts 的文件。将以下代码添加到此文件以加载环境变量并导入所需的模块:
import 'dotenv/config'import { createMongoDBMemory } from '@mongodb-developer/vercel-ai-memory'import { createVoyage } from 'voyage-ai-provider'import { openai } from '@ai-sdk/openai'import { ToolLoopAgent } from 'ai'在后续步骤中,您将向此文件添加代码,以创建内存提供商并构建代理。
构建代理
在本部分中,您将创建MongoDB内存提供商程序,构建使用该提供商存储和检索内存的代理,并添加运行该代理的代码。
创建内存提供商。
将以下代码添加到 main.ts文件中,以创建 Voyage AI客户端和使用 Voyage AI嵌入模型的内存提供商:
const voyage = createVoyage({ apiKey: process.env.VOYAGE_API_KEY, baseURL: 'https://ai.mongodb.com/v1',})
const mongodbMemory = createMongoDBMemory({ uri: process.env.MONGODB_URI!, embedder: voyage.embeddingModel('voyage-4'),})重要
您在Atlas中创建的 Voyage AI API密钥需要 baseURL 选项指定的MongoDB Voyage AI端点。如果您直接从 Voyage AI生成API密钥,删除baseURL 选项。
提供商在首次使用时连接到MongoDB并创建 agent_memory数据库。然后,它将每个内存层级的一个集合添加到数据库。提供商还会创建语义召回所需的MongoDB Vector Search 索引。要学习;了解有关提供商创建的集合和索引的更多信息,请参阅 Vercel AI SDK 参考中的集合和索引。
创建代理。
将以下代码添加到 main.ts文件以创建一个代理,该代理的内存工具仅限于一个用户和会话:
const agent = new ToolLoopAgent({ model: openai('gpt-4.1'), tools: mongodbMemory({ userId: 'alice', sessionId: 'sess-001' }), instructions: `You are an assistant with persistent memory. At the start of every conversation, call session_recent to restore context and semantic_search to recall facts about the user. Save each conversation turn with session_append. Save important facts about the user with semantic_save.`,})这些指令告诉模型要调用哪些内存命令。 userId 和 sessionId 值的范围限定了代理存储和检索的内存。
添加运行代理的代码。
将以下代码添加到 main.ts文件,以命令行向代理传递提示,打印响应,然后关闭MongoDB连接:
async function main() { const prompt = process.argv[2]
if (!prompt) { console.error('Usage: npx tsx main.ts "<your message>"') process.exit(1) }
const result = await agent.generate({ prompt }) console.log('[agent]:', result.text)
await mongodbMemory.close()}
main().catch((error) => { console.error(error) process.exit(1)})运行代理
在本部分中,您运行main.ts文件并向代理提供信息。然后,再次运行代理并提示其调用此信息。
提示代理召回信息。
再次运行代理并传递以下提示,要求代理调用以前的信息:
npx tsx main.ts "What do I study, and where?"输出类似于以下内容:
[agent]: You are a marine biologist who studies emperor penguins inAntarctica.代理使用内存来回答提示。两次运行都会传递相同的 userId 和 sessionId 值,因此模型会在第二次运行开始时调用 session_recent 和 semantic_search 命令。这些命令恢复对话以及首次运行时存储在MongoDB中的内存。
注意
MongoDB Vector Search 索引在首次运行后异步构建。如果代理忘记了这些信息,请等待几秒钟,然后再次运行命令。
后续步骤
要学习;了解有关内存提供商的更多信息,包括完整参数参考、保留和拓扑结构选项以及所有内存工具命令,请参阅将MongoDB与 Vercel AI SDK 集成。
如需学习;了解有关 Vercel AI SDK 的更多信息,请参阅 Vercel AI SDK 文档。