メインコンテンツへ移動

Chroma vector store

ChromaVector クラスは、オープンソースの埋め込みデータベース Chroma を使用したベクトル検索を提供します。 メタデータフィルタリングとハイブリッド検索に対応した効率的なベクトル検索が可能です。

情報
Chroma Cloud

Chroma Cloud は、サーバーレスのベクトル検索と全文検索を提供します。非常に高速で費用対効果と処理容量に優れ、手軽に利用できます。5 ドル分の無料クレジットを使って、30 秒以内に DB を作成して試せます。

Chroma Cloud を使い始める

コンストラクターオプション
コンストラクターオプションへの直接リンク

host?:

string
Chroma サーバーのホストアドレス。デフォルトは 'localhost'

port?:

number
Chroma サーバーのポート番号。デフォルトは 8000

ssl?:

boolean
接続に SSL/HTTPS を使用するかどうか。デフォルトは false

apiKey?:

string
Chroma Cloud API キー

tenant?:

string
接続先 Chroma サーバーのテナント名。単一ノード Chroma のデフォルトは 'default_tenant'。Chroma Cloud では指定した API キーに基づいて自動解決されます

database?:

string
接続先のデータベース名。単一ノード Chroma のデフォルトは 'default_database'。Chroma Cloud では指定した API キーに基づいて自動解決されます

headers?:

Record<string, any>
リクエストとともに送信する追加の HTTP ヘッダー

fetchOptions?:

RequestInit
HTTP リクエスト用の追加の fetch オプション

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 は AWSAzureGCP 向けのサンプルテンプレートを提供しています。

メソッド
メソッドへの直接リンク

createIndex()
createindexへの直接リンク

indexName:

string
作成するインデックスの名前

dimension:

number
ベクトルの次元数(埋め込みモデルと一致させる必要があります)

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似度検索の距離指標

forkIndex()
forkindexへの直接リンク

注: fork は Chroma Cloud、または独自にデプロイした OSS の distributed Chroma でのみサポートされます。

forkIndex を使用すると、既存の Chroma インデックスを即座に fork できます。fork したインデックスへの操作は元のインデックスに影響しません。詳しくは Chroma ドキュメントを参照してください。

indexName:

string
fork するインデックスの名前

newIndexName:

string
fork したインデックスの名前

upsert()
upsertへの直接リンク

indexName:

string
upsert 先のインデックス名

vectors:

number[][]
埋め込みベクトルの配列

metadata?:

Record<string, any>[]
各ベクトルのメタデータ

ids?:

string[]
省略可能なベクトル ID(未指定の場合は自動生成されます)

documents?:

string[]
Chroma 固有: ベクトルに関連付けられた元のテキストドキュメント

query()
queryへの直接リンク

queryVector を使用してインデックスを検索します。queryVector からの距離順に、意味的に類似するレコードの配列を返します。各レコードの形式は次のとおりです。

{
id: string;
score: number;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}

型推論のため、query 呼び出しにメタデータの型を指定することもできます: query<T>()

indexName:

string
クエリ対象のインデックス名

queryVector:

number[]
類似ベクトルを検索するクエリベクトル

topK?:

number
= 10
返す結果の数

filter?:

Record<string, any>
クエリのメタデータフィルター

includeVector?:

boolean
= false
結果にベクトルを含めるかどうか

documentFilter?:

Record<string, any>
Chroma 固有: ドキュメント内容に適用するフィルター

get()
getへの直接リンク

ID、メタデータ、ドキュメントフィルターを使用して Chroma インデックスからレコードを取得します。次の形式のレコード配列を返します。

{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}

型推論のため、get 呼び出しにメタデータの型を指定することもできます: get<T>()

indexName:

string
クエリ対象のインデックス名

ids?:

string[]
返すレコード ID のリスト。未指定の場合はすべてのレコードを返します。

filter?:

Record<string, any>
メタデータフィルター。

includeVector?:

boolean
= false
結果にベクトルを含めるかどうか

documentFilter?:

Record<string, any>
Chroma 固有: ドキュメント内容に適用するフィルター

limit?:

number
= 100
返すレコードの最大数

offset?:

number
0
レコードを返す際のオフセット。結果をページ分割するには limit と併用します。

listIndexes()
listindexesへの直接リンク

インデックス名を文字列の配列として返します。

describeIndex()
describeindexへの直接リンク

indexName:

string
詳細を取得するインデックスの名前

戻り値:

interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}

deleteIndex()
deleteindexへの直接リンク

indexName:

string
削除するインデックスの名前

updateVector()
updatevectorへの直接リンク

ID またはメタデータフィルターで単一のベクトルを更新します。idfilter のどちらか一方のみを指定する必要があります。

indexName:

string
更新するベクトルを含むインデックスの名前

id?:

string
更新するベクトルの ID(filter とは同時に指定できません)

filter?:

Record<string, any>
更新するベクトルを特定するメタデータフィルター(id とは同時に指定できません)

update:

object
更新パラメーター

update オブジェクトには次の値を指定できます。

vector?:

number[]
既存のベクトルを置き換える新しいベクトル

metadata?:

Record<string, any>
既存のメタデータを置き換える新しいメタデータ

例:

// 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:

string
削除するベクトルを含むインデックスの名前

id:

string
削除するベクトルの ID

deleteVectors()
deletevectorsへの直接リンク

ID またはメタデータフィルターで複数のベクトルを削除します。一括削除とソース単位のベクトル管理に対応しています。idsfilter のどちらか一方のみを指定する必要があります。

indexName:

string
削除するベクトルを含むインデックスの名前

ids?:

string[]
削除するベクトル ID の配列(filter とは同時に指定できません)

filter?:

Record<string, any>
削除するベクトルを特定するメタデータフィルター(ids とは同時に指定できません)

例:

// 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
}
}