LangChainを使用したマルチプロバイダー対応のAIチャットボットアプリケーション
- マルチAIプロバイダー対応: OpenAI、Anthropic、Google Geminiを統一インターフェースで利用
- マルチモーダル対応: 画像、PDFファイルのアップロードとAIでの理解
- リアルタイム会話: AIとのインタラクティブなチャット
- モデル選択: 5つのAIモデルから選択可能
- GPT-4o (OpenAI) - 🖼️ 画像対応
- GPT-4.1 (OpenAI) - 📝 最新のGPTモデル、コーディングと推論が大幅向上
- Claude Sonnet 4 (Anthropic) - 🖼️ スマートで効率的な日常使いに最適なモデル
- Claude Opus 4 (Anthropic) - 🖼️ 世界最高のコーディングモデル、最も知的なAI
- Gemini 2.5 Flash (Google) - 🖼️ 思考機能付きハイブリッド推論モデル、速度と効率重視
- ファイルアップロード: PNG, JPG, JPEG, GIF, BMP, WebP, PDF対応
- 画像ファイル:最大10MB、最大解像度2048x2048
- PDFファイル:最大50MB、デュアルエンジン処理(pdfplumber + PyPDF2)
- チャット履歴管理: 自動保存機能付きの永続的な会話履歴
- 過去の会話を簡単に表示・切り替え
- 会話ごとの個別削除機能
- デフォルトで履歴自動保存
- 自動バックアップ機能(24時間間隔)
- レスポンシブUI: Streamlitベースのクリーンなインターフェース
- 包括的テスト: 80のテストケースによる品質保証
chatbot-created-by-claude-code/
├── src/ # ソースコード
│ ├── __init__.py # パッケージ初期化
│ ├── __main__.py # モジュール実行エントリーポイント
│ ├── app.py # メインアプリケーション
│ ├── models/ # AIモデル管理
│ │ ├── __init__.py # パッケージ初期化
│ │ ├── config.py # モデル設定
│ │ └── factory.py # モデル作成機能
│ └── utils/ # ユーティリティ
│ ├── __init__.py # パッケージ初期化
│ ├── config.py # 設定管理
│ ├── logging.py # ログ設定
│ ├── file_processing.py # ファイル処理(画像・PDF)
│ ├── database.py # チャット履歴データベース
│ └── history_manager.py # 履歴管理API
├── tests/ # テストスイート
│ ├── __init__.py # パッケージ初期化
│ ├── conftest.py # テスト設定
│ ├── test_app.py # アプリケーションテスト
│ ├── test_models.py # モデルテスト
│ ├── test_file_processing.py # ファイル処理テスト
│ ├── test_history_database.py # 履歴データベーステスト
│ └── test_history_manager.py # 履歴管理テスト
├── config.yaml # アプリケーション設定
├── Dockerfile # コンテナ設定
├── pytest.ini # テスト設定
├── pyproject.toml # プロジェクト設定
├── uv.lock # 依存関係ロックファイル
└── .env.example # 環境変数テンプレート
- Python 3.11+
- uv (モダンなPythonパッケージマネージャー)
- リポジトリのクローン:
git clone https://github.com/shirochan/chatbot-created-by-claude-code.git
cd chatbot-created-by-claude-code- 依存関係のインストール:
uv sync- 環境変数の設定:
cp .env.example .env.envファイルを編集して必要なAPIキーを設定:
# 利用したいプロバイダーのAPIキーを設定
OPENAI_API_KEY=your_openai_api_key_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GOOGLE_API_KEY=your_google_api_key_here# 推奨: 直接実行
uv run streamlit run src/app.py
# または指定ポートで実行
uv run streamlit run src/app.py --server.port=8502アプリケーションは http://localhost:8501 でアクセスできます。
-
サイドバーからファイルをアップロード:
- 対応形式: PNG, JPG, JPEG, GIF, BMP, WebP, PDF
- 画像: リアルタイムプレビュー表示
- PDF: 内容プレビュー表示(先頭500文字)
-
マルチモーダル対応モデルを選択:
- GPT-4o, Claude Sonnet 4, Claude Opus 4, Gemini 2.5 Flash
- 画像対応状況がUI上に表示されます
-
画像やPDFについて質問:
- 「この画像について説明してください」
- 「このPDFの内容を要約してください」
-
自動保存:
- すべての会話がデフォルトで自動保存されます
- SQLiteデータベースに永続的に保存
-
履歴一覧:
- サイドバーで過去の会話を簡単に確認
- 会話タイトル、日時、メッセージ数を表示
- 最新10件の会話を表示
-
会話管理:
- 🆕 新しい会話ボタンで新規セッション開始
- 🗑️ 会話ごとの個別削除機能
- 会話の切り替えでメッセージ履歴を復元
# プロダクション用イメージのビルド
docker build -t chatbot-app .
# コンテナの実行
docker run -p 8501:8501 --env-file .env chatbot-app
# 開発用(テスト含む)イメージのビルド
docker build --target builder -t chatbot-app-dev .
# 開発用コンテナでテスト実行
docker run --rm chatbot-app-dev uv run pytest -v# 全テストの実行
uv run pytest
# 詳細出力付きテスト
uv run pytest -v
# 詳細な失敗情報付きテスト
uv run pytest -vvs- Python 3.11: プログラミング言語
- Streamlit: Webアプリケーションフレームワーク
- LangChain: AI/LLMアプリケーション開発フレームワーク
- PIL/Pillow: 画像処理ライブラリ
- pdfplumber + PyPDF2: PDF処理(デュアルエンジン)
- OpenAI: GPT-4oおよびGPT-4.1
- Anthropic: Claude Sonnet 4およびClaude Opus 4
- Google: Gemini 2.5 Flash
- uv: モダンなPythonパッケージマネージャー
- pytest: テストフレームワーク
- Docker: コンテナ化
- PyYAML: YAML設定ファイル管理
- base64: 画像エンコーディング
アプリケーション設定は config.yaml で管理:
# アプリケーション設定
app:
title: "AIチャットボット"
page_icon: "🤖"
layout: "wide" # centered, wide
initial_sidebar_state: "auto" # auto, expanded, collapsed
# ログ設定
logging:
level: "INFO" # DEBUG, INFO, WARNING, ERROR
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# Streamlit設定
streamlit:
server:
port: 8501
headless: true
browser:
gatherUsageStats: false
# チャット設定
chat:
max_history: 100
default_model: "GPT-4o" # デフォルトで選択されるモデル
show_model_description: true # モデル説明の表示
# ファイルアップロード設定
file_upload:
# 対応ファイル形式
supported_formats:
image: ["png", "jpg", "jpeg", "gif", "bmp", "webp"]
pdf: ["pdf"]
# ファイルサイズ制限 (MB)
max_file_size:
image: 10
pdf: 50
# 画像処理設定
image_processing:
default_format: "PNG"
quality: 95
max_dimension: 2048 # 最大幅・高さ (ピクセル)
# PDF処理設定
pdf_processing:
preview_length: 500 # プレビュー文字数
engines: ["pdfplumber", "pypdf2"] # 使用するエンジンの優先順位
# チャット履歴設定
history:
# データベース設定
database:
path: "chat_history.db" # データベースファイルのパス
backup_enabled: true # バックアップを有効にするか
backup_interval: 24 # バックアップ間隔(時間)
# 履歴管理設定
management:
auto_save: true # 自動保存を有効にするか(デフォルトで有効)
max_conversations: 1000 # 保存する最大会話数
max_messages_per_conversation: 500 # 会話あたりの最大メッセージ数| 変数名 | 説明 | 必須 |
|---|---|---|
OPENAI_API_KEY |
OpenAI APIキー | OpenAIモデル使用時 |
ANTHROPIC_API_KEY |
Anthropic APIキー | Claudeモデル使用時 |
GOOGLE_API_KEY |
Google APIキー | Geminiモデル使用時 |
main: プロダクションブランチfeature/*: 新機能開発fix/*: バグ修正
新機能追加時は対応するテストも追加してください:
# テスト追加例
tests/test_new_feature.pyプルリクエスト前に以下を実行:
uv run pytest -v # 全テスト通過確認このプロジェクトはMITライセンスの下で公開されています。