Chroma 向量儲存
ChromaVector 類別使用開放原始碼的嵌入資料庫 Chroma 提供向量搜尋。 它提供高效率的向量搜尋、中繼資料篩選與混合搜尋功能。
Chroma Cloud 支援無伺服器向量搜尋與全文搜尋,具備極高速度、成本效益與大容量,且使用簡便。只需不到 30 秒即可建立資料庫,並使用 5 美元的免費額度試用。
建構函式選項「建構函式選項」的直接連結
host?:
port?:
ssl?:
apiKey?:
tenant?:
database?:
headers?:
fetchOptions?:
執行 Chroma 伺服器「執行 Chroma 伺服器」的直接連結
如果你是 Chroma Cloud 使用者,請將 API 金鑰、租戶和資料庫名稱提供給 ChromaVector 建構函式。
安裝 @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 或自行部署的開放原始碼分散式 Chroma 支援分叉。
forkIndex 可讓你立即分叉現有的 Chroma 索引。對分叉索引執行的操作不會影響原始索引。詳情請參閱 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 時提供中繼資料的結構,以進行型別推斷:query<T>()。
indexName:
queryVector:
topK?:
filter?:
includeVector?:
documentFilter?:
get()「get」的直接連結
依 ID、中繼資料和文件篩選條件,從 Chroma 索引取得記錄。此方法會傳回具下列結構的記錄陣列:
{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
你也可以在呼叫 get 時提供中繼資料的結構,以進行型別推斷: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 或中繼資料篩選條件更新單一向量。必須提供 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 或中繼資料篩選條件刪除多個向量。此方法支援大量刪除與依來源管理向量。必須提供 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
}
}