Docs Menu
Docs Home
/ /

MongoDB 와 마스트라 통합

MongoDB 마스트라 와 통합하여 AI 에이전트를 빌드 수 있습니다. 마스트라는 워크플로, RAG, 평가 등 AI 애플리케이션을 구축하기 위한 기본 요소를 제공하는 오픈 소스 타입 프레임워크 (Typescript) 에이전트 프레임워크입니다.

중요

이 통합은 커뮤니티에서 유지 관리합니다. 자세히 학습 마스트라 설명서 또는 마스트라 GitHub 리포지토리 참조하세요.

MongoDB MongoDB와 함께 사용하여 AI 에이전트를 빌드 수 있습니다. MongoDB Vector Search 를 마스트라의 에이전트 프레임워크 와 결합하면 에이전트에 대해 다음 기능을 구현 수 있습니다.

  • MongoDB 벡터 데이터베이스 로 사용하여 벡터 임베딩 저장 및 조회

  • MongoDB 쿼리 구문을 사용하여 벡터 검색 결과 필터링

  • 에이전트에서 도구로 RAG 구현

  • 에이전트의 메모리를 MongoDB 에 저장

MongoDB MongoDB와 함께 사용하려면 @mastra/mongodb 패키지 설치합니다.

npm install @mastra/mongodb

마스트라를 시작하고 프로젝트 만드는 방법을 학습 마스트라 설치를 참조하세요.

MongoDB supported database <https://mastra.ai/en/docs/rag/vector-databases#supported-databases> 마스트라에서 입니다.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 벡터 저장 로 사용하는 데 가장 관련성이 높은 방법을 중점적으로 설명합니다. 전체 메서드 목록은 마스트라 문서를 참조하세요.

임베딩을 검색 하려면 먼저 컬렉션 에 벡터 검색 인덱스 만들어야 합니다. 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
});

인덱스 만든 후 관련 메타데이터 와 함께 벡터 임베딩을 저장 수 있습니다. 전체 예시 는 마스트라 업서트 임베딩 예시 참조하세요.

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

의미적으로 유사한 문서를 조회 하려면 먼저 쿼리 임베딩으로 변환한 다음 벡터 저장 쿼리 . 자세한 학습 마스트라에서 조회를 참조하세요.

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

최적의 성능을 위해 자주 필터하다 메타데이터 필드에 인덱스를 생성합니다.자세한 학습 MongoDB 벡터 검색 인덱스를 참조하세요.

자세히 학습 메타데이터 필터를 참조하세요.

MongoDB 마스트라 AI 에이전트 내의 벡터 저장 로 사용하여 에이전트적 RAG를 구현 수 있습니다. 이를 통해 에이전트는 MongoDB 벡터 검색 작업을 완료하는 데 도움이 되는 도구로 사용할 수 있습니다.

또한, 마스트라는 에이전트 검색을 위해 MongoDB 사용하는 방법을 최적화하기 위해 에이전트 지침에 포함할 수 있는 상수를 제공합니다. 자세한 학습 MONGODB_PROMPT Vector Store Prompts(벡터 저장 프롬프트)를 참조하세요.

다음 예시 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 저장 백엔드 로 사용하여 마스트라의 메모리 시스템을 사용할 수 있습니다. 이를 통해 에이전트 는 과거 상호 작용을 기억하고 해당 정보를 사용하여 향후 결정을 내릴 수 있습니다.

전체 튜토리얼은 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 와 함께 마스트라를 사용하는 방법에 대해 자세히 학습 다음을 참조하세요.

돌아가기

AI 에이전트 빌드

이 페이지의 내용