MongoDB を Matra と統合して、 AIエージェントを構築できます。 Mastra は、ワークフロー、RAG、evals などのAIアプリケーションを構築するためのプリミティブを提供するオープンソースの TypeScriptエージェントフレームワークです。
重要
この統合は コミュニティによって管理されています。詳細については、 Mastruct のドキュメント または Mastruct GitHubリポジトリを参照してください。
Overview
MongoDBと Mastruct を使用してAIエージェントを構築できます。 MongoDB ベクトル検索と Mastruct のエージェントフレームワークを組み合わせることで、エージェントに次の機能を実装できます。
- MongoDB をベクトルデータベースとして使用するベクトル埋め込みの保存と取得 
- MongoDBクエリ構文を使用してベクトル検索結果をフィルタリングする 
- エージェントのツールとして RAG を実装する 
- エージェントのメモリをMongoDBに保存 
インストールとセットアップ
Mastruct とMongoDB を一緒に使用するには、 @mastra/mongodbパッケージをインストールします。
npm install @mastra/mongodb 
Mastruct の使用を開始し、プロジェクトを作成する 方法については、「 Mastruct のインストール 」を参照してください。
ベクトル ストア
MongoDB はMastructsupported database <https://mastra.ai/en/docs/rag/vector-databases#supported-databases> では です。MongoDBVector クラスを使用すると、 MongoDBからベクトル埋め込みを保存および検索できます。このコンポーネントを使用して、データから埋め込みを保存し、 MongoDB ベクトル検索 を使用して埋め込みを取得することで、RAM を実装できます。
このコンポーネントにはMongoDB ベクトル検索インデックス を作成する必要があります。
使用法
Mastruct でMongoDBベクトルストアを使用するには、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をベクトルストアとして操作するための最も関連するメソッドについて説明します。メソッドの完全なリストについては、 Mastruct のドキュメント を参照してください。
埋め込みを検索する前に、コレクションにベクトル検索インデックスを作成する必要があります。 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 }); 
インデックスを作成したら、関連するメタデータを持つベクトル埋め込みを保存できます。完全な例については、「 Mastruct のアップサート埋め込みの例 」を参照してください。
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 }); 
セマンティックに類似したドキュメントを検索するには、まずクエリを埋め込みに変換し、次にベクトルストアをクエリします。詳細については、「 Mastruct での取得 」を参照してください。
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ベクトルストアは、ベクトル検索クエリー結果のメタデータのフィルタリングをサポートします。
- 制限なしで Mastruct クエリ構文 を使用してください。 
- 標準の比較、配列、論理、要素演算子を使用する 
- メタデータでのメトリクス フィールドと配列の使用 
- メタデータと元のドキュメントの内容でフィルタリング 
次の使用例では、フィルタリング構文を示しています。
// 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   }, }); 
Tip
最適なパフォーマンスを得るには、頻繁にフィルタリングするメタデータフィールドに インデックス を作成します。詳細については、 「 MongoDB ベクトル検索インデックス 」を参照してください。
詳細については、「 メタデータ フィルター 」を参照してください。
RAG とAIエージェント
Mastruct AIエージェント内のベクトルストアとしてMongoDB を使用してエージェント RAG を実装できます。これにより、エージェントはMongoDB ベクトル Search をタスクを完了するためのツールとして使用できるようになります。
MastructMONGODB_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エージェント付きメモリ
MongoDB をストレージバックエンドとして持つ Mastruct のメモリ システムで使用できます。これにより、エージェントは過去のインタラクションを記憶し、その情報を使用して将来の決定に通知できます。
完全なチュートリアルについては、 「 MongoDBによるメモリ 」を参照してください。
使用法
次の例は、 AIエージェントでメモリを使用する方法を示しています。この例では、 memoryOptions を使用してリクエストの呼び出しをスコープ設定します。直近性ベースの呼び出しを制限するには、lastMessages: 5 に設定します。 semanticRecall を使用して、各一致の周囲のコンテキストに対応するmessageRange: 2 メッセージを含む、最も関連性の高い topK: 3 メッセージを取得します。
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); } 
追加リソース
MongoDBで Mastruct を使用する方法の詳細については、以下を参照してください。