MCP-ChatBot について
MCP-ChatBotは、対話型コマンドラインとツール連携を必要とするユーザー向けのRust製チャットボットフレームワークです。OllamaとOpenAIを切り替えられ、複数のMCPサーバー、RAG、音声入力にも対応します。
主な機能
- 01OllamaとOpenAIの切り替え
- 02複数の専用MCPサーバーの実行
- 03メモリ、SQLite、ファイル用ツール
- 04Qdrantによる検索拡張生成
- 05Whisperによる音声テキスト変換
- 06対話型コマンドラインとプロンプト設定
活用シーン
- 01ローカルのOllamaとOpenAIを切り替えてチャット
- 02組み込みツールでメモリ、SQLite、ファイルを操作
- 03Qdrantで文書の内容を検索
- 04音声を文字起こししてチャットメッセージとして処理
MCP 対応
複数のMCPサーバーに対応し、ツールの検出、登録、実行を提供します。コマンドからサーバー、ツール、リソースを一覧表示でき、MCPクライアントが統合ツールを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP-ChatBot
マルチサーバー対応とツール統合機能を備えた、強力な Rust ベースのチャットボット MCP(Model Context Protocol)フレームワークです。
特徴
- 🤖 マルチ AI 対応:Ollama(ローカル)と OpenAI をシームレスに切り替えられます
- 🛠️ ツール統合:メモリ、SQLite、ファイル操作に標準で対応しています
- 🔄 マルチサーバーアーキテクチャ:複数の専門サーバーを同時に実行できます
- 💬 対話型 CLI:履歴機能を備えた使いやすいコマンドラインインターフェースです
- 📝 カスタマイズ可能なプロンプト:YAML 設定を使ってサーバーごとにシステムプロンプトを設定できます
- 🔒 セキュア:環境変数を使って API キーを管理します
- 📚 RAG 対応:Qdrant ベクトルデータベースによる検索拡張生成に対応しています
- 🎤 音声入力:Whisper を使った音声テキスト変換機能を備えています
- 🤖 高度な NLP:rust-bert によるテキスト埋め込みと言語モデルを利用します
- 🧠 ディープラーニング:tch を介して PyTorch と統合し、高度なモデル操作を実現します
- 📝 テキスト処理:Hugging Face tokenizers による効率的なトークン化を実現します
Model Context Protocol(MCP)
MCP(Model Context Protocol)は、構造化されたコンテキストとツール統合機能を提供し、AI モデルとのやり取りを強化するために設計された柔軟なプロトコルです。このプロトコルでは、次のことが可能です。
主なコンポーネント
-
コンテキスト管理
- 異なる AI モデル間でコンテキストを動的に切り替えます
- セッションをまたいでコンテキストを保持します
- サーバーごとのコンテキスト設定を行います
-
ツール統合
- AI モデル向けの標準化されたツールインターフェース
- ツールの自動検出と登録
- 再試行機構を備えたツール実行
- ツールの応答処理とフォーマット
-
サーバーアーキテクチャ
- 専門的な処理に対応するモジュール式サーバー設計
- サーバー間通信プロトコル
- リソースの管理とクリーンアップ
- サーバーごとのプロンプト設定
-
プロトコルの機能
- JSON ベースのメッセージ形式
- 非同期操作への対応
- エラー処理と復旧
- リソースのクリーンアップと管理
- ツール実行の監視
プロトコルのフロー
-
初期化
- サーバーの登録と設定
- ツールの検出と登録
- コンテキストの初期化
-
操作
- コンテキストを考慮したツール実行
- 応答の処理とフォーマット
- エラー処理と復旧
- リソース管理
-
クリーンアップ
- リソースの解放
- サーバーのシャットダウン
- コンテキストの保持
ユースケース
- マルチモデル連携:複雑なタスクに対応するため、複数の AI モデルを連携させます
- ツール統合:外部ツールやサービスをシームレスに統合します
- コンテキスト管理:異なる操作間で一貫したコンテキストを維持します
- リソース管理:システムリソースとクリーンアップを効率的に管理します
前提条件
- Rust 1.70 以降
- Ollama(ローカル AI 対応に必要)
- OpenAI API キー(任意、OpenAI 対応に必要)
- Qdrant ベクトルデータベース(RAG 対応に必要)
- Whisper モデル(音声入力に必要)
AI モデルとツール
このプロジェクトでは、強力な AI および NLP ツールをいくつか利用しています。
テキスト処理と埋め込み
- rust-bert:Hugging Face の transformers ライブラリを Rust で実装したものです
- 最先端のテキスト埋め込みを提供します
- 複数の言語モデルに対応しています
- 効率的なテキスト処理と理解を実現します
ディープラーニング
- tch (PyTorch):PyTorch の Rust バインディングです
- ディープラーニングモデルの操作を可能にします
- モデルの推論とトレーニングに対応しています
- 利用可能な場合は GPU アクセラレーションを提供します
テキストのトークン化
- tokenizers:Hugging Face の tokenizers ライブラリです
- 効率的なテキストのトークン化
- 複数のトークン化アルゴリズムに対応しています
- 異なるモデル間で一貫したテキスト処理を可能にします
インストール
- リポジトリをクローンします:
git clone https://github.com/arksong/mcp-chatbot.git
cd mcp-chatbot
- プロジェクトをビルドします:
cargo build --release
設定
- プロジェクトのルートに
.envファイルを作成します:
LLM_API_KEY=your_ollama_key
OPENAI_API_KEY=your_openai_key # Optional
-
src/servers_config.jsonでサーバーを設定します -
mcp_prompts.yamlでプロンプトをカスタマイズします
使用方法
Ollama(ローカル AI)の使用
- Ollama をインストールします:
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
- 必要なモデルをプルします:
ollama pull llama3.2:latest
- Ollama サービスを起動します:
ollama serve
- チャットボットを実行します:
cargo run
OpenAI の使用
- OpenAI API キーを設定します:
export OPENAI_API_KEY=your_api_key
- チャットボットを実行します:
cargo run
/aiコマンドを使用して OpenAI に切り替えます
RAG(検索拡張生成)の使用
- Docker を使用して Qdrant ベクトルデータベースを起動します:
# Using the provided setup script
./scripts/setup_qdrant.sh
# Or manually using Docker
docker run -d \
--name qdrant \
-p 6333:6333 \
-p 6334:6334 \
-v "$(pwd)/qdrant_storage:/qdrant/storage" \
qdrant/qdrant:latest
- RAG データベースにドキュメントを追加します:
# Use the /rag-add command in the chatbot
/rag-add
# Then enter your document text
- 類似するドキュメントを検索します:
# Use the /rag-search command
/rag-search
# Enter your search query
- RAG データベースの情報を表示します:
/rag-info
- Docker 管理コマンド:
# Stop Qdrant container
docker stop qdrant
# Start Qdrant container
docker start qdrant
# View Qdrant logs
docker logs qdrant
# Remove Qdrant container (data will be preserved in qdrant_storage)
docker rm qdrant
注:Qdrant のデータは ./qdrant_storage ディレクトリに保持され、Docker コンテナ内のボリュームとしてマウントされます。これにより、コンテナを削除してもベクトルデータが維持されます。
音声入力の使用
- 音声録音を開始します:
/voice
-
メッセージを話します(Enter キーを押すと録音が停止します)
-
文字起こしされたテキストは通常のメッセージとして処理されます
使用可能なコマンド
/help- ヘルプメニューを表示/clear- ターミナル画面をクリア/usage- 使用方法を表示/exit- プログラムを終了/servers- 使用可能な MCP サーバーを一覧表示/tools- 使用可能なツールを一覧表示/resources- 使用可能なリソースを一覧表示/debug- デバッグログのオン/オフを切り替え/ai- AI プロバイダーを切り替え/rag-add- RAG データベースに新しいドキュメントを追加/rag-search- 類似するドキュメントを検索/rag-info- RAG データベースの情報を表示/voice- 音声入力を開始(Enter キーを押すと録音が停止します)
ツールの例
メモリ操作
{"tool": "memory_set", "arguments": {"key": "name", "value": "John"}}
{"tool": "memory_get", "arguments": {"key": "name"}}
SQLite 操作
{"tool": "sqlite_create_table", "arguments": {"name": "users", "columns": [{"name": "id", "type": "INTEGER"}]}}
{"tool": "sqlite_query", "arguments": {"query": "SELECT * FROM users"}}
ファイル操作
{"tool": "file_write", "arguments": {"path": "test.txt", "content": "Hello"}}
{"tool": "file_read", "arguments": {"path": "test.txt"}}
プロジェクト構成
mcp-chatbot/
├── src/
│ ├── main.rs # Main application entry
│ ├── llm_client.rs # LLM client implementation
│ ├── mcp_server.rs # MCP server core
│ ├── protocol.rs # Protocol definitions
│ ├── sqlite_server.rs # SQLite server implementation
│ ├── stdio_server.rs # Standard I/O server
│ ├── rag_server.rs # RAG server implementation
│ ├── whisper_server.rs # Whisper server implementation
│ └── utils.rs # Utility functions
├── tests/
│ ├── sqlite_test.rs # SQLite tests
│ └── rag_server_test.rs # RAG server tests
├── Cargo.toml # Project dependencies
├── mcp_prompts.yaml # System prompts configuration
└── README.md # Project documentation
コントリビューション
コントリビューションを歓迎します!お気軽にプルリクエストを送信してください。
- リポジトリをフォークします
- フィーチャーブランチを作成します(
git checkout -b feature/amazing-feature) - 変更をコミットします(
git commit -m 'Add some amazing feature') - ブランチにプッシュします(
git push origin feature/amazing-feature) - プルリクエストを作成します
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については LICENSE ファイルを参照してください。
作成者
- arkSong - 初期開発 - [email protected]
謝辞
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。