@mastra/mcp-docs-server 0.0.0-default-storage-virtual-file-20250410035748
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +131 -0
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +80 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Ffirecrawl.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fgithub.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fmem0.md +166 -0
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Frag.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fragie.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-azure.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-deepgram.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-elevenlabs.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-google.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-ibm.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-murf.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-openai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-playai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-replicate.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fspeech-speechify.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +220 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +220 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +302 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +299 -0
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +302 -0
- package/.docs/organized/changelogs/create-mastra.md +302 -0
- package/.docs/organized/changelogs/mastra.md +302 -0
- package/.docs/organized/code-examples/agent-network.md +282 -0
- package/.docs/organized/code-examples/agent.md +390 -0
- package/.docs/organized/code-examples/ai-sdk-useChat.md +378 -0
- package/.docs/organized/code-examples/assistant-ui.md +37 -0
- package/.docs/organized/code-examples/bird-checker-with-express.md +235 -0
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +360 -0
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +250 -0
- package/.docs/organized/code-examples/crypto-chatbot.md +96 -0
- package/.docs/organized/code-examples/fireworks-r1.md +159 -0
- package/.docs/organized/code-examples/memory-todo-agent.md +164 -0
- package/.docs/organized/code-examples/memory-with-context.md +167 -0
- package/.docs/organized/code-examples/memory-with-libsql.md +204 -0
- package/.docs/organized/code-examples/memory-with-mem0.md +121 -0
- package/.docs/organized/code-examples/memory-with-pg.md +224 -0
- package/.docs/organized/code-examples/memory-with-upstash.md +268 -0
- package/.docs/organized/code-examples/quick-start.md +129 -0
- package/.docs/organized/code-examples/stock-price-tool.md +124 -0
- package/.docs/organized/code-examples/weather-agent.md +353 -0
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +159 -0
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +111 -0
- package/.docs/organized/code-examples/workflow-with-memory.md +393 -0
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +131 -0
- package/.docs/raw/agents/adding-tools.mdx +239 -0
- package/.docs/raw/agents/adding-voice.mdx +175 -0
- package/.docs/raw/agents/agent-memory.mdx +62 -0
- package/.docs/raw/agents/mcp-guide.mdx +192 -0
- package/.docs/raw/agents/overview.mdx +303 -0
- package/.docs/raw/community/discord.mdx +12 -0
- package/.docs/raw/community/licensing.mdx +63 -0
- package/.docs/raw/deployment/client.mdx +120 -0
- package/.docs/raw/deployment/deployment.mdx +119 -0
- package/.docs/raw/deployment/server.mdx +276 -0
- package/.docs/raw/evals/custom-eval.mdx +22 -0
- package/.docs/raw/evals/overview.mdx +95 -0
- package/.docs/raw/evals/running-in-ci.mdx +81 -0
- package/.docs/raw/evals/textual-evals.mdx +54 -0
- package/.docs/raw/faq/index.mdx +63 -0
- package/.docs/raw/frameworks/ai-sdk.mdx +296 -0
- package/.docs/raw/frameworks/next-js.mdx +238 -0
- package/.docs/raw/getting-started/installation.mdx +436 -0
- package/.docs/raw/getting-started/mcp-docs-server.mdx +141 -0
- package/.docs/raw/getting-started/project-structure.mdx +80 -0
- package/.docs/raw/index.mdx +22 -0
- package/.docs/raw/integrations/index.mdx +213 -0
- package/.docs/raw/local-dev/add-to-existing-project.mdx +48 -0
- package/.docs/raw/local-dev/creating-a-new-project.mdx +54 -0
- package/.docs/raw/local-dev/mastra-dev.mdx +108 -0
- package/.docs/raw/memory/memory-processors.mdx +131 -0
- package/.docs/raw/memory/overview.mdx +119 -0
- package/.docs/raw/memory/semantic-recall.mdx +122 -0
- package/.docs/raw/memory/working-memory.mdx +87 -0
- package/.docs/raw/observability/logging.mdx +38 -0
- package/.docs/raw/observability/nextjs-tracing.mdx +108 -0
- package/.docs/raw/observability/tracing.mdx +115 -0
- package/.docs/raw/rag/chunking-and-embedding.mdx +156 -0
- package/.docs/raw/rag/overview.mdx +85 -0
- package/.docs/raw/rag/retrieval.mdx +365 -0
- package/.docs/raw/rag/vector-databases.mdx +340 -0
- package/.docs/raw/reference/agents/createTool.mdx +229 -0
- package/.docs/raw/reference/agents/generate.mdx +327 -0
- package/.docs/raw/reference/agents/getAgent.mdx +54 -0
- package/.docs/raw/reference/agents/stream.mdx +362 -0
- package/.docs/raw/reference/cli/build.mdx +48 -0
- package/.docs/raw/reference/cli/deploy.mdx +22 -0
- package/.docs/raw/reference/cli/dev.mdx +134 -0
- package/.docs/raw/reference/cli/init.mdx +43 -0
- package/.docs/raw/reference/client-js/agents.mdx +107 -0
- package/.docs/raw/reference/client-js/error-handling.mdx +38 -0
- package/.docs/raw/reference/client-js/logs.mdx +24 -0
- package/.docs/raw/reference/client-js/memory.mdx +97 -0
- package/.docs/raw/reference/client-js/telemetry.mdx +20 -0
- package/.docs/raw/reference/client-js/tools.mdx +44 -0
- package/.docs/raw/reference/client-js/vectors.mdx +79 -0
- package/.docs/raw/reference/client-js/workflows.mdx +136 -0
- package/.docs/raw/reference/core/mastra-class.mdx +232 -0
- package/.docs/raw/reference/deployer/cloudflare.mdx +176 -0
- package/.docs/raw/reference/deployer/deployer.mdx +159 -0
- package/.docs/raw/reference/deployer/netlify.mdx +88 -0
- package/.docs/raw/reference/deployer/vercel.mdx +97 -0
- package/.docs/raw/reference/evals/answer-relevancy.mdx +186 -0
- package/.docs/raw/reference/evals/bias.mdx +186 -0
- package/.docs/raw/reference/evals/completeness.mdx +174 -0
- package/.docs/raw/reference/evals/content-similarity.mdx +183 -0
- package/.docs/raw/reference/evals/context-position.mdx +190 -0
- package/.docs/raw/reference/evals/context-precision.mdx +189 -0
- package/.docs/raw/reference/evals/context-relevancy.mdx +188 -0
- package/.docs/raw/reference/evals/contextual-recall.mdx +191 -0
- package/.docs/raw/reference/evals/faithfulness.mdx +193 -0
- package/.docs/raw/reference/evals/hallucination.mdx +219 -0
- package/.docs/raw/reference/evals/keyword-coverage.mdx +176 -0
- package/.docs/raw/reference/evals/prompt-alignment.mdx +238 -0
- package/.docs/raw/reference/evals/summarization.mdx +205 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +161 -0
- package/.docs/raw/reference/evals/tone-consistency.mdx +181 -0
- package/.docs/raw/reference/evals/toxicity.mdx +165 -0
- package/.docs/raw/reference/index.mdx +8 -0
- package/.docs/raw/reference/memory/Memory.mdx +212 -0
- package/.docs/raw/reference/memory/createThread.mdx +95 -0
- package/.docs/raw/reference/memory/getThreadById.mdx +46 -0
- package/.docs/raw/reference/memory/getThreadsByResourceId.mdx +48 -0
- package/.docs/raw/reference/memory/query.mdx +167 -0
- package/.docs/raw/reference/networks/agent-network.mdx +159 -0
- package/.docs/raw/reference/observability/create-logger.mdx +106 -0
- package/.docs/raw/reference/observability/logger.mdx +55 -0
- package/.docs/raw/reference/observability/otel-config.mdx +120 -0
- package/.docs/raw/reference/observability/providers/braintrust.mdx +40 -0
- package/.docs/raw/reference/observability/providers/dash0.mdx +40 -0
- package/.docs/raw/reference/observability/providers/index.mdx +16 -0
- package/.docs/raw/reference/observability/providers/laminar.mdx +41 -0
- package/.docs/raw/reference/observability/providers/langfuse.mdx +51 -0
- package/.docs/raw/reference/observability/providers/langsmith.mdx +48 -0
- package/.docs/raw/reference/observability/providers/langwatch.mdx +45 -0
- package/.docs/raw/reference/observability/providers/new-relic.mdx +40 -0
- package/.docs/raw/reference/observability/providers/signoz.mdx +40 -0
- package/.docs/raw/reference/observability/providers/traceloop.mdx +40 -0
- package/.docs/raw/reference/rag/astra.mdx +258 -0
- package/.docs/raw/reference/rag/chroma.mdx +281 -0
- package/.docs/raw/reference/rag/chunk.mdx +235 -0
- package/.docs/raw/reference/rag/document.mdx +127 -0
- package/.docs/raw/reference/rag/embeddings.mdx +160 -0
- package/.docs/raw/reference/rag/extract-params.mdx +226 -0
- package/.docs/raw/reference/rag/graph-rag.mdx +182 -0
- package/.docs/raw/reference/rag/libsql.mdx +357 -0
- package/.docs/raw/reference/rag/metadata-filters.mdx +298 -0
- package/.docs/raw/reference/rag/pg.mdx +477 -0
- package/.docs/raw/reference/rag/pinecone.mdx +281 -0
- package/.docs/raw/reference/rag/qdrant.mdx +236 -0
- package/.docs/raw/reference/rag/rerank.mdx +212 -0
- package/.docs/raw/reference/rag/turbopuffer.mdx +249 -0
- package/.docs/raw/reference/rag/upstash.mdx +247 -0
- package/.docs/raw/reference/rag/vectorize.mdx +298 -0
- package/.docs/raw/reference/storage/libsql.mdx +74 -0
- package/.docs/raw/reference/storage/postgresql.mdx +48 -0
- package/.docs/raw/reference/storage/upstash.mdx +86 -0
- package/.docs/raw/reference/tools/client.mdx +188 -0
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +141 -0
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +154 -0
- package/.docs/raw/reference/tools/mcp-configuration.mdx +206 -0
- package/.docs/raw/reference/tools/vector-query-tool.mdx +212 -0
- package/.docs/raw/reference/voice/composite-voice.mdx +140 -0
- package/.docs/raw/reference/voice/deepgram.mdx +164 -0
- package/.docs/raw/reference/voice/elevenlabs.mdx +216 -0
- package/.docs/raw/reference/voice/google.mdx +198 -0
- package/.docs/raw/reference/voice/mastra-voice.mdx +394 -0
- package/.docs/raw/reference/voice/murf.mdx +251 -0
- package/.docs/raw/reference/voice/openai-realtime.mdx +431 -0
- package/.docs/raw/reference/voice/openai.mdx +168 -0
- package/.docs/raw/reference/voice/playai.mdx +159 -0
- package/.docs/raw/reference/voice/sarvam.mdx +260 -0
- package/.docs/raw/reference/voice/speechify.mdx +145 -0
- package/.docs/raw/reference/voice/voice.answer.mdx +122 -0
- package/.docs/raw/reference/voice/voice.connect.mdx +124 -0
- package/.docs/raw/reference/voice/voice.listen.mdx +195 -0
- package/.docs/raw/reference/voice/voice.on.mdx +189 -0
- package/.docs/raw/reference/voice/voice.send.mdx +118 -0
- package/.docs/raw/reference/voice/voice.speak.mdx +203 -0
- package/.docs/raw/reference/workflows/after.mdx +88 -0
- package/.docs/raw/reference/workflows/afterEvent.mdx +76 -0
- package/.docs/raw/reference/workflows/commit.mdx +37 -0
- package/.docs/raw/reference/workflows/createRun.mdx +77 -0
- package/.docs/raw/reference/workflows/else.mdx +72 -0
- package/.docs/raw/reference/workflows/events.mdx +305 -0
- package/.docs/raw/reference/workflows/execute.mdx +110 -0
- package/.docs/raw/reference/workflows/if.mdx +107 -0
- package/.docs/raw/reference/workflows/resume.mdx +155 -0
- package/.docs/raw/reference/workflows/resumeWithEvent.mdx +133 -0
- package/.docs/raw/reference/workflows/snapshots.mdx +207 -0
- package/.docs/raw/reference/workflows/start.mdx +84 -0
- package/.docs/raw/reference/workflows/step-class.mdx +100 -0
- package/.docs/raw/reference/workflows/step-condition.mdx +134 -0
- package/.docs/raw/reference/workflows/step-function.mdx +92 -0
- package/.docs/raw/reference/workflows/step-options.mdx +69 -0
- package/.docs/raw/reference/workflows/step-retries.mdx +203 -0
- package/.docs/raw/reference/workflows/suspend.mdx +70 -0
- package/.docs/raw/reference/workflows/then.mdx +74 -0
- package/.docs/raw/reference/workflows/until.mdx +165 -0
- package/.docs/raw/reference/workflows/watch.mdx +118 -0
- package/.docs/raw/reference/workflows/while.mdx +168 -0
- package/.docs/raw/reference/workflows/workflow.mdx +233 -0
- package/.docs/raw/storage/overview.mdx +378 -0
- package/.docs/raw/voice/overview.mdx +135 -0
- package/.docs/raw/voice/speech-to-text.mdx +45 -0
- package/.docs/raw/voice/text-to-speech.mdx +52 -0
- package/.docs/raw/voice/voice-to-voice.mdx +310 -0
- package/.docs/raw/workflows/control-flow.mdx +778 -0
- package/.docs/raw/workflows/dynamic-workflows.mdx +236 -0
- package/.docs/raw/workflows/error-handling.mdx +183 -0
- package/.docs/raw/workflows/nested-workflows.mdx +352 -0
- package/.docs/raw/workflows/overview.mdx +167 -0
- package/.docs/raw/workflows/steps.mdx +108 -0
- package/.docs/raw/workflows/suspend-and-resume.mdx +404 -0
- package/.docs/raw/workflows/variables.mdx +313 -0
- package/LICENSE +44 -0
- package/README.md +129 -0
- package/dist/_tsup-dts-rollup.d.ts +149 -0
- package/dist/chunk-QWYMT5LP.js +194 -0
- package/dist/prepare-docs/prepare.d.ts +1 -0
- package/dist/prepare-docs/prepare.js +1 -0
- package/dist/stdio.d.ts +1 -0
- package/dist/stdio.js +518 -0
- package/package.json +60 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: RAG (Retrieval-Augmented Generation) in Mastra | Mastra Docs
|
|
3
|
+
description: Overview of Retrieval-Augmented Generation (RAG) in Mastra, detailing its capabilities for enhancing LLM outputs with relevant context.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RAG (Retrieval-Augmented Generation) in Mastra
|
|
7
|
+
|
|
8
|
+
RAG in Mastra helps you enhance LLM outputs by incorporating relevant context from your own data sources, improving accuracy and grounding responses in real information.
|
|
9
|
+
|
|
10
|
+
Mastra's RAG system provides:
|
|
11
|
+
|
|
12
|
+
- Standardized APIs to process and embed documents
|
|
13
|
+
- Support for multiple vector stores
|
|
14
|
+
- Chunking and embedding strategies for optimal retrieval
|
|
15
|
+
- Observability for tracking embedding and retrieval performance
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
|
|
19
|
+
To implement RAG, you process your documents into chunks, create embeddings, store them in a vector database, and then retrieve relevant context at query time.
|
|
20
|
+
|
|
21
|
+
```ts showLineNumbers copy
|
|
22
|
+
import { embedMany } from "ai";
|
|
23
|
+
import { openai } from "@ai-sdk/openai";
|
|
24
|
+
import { PgVector } from "@mastra/pg";
|
|
25
|
+
import { MDocument } from "@mastra/rag";
|
|
26
|
+
import { z } from "zod";
|
|
27
|
+
|
|
28
|
+
// 1. Initialize document
|
|
29
|
+
const doc = MDocument.fromText(`Your document text here...`);
|
|
30
|
+
|
|
31
|
+
// 2. Create chunks
|
|
32
|
+
const chunks = await doc.chunk({
|
|
33
|
+
strategy: "recursive",
|
|
34
|
+
size: 512,
|
|
35
|
+
overlap: 50,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// 3. Generate embeddings; we need to pass the text of each chunk
|
|
39
|
+
const { embeddings } = await embedMany({
|
|
40
|
+
values: chunks.map(chunk => chunk.text),
|
|
41
|
+
model: openai.embedding("text-embedding-3-small"),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// 4. Store in vector database
|
|
45
|
+
const pgVector = new PgVector(process.env.POSTGRES_CONNECTION_STRING);
|
|
46
|
+
await pgVector.upsert({
|
|
47
|
+
indexName: "embeddings",
|
|
48
|
+
vectors: embeddings,
|
|
49
|
+
}); // using an index name of 'embeddings'
|
|
50
|
+
|
|
51
|
+
// 5. Query similar chunks
|
|
52
|
+
const results = await pgVector.query({
|
|
53
|
+
indexName: "embeddings",
|
|
54
|
+
queryVector: queryVector,
|
|
55
|
+
topK: 3,
|
|
56
|
+
}); // queryVector is the embedding of the query
|
|
57
|
+
|
|
58
|
+
console.log("Similar chunks:", results);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This example shows the essentials: initialize a document, create chunks, generate embeddings, store them, and query for similar content.
|
|
62
|
+
|
|
63
|
+
## Document Processing
|
|
64
|
+
|
|
65
|
+
The basic building block of RAG is document processing. Documents can be chunked using various strategies (recursive, sliding window, etc.) and enriched with metadata. See the [chunking and embedding doc](./chunking-and-embedding.mdx).
|
|
66
|
+
|
|
67
|
+
## Vector Storage
|
|
68
|
+
|
|
69
|
+
Mastra supports multiple vector stores for embedding persistence and similarity search, including pgvector, Pinecone, and Qdrant. See the [vector database doc](./vector-databases.mdx).
|
|
70
|
+
|
|
71
|
+
## Observability and Debugging
|
|
72
|
+
|
|
73
|
+
Mastra's RAG system includes observability features to help you optimize your retrieval pipeline:
|
|
74
|
+
|
|
75
|
+
- Track embedding generation performance and costs
|
|
76
|
+
- Monitor chunk quality and retrieval relevance
|
|
77
|
+
- Analyze query patterns and cache hit rates
|
|
78
|
+
- Export metrics to your observability platform
|
|
79
|
+
|
|
80
|
+
See the [OTel Configuration](../reference/observability/otel-config.mdx) page for more details.
|
|
81
|
+
|
|
82
|
+
## More resources
|
|
83
|
+
|
|
84
|
+
- [Chain of Thought RAG Example](../../examples/rag/usage/cot-rag.mdx)
|
|
85
|
+
- [All RAG Examples](../../examples/) (including different chunking strategies, embedding models, and vector stores)
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Retrieval, Semantic Search, Reranking | RAG | Mastra Docs"
|
|
3
|
+
description: Guide on retrieval processes in Mastra's RAG systems, including semantic search, filtering, and re-ranking.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import { Tabs } from "nextra/components";
|
|
7
|
+
|
|
8
|
+
## Retrieval in RAG Systems
|
|
9
|
+
|
|
10
|
+
After storing embeddings, you need to retrieve relevant chunks to answer user queries.
|
|
11
|
+
|
|
12
|
+
Mastra provides flexible retrieval options with support for semantic search, filtering, and re-ranking.
|
|
13
|
+
|
|
14
|
+
## How Retrieval Works
|
|
15
|
+
|
|
16
|
+
1. The user's query is converted to an embedding using the same model used for document embeddings
|
|
17
|
+
2. This embedding is compared to stored embeddings using vector similarity
|
|
18
|
+
3. The most similar chunks are retrieved and can be optionally:
|
|
19
|
+
- Filtered by metadata
|
|
20
|
+
- Re-ranked for better relevance
|
|
21
|
+
- Processed through a knowledge graph
|
|
22
|
+
|
|
23
|
+
## Basic Retrieval
|
|
24
|
+
|
|
25
|
+
The simplest approach is direct semantic search. This method uses vector similarity to find chunks that are semantically similar to the query:
|
|
26
|
+
|
|
27
|
+
```ts showLineNumbers copy
|
|
28
|
+
import { openai } from "@ai-sdk/openai";
|
|
29
|
+
import { embed } from "ai";
|
|
30
|
+
import { PgVector } from "@mastra/pg";
|
|
31
|
+
|
|
32
|
+
// Convert query to embedding
|
|
33
|
+
const { embedding } = await embed({
|
|
34
|
+
value: "What are the main points in the article?",
|
|
35
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Query vector store
|
|
39
|
+
const pgVector = new PgVector(process.env.POSTGRES_CONNECTION_STRING);
|
|
40
|
+
const results = await pgVector.query({
|
|
41
|
+
indexName: "embeddings",
|
|
42
|
+
queryVector: embedding,
|
|
43
|
+
topK: 10,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Display results
|
|
47
|
+
console.log(results);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Results include both the text content and a similarity score:
|
|
51
|
+
|
|
52
|
+
```ts showLineNumbers copy
|
|
53
|
+
[
|
|
54
|
+
{
|
|
55
|
+
text: "Climate change poses significant challenges...",
|
|
56
|
+
score: 0.89,
|
|
57
|
+
metadata: { source: "article1.txt" }
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
text: "Rising temperatures affect crop yields...",
|
|
61
|
+
score: 0.82,
|
|
62
|
+
metadata: { source: "article1.txt" }
|
|
63
|
+
}
|
|
64
|
+
// ... more results
|
|
65
|
+
]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
For an example of how to use the basic retrieval method, see the [Retrieve Results](../../examples/rag/query/retrieve-results.mdx) example.
|
|
69
|
+
|
|
70
|
+
## Advanced Retrieval options
|
|
71
|
+
|
|
72
|
+
### Metadata Filtering
|
|
73
|
+
|
|
74
|
+
Filter results based on metadata fields to narrow down the search space. This is useful when you have documents from different sources, time periods, or with specific attributes. Mastra provides a unified MongoDB-style query syntax that works across all supported vector stores.
|
|
75
|
+
|
|
76
|
+
For detailed information about available operators and syntax, see the [Metadata Filters Reference](/docs/reference/rag/metadata-filters).
|
|
77
|
+
|
|
78
|
+
Basic filtering examples:
|
|
79
|
+
|
|
80
|
+
```ts showLineNumbers copy
|
|
81
|
+
// Simple equality filter
|
|
82
|
+
const results = await pgVector.query({
|
|
83
|
+
indexName: "embeddings",
|
|
84
|
+
queryVector: embedding,
|
|
85
|
+
topK: 10,
|
|
86
|
+
filter: {
|
|
87
|
+
source: "article1.txt"
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Numeric comparison
|
|
92
|
+
const results = await pgVector.query({
|
|
93
|
+
indexName: "embeddings",
|
|
94
|
+
queryVector: embedding,
|
|
95
|
+
topK: 10,
|
|
96
|
+
filter: {
|
|
97
|
+
price: { $gt: 100 }
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Multiple conditions
|
|
102
|
+
const results = await pgVector.query({
|
|
103
|
+
indexName: "embeddings",
|
|
104
|
+
queryVector: embedding,
|
|
105
|
+
topK: 10,
|
|
106
|
+
filter: {
|
|
107
|
+
category: "electronics",
|
|
108
|
+
price: { $lt: 1000 },
|
|
109
|
+
inStock: true
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Array operations
|
|
114
|
+
const results = await pgVector.query({
|
|
115
|
+
indexName: "embeddings",
|
|
116
|
+
queryVector: embedding,
|
|
117
|
+
topK: 10,
|
|
118
|
+
filter: {
|
|
119
|
+
tags: { $in: ["sale", "new"] }
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Logical operators
|
|
124
|
+
const results = await pgVector.query({
|
|
125
|
+
indexName: "embeddings",
|
|
126
|
+
queryVector: embedding,
|
|
127
|
+
topK: 10,
|
|
128
|
+
filter: {
|
|
129
|
+
$or: [
|
|
130
|
+
{ category: "electronics" },
|
|
131
|
+
{ category: "accessories" }
|
|
132
|
+
],
|
|
133
|
+
$and: [
|
|
134
|
+
{ price: { $gt: 50 } },
|
|
135
|
+
{ price: { $lt: 200 } }
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Common use cases for metadata filtering:
|
|
142
|
+
- Filter by document source or type
|
|
143
|
+
- Filter by date ranges
|
|
144
|
+
- Filter by specific categories or tags
|
|
145
|
+
- Filter by numerical ranges (e.g., price, rating)
|
|
146
|
+
- Combine multiple conditions for precise querying
|
|
147
|
+
- Filter by document attributes (e.g., language, author)
|
|
148
|
+
|
|
149
|
+
For an example of how to use metadata filtering, see the [Hybrid Vector Search](../../examples/rag/query/hybrid-vector-search.mdx) example.
|
|
150
|
+
|
|
151
|
+
### Vector Query Tool
|
|
152
|
+
|
|
153
|
+
Sometimes you want to give your agent the ability to query a vector database directly. The Vector Query Tool allows your agent to be in charge of retrieval decisions, combining semantic search with optional filtering and reranking based on the agent's understanding of the user's needs.
|
|
154
|
+
|
|
155
|
+
```ts showLineNumbers copy
|
|
156
|
+
const vectorQueryTool = createVectorQueryTool({
|
|
157
|
+
vectorStoreName: 'pgVector',
|
|
158
|
+
indexName: 'embeddings',
|
|
159
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
When creating the tool, pay special attention to the tool's name and description - these help the agent understand when and how to use the retrieval capabilities. For example, you might name it "SearchKnowledgeBase" and describe it as "Search through our documentation to find relevant information about X topic."
|
|
164
|
+
|
|
165
|
+
This is particularly useful when:
|
|
166
|
+
- Your agent needs to dynamically decide what information to retrieve
|
|
167
|
+
- The retrieval process requires complex decision-making
|
|
168
|
+
- You want the agent to combine multiple retrieval strategies based on context
|
|
169
|
+
|
|
170
|
+
For detailed configuration options and advanced usage, see the [Vector Query Tool Reference](/docs/reference/tools/vector-query-tool).
|
|
171
|
+
|
|
172
|
+
### Vector Store Prompts
|
|
173
|
+
|
|
174
|
+
Vector store prompts define query patterns and filtering capabilities for each vector database implementation.
|
|
175
|
+
When implementing filtering, these prompts are required in the agent's instructions to specify valid operators and syntax for each vector store implementation.
|
|
176
|
+
|
|
177
|
+
<Tabs items={['Pg Vector', 'Pinecone', 'Qdrant', 'Chroma', 'Astra', 'LibSQL', 'Upstash', 'Cloudflare']}>
|
|
178
|
+
<Tabs.Tab>
|
|
179
|
+
```ts showLineNumbers copy
|
|
180
|
+
import { openai } from '@ai-sdk/openai';
|
|
181
|
+
import { PGVECTOR_PROMPT } from "@mastra/rag";
|
|
182
|
+
|
|
183
|
+
export const ragAgent = new Agent({
|
|
184
|
+
name: 'RAG Agent',
|
|
185
|
+
model: openai('gpt-4o-mini'),
|
|
186
|
+
instructions: `
|
|
187
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
188
|
+
${PGVECTOR_PROMPT}
|
|
189
|
+
`,
|
|
190
|
+
tools: { vectorQueryTool },
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
</Tabs.Tab>
|
|
195
|
+
<Tabs.Tab>
|
|
196
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
197
|
+
import { openai } from '@ai-sdk/openai';
|
|
198
|
+
import { PINECONE_PROMPT } from "@mastra/rag";
|
|
199
|
+
|
|
200
|
+
export const ragAgent = new Agent({
|
|
201
|
+
name: 'RAG Agent',
|
|
202
|
+
model: openai('gpt-4o-mini'),
|
|
203
|
+
instructions: `
|
|
204
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
205
|
+
${PINECONE_PROMPT}
|
|
206
|
+
`,
|
|
207
|
+
tools: { vectorQueryTool },
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
</Tabs.Tab>
|
|
211
|
+
<Tabs.Tab>
|
|
212
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
213
|
+
import { openai } from '@ai-sdk/openai';
|
|
214
|
+
import { QDRANT_PROMPT } from "@mastra/rag";
|
|
215
|
+
|
|
216
|
+
export const ragAgent = new Agent({
|
|
217
|
+
name: 'RAG Agent',
|
|
218
|
+
model: openai('gpt-4o-mini'),
|
|
219
|
+
instructions: `
|
|
220
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
221
|
+
${QDRANT_PROMPT}
|
|
222
|
+
`,
|
|
223
|
+
tools: { vectorQueryTool },
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
</Tabs.Tab>
|
|
227
|
+
<Tabs.Tab>
|
|
228
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
229
|
+
import { openai } from '@ai-sdk/openai';
|
|
230
|
+
import { CHROMA_PROMPT } from "@mastra/rag";
|
|
231
|
+
|
|
232
|
+
export const ragAgent = new Agent({
|
|
233
|
+
name: 'RAG Agent',
|
|
234
|
+
model: openai('gpt-4o-mini'),
|
|
235
|
+
instructions: `
|
|
236
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
237
|
+
${CHROMA_PROMPT}
|
|
238
|
+
`,
|
|
239
|
+
tools: { vectorQueryTool },
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
</Tabs.Tab>
|
|
243
|
+
<Tabs.Tab>
|
|
244
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
245
|
+
import { openai } from '@ai-sdk/openai';
|
|
246
|
+
import { ASTRA_PROMPT } from "@mastra/rag";
|
|
247
|
+
|
|
248
|
+
export const ragAgent = new Agent({
|
|
249
|
+
name: 'RAG Agent',
|
|
250
|
+
model: openai('gpt-4o-mini'),
|
|
251
|
+
instructions: `
|
|
252
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
253
|
+
${ASTRA_PROMPT}
|
|
254
|
+
`,
|
|
255
|
+
tools: { vectorQueryTool },
|
|
256
|
+
});
|
|
257
|
+
```
|
|
258
|
+
</Tabs.Tab>
|
|
259
|
+
<Tabs.Tab>
|
|
260
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
261
|
+
import { openai } from '@ai-sdk/openai';
|
|
262
|
+
import { LIBSQL_PROMPT } from "@mastra/rag";
|
|
263
|
+
|
|
264
|
+
export const ragAgent = new Agent({
|
|
265
|
+
name: 'RAG Agent',
|
|
266
|
+
model: openai('gpt-4o-mini'),
|
|
267
|
+
instructions: `
|
|
268
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
269
|
+
${LIBSQL_PROMPT}
|
|
270
|
+
`,
|
|
271
|
+
tools: { vectorQueryTool },
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
</Tabs.Tab>
|
|
275
|
+
<Tabs.Tab>
|
|
276
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
277
|
+
import { openai } from '@ai-sdk/openai';
|
|
278
|
+
import { UPSTASH_PROMPT } from "@mastra/rag";
|
|
279
|
+
|
|
280
|
+
export const ragAgent = new Agent({
|
|
281
|
+
name: 'RAG Agent',
|
|
282
|
+
model: openai('gpt-4o-mini'),
|
|
283
|
+
instructions: `
|
|
284
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
285
|
+
${UPSTASH_PROMPT}
|
|
286
|
+
`,
|
|
287
|
+
tools: { vectorQueryTool },
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
</Tabs.Tab>
|
|
291
|
+
<Tabs.Tab>
|
|
292
|
+
```ts filename="vector-store.ts" showLineNumbers copy
|
|
293
|
+
import { openai } from '@ai-sdk/openai';
|
|
294
|
+
import { VECTORIZE_PROMPT } from "@mastra/rag";
|
|
295
|
+
|
|
296
|
+
export const ragAgent = new Agent({
|
|
297
|
+
name: 'RAG Agent',
|
|
298
|
+
model: openai('gpt-4o-mini'),
|
|
299
|
+
instructions: `
|
|
300
|
+
Process queries using the provided context. Structure responses to be concise and relevant.
|
|
301
|
+
${VECTORIZE_PROMPT}
|
|
302
|
+
`,
|
|
303
|
+
tools: { vectorQueryTool },
|
|
304
|
+
});
|
|
305
|
+
```
|
|
306
|
+
</Tabs.Tab>
|
|
307
|
+
</Tabs>
|
|
308
|
+
|
|
309
|
+
### Re-ranking
|
|
310
|
+
|
|
311
|
+
Initial vector similarity search can sometimes miss nuanced relevance. Re-ranking is a more computationally expensive process, but more accurate algorithm that improves results by:
|
|
312
|
+
|
|
313
|
+
- Considering word order and exact matches
|
|
314
|
+
- Applying more sophisticated relevance scoring
|
|
315
|
+
- Using a method called cross-attention between query and documents
|
|
316
|
+
|
|
317
|
+
Here's how to use re-ranking:
|
|
318
|
+
|
|
319
|
+
```ts showLineNumbers copy
|
|
320
|
+
import { openai } from "@ai-sdk/openai";
|
|
321
|
+
import { rerank } from "@mastra/rag";
|
|
322
|
+
|
|
323
|
+
// Get initial results from vector search
|
|
324
|
+
const initialResults = await pgVector.query({
|
|
325
|
+
indexName: "embeddings",
|
|
326
|
+
queryVector: queryEmbedding,
|
|
327
|
+
topK: 10,
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
// Re-rank the results
|
|
331
|
+
const rerankedResults = await rerank(initialResults, query, openai('gpt-4o-mini'));
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
> **Note:** For semantic scoring to work properly during re-ranking, each result must include the text content in its `metadata.text` field.
|
|
335
|
+
|
|
336
|
+
The re-ranked results combine vector similarity with semantic understanding to improve retrieval quality.
|
|
337
|
+
|
|
338
|
+
For more details about re-ranking, see the [rerank()](/docs/reference/rag/rerank) method.
|
|
339
|
+
|
|
340
|
+
For an example of how to use the re-ranking method, see the [Re-ranking Results](../../examples/rag/rerank/rerank.mdx) example.
|
|
341
|
+
|
|
342
|
+
### Graph-based Retrieval
|
|
343
|
+
|
|
344
|
+
For documents with complex relationships, graph-based retrieval can follow connections between chunks. This helps when:
|
|
345
|
+
|
|
346
|
+
- Information is spread across multiple documents
|
|
347
|
+
- Documents reference each other
|
|
348
|
+
- You need to traverse relationships to find complete answers
|
|
349
|
+
|
|
350
|
+
Example setup:
|
|
351
|
+
|
|
352
|
+
```ts showLineNumbers copy
|
|
353
|
+
const graphQueryTool = createGraphQueryTool({
|
|
354
|
+
vectorStoreName: 'pgVector',
|
|
355
|
+
indexName: 'embeddings',
|
|
356
|
+
model: openai.embedding('text-embedding-3-small'),
|
|
357
|
+
graphOptions: {
|
|
358
|
+
threshold: 0.7,
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
For more details about graph-based retrieval, see the [GraphRAG](/docs/reference/rag/graph-rag) class and the [createGraphQueryTool()](/docs/reference/tools/graph-rag-tool) function.
|
|
364
|
+
|
|
365
|
+
For an example of how to use the graph-based retrieval method, see the [Graph-based Retrieval](../../examples/rag/usage/graph-rag.mdx) example.
|