Chroma 向量儲存
ChromaVector 類別使用開源 embedding 資料庫 Chroma 提供向量搜尋。 它提供高效的向量搜尋,並支援 metadata 篩選及混合搜尋。
Chroma Cloud 為無伺服器向量及全文搜尋提供支援。它速度極快、具成本效益、容量高,而且簡單易用。只需 30 秒內即可建立資料庫,並使用 5 美元免費額度試用。
建構函式選項建構函式選項 的直接連結
host?:
port?:
ssl?:
apiKey?:
tenant?:
database?:
headers?:
fetchOptions?:
執行 Chroma 伺服器執行 Chroma 伺服器 的直接連結
如你是 Chroma Cloud 使用者,請向 ChromaVector 建構函式提供 API 金鑰、租戶及資料庫名稱。
安裝 @mastra/chroma 套件後,你便可使用 Chroma CLI,它能為你將這些值設定為環境變數:chroma db connect [DB-NAME] --env-file。
否則,你可透過以下幾種方式設定單一節點 Chroma 伺服器:
- 使用 Chroma CLI 在本機執行:
chroma run。你可在 Chroma 說明文件找到更多設定選項。 - 使用官方 Chroma 映像檔在 Docker 上執行。
- 在你選擇的 Provider 上部署自己的 Chroma 伺服器。Chroma 為 AWS、Azure及 GCP 提供範例範本。
方法方法 的直接連結
createIndex()createindex 的直接連結
indexName:
dimension:
metric?:
forkIndex()forkindex 的直接連結
注意:只有 Chroma Cloud,或自行部署的 OSS 分散式 Chroma 支援 fork。
forkIndex 讓你即時 fork 現有的 Chroma 索引。對 fork 後索引進行的操作不會影響原始索引。詳情請參閱 Chroma 說明文件。
indexName:
newIndexName:
upsert()upsert 的直接連結
indexName:
vectors:
metadata?:
ids?:
documents?:
query()query 的直接連結
使用 queryVector 查詢索引。按與 queryVector 的距離排序,傳回語意相似的記錄陣列。每項記錄的結構如下:
{
id: string;
score: number;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
你亦可向 query 呼叫提供 metadata 的結構,以進行類型推斷:query<T>()。
indexName:
queryVector:
topK?:
filter?:
includeVector?:
documentFilter?:
get()get 的直接連結
按 ID、metadata 及文件篩選條件,從 Chroma 索引取得記錄。它會傳回結構如下的記錄陣列:
{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
你亦可向 get 呼叫提供 metadata 的結構,以進行類型推斷:get<T>()。
indexName:
ids?:
filter?:
includeVector?:
documentFilter?:
limit?:
offset?:
limit 一併使用以將結果分頁。listIndexes()listindexes 的直接連結
傳回由索引名稱字串組成的陣列。
describeIndex()describeindex 的直接連結
indexName:
傳回:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindex 的直接連結
indexName:
updateVector()updatevector 的直接連結
按 ID 或 metadata 篩選條件更新單一向量。必須提供 id 或 filter,但不可同時提供兩者。
indexName:
id?:
filter?:
update:
update 物件可包含:
vector?:
metadata?:
範例:
// Update by ID
await vectorStore.updateVector({
indexName: 'docs',
id: 'vec_123',
update: { metadata: { status: 'reviewed' } },
})
// Update by filter
await vectorStore.updateVector({
indexName: 'docs',
filter: { source_id: 'manual.pdf' },
update: { metadata: { version: 2 } },
})
deleteVector()deletevector 的直接連結
indexName:
id:
deleteVectors()deletevectors 的直接連結
按 ID 或 metadata 篩選條件刪除多個向量。此方法支援批量刪除及按來源管理向量。必須提供 ids 或 filter,但不可同時提供兩者。
indexName:
ids?:
filter?:
範例:
// Delete all chunks from a document
await vectorStore.deleteVectors({
indexName: 'docs',
filter: { source_id: 'manual.pdf' },
})
// Delete multiple vectors by ID
await vectorStore.deleteVectors({
indexName: 'docs',
ids: ['vec_1', 'vec_2', 'vec_3'],
})
// Delete old temporary documents
await vectorStore.deleteVectors({
indexName: 'docs',
filter: {
$and: [{ bucket: 'temp' }, { indexed_at: { $lt: '2025-01-01' } }],
},
})
回應類型回應類型 的直接連結
查詢結果會以下列格式傳回:
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
document?: string // Chroma-specific: Original document if it was stored
vector?: number[] // Only included if includeVector is true
}
錯誤處理錯誤處理 的直接連結
此儲存會擲回可被捕捉的具類型錯誤:
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
}
}