> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-TW/llms.txt # Turbopuffer 向量儲存 TurbopufferVector 類別使用針對 RAG 應用程式最佳化的高效能向量資料庫 [Turbopuffer](https://turbopuffer.com/) 提供向量搜尋。Turbopuffer 提供快速的向量相似度搜尋、進階篩選功能與高效率的儲存管理。 ## 建構函式選項 **apiKey** (`string`): 向 Turbopuffer 驗證所用的 API 金鑰 **baseUrl** (`string`): Turbopuffer API 的基底 URL (Default: `https://api.turbopuffer.com`) **connectTimeout** (`number`): 建立連線的逾時時間,單位為毫秒。僅適用於 Node 與 Deno。 (Default: `10000`) **connectionIdleTimeout** (`number`): socket 閒置逾時時間,單位為毫秒。僅適用於 Node 與 Deno。 (Default: `60000`) **warmConnections** (`number`): 建立新使用者端時,初始開啟的連線數量。 (Default: `0`) **compression** (`boolean`): 是否壓縮要求並接受壓縮的回應。 (Default: `true`) **consistency** (`'strong' | 'eventual'`): 查詢的預設一致性層級。可針對每次查詢覆寫。"strong" 保證查詢可看見查詢開始前寫入的所有資料,但延遲較高。"eventual" 的延遲較低,但最近寫入的資料可能尚不可見。 (Default: `strong`) **schemaConfigForIndex** (`function`): 接收索引名稱並傳回該索引設定物件的回呼函式。你可以為每個索引定義明確的 schema。 ## 方法 ### `createIndex()` **indexName** (`string`): 要建立的索引名稱 **dimension** (`number`): 向量維度(必須與嵌入模型相符) **metric** (`'cosine' | 'euclidean' | 'dotproduct'`): 相似度搜尋使用的距離度量 (Default: `cosine`) ### `upsert()` **vectors** (`number[][]`): 嵌入向量陣列 **metadata** (`Record[]`): 每個向量的中繼資料 **ids** (`string[]`): 選用的向量 ID(未提供時會自動產生) ### `query()` **indexName** (`string`): 要查詢的索引名稱 **queryVector** (`number[]`): 用於尋找相似向量的查詢向量 **topK** (`number`): 要傳回的結果數量 (Default: `10`) **filter** (`Record`): 查詢的中繼資料篩選條件 **includeVector** (`boolean`): 結果是否包含向量 (Default: `false`) **consistency** (`'strong' | 'eventual'`): 本次查詢的一致性層級。會覆寫建構函式中設定的一致性層級。預設為 "strong"。 ### `listIndexes()` 以字串陣列傳回索引名稱。 ### `describeIndex()` **indexName** (`string`): 要描述的索引名稱 傳回: ```typescript interface IndexStats { dimension: number count: number metric: 'cosine' | 'euclidean' | 'dotproduct' } ``` ### `deleteIndex()` **indexName** (`string`): 要刪除的索引名稱 ### `updateVector()` 依 ID 或中繼資料篩選條件更新單一向量。必須提供 `id` 或 `filter` 其中一項,但不能同時提供兩者。 **indexName** (`string`): 包含該向量的索引名稱 **id** (`string`): 要更新的向量 ID(不可與 filter 同時使用) **filter** (`Record`): 用於識別待更新向量的中繼資料篩選條件(不可與 id 同時使用) **update** (`{ vector?: number[]; metadata?: Record; }`): 包含待更新向量及/或中繼資料的物件 ### `deleteVector()` **indexName** (`string`): 包含該向量的索引名稱 **id** (`string`): 要刪除的向量 ID ### `deleteVectors()` 依 ID 或中繼資料篩選條件刪除多個向量。必須提供 `ids` 或 `filter` 其中一項,但不能同時提供兩者。 **indexName** (`string`): 包含待刪除向量的索引名稱 **ids** (`string[]`): 要刪除的向量 ID 陣列(不可與 filter 同時使用) **filter** (`Record`): 用於識別待刪除向量的中繼資料篩選條件(不可與 ids 同時使用) ## 回應型別 查詢結果會以下列格式傳回: ```typescript interface QueryResult { id: string score: number metadata: Record vector?: number[] // Only included if includeVector is true } ``` ## Schema 設定 `schemaConfigForIndex` 選項可讓你為不同索引定義明確的 schema: ```typescript schemaConfigForIndex: (indexName: string) => { // Mastra's default embedding model and index for memory messages: if (indexName === 'memory_messages_384') { return { dimensions: 384, schema: { thread_id: { type: 'string', filterable: true, }, }, } } else { throw new Error(`TODO: add schema for index: ${indexName}`) } } ``` ## 錯誤處理 此儲存會擲回可攔截的具型別錯誤: ```typescript try { await store.query({ indexName: 'index_name', queryVector: queryVector, }) } catch (error) { if (error instanceof VectorStoreError) { console.log(error.code) // 'connection_failed' | 'invalid_dimension' | etc console.log(error.details) // Additional error context } } ``` ## 相關內容 - [中繼資料篩選條件](https://mastra.zisheng.pro/zh-TW/reference/rag/metadata-filters)