跳至主要內容

嵌入模型

Mastra 的模型路由器支援嵌入模型,並採用與語言模型相同的 provider/model 字串格式。這為聊天模型及嵌入模型提供統一介面,並支援 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'],
})

支援的模型
支援的模型 的直接連結

OpenAI
OpenAI 的直接連結

  • text-embedding-3-small — 1536 維,token 上限為 8191
  • text-embedding-3-large — 3072 維,token 上限為 8191
  • text-embedding-ada-002 — 1536 維,token 上限為 8191
const embedder = new ModelRouterEmbeddingModel('openai/text-embedding-3-small')

Google
Google 的直接連結

  • gemini-embedding-001 — 768 維,token 上限為 2048
const embedder = new ModelRouterEmbeddingModel('google/gemini-embedding-001')

VoyageAI
VoyageAI 的直接連結

VoyageAI 提供針對擷取工作最佳化的專用嵌入模型。這些模型可作為獨立套件使用:

npm install @mastra/voyageai

可用模型:

  • voyage-4-large — 1024 維(預設),支援 256 至 2048 維,提供最佳的通用及多語言擷取品質(每批 token 上限為 120k)
  • voyage-4 — 1024 維(預設),支援 256 至 2048 維,針對通用及多語言擷取最佳化(每批 token 上限為 320k)
  • voyage-4-lite — 1024 維(預設),支援 256 至 2048 維,針對延遲及成本最佳化(每批 token 上限為 1M)
  • 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'],
})

VoyageAI 配合 MongoDB:

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 })),
})

多模態嵌入(文字及圖像):

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 金鑰:

  • OpenAI: OPENAI_API_KEY
  • GoogleGOOGLE_API_KEY(後備使用 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 相容的嵌入端點:

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 使用 的直接連結

嵌入模型路由器可與 Mastra 的記憶體系統無縫整合:

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 (string with autocomplete)
  • EmbeddingModel<string> (AI SDK v1)
  • EmbeddingModelV2<string> (AI SDK v2)

配合 RAG 使用
配合 RAG 使用 的直接連結

使用嵌入模型進行文件分段及擷取:

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 支援 的直接連結

模型路由器為嵌入模型 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 金鑰的情況:

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."
}

下一步
下一步 的直接連結