Chroma ベクターストア
ChromaVector クラスは、オープンソースの埋め込みデータベースである Chroma を用いたベクター検索を提供します。 メタデータによるフィルタリングやハイブリッド検索に対応し、高効率なベクター検索を実現します。
Chroma Cloud は、サーバーレスでのベクター検索と全文検索を提供します。非常に高速でコスト効率に優れ、スケーラブルかつ手間いらずです。データベースを作成し、$5 の無料クレジットで 30 秒以内に試せます。
コンストラクターのオプション
host?:
port?:
ssl?:
apiKey?:
tenant?:
database?:
headers?:
fetchOptions?:
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:
dimension:
metric?:
forkIndex()
注: フォークは Chroma Cloud 上、または自前で OSS の分散版 Chroma をデプロイしている場合にのみサポートされています。
forkIndex
を使うと、既存の Chroma インデックスを即座にフォークできます。フォークしたインデックスへの操作は元のインデックスに影響しません。詳しくは Chroma docs をご覧ください。
indexName:
newIndexName:
upsert()
indexName:
vectors:
metadata?:
ids?:
documents?:
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()
ID、メタデータ、ドキュメントフィルターで Chroma インデックスからレコードを取得します。返されるレコード配列の形は次のとおりです:
{
id: string;
document?: string;
metadata?: Record<string, string | number | boolean>;
embedding?: number[]
}
get
呼び出しにメタデータの型を指定して型推論させることもできます: get<T>()
。
indexName:
ids?:
filter?:
includeVector?:
documentFilter?:
limit?:
offset?:
listIndexes()
インデックス名の文字列配列を返します。
describeIndex()
indexName:
Returns:
interface IndexStats {
dimension: number;
count: number;
metric: "cosine" | "euclidean" | "dotproduct";
}
deleteIndex()
indexName:
updateVector()
indexName:
id:
update:
update
オブジェクトには次を含めることができます:
vector?:
metadata?:
deleteVector()
indexName:
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
}
}