Docs Menu
Docs Home
/ /

MongoDBと Mastruct の統合

MongoDB を Matra と統合して、 AIエージェントを構築できます。 Mastra は、ワークフロー、RAG、evals などのAIアプリケーションを構築するためのプリミティブを提供するオープンソースの TypeScriptエージェントフレームワークです。

重要

この統合は コミュニティによって管理されています。詳細については、 Mastruct のドキュメント または Mastruct GitHubリポジトリを参照してください。

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 ベクトル検索インデックス 」を参照してください。

詳細については、「 メタデータ フィルター 」を参照してください。

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
});

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 を使用する方法の詳細については、以下を参照してください。

戻る

AIエージェントの構築

項目一覧