Chroma vector store
ChromaVector クラスは、オープンソースの埋め込みデータベース Chroma を使用したベクトル検索を提供します。 メタデータフィルタリングとハイブリッド検索に対応した効率的なベクトル検索が可能です。
Chroma Cloud は、サーバーレスのベクトル検索と全文検索を提供します。非常に高速で費用対効果と処理容量に優れ、手軽に利用できます。5 ドル分の無料クレジットを使って、30 秒以内に DB を作成して試せます。
コンストラクターオプションコンストラクターオプションへの直接リンク
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への直接リンク
注: fork は Chroma Cloud、または独自にデプロイした OSS の distributed Chroma でのみサポートされます。
forkIndex を使用すると、既存の Chroma インデックスを即座に fork できます。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 呼び出しにメタデータの型を指定することもできます: 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
}
エラー処理エラー処理への直接リンク
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
}
}