> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-TW/llms.txt # 嵌入模型 Mastra 的模型路由器支援嵌入模型,使用與語言模型相同的 `provider/model` 字串格式。這為聊天模型與嵌入模型提供統一介面,並支援 TypeScript 自動完成。 ## 快速開始 ```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 - `text-embedding-3-small` - 1536 維,最多 8191 個 token - `text-embedding-3-large` - 3072 維,最多 8191 個 token - `text-embedding-ada-002` - 1536 維,最多 8191 個 token ```typescript const embedder = new ModelRouterEmbeddingModel('openai/text-embedding-3-small') ``` ### Google - `gemini-embedding-001` - 768 維,最多 2048 個 token ```typescript const embedder = new ModelRouterEmbeddingModel('google/gemini-embedding-001') ``` ### VoyageAI VoyageAI 提供針對檢索工作最佳化的專用嵌入模型。這些模型以獨立套件的形式提供: **npm**: ```bash npm install @mastra/voyageai ``` **pnpm**: ```bash pnpm add @mastra/voyageai ``` **Yarn**: ```bash yarn add @mastra/voyageai ``` **Bun**: ```bash bun add @mastra/voyageai ``` **可用模型:** - `voyage-4-large` - 1024 維(預設),支援 256 至 2048 維,具備最佳的通用及多語言檢索品質(每批最多 120k 個 token) - `voyage-4` - 1024 維(預設),支援 256 至 2048 維,針對通用及多語言檢索最佳化(每批最多 320k 個 token) - `voyage-4-lite` - 1024 維(預設),支援 256 至 2048 維,針對延遲與成本最佳化(每批最多 1M 個 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 維,支援文字與圖片 ```typescript 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 順暢整合: ```typescript 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 })), }) ``` **多模態嵌入(文字與圖片):** ```typescript 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 整合指南](https://mastra.zisheng.pro/zh-TW/reference/vectors/mongodb)。 ## 驗證 模型路由器會自動從環境變數偵測 API 金鑰: - **OpenAI**:`OPENAI_API_KEY` - **Google**:`GOOGLE_API_KEY`(若無則改用 `GOOGLE_GENERATIVE_AI_API_KEY`) - **VoyageAI**:`VOYAGE_API_KEY` ```bash # .env OPENAI_API_KEY=sk-... GOOGLE_API_KEY=... VOYAGE_API_KEY=pa-... ``` ## 自訂 Provider 你可以透過自訂 URL,使用任何與 OpenAI 相容的嵌入端點: ```typescript 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 使用 嵌入模型路由器可與 Mastra 的記憶系統順暢整合: ```typescript 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`(AI SDK v1) > - `EmbeddingModelV2`(AI SDK v2) ## 搭配 RAG 使用 使用嵌入模型進行文件分塊與檢索: ```typescript 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 支援 模型路由器可為嵌入模型 ID 提供完整的 TypeScript 自動完成: ```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: ```typescript try { const embedder = new ModelRouterEmbeddingModel('invalid/model') } catch (error) { console.error(error.message) // "Unknown provider: invalid. Available providers: openai, google" } ``` 缺少 API 金鑰的情況也會及早被偵測: ```typescript 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 與語意回想](https://mastra.zisheng.pro/zh-TW/docs/memory/semantic-recall):使用嵌入功能實作 Agent 記憶 - [RAG 與分塊](https://mastra.zisheng.pro/zh-TW/guides/rag/chunking-and-embedding):建置檢索增強生成系統 - [向量資料庫](https://mastra.zisheng.pro/zh-TW/guides/rag/vector-databases):儲存及查詢嵌入向量