Embedding 模型
Mastra 的模型路由器支持 Embedding 模型,并使用与语言模型相同的 provider/model 字符串格式。这样便可通过统一接口使用聊天模型和 Embedding 模型,同时获得 TypeScript 自动补全支持。
快速开始快速开始的直接链接
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
import { embedMany } from 'ai'
// Generate embeddings
const { embeddings } = await embedMany({
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
values: ['Hello world', 'Semantic search is powerful'],
})
支持的模型支持的模型的直接链接
OpenAIOpenAI的直接链接
text-embedding-3-small- 1536 维,最多 8191 个 tokentext-embedding-3-large- 3072 维,最多 8191 个 tokentext-embedding-ada-002- 1536 维,最多 8191 个 token
const embedder = new ModelRouterEmbeddingModel('openai/text-embedding-3-small')
GoogleGoogle的直接链接
gemini-embedding-001- 768 维,最多 2048 个 token
const embedder = new ModelRouterEmbeddingModel('google/gemini-embedding-001')
VoyageAIVoyageAI的直接链接
VoyageAI 提供针对检索任务优化的专用 Embedding 模型。这些模型以独立 package 的形式提供:
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/voyageai
pnpm add @mastra/voyageai
yarn add @mastra/voyageai
bun add @mastra/voyageai
可用模型:
voyage-4-large- 默认 1024 维,支持 256–2048 维,提供最佳的通用和多语言检索质量(每批最多 12 万个 token)voyage-4- 默认 1024 维,支持 256–2048 维,针对通用和多语言检索优化(每批最多 32 万个 token)voyage-4-lite- 默认 1024 维,支持 256–2048 维,针对延迟和成本优化(每批最多 100 万个 token)voyage-code-3- 默认 1024 维,支持 256–2048 维,针对代码检索优化voyage-finance-2- 1024 维,针对金融检索和 RAG 优化voyage-law-2- 1024 维,针对法律检索和 RAG 优化(16k 上下文)voyage-3-large- 默认 1024 维,支持 256–2048 维(上一代)voyage-3.5- 默认 1024 维,支持 256–2048 维(上一代)voyage-3.5-lite- 默认 1024 维,支持 256–2048 维,针对延迟和成本优化(上一代)voyage-multimodal-3.5- 1024 维,支持文本和图片
import { voyage, voyageEmbedding } from '@mastra/voyageai'
// Use default model (voyage-3.5)
const { embeddings } = await voyage.doEmbed({
values: ['Hello world'],
})
// Use specific model (voyage-3-large)
const largeEmbeddings = await voyage.large.doEmbed({
values: ['More complex content'],
})
// Custom configuration
const customModel = voyageEmbedding({
model: 'voyage-3.5',
inputType: 'query', // or 'document'
outputDimension: 512, // 256, 512, 1024, or 2048
baseUrl: 'https://ai.mongodb.com/v1', // Optional: custom endpoint (e.g. MongoDB-hosted Voyage)
})
const { embeddings: customEmbeddings } = await customModel.doEmbed({
values: ['Custom configuration example'],
})
配合 MongoDB 使用 VoyageAI:
VoyageAI 可与 MongoDB Atlas Vector Search 无缝配合:
import { voyage } from '@mastra/voyageai'
import { MongoDBVector } from '@mastra/mongodb'
const mongoVector = new MongoDBVector({
id: 'mongodb-vector',
uri: process.env.MONGODB_URI,
dbName: process.env.MONGODB_DB_NAME,
})
// Create index matching VoyageAI dimensions
await mongoVector.createIndex({
indexName: 'documents',
dimension: 1024, // voyage-3.5 default
})
// Generate and store embeddings
const { embeddings } = await voyage.doEmbed({
values: chunks.map(chunk => chunk.text),
})
await mongoVector.upsert({
indexName: 'documents',
vectors: embeddings,
metadata: chunks.map(chunk => ({ text: chunk.text })),
})
多模态 Embedding(文本 + 图片):
import { voyage } from '@mastra/voyageai'
const { embeddings } = await voyage.multimodal.doEmbed({
values: [
{
content: [
{ type: 'text', text: 'Product description' },
{ type: 'image_url', image_url: 'https://example.com/image.jpg' },
],
},
],
})
更多详情请参阅 MongoDB + VoyageAI 集成指南。
认证认证的直接链接
模型路由器会自动从环境变量中检测 API key:
- OpenAI:
OPENAI_API_KEY - Google:
GOOGLE_API_KEY(fallback 为GOOGLE_GENERATIVE_AI_API_KEY) - VoyageAI:
VOYAGE_API_KEY
# .env
OPENAI_API_KEY=sk-...
GOOGLE_API_KEY=...
VOYAGE_API_KEY=pa-...
自定义 Provider自定义 Provider的直接链接
你可以通过自定义 URL 使用任意兼容 OpenAI 的 Embedding endpoint:
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
const embedder = new ModelRouterEmbeddingModel({
providerId: 'ollama',
modelId: 'nomic-embed-text',
url: 'http://localhost:11434/v1',
apiKey: 'not-needed', // Some providers don't require API keys
})
配合 Memory 使用配合 Memory 使用的直接链接
Embedding 模型路由器可与 Mastra 的 Memory 系统无缝集成:
import { Memory } from '@mastra/memory'
import { Agent } from '@mastra/core/agent'
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
const agent = new Agent({
id: 'my-agent',
name: 'my-agent',
instructions: 'You are a helpful assistant',
model: 'openai/gpt-5.1',
memory: new Memory({
embedder: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
}),
})
信息
embedder 字段接受以下值:
EmbeddingModelId(支持自动补全的字符串)EmbeddingModel<string>(AI SDK v1)EmbeddingModelV2<string>(AI SDK v2)
配合 RAG 使用配合 RAG 使用的直接链接
使用 Embedding 模型进行文档分块和检索:
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'
import { embedMany } from 'ai'
// Embed document chunks
const { embeddings } = await embedMany({
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
values: chunks.map(chunk => chunk.text),
})
// Store embeddings in your vector database
await vectorStore.upsert(
chunks.map((chunk, i) => ({
id: chunk.id,
vector: embeddings[i],
metadata: chunk.metadata,
})),
)
TypeScript 支持TypeScript 支持的直接链接
模型路由器为 Embedding 模型 ID 提供完整的 TypeScript 自动补全:
import type { EmbeddingModelId } from '@mastra/core'
// Type-safe embedding model selection
const modelId: EmbeddingModelId = 'openai/text-embedding-3-small'
// ^ Autocomplete shows all supported models
const embedder = new ModelRouterEmbeddingModel(modelId)
错误处理错误处理的直接链接
模型路由器会在构造时验证 Provider 和模型 ID:
try {
const embedder = new ModelRouterEmbeddingModel('invalid/model')
} catch (error) {
console.error(error.message)
// "Unknown provider: invalid. Available providers: openai, google"
}
缺失 API key 的问题也会被及早发现:
try {
const embedder = new ModelRouterEmbeddingModel('openai/text-embedding-3-small')
// Throws if OPENAI_API_KEY is not set
} catch (error) {
console.error(error.message)
// "API key not found for provider openai. Set OPENAI_API_KEY environment variable."
}
后续步骤后续步骤的直接链接
- Memory 与语义回忆:使用 Embedding 实现 Agent Memory
- RAG 与分块:构建检索增强生成系统
- 向量数据库:存储和查询 Embedding