> Discover all available pages from the documentation index: https://mastra.zisheng.pro/llms.txt # Mastra 中的 RAG(检索增强生成) Mastra 中的 RAG 可将你自己的数据源中的相关上下文融入 LLM 输出,从而提高准确性,并让回答以真实信息为依据。 Mastra 的 RAG 系统提供: - 用于处理文档和生成嵌入向量的标准化 API - 对多种向量存储的支持 - 可实现最佳检索效果的分块和嵌入策略 - 用于跟踪嵌入和检索性能的可观测性 ## 示例 要实现 RAG,需要先把文档处理成数据块并创建嵌入向量,将它们存入向量数据库,然后在查询时检索相关上下文。 ```ts import { embedMany } from 'ai' import { PgVector } from '@mastra/pg' import { MDocument } from '@mastra/rag' import { z } from 'zod' // 1. Initialize document const doc = MDocument.fromText(`Your document text here...`) // 2. Create chunks const chunks = await doc.chunk({ strategy: 'recursive', size: 512, overlap: 50, }) // 3. Generate embeddings; we need to pass the text of each chunk import { ModelRouterEmbeddingModel } from '@mastra/core/llm' const { embeddings } = await embedMany({ values: chunks.map(chunk => chunk.text), model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'), }) // 4. Store in vector database const pgVector = new PgVector({ id: 'pg-vector', connectionString: process.env.POSTGRES_CONNECTION_STRING, }) await pgVector.upsert({ indexName: 'embeddings', vectors: embeddings, }) // using an index name of 'embeddings' // 5. Query similar chunks const results = await pgVector.query({ indexName: 'embeddings', queryVector: queryVector, topK: 3, }) // queryVector is the embedding of the query console.log('Similar chunks:', results) ``` 此示例展示了核心步骤。先初始化文档并创建数据块,再生成和存储嵌入向量,最后查询相似内容。 ## 文档处理 文档处理是 RAG 的基本组成部分。你可以使用不同策略(递归、滑动窗口等)对文档进行分块,并通过元数据丰富文档。请参阅[文档分块与嵌入](https://mastra.zisheng.pro/guides/rag/chunking-and-embedding)。 ## 向量存储 Mastra 支持多种向量存储,用于持久化嵌入向量和执行相似度搜索,包括 pgvector、OracleDB、Pinecone、Qdrant 和 MongoDB。请参阅[向量数据库文档](https://mastra.zisheng.pro/guides/rag/vector-databases)。 ## 更多资源 - [思维链 RAG 示例](https://github.com/mastra-ai/mastra/tree/main/examples/basics/rag/cot-rag)