初めて「ベクトルデータベース」で検索すると、おそらく混乱するはずです。
実際、ベクトルデータベース界隈はカオスの状態と言えます。
さらに、ベクトルストアやベクトルインデックスと表現することもあるようです。
そんな状況のため、ここでは一つのベクトルデータベースだけ紹介します。
それが、Chromaです。
本記事の内容
- Chromaとは?
- Chromaのインストール
- Chromaの動作確認
それでが、上記に沿って解説していきます。
Chromaとは?
Chromaは、AIに特化したオープンソースのベクトル(埋め込み)データベースです。
PythonやJavaScriptでLLMアプリケーションを素早く構築するための手段を提供します。
Chromaは、ベクトルデータベース界のSQLiteと言えます。
SQLiteについては、以下の記事で説明しています。
SQLiteと同じように、Chromaは手軽に利用できます。
そして、同じように面倒なインストール作業はありません。
MySQL、PostgreSQL、MongoDBなどはサーバー自体のインストールが必要です。
Chromaは、pipコマンドだけで完結します。
そのため、Chromaはシステムにガッツリと組み込むモノとは言えません。
まあ、小規模システムなら、Chromaでも十分かもしれませんけどね。
個人的には、SQLiteと同じような判断で利用すれば良いと思います。
その意味で言うと、ベクトルデータベースの入門や学習には最適と言えます。
Chromaのインストール
現時点でのChromaの最新バージョンは、以下。
![](https://self-development.info/wp-content/uploads/2024/03/image-15.jpg)
継続してメンテナンスが行われています。
これは、安心して利用できるポイントになります。
システム要件としては、Python 3ぐらいしかありません。
OSは、WindowsでもmacでもLinuxでも何でもOKです。
インストールコマンドは、以下となります。
pip install chromadb
これだけです。
でも、依存関係のあるライブラリが多いので、そこそこインストールに時間がかかります。
Chromaの動作確認
公式に載っているサンプルコードとほぼ同じです。
import chromadb chroma_client = chromadb.Client() collection = chroma_client.create_collection(name="my_collection") collection.add( documents=["This is a document", "This is another document"], metadatas=[{"source": "my_source"}, {"source": "my_source"}], ids=["id1", "id2"] ) results = collection.query( query_texts=["This is a document"], n_results=2 ) print(results)
とりあえず、まず上記を実行してみてください。
初回実行時だと、モデル(all-MiniLM-L6-v2)のダウンロードが始まります。
処理が完了すると、問題なければコンソールに次のような結果が表示されます。
{'ids': [['id1', 'id2']], 'distances': [[0.0, 0.3858669102191925]], 'metadatas': [[{'source': 'my_source'}, {'source': 'my_source'}]], 'embeddings': None, 'documents': [['This is a document', 'This is another document']], 'uris': None, 'data': None}
コードの処理内容は、オンメモリ上に2つの文書を登録して検索しているだけです。
登録する際には、ベクトル(埋め込み)データに変換して登録しています。
(※オンメモリだけではなく永続化も可能)
ベクトルに変換する際、ダウンロードしたall-MiniLM-L6-v2を利用しているのです。
all-MiniLM-L6-v2は、デフォルトのモデルになります。
ベクトル変換にローカルで利用可能なモデルは、以下があります。
![](https://self-development.info/wp-content/uploads/2024/03/image-16.jpg)
ローカルで変換する以外に、Chromaでは外部APIを利用することが可能です。
![](https://self-development.info/wp-content/uploads/2024/03/image-17.jpg)
ChatGPTにベクトル化してもらう方が、良い結果がでそうですね。