🚀 MCP-RAG: ビジネス分析のためのエージェンティックAIオーケストレーション
モデルコンテキストプロトコル(MCP) と 検索拡張生成(RAG) を組み合わせた軽量なデモで、ビジネス分析のためのマルチエージェントAIワークフローをオーケストレートします。
🚀 クイックスタート
このプロジェクトは、以下のような エージェンティックAIシステム を構築する方法を紹介しています。
- 複数のエージェントをオーケストレート:MCPサーバーが異なる専用ツールを調整します。
- ビジネス知識を取得:RAGがコンテキストを考慮した情報検索を提供します。
- 統計分析を実行:自然言語クエリによる自動データ分析を行います。
- モジュール性を維持:LLMバックエンドの交換や新機能の追加が容易です。
✨ 主な機能
- MCPベースの調整:複数の専用サーバーが連携して動作します。
- ビジネス分析ツール:平均、標準偏差、相関、線形回帰などの分析機能を備えています。
- RAG知識ベース:ビジネス用語、ポリシー、分析ガイドラインが収録されています。
- モジュール式設計:新しいツールの追加やLLMバックエンドの交換が簡単です。
- 自然言語インターフェース:「第1四半期の平均収益はいくらですか?」のような質問ができます。
📦 インストール
前提条件
- Python 3.8以上
- Google Gemini APIキー(無料版利用可能) - 将来的なLLM統合に必要
- MCPとRAGの概念に関する基本的な理解
インストール手順
-
リポジトリをクローン:
git clone https://github.com/ANSH-RIYAL/MCP-RAG.git cd MCP-RAG -
依存関係をインストール:
pip install -r requirements.txt -
環境変数を設定:
Gemini API(デフォルト)の場合:
export LLM_MODE="gemini" export GEMINI_API_KEY="your-gemini-api-key"カスタムローカルホストAPIの場合:
export LLM_MODE="custom" export CUSTOM_API_URL="http://localhost:8000" export CUSTOM_API_KEY="your-api-key" # オプション
💻 使用例
基本的な使用法
クイックデモ
デモンストレーションスクリプトを実行して、両方のMCPサーバーの動作を確認します。
python main.py
これにより、以下のことが表示されます。
- サンプルデータを使用したビジネス分析ツールの動作
- ビジネス用語のRAG知識検索
- システムがどのように連携して動作するか
- 選択したバックエンドとのLLM統合
LLMバックエンドの選択
システムは2つのLLMバックエンドをサポートしています。
オプション1:Google Gemini API(デフォルト)
export LLM_MODE="gemini"
export GEMINI_API_KEY="your-gemini-api-key"
python main.py
オプション2:カスタムローカルホストAPI
export LLM_MODE="custom"
export CUSTOM_API_URL="http://localhost:8000"
export CUSTOM_API_KEY="your-api-key" # オプション
python main.py
カスタムAPIの要件:
- OpenAI互換のチャット完了エンドポイント(
/v1/chat/completions)をサポートする必要があります。 - ツール/関数呼び出し形式を受け入れる必要があります。
- ローカルホスト:8000で実行することが想定されています(設定可能)。
会話シナリオ
会話シナリオを実行して、実際の使用例を確認します。
python test_scenarios.py
これは、非技術的なユーザーがシステムとどのように対話するかを示すLinkedIn投稿シナリオをデモンストレーションします。
ビジネス分析ツール
システムは以下の分析機能を提供します。
- データ探索:データセット情報とサンプルデータを取得します。
- 統計分析:平均、標準偏差のフィルタリング付き分析を行います。
- 相関分析:変数間の関係を見つけます。
- 予測モデリング:予測のための線形回帰を行います。
RAG知識検索
以下の方法でビジネス知識にアクセスできます。
- 用語定義:ビジネス概念を検索します。
- ポリシー情報:会社の手順を取得します。
- 分析ガイドライン:データ解釈のコンテキストを取得します。
高度な使用法
シナリオ1:販売分析
Manager: "What's the average earnings from Q1?"
MCP-RAG System:
1. Analytics Server: calculate_mean(column='earnings', filter_column='quarter', filter_value='Q1-2024')
→ Mean of earnings: 101666.67
2. RAG Server: get_business_terms(term='earnings')
→ Earnings: Total revenue generated by a department or company in a given period
3. Response: "Average earnings for Q1-2024: $101,667"
シナリオ2:パフォーマンス相関
Manager: "What's the correlation between sales and expenses?"
MCP-RAG System:
1. Analytics Server: calculate_correlation(column1='sales', column2='expenses')
→ Correlation between sales and expenses: 0.923
2. Response: "Correlation: 0.923 (strong positive relationship)"
シナリオ3:予測モデリング
Manager: "Build a model to predict earnings from sales and employees"
MCP-RAG System:
1. Analytics Server: linear_regression(target_column='earnings', feature_columns=['sales', 'employees'])
→ Linear Regression Results:
Target: earnings
Features: ['sales', 'employees']
Intercept: 15000.00
sales coefficient: 0.45
employees coefficient: 1250.00
R-squared: 0.987
2. Response: "Model created with R² = 0.987"
シナリオ4:ビジネス知識
Manager: "What does profit margin mean?"
MCP-RAG System:
1. RAG Server: get_business_terms(term='profit margin')
→ Profit Margin: Percentage of revenue that remains as profit after expenses, calculated as (earnings - expenses) / earnings
2. Response: "Profit Margin: Percentage of revenue that remains as profit after expenses"
シナリオ5:ポリシー情報
Manager: "What are the budget allocation policies?"
MCP-RAG System:
1. RAG Server: get_company_policies(policy_type='budget')
→ Budget Allocation: Marketing gets 25% of total budget, Engineering gets 30%, Sales gets 45%
2. Response: "Budget Allocation: Marketing gets 25%, Engineering gets 30%, Sales gets 45%"
🔧 技術詳細
カスタマイズガイド
あなたの組織向け
ステップ1:サンプルデータを置き換える
-
ビジネスデータを更新:
data/sample_business_data.csvを実際のデータに置き換えます。- 分析ツールのために列を数値にすることを確認します。
- フィルタリングのためのカテゴリ列を追加します。
- トレンド分析のための時間ベースの列を含めます。
-
知識ベースを更新:
data/business_knowledge.txtをあなたの組織の以下の内容に置き換えます。- ビジネス用語と定義
- 会社のポリシーと手順
- 分析ガイドラインとベストプラクティス
ステップ2:カスタム分析ツールを追加する
変更するファイル:src/servers/business_analytics_server.py
-
新しいツールを追加:
handle_list_tools()関数(約29行目)で、新しいツールをツールリストに追加します。@server.list_tools() async def handle_list_tools() -> ListToolsResult: return ListToolsResult( tools=[ # ... 既存のツール (calculate_mean, calculate_std, calculate_correlation, linear_regression) ... Tool( name="your_custom_analysis", description="Your custom analysis tool", inputSchema={ "type": "object", "properties": { "parameter": {"type": "string"} }, "required": ["parameter"] } ) ] ) -
ツールロジックを実装:
handle_call_tool()関数(約140行目)で、対応するハンドラーを追加します。elif name == "your_custom_analysis": parameter = arguments["parameter"] # Your custom analysis logic here result = f"Custom analysis result for {parameter}" return CallToolResult( content=[TextContent(type="text", text=result)] )
ステップ3:RAG機能を拡張する
変更するファイル:src/servers/rag_server.py
-
新しい知識ソースを追加:
load_business_knowledge()関数(約25行目)を変更して、以下を含めます。- データベース接続
- ドキュメント処理(PDF、Wordドキュメント)
- API統合(Salesforce、HubSpotなど)
-
新しいRAGツールを追加:
handle_list_tools()関数(約50行目)で、新しいツールを追加します。Tool( name="your_custom_rag_tool", description="Your custom knowledge retrieval tool", inputSchema={ "type": "object", "properties": { "query": {"type": "string"} }, "required": ["query"] } ) -
RAGツールロジックを実装:
handle_call_tool()関数(約90行目)で、ハンドラーを追加します。elif name == "your_custom_rag_tool": query = arguments["query"] # Your custom RAG logic here result = f"Custom RAG result for {query}" return CallToolResult( content=[TextContent(type="text", text=result)] )
ステップ4:LLMバックエンドを統合する
作成するファイル:src/servers/llm_server.py(新しいファイル)
システムにはすでに、GeminiとカスタムローカルホストAPIの両方をサポートする柔軟なLLMクライアント(src/core/llm_client.py)が含まれています。
-
既存のLLMクライアントを使用する:
src/core/gemini_rag_agent.pyのFlexibleRAGAgentはすでに以下をサポートしています。- Google Gemini API
- カスタムローカルホストAPI(OpenAI互換形式)
-
カスタムLLMサーバーを作成する(オプション):LLM操作のための専用MCPサーバーが必要な場合は、以下のように作成します。
import asyncio from mcp.server import Server from mcp.server.stdio import stdio_server from mcp.types import Tool, TextContent, CallToolResult server = Server("llm-server") @server.list_tools() async def handle_list_tools(): return ListToolsResult( tools=[ Tool( name="process_natural_language", description="Convert natural language to tool calls", inputSchema={ "type": "object", "properties": { "query": {"type": "string"} }, "required": ["query"] } ) ] ) @server.call_tool() async def handle_call_tool(name: str, arguments: dict): if name == "process_natural_language": query = arguments["query"] # Integrate with OpenAI, Gemini, or local models # Convert natural language to appropriate tool calls return CallToolResult( content=[TextContent(type="text", text=f"Processed: {query}")] ) -
requirements.txtに追加する:
openai>=1.0.0 google-genai>=0.3.0 httpx>=0.24.0
ステップ5:新しいデータソースを追加する
変更するファイル:src/servers/business_analytics_server.py と src/servers/rag_server.py
-
データベースコネクター:以下のデータベースに接続するツールを追加します。
- PostgreSQL、MySQL、SQLite
- MongoDB、Redis
- データウェアハウス(Snowflake、BigQuery)
-
API統合:ビジネスシステムに接続します。
- CRMシステム(Salesforce、HubSpot)
- マーケティングプラットフォーム(Google Analytics、Facebook Ads)
- 財務システム(QuickBooks、Xero)
現在のツール実装
ビジネス分析ツール(src/servers/business_analytics_server.py):
calculate_mean- 数値列の平均を計算します。calculate_std- 標準偏差を計算します。calculate_correlation- 変数間の関係を見つけます。linear_regression- 予測モデルを構築します。get_data_info- データセット情報を取得します。
RAGツール(src/servers/rag_server.py):
get_business_terms- ビジネス定義を検索します。get_company_policies- ポリシー情報を取得します。search_business_knowledge- 一般的な知識検索を行います。
LLM統合(src/core/llm_client.py):
FlexibleRAGAgent- GeminiとカスタムローカルホストAPIの両方をサポートします。LLMClient- 両方のバックエンドのAPI通信を処理します。- ツール呼び出しと会話管理
モジュール式アーキテクチャの利点
モジュール式設計により、以下のことが可能になります。
- コンポーネントを交換:他のサーバーに影響を与えることなく、任意のサーバーを交換できます。
- 機能を追加:既存のコードを書き換えることなく、新しいツールを追加できます。
- 独立してスケール:異なるサーバーを異なるマシンで実行できます。
- ユースケースごとにカスタマイズ:必要なツールのみを使用できます。
拡張例
センチメント分析を追加する
作成するファイル:src/servers/sentiment_analysis_server.py
# Create sentiment_analysis_server.py
@server.list_tool()
async def analyze_sentiment(text: str) -> CallToolResult:
# Integrate with sentiment analysis API
# Return sentiment scores and insights
予測を追加する
変更するファイル:src/servers/business_analytics_server.py
# Add to handle_list_tools() function
Tool(
name="time_series_forecast",
description="Forecast future values using time series analysis",
inputSchema={
"type": "object",
"properties": {
"column": {"type": "string"},
"periods": {"type": "integer"}
}
}
)
ドキュメント処理を追加する
作成するファイル:src/servers/document_processor_server.py
# Create document_processor_server.py
@server.list_tool()
async def process_document(file_path: str) -> CallToolResult:
# Extract text from PDFs, Word docs, etc.
# Add to knowledge base
アーキテクチャ
プロジェクト構造
MCP-RAG/
├── data/
│ ├── sample_business_data.csv # 分析用のビジネスデータセット
│ └── business_knowledge.txt # RAG知識ベース
├── src/
│ └── servers/
│ ├── business_analytics_server.py # 統計分析ツール
│ └── rag_server.py # 知識検索ツール
├── main.py # デモとオーケストレーションスクリプト
├── test_scenarios.py # 会話シナリオ
├── requirements.txt # 依存関係
└── README.md # このファイル
主要コンポーネント
- ビジネス分析サーバー:統計分析ツールを提供するMCPサーバー
- RAGサーバー:ビジネス知識検索用のMCPサーバー
- オーケストレーション層:サーバーとLLM(将来的に)の間を調整する
- データ層:サンプルビジネスデータと知識ベース
設定
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
LLM_MODE |
LLMバックエンドモード:"gemini" または "custom" | gemini |
GEMINI_API_KEY |
LLM統合のためのGemini APIキー | なし |
GEMINI_MODEL |
Geminiモデル名 | gemini-2.0-flash-exp |
CUSTOM_API_URL |
カスタムローカルホストAPIのURL | http://localhost:8000 |
CUSTOM_API_KEY |
カスタムAPIキー(オプション) | なし |
サンプルデータ
システムには以下が含まれています。
- 四半期ごとのビジネスデータ:4四半期にわたる販売、マーケティング、エンジニアリングのメトリック
- ビジネス知識ベース:用語、ポリシー、分析ガイドライン
🎯 ユースケース
ビジネスリーダー向け
- ノーコード分析:ビジネスデータに関する自然言語の質問をすることができます。
- 迅速な洞察:技術的な専門知識なしで統計分析を取得できます。
- コンテキストを考慮したレポート:データ分析とビジネス知識を組み合わせることができます。
データチーム向け
- モジュール式アーキテクチャ:新しい分析ツールを簡単に追加できます。
- LLM統合:自然言語クエリ処理の準備ができています。
- 拡張可能なフレームワーク:特定のニーズに合わせたカスタムエージェントを構築できます。
AIエンジニア向け
- MCPプロトコル:最新のAIオーケストレーションパターンを学ぶことができます。
- RAG実装:知識検索システムを理解できます。
- エージェンティック設計:マルチエージェントAIワークフローを構築できます。
🚀 将来の拡張
計画されている機能
- [ ] LLM統合:Gemini、OpenAI、またはローカルモデルと接続する
- [ ] 自然言語クエリ:複雑なビジネス質問を処理する
- [ ] 高度な分析:時系列分析、クラスタリング、予測
- [ ] Webインターフェース:非技術的なユーザー向けの使いやすいダッシュボード
- [ ] リアルタイムデータ:ライブデータソースに接続する
- [ ] カスタム知識ベース:会社固有のドキュメントをアップロードする
統合の可能性
- ローカルLLM API:Local LLM API を使用してオープンソースモデルを使用する
- データベースコネクター:SQLデータベース、データウェアハウスに接続する
- API統合:Salesforce、HubSpot、Google Analytics
- ドキュメント処理:PDF、DOCX、メール分析
🤝 コントリビューション
これはエージェンティックAIシステムを構築するための基礎です。コントリビューションを歓迎します。
- 新しい分析ツール:統計手法、MLモデルを追加する
- 知識ベースの拡張:ビジネスドメイン、業界固有のコンテンツを追加する
- LLM統合:異なるAIモデルのサポートを追加する
- ドキュメント:チュートリアル、ユースケース、ベストプラクティスを追加する
📄 ライセンス
MITライセンス - 自由に使用し、独自のプロジェクトで変更してください!
🔗 関連プロジェクト
- Local LLM API:オープンソースLLMをローカルで実行する
- MCPプロトコル:公式ドキュメント
あなた独自のエージェンティックAIシステムを構築準備はできていますか? この基礎から始めて、特定のニーズに合わせて拡張してください。モジュール式設計により、新しい機能を追加しながらクリーンなアーキテクチャを維持することが容易です。
#AgenticAI #MCP #RAG #BusinessAnalytics #OpenSourceAI







