Turbopuffer 向量儲存
TurbopufferVector class 使用 Turbopuffer 提供向量搜尋。Turbopuffer 是針對 RAG 應用程式最佳化的高效能向量資料庫,提供快速的向量相似度搜尋、進階篩選功能及高效率的儲存管理。
Constructor 選項Constructor 選項 的直接連結
apiKey:
string
用於向 Turbopuffer 驗證身分的 API 金鑰
baseUrl?:
string
= https://api.turbopuffer.com
Turbopuffer API 的基本 URL
connectTimeout?:
number
= 10000
建立連線的逾時時間(毫秒)。只適用於 Node 及 Deno。
connectionIdleTimeout?:
number
= 60000
socket 閒置逾時時間(毫秒)。只適用於 Node 及 Deno。
warmConnections?:
number
= 0
建立新 client 時最初開啟的連線數目。
compression?:
boolean
= true
是否壓縮請求並接受經壓縮的回應。
consistency?:
'strong' | 'eventual'
= strong
查詢的預設一致性層級,可在個別查詢中覆寫。"strong" 保證查詢可讀取查詢開始前寫入的所有資料,但延遲較高。"eventual" 延遲較低,但最近寫入的資料可能尚未顯示。
schemaConfigForIndex?:
function
接收 index 名稱並傳回該 index 設定物件的 callback function。你可為每個 index 定義明確的 schema。
方法方法 的直接連結
createIndex()createindex 的直接連結
indexName:
string
要建立的 index 名稱
dimension:
number
向量維度(必須與你的 embedding model 相符)
metric?:
'cosine' | 'euclidean' | 'dotproduct'
= cosine
相似度搜尋的距離度量
upsert()upsert 的直接連結
vectors:
number[][]
embedding 向量陣列
metadata?:
Record<string, any>[]
每個向量的 metadata
ids?:
string[]
選填的向量 ID(如未提供則自動產生)
query()query 的直接連結
indexName:
string
要查詢的 index 名稱
queryVector:
number[]
用於尋找相似向量的查詢向量
topK?:
number
= 10
要傳回的結果數目
filter?:
Record<string, any>
查詢的 metadata 篩選條件
includeVector?:
boolean
= false
是否在結果中包含向量
consistency?:
'strong' | 'eventual'
此查詢的一致性層級,會覆寫 Constructor 中設定的一致性層級。預設為 "strong"。
listIndexes()listindexes 的直接連結
以字串陣列傳回 index 名稱。
describeIndex()describeindex 的直接連結
indexName:
string
要描述的 index 名稱
傳回:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindex 的直接連結
indexName:
string
要刪除的 index 名稱
updateVector()updatevector 的直接連結
按 ID 或 metadata 篩選條件更新單一向量。必須提供 id 或 filter,但不可同時提供兩者。
indexName:
string
包含該向量的 index 名稱
id?:
string
要更新的向量 ID(與 filter 互斥)
filter?:
Record<string, any>
用於識別要更新向量的 metadata 篩選條件(與 id 互斥)
update:
{ vector?: number[]; metadata?: Record<string, any>; }
包含要更新的向量及/或 metadata 的物件
deleteVector()deletevector 的直接連結
indexName:
string
包含該向量的 index 名稱
id:
string
要刪除的向量 ID
deleteVectors()deletevectors 的直接連結
按 ID 或 metadata 篩選條件刪除多個向量。必須提供 ids 或 filter,但不可同時提供兩者。
indexName:
string
包含要刪除向量的 index 名稱
ids?:
string[]
要刪除的向量 ID 陣列(與 filter 互斥)
filter?:
Record<string, any>
用於識別要刪除向量的 metadata 篩選條件(與 ids 互斥)
回應類型回應類型 的直接連結
查詢結果會以下列格式傳回:
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
}
Schema 設定Schema 設定 的直接連結
schemaConfigForIndex 選項讓你可為不同 index 定義明確的 schema:
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}`)
}
}
錯誤處理錯誤處理 的直接連結
此 store 會拋出可供捕捉的型別化錯誤:
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
}
}