1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10日目一旦のchroma-dbアプリ完成

Posted at

ChromaDBとStreamlitで作るドキュメント管理システム

はじめに

ChromaDBを使用してMarkdownファイルを管理し、Streamlitで簡単に操作できるUIを提供するシステムを作成しました。FastAPIをバックエンドに使用し、効率的なドキュメント管理を実現します。

環境

  • Python 3.9
  • ChromaDB 0.6.0
  • FastAPI
  • Streamlit
  • その他の依存関係はrequirements.txtに記載

ディレクトリ構成

chroma-test-project/
├── data/
│   └── chroma_db/          # ChromaDBのデータ保存ディレクトリ
│       ├── chroma.sqlite3  # メタデータ保存用SQLite
│       └── {collection_id}/# 各コレクションのデータ
│           ├── data_level0.bin
│           ├── header.bin
│           ├── length.bin
│           └── link_lists.bin
├── src/
│   ├── api/                # バックエンド
│   │   └── app.py         # FastAPI アプリケーション
│   └── ui/                 # フロントエンド
│       └── streamlit_app.py# Streamlit UI
└── requirements.txt        # 依存パッケージ

主な機能

  1. コレクション管理

    • コレクション一覧表示
    • コレクションの削除(確認ダイアログ付き)
  2. ドキュメント管理

    • Markdownファイルのアップロード(複数ファイル対応)
    • ドキュメントの検索
    • ページネーション付き一覧表示
    • CSVエクスポート
  3. システム情報

    • APIサーバーの状態表示
    • 接続情報の表示

実装で苦労したポイント

1. ChromaDBのバージョン対応

  • v0.6.0での仕様変更への対応
  • コレクション操作のAPIの変更
  • エラーハンドリングの改善

2. Streamlitの状態管理

  • 削除確認ダイアログの実装
  • セッション状態の適切な管理
  • ページのリロードタイミング

3. ファイル処理

  • 複数ファイルのアップロード処理
  • エンコーディング対応
  • メタデータの適切な管理

4. エラーハンドリング

  • FastAPI側でのエラー捕捉
  • Streamlit側でのエラー表示
  • ユーザーフレンドリーなメッセージ

学んだこと

1. アーキテクチャ設計

  • バックエンド(FastAPI)とフロントエンド(Streamlit)の分離
  • データ永続化(ChromaDB)の適切な設計
  • ディレクトリ構造の重要性

2. ChromaDBの特性

  • コレクション名の制約(英数字のみ)
  • データの永続化の仕組み
  • 埋め込みベクトルの扱い

3. Streamlitのベストプラクティス

  • セッション状態の効果的な使用
  • UIコンポーネントの適切な配置
  • ユーザー体験の向上テクニック

4. エラー処理の重要性

  • 適切なエラーメッセージの設計
  • エラーの階層的な処理
  • ユーザーへのフィードバック

使い方

  1. 環境のセットアップ
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
  1. サーバーの起動
# FastAPIサーバー(ローカルホストのみ)
uvicorn src.api.app:app --reload --host localhost

# Streamlit UI(別ターミナルで)
streamlit run src/ui/streamlit_app.py --server.address localhost

今後の改善点

  1. 認証機能の追加
  2. ドキュメントのバージョン管理
  3. より高度な検索機能
  4. バッチ処理の最適化
  5. UIのカスタマイズ機能

まとめ

ChromaDBとStreamlitを組み合わせることで、使いやすいドキュメント管理システムを構築できました。特にStreamlitの柔軟なUI構築能力とChromaDBの効率的なデータ管理機能の組み合わせが効果的でした。

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?