跳到主要内容

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。请参阅向量数据库文档

更多资源
更多资源的直接链接