Chromaは、パッケージ形式でコードに埋め込まれる組み込みデータベースアプリケーションです。Chromaの利点はそのシンプルさです。LLMアプリケーションの開発においてLLMメモリを実装するためのベクトルデータベースが必要であり、独立したベクトルデータベースをインストールしたくない場合、Chromaは良い選択肢です。現在、ChromaライブラリはPythonとJavaScriptの2つの言語をサポートしています。このチュートリアルは主にPythonを対象としています。

1. Chromadbのインストール

pip install chromadb

注:現在のバージョンのchromadbはPython 3.11とは互換性がありません。Pythonのバージョンをダウングレードすることをお勧めします。

2. Chromaクライアントの初期化

import chromadb
chroma_client = chromadb.Client()

3. コレクションの作成

コレクションはChromaデータベースのテーブルに類似し、ベクトルデータ(ドキュメントやその他のソースデータを含む)が格納されます。以下のようにコレクションを作成します:

collection = chroma_client.create_collection(name="tizi365")

4. データの追加

コレクションを定義した後、データをコレクションに追加します。Chromaはデータを保存し、後での簡単なクエリに基づいてテキストデータのベクトルに特化した特別なベクトルインデックスを作成します。

4.1. 組込みの埋め込みモデルを使用してベクトルを計算

collection.add(
    documents=["これはドキュメントです", "これは別のドキュメントです"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

4.2. データを追加する際にベクトル値を指定

collection.add(
    embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    documents=["これはドキュメントです", "これは別のドキュメントです"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

5. データのクエリ

これで類似したテキストコンテンツをクエリでき、Chromaは「n」個の最も類似した結果を返します。以下は、query_textsクエリパラメータに基づいて類似したドキュメントコンテンツをクエリする例です:

results = collection.query(
    query_texts=["これはクエリドキュメントです"],
    n_results=2
)

Chromaではデフォルトでデータはメモリに保存されるため、プログラムが再起動されるとデータが失われます。もちろん、Chromaを設定してデータをハードディスクに永続化することもできますので、プログラムが始動する際にデータがディスクから読み込まれます。