Mastra 中的 RAG(检索增强生成)
Mastra 中的 RAG 可将你自己的数据源中的相关上下文融入 LLM 输出,从而提高准确性,并让回答以真实信息为依据。
Mastra 的 RAG 系统提供:
- 用于处理文档和生成嵌入向量的标准化 API
- 对多种向量存储的支持
- 可实现最佳检索效果的分块和嵌入策略
- 用于跟踪嵌入和检索性能的可观测性
示例示例的直接链接
要实现 RAG,需要先把文档处理成数据块并创建嵌入向量,将它们存入向量数据库,然后在查询时检索相关上下文。
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 的基本组成部分。你可以使用不同策略(递归、滑动窗口等)对文档进行分块,并通过元数据丰富文档。请参阅文档分块与嵌入。
向量存储向量存储的直接链接
Mastra 支持多种向量存储,用于持久化嵌入向量和执行相似度搜索,包括 pgvector、OracleDB、Pinecone、Qdrant 和 MongoDB。请参阅向量数据库文档。