Chromaは、ベクトル類似検索技術を利用して大規模な高次元ベクトルデータを効率的に格納および取得するオープンソースのベクトルデータベースです。
Chromaは、パッケージの形でコードに埋め込まれるアプリケーション組み込みデータベースです。その利点はそのシンプルさにあります。独立したベクトルデータベースをインストールしたくないが、LLMメモリを実装しテキストの類似性言語検索をサポートするベクトルデータベースが必要なLLMアプリケーションを開発している場合、Chromaは良い選択肢です。このチュートリアルは主にJavaScriptに基づいています。
1. パッケージのインストール
npm install --save chromadb # yarn add chromadb
2. Chromaクライアントの初期化
const {ChromaClient} = require('chromadb');
const client = new ChromaClient();
3. コレクションの作成
Chromaデータベースのコレクションは、Mysqlのテーブルと同様であり、ベクトルデータ(ドキュメントやその他のソースデータを含む)が格納されます。以下はコレクションの作成です:
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "your_api_key"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})
ここでは、テキストベクトルを計算するためにopenaiテキスト埋め込みモデルが使用されているため、openaiのAPIキーを提供する必要があります。もちろん、embeddingFunctionパラメータを省略し、Chroma内蔵のモデルを使用してベクトルを計算するか、別のオープンソースのテキスト埋め込みモデルに置き換えることもできます。
4. データの追加
コレクションを定義した後、データをコレクションに追加し、Chromaはデータを格納し、テキストデータのベクトルに基づいた専用のベクトルインデックスを作成し、後で簡単にクエリできるようにします。
await collection.add({
ids: ["id1", "id2"],
metadatas: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["This is a document", "This is another document"],
})
事前に計算されたテキストベクトルを使用し、Chromaの内蔵された埋め込み機能を使用せずに計算する場合:
await collection.add({
ids: ["id1", "id2"],
embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
where: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["This is a document", "This is another document"]
})
5. コレクションデータのクエリ
クエリ条件として設定されたqueryTextsに基づいて、Chromaは最も類似したnResultsの結果を返します。
const results = await collection.query({
nResults: 2,
queryTexts: ["This is a query document"]
})