createGraphRAGTool()
createGraphRAGTool() crée un Tool qui améliore le RAG en construisant un graphe des relations sémantiques entre les documents. Il utilise en interne le système GraphRAG afin de proposer une recherche fondée sur un graphe, qui trouve du contenu pertinent aussi bien par similarité directe que par relations connectées.
Exemple d'utilisationLien direct vers Exemple d'utilisation
import { createGraphRAGTool } from '@mastra/rag'
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
const graphTool = createGraphRAGTool({
vectorStoreName: 'pinecone',
indexName: 'docs',
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
graphOptions: {
dimension: 1536,
threshold: 0.7,
randomWalkSteps: 100,
restartProb: 0.15,
},
})
ParamètresLien direct vers Paramètres
Exigences relatives aux paramètres : la plupart des champs peuvent être définis lors de la création comme valeurs par défaut.
Certains champs peuvent être remplacés à l'exécution via Request Context ou l'entrée. Si
un champ requis est absent à la fois lors de la création et à l'exécution, une erreur est
levée. Notez que model, id et description peuvent uniquement être définis lors de la
création.
id?:
description?:
vectorStoreName:
indexName:
model:
enableFilter?:
includeSources?:
graphOptions?:
dimension?:
threshold?:
randomWalkSteps?:
restartProb?:
providerOptions?:
vectorStore?:
vectorStoreName devient facultatif.Valeur renvoyéeLien direct vers Valeur renvoyée
Le Tool renvoie un objet contenant :
relevantContext:
sources:
Structure de l'objet QueryResultLien direct vers queryresult-object-structure
{
id: string; // Unique chunk/document identifier
metadata: any; // All metadata fields (document ID, etc.)
vector: number[]; // Embedding vector (if available)
score: number; // Similarity score for this retrieval
document: string; // Full chunk/document text (if available)
}
Description par défaut du ToolLien direct vers Description par défaut du Tool
La description par défaut met l'accent sur les points suivants :
- Analyser les relations entre les documents
- Trouver des modèles et des connexions
- Répondre à des requêtes complexes
Exemple avancéLien direct vers Exemple avancé
const graphTool = createGraphRAGTool({
vectorStoreName: 'pinecone',
indexName: 'docs',
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
graphOptions: {
dimension: 1536,
threshold: 0.8, // Higher similarity threshold
randomWalkSteps: 200, // More exploration steps
restartProb: 0.2, // Higher restart probability
},
})
Exemple avec une description personnaliséeLien direct vers Exemple avec une description personnalisée
const graphTool = createGraphRAGTool({
vectorStoreName: 'pinecone',
indexName: 'docs',
model: 'openai/text-embedding-3-small ',
description:
"Analyze document relationships to find complex patterns and connections in our company's historical data",
})
Cet exemple montre comment personnaliser la description du Tool pour un cas d'utilisation précis tout en conservant son objectif principal d'analyse des relations.
Exemple : utiliser Request ContextLien direct vers Exemple : utiliser Request Context
const graphTool = createGraphRAGTool({
vectorStoreName: 'pinecone',
indexName: 'docs',
model: 'openai/text-embedding-3-small ',
})
Lorsque vous utilisez Request Context, fournissez les paramètres requis au moment de l'exécution par l'intermédiaire de Request Context :
const requestContext = new RequestContext<{
vectorStoreName: string
indexName: string
topK: number
filter: any
}>()
requestContext.set('vectorStoreName', 'my-store')
requestContext.set('indexName', 'my-index')
requestContext.set('topK', 5)
requestContext.set('filter', { category: 'docs' })
requestContext.set('randomWalkSteps', 100)
requestContext.set('restartProb', 0.15)
const response = await agent.generate('Find documentation from the knowledge base.', {
requestContext,
})
Pour en savoir plus sur Request Context, consultez :
Stockage vectoriel dynamique pour les applications multi-tenantsLien direct vers Stockage vectoriel dynamique pour les applications multi-tenants
Pour les applications multi-tenants dans lesquelles chaque tenant dispose de données isolées, vous pouvez transmettre une fonction de résolution à la place d'un stockage vectoriel statique :
import { createGraphRAGTool, VectorStoreResolver } from '@mastra/rag'
import { PgVector } from '@mastra/pg'
const vectorStoreResolver: VectorStoreResolver = async ({ requestContext }) => {
const tenantId = requestContext?.get('tenantId')
return new PgVector({
id: `pg-vector-${tenantId}`,
connectionString: process.env.POSTGRES_CONNECTION_STRING!,
schemaName: `tenant_${tenantId}`,
})
}
const graphTool = createGraphRAGTool({
indexName: 'embeddings',
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
vectorStore: vectorStoreResolver,
})
Consultez la section createVectorQueryTool - Stockage vectoriel dynamique pour en savoir plus.