Skip to Content

Chroma ベクターストア

ChromaVector クラスは、オープンソースの埋め込みデータベースである Chroma  を用いたベクター検索を提供します。 メタデータによるフィルタリングやハイブリッド検索に対応し、高効率なベクター検索を実現します。

Chroma Cloud

Chroma Cloud は、サーバーレスでのベクター検索と全文検索を提供します。非常に高速でコスト効率に優れ、スケーラブルかつ手間いらずです。データベースを作成し、$5 の無料クレジットで 30 秒以内に試せます。

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 Cloud のユーザーは、ChromaVector コンストラクタに API キー、テナント、データベース名を渡すだけで構いません。

@mastra/chroma パッケージをインストールすると、Chroma CLI  を利用でき、次のコマンドでこれらを環境変数として設定できます: chroma db connect [DB-NAME] --env-file

それ以外の場合、単一ノードの Chroma サーバーをセットアップする方法はいくつかあります:

  • Chroma CLI を使ってローカルで実行: chroma run。詳細な設定オプションは Chroma ドキュメント  を参照してください。
  • 公式の Chroma イメージを使い、Docker  上で実行。
  • 任意のプロバイダーに独自の Chroma サーバーをデプロイ。Chroma は AWS Azure GCP  向けのサンプルテンプレートを提供しています。

メソッド

createIndex()

indexName:

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

dimension:

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

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
類似検索に用いる距離尺度

forkIndex()

注: フォークは Chroma Cloud 上、または自前で OSS の分散版 Chroma をデプロイしている場合にのみサポートされています。

forkIndex を使うと、既存の Chroma インデックスを即座にフォークできます。フォークしたインデックスへの操作は元のインデックスに影響しません。詳しくは Chroma docs  をご覧ください。

indexName:

string
フォーク対象のインデックス名

newIndexName:

string
フォーク後のインデックス名

upsert()

indexName:

string
アップサート先のインデックス名

vectors:

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

metadata?:

Record<string, any>[]
各ベクトルに対応するメタデータ

ids?:

string[]
任意のベクトル ID(未指定の場合は自動生成)

documents?:

string[]
Chroma 固有: ベクトルに紐づく元のテキストドキュメント

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()

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()

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

describeIndex()

indexName:

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

Returns:

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

deleteIndex()

indexName:

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

updateVector()

indexName:

string
更新対象のベクトルを含むインデックス名

id:

string
更新するベクトルのID

update:

object
更新パラメーター

update オブジェクトには次を含めることができます:

vector?:

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

metadata?:

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

deleteVector()

indexName:

string
削除対象のベクトルを含むインデックス名

id:

string
削除するベクトルのID

レスポンスタイプ

クエリ結果は以下の形式で返されます:

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

関連