ChromaDBを使った文書管理システムの構築と可視化
2. プロジェクトの説明
ディレクトリ構造
chroma-test-project/
├── app.py # FastAPI用のメインアプリケーション
├── streamlit_app.py # Streamlitによるビューアーアプリケーション
├── requirements.txt # 必要なパッケージの一覧
├── chroma_db/ # ChromaDBのデータ保存ディレクトリ
└── venv/ # Python仮想環境
各ファイルの役割
-
app.py
- FastAPIを使用したバックエンドAPI
- ドキュメントの追加・検索機能を提供
- エンドポイント:
-
/
: サーバー状態確認 -
/add_document
: 文書の追加 -
/search
: 類似文書の検索
-
-
streamlit_app.py
- ChromaDBのデータを可視化するWebインターフェース
- 4つの主要機能:
- コレクション情報の表示
- ドキュメント一覧の表示
- SQLiteテーブルの閲覧
- 埋め込みベクトルの可視化
-
requirements.txt
fastapi==0.115.6
uvicorn[standard]==0.34.0
chromadb==0.6.3
python-dotenv==1.0.1
streamlit==1.41.1
pandas==2.2.3
データの保存場所
ChromaDBはchroma_db
ディレクトリにデータを保存します:
Ran tool
データは以下の2つの場所に保存されます:
-
chroma.sqlite3
- メタデータやインデックス情報を保存するSQLiteデータベース
- コレクション設定や文書のメタデータを管理
-
ff47ae48-966e-4abf-85af-9af82ac5d90b/
ディレクトリ- 埋め込みベクトルやコレクション固有のデータを保存
- 以下のファイルを含む:
-
data_level0.bin
: ベクトルデータ -
length.bin
: 長さ情報 -
header.bin
: ヘッダー情報 -
link_lists.bin
: リンク情報
-
3. セットアップ手順
- 仮想環境の作成と有効化
python3 -m venv venv
source venv/bin/activate # MacOS/Linux
- 必要なパッケージのインストール
pip install -r requirements.txt
- アプリケーションの起動
# FastAPIサーバーの起動
uvicorn app:app --reload
# 別のターミナルでStreamlitアプリケーションの起動
streamlit run streamlit_app.py
4. 使用方法
-
FastAPI(
http://127.0.0.1:8000
)- Swagger UI(
/docs
)で利用可能なAPIを確認 - POSTリクエストで文書を追加
- GETリクエストで類似文書を検索
- Swagger UI(
-
Streamlitビューアー(
http://localhost:8501
)- コレクション情報:データベース内のコレクションの基本情報を表示
- ドキュメント一覧:保存されている文書を表示(CSVエクスポート可能)
- SQLiteテーブル一覧:データベースの生のテーブルを表示
- 埋め込みベクトル:文書の埋め込みベクトルを視覚化
5. 注意点
-
ChromaDB v0.6.0の仕様変更
- コレクションのメタデータへの直接アクセスが制限
-
list_collections()
の戻り値の変更に対応
-
データの永続性
-
PersistentClient
を使用してデータを永続化 - アプリケーション再起動後もデータは保持
-
-
セキュリティ
- 開発環境での使用を想定
- 本番環境では適切なセキュリティ対策が必要
以上が、今回実装したChromaDBを使用した文書管理システムの概要です。初学者の方でも理解しやすいように、各コンポーネントの役割と使用方法を説明しました。