您可以将MongoDB与 Mastra 集成以构建AI代理。 Mastra 是一个开源 TypeScript代理框架,为构建AI应用程序提供基元,包括工作流、RAG 和评估。
重要
此集成由 社区维护。要学习;了解更多信息,请参阅 Mastra 文档或 Mastra GitHub存储库。
Overview
您可以将MongoDB与 Mastra 结合使用来构建AI助手。通过将MongoDB Vector Search 与 Mastra 的代理框架相结合,您可以为助手实现以下功能:
- 使用MongoDB作为向量数据库来存储和检索向量嵌入 
- 使用MongoDB查询语法筛选向量搜索结果 
- 在代理中实现 RAG 作为工具 
- 将助手的内存存储在MongoDB中 
安装和设置
要将MongoDB与 Mastra 结合使用,请安装 @mastra/mongodb包:
npm install @mastra/mongodb 
要开始使用 Mastra 并学习;了解如何创建项目,请参阅安装 Mastra。
向量存储
MongoDB是supported database <https://mastra.ai/en/docs/rag/vector-databases#supported-databases> Mastra 中的 。MongoDBVector 类允许您在MongoDB中存储和检索向量检索。您可以使用此组件存储数据中的嵌入并使用MongoDB Vector Search 检索嵌入,从而实现RAG。
此组件要求您创建MongoDB Vector Search 索引。
使用
要将MongoDB矢量存储与 Mastra 结合使用,请导入 MongoDBVector 类,使用该类创建一个对象,然后指定MongoDB连接详细信息。示例:
import { MongoDBVector } from '@mastra/mongodb' // Instantiate MongoDB as a vector store const mongoVector = new MongoDBVector({   uri: process.env.MONGODB_URI,        // MongoDB connection string   dbName: process.env.MONGODB_DATABASE // Database name }) 
方法
本节重点介绍将MongoDB作为向量存储使用的最相关方法。有关方法的完整列表,请参阅 Mastra 文档。
在搜索嵌入之前,您必须在集合上创建向量搜索索引。 dimension 参数必须与嵌入模型所需的维数相匹配。
// Create a vector search index await mongoVector.createIndex({   indexName: "vector_index",       // Name of the index   dimension: 1536,                 // Must match your embedding model's dimensions }); 
创建索引后,您可以存储向量嵌入与关联的元数据。有关完整示例,请参阅 Mastra更新或插入(upsert)嵌入示例。
import { openai } from "@ai-sdk/openai"; import { MongoDBVector } from "@mastra/mongodb"; import { MDocument } from "@mastra/rag"; import { embedMany } from "ai"; // Create a document from text const doc = MDocument.fromText("Your text content..."); // Split document into chunks const chunks = await doc.chunk(); // Generate embeddings for each chunk const { embeddings } = await embedMany({   values: chunks.map(chunk => chunk.text), // Text content to embed   model: openai.embedding("text-embedding-3-small"), // Embedding model }); // Instantiate MongoDB as a vector store const mongoVector = new MongoDBVector({   uri: process.env.MONGODB_URI,   // MongoDB connection string   dbName: process.env.MONGODB_DB_NAME, // Database name }); // Store vector embeddings with metadata await mongoVector.upsert({   indexName: "vector_index",                         // Name of the vector search index   vectors: embeddings,                               // Array of vector embeddings   metadata: chunks?.map(chunk => ({ text: chunk.text })), // Associated metadata for each embedding }); 
要检索语义相似的文档,请先将查询转换为嵌入,然后查询向量存储。要学习;了解更多信息,请参阅 Mastra 中的检索。
import { openai } from "@ai-sdk/openai"; import { embed } from "ai"; import { MongoDBVector } from "@mastra/mongodb"; // Convert query to embedding const { embedding } = await embed({   value: "What are the main points in the article?",  // Query text   model: openai.embedding("text-embedding-3-small"), // Embedding model }); // Instantiate MongoDB as a vector store const mongoVector = new MongoDBVector({   uri: process.env.MONGODB_URI,        // MongoDB connection string   dbName: process.env.MONGODB_DATABASE // Database name }); // Query the vector store for similar documents const results = await mongoVector.query({   indexName: "vector_index", // Name of the vector search index   queryVector: embedding,    // Query embedding vector   topK: 10,                  // Number of results to return }); // Display results console.log(results); 
元数据过滤器
MongoDB矢量存储支持对向量搜索查询进行元数据筛选:
以下用法示例演示了筛选语法:
// Query with metadata filters const results = await mongoVector.query({   indexName: "vector_index",           // Name of the vector search index   queryVector: queryVector,            // Query embedding vector   topK: 10,                            // Number of results to return   filter: {     category: "electronics",           // Simple equality filter     price: { $gt: 100 },               // Numeric comparison     tags: { $in: ["sale", "new"] },    // Array membership   }, }); 
带有AI代理的 RAG
您可以将MongoDB用作 Mastra AI代理中的向量存储来实现代理 RAG。这允许您的代理使用MongoDB向量搜索作为工具来帮助完成任务。
Mastra 还提供了一个MONGODB_PROMPT 常量,您可以将其包含在代理指令中,以优化代理使用MongoDB进行检索的方式。要学习;了解更多信息,请参阅向量存储提示。
使用
以下示例展示了如何使用MongoDB作为向量存储来创建具有 RAG 功能的AI代理:
import { Agent } from '@mastra/core/agent'; import { openai } from '@ai-sdk/openai'; import { MONGODB_PROMPT } from "@mastra/mongodb"; import { createVectorQueryTool } from "@mastra/rag"; // Create a vector query tool for the agent const vectorQueryTool = createVectorQueryTool({   vectorStoreName: "mongoVector",                    // Name of MongoDB vector store   indexName: "vector_index",                         // Name of Vector Search index   model: openai.embedding("text-embedding-3-small"), // Embedding model }); // Define an AI agent with RAG capabilities export const ragAgent = new Agent({   name: 'RAG Agent',                 // Agent name   model: openai('gpt-4o-mini'),      // LLM model   instructions: `   Process queries using the provided context. Structure responses to be concise and relevant.   ${MONGODB_PROMPT}   `,   tools: { vectorQueryTool },        // Tools available to the agent }); 
AI助手的内存
您可以使用 Mastra 的内存系统,并以MongoDB作为存储后端。这使您的代理能够记住过去的交互,并使用该信息为未来的决策提供信息。
使用
以下示例演示了如何在AI代理中使用内存。此示例使用 memoryOptions 来确定请求的召回范围。设置 lastMessages: 5 以限制基于新近度的召回。使用 semanticRecall 获取 topK: 3 个最相关的消息,包括每个匹配项上下文的 messageRange: 2 个邻近消息。
import "dotenv/config";   import { mastra } from "./mastra";   const threadId = "123"; const resourceId = "user-456";   const agent = mastra.getAgent("mongodbAgent");   const message = await agent.stream("My name is Mastra", {   memory: {     thread: threadId,     resource: resourceId   } });   await message.textStream.pipeTo(new WritableStream());   const stream = await agent.stream("What's my name?", {   memory: {     thread: threadId,     resource: resourceId   },   memoryOptions: {     lastMessages: 5,     semanticRecall: {       topK: 3,       messageRange: 2     }   } });   for await (const chunk of stream.textStream) {   process.stdout.write(chunk); } 
其他资源
要学习;了解有关将 Mastra 与MongoDB结合使用的更多信息,请参阅: