MongoDB をMastraと統合して、 AIエージェントを構築できます。Mastra は、ワークフロー、RAG、evals などの AI アプリケーションを構築するためのプリミティブを提供するオープンソースの TypeScript エージェントフレームワークです。
詳細については、 Mastruct のドキュメント または Mastruct GitHubリポジトリ を参照してください。
Overview
MongoDBとMastraを使用してAIエージェントを構築できます。MongoDB ベクトル検索と Mastra のエージェントフレームワークを組み合わせることで、エージェントに次の機能を実装できます。
MongoDB をベクトルデータベースとして使用するベクトル埋め込みの保存と検索する
MongoDBクエリ構文を使用してベクトル検索結果をフィルターする
エージェントのツールとして RAG を実装する
エージェントのメモリをMongoDBに保存する
インストールとセットアップ
Mastra と MongoDB を一緒に使用するには、@mastra/mongodbパッケージをインストールします。
npm install @mastra/mongodb
Mastruct の使用を開始し、プロジェクトを作成する方法については、Mastruct のインストール を参照してください。
ベクトル ストア
MongoDBは Mastruct でサポートされているデータベースです。MongoDBVectorクラスを使用すると、MongoDBからベクトル埋め込みを保存および検索できます。このコンポーネントを使用して、データから埋め込みを保存し、MongoDB ベクトル検索を使用して埋め込みを取得することで、RAG を実装できます。
このコンポーネントにはMongoDB ベクトル検索インデックスを作成する必要があります。
使用法
Mastraで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をベクトル保存として操作するための最も関連するメソッドについて説明します。メソッドの完全なリストについては、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 });
インデックスを作成したら、関連するメタデータを持つベクトル埋め込みを保存できます。 完全な例については、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ベクトル保存は、ベクトル検索クエリ結果のメタデータのフィルターをサポートします。
標準の比較、配列、論理、要素演算子を使用する
メタデータでのメトリクス フィールドと配列の使用
メタデータと元のドキュメントの内容でフィルター
次の例では、フィルター構文を示しています。
// 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 ベクトル検索 をタスクを完了するためのツールとして使用できるようになります。
Mastruct は、エージェントが取得にMongoDBを使用する方法を最適化するために、エージェントの指示に含めることができる MONGODB_PROMPT 定数も提供します。詳細については、ベクトル ストアのプロンプトを参照してください。
使用法
次の例は、 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 を使用する方法の詳細については、以下を参照してください。