MCPドキュメントプロセッサ
モデル コンテキスト プロトコル (MCP) を使用してビジネス ドキュメントを自動的に抽出、分析、ルーティングするインテリジェントなドキュメント処理システム。
プロジェクト概要
このプロジェクトでは、MCPを用いて実際のビジネス課題であるドキュメント処理ワークフローの自動化を解決する方法を示します。このシステムは以下のことが可能です。
受信文書(請求書、契約書、メール)を分類する
MLモデルを使用して関連情報を抽出する
ドキュメントの種類に応じて処理し、処理パイプライン全体でコンテキストを維持し、REST API を通じて機能を公開します。
Related MCP server: MCP PDF Server
主要なMCPコンポーネント
コンテキスト オブジェクト: MCP の中心となるこれらのオブジェクト (
MCPContextで実装) は、処理ステップ間で情報を伝達し、ドキュメントの状態を維持します。メモリ システム: プラグ可能なバックエンドを使用して、処理ステップ間のコンテキスト オブジェクトを保存します。
プロトコル: プロセッサとモデルの明確なインターフェースを定義し、モジュール性を保証します。
ルーター: コンテンツに基づいてドキュメントを専門のプロセッサにインテリジェントにルーティングします。
ビジネス価値
このソリューションは、次のようないくつかのビジネス上の課題に対処します。
手作業の削減: 文書からのデータ抽出を自動化
一貫性: ドキュメントの種類を問わず一貫した処理を保証します
監査可能性: 処理履歴と信頼スコアを維持する
拡張性: モジュール設計により、新しいドキュメントタイプを簡単に追加できます。
技術的なハイライト
分類とエンティティ抽出にBERTベースのモデルを使用する
文書要約のためのT5モデル
RESTインターフェース用のFastAPI
簡単に拡張できるプラグ可能なアーキテクチャ
包括的なログ記録とエラー処理
より良いユーザーエクスペリエンスを実現するReactベースのUI
概要
MCPドキュメントプロセッサは、請求書、契約書、電子メールなど、様々な種類のドキュメントを一貫性と自動化をもって処理するという、ビジネスにおける一般的な課題を解決するために設計されています。モデルコンテキストプロトコルフレームワークを活用し、システムの様々なコンポーネント間の情報フローを管理します。
主な特徴
文書分類: 文書の種類を自動的に識別します
情報抽出: 文書から重要な情報を抽出します
ドキュメントルーティング: 適切なプロセッサにドキュメントをルーティングします
コンテキスト管理: 処理パイプライン全体でコンテキストを維持します
APIインターフェース:他のシステムとの統合のためのRESTful APIを提供します
建築
このシステムは、以下を提供するモデル コンテキスト プロトコル (MCP) を中心に構築されています。
コンテキストオブジェクト: 処理ステップ間で情報を伝達する
# Example of MCPContext usage context = MCPContext( document_id=document_id, raw_text=text, metadata=metadata ) # Adding extracted data with confidence scores context.add_extracted_data("invoice_number", "INV-12345", confidence=0.95) # Tracking processing history context.add_to_history( processor_name="InvoiceProcessor", status="completed", details={"processing_time": "0.5s"} )メモリシステム: API呼び出し間のコンテキストオブジェクトを保存します
# Storing context in memory memory.store(document_id, context) # Retrieving context from memory context = memory.retrieve(document_id)プロトコル: プロセッサとモデルのインターフェースを定義する
# Processor protocol example class Processor(Protocol): @abstractmethod def process(self, context: MCPContext) -> MCPContext: """Process the document and update the context.""" pass @abstractmethod def can_handle(self, context: MCPContext) -> bool: """Determine if this processor can handle the given document.""" passルーター: 適切な専門プロセッサにドキュメントをルーティングします
# Router usage example processor = processor_router.route(context) if processor: processed_context = processor.process(context)
MCPフロー図
MCP実装の詳細
このプロジェクトにおけるモデルコンテキストプロトコルの実装には、いくつかの重要な利点があります。
1. コンテキストの永続性を備えたステートフル処理
MCPContextクラスは、ドキュメント処理ライフサイクル全体にわたって状態を維持します。
2. プラガブルメモリシステム
メモリ システムはプラグ可能に設計されており、さまざまなストレージ バックエンドを可能にします。
3. 信頼度の追跡
MCP は抽出されたすべてのデータの信頼スコアを追跡し、より適切な意思決定を可能にします。
4. 処理履歴
各処理ステップはコンテキストの履歴に記録され、監査可能性を実現します。
5. インテリジェントなドキュメントルーティング
ProcessorRouter 、各ドキュメントに適切なプロセッサを決定します。
6. 拡張性
Processorプロトコルを実装すると、新しいドキュメント タイプを簡単に追加できます。
ドキュメントプロセッサ
システムには、さまざまなドキュメント タイプ専用のプロセッサが含まれています。
請求書プロセッサ: ベンダー、顧客、明細項目、合計などを抽出します。
契約プロセッサ: 当事者、重要な日付、条件などを抽出します。
電子メール プロセッサ: 送信者、受信者、件名、本文などを抽出します。
機械学習モデル
さまざまなタスクに複数の ML モデルが使用されます。
文書分類器: 文書タイプ分類のためのBERTベースのモデル
エンティティ抽出器: 重要な情報を抽出するための固有表現抽出モデル
サマライザー: 文書要約を生成するためのT5ベースのモデル
ユーザーインターフェース
MCP Document Processorには、ドキュメント処理システムを直感的に操作できるReactベースの最新ユーザーインターフェースが搭載されています。UIはMaterial-UIで構築されており、以下の機能を提供します。
UI機能
ダッシュボード: 処理されたドキュメントの概要、統計情報、ドキュメントの詳細へのクイックアクセス
ドキュメントのアップロード: 新しいドキュメントをアップロードするためのドラッグアンドドロップインターフェース
文書処理:文書を処理するためのステップバイステップのワークフロー
ドキュメントビューア: 抽出された情報を含む処理済みドキュメントの詳細表示
処理履歴: 監査可能性のためにすべての処理ステップをタイムラインで表示します
UIアーキテクチャ
フロントエンドは以下で構築されています:
React : ユーザーインターフェースコンポーネントの構築用
Material-UI : 一貫性のあるレスポンシブなデザイン
React Router : 異なるビュー間のナビゲーション用
Axios : バックエンドとのAPI通信用
Chart.js : ドキュメント統計のデータ視覚化
UI-バックエンド統合
フロントエンドは、次の主要なエンドポイントを使用して、RESTful API を介してバックエンドと通信します。
GET /api/documents: すべてのドキュメントを取得するPOST /api/documents/upload: 新しいドキュメントをアップロードするPOST /api/documents/{document_id}/process: ドキュメントを処理するGET /api/documents/{document_id}: ドキュメントの詳細を取得するDELETE /api/documents/{document_id}: ドキュメントを削除する
完全なシステムアーキテクチャ
MCP ドキュメント プロセッサは、フロントエンド、API レイヤー、処理コンポーネント、機械学習モデルを統合した階層型アーキテクチャに従います。
完全なワークフロー
ドキュメント処理ワークフローには、システム コンポーネント全体にわたる複数のステップが含まれます。
ドキュメントのアップロード:
ユーザーはUIを通じてドキュメントをアップロードします
フロントエンドはドキュメントをバックエンドAPIに送信します
バックエンドはドキュメントメタデータを持つMCPContextオブジェクトを作成します
コンテキストはメモリシステムに保存されます
文書分類:
ユーザーはUIを通じて処理を開始する
バックエンドはメモリからドキュメントのコンテキストを取得します
ドキュメント分類モデルはドキュメントの種類を決定します
コンテキストはドキュメントタイプ情報で更新されます
文書処理:
プロセッサルータはドキュメントの種類に基づいて適切なプロセッサを選択します
選択されたプロセッサ(請求書、契約書、または電子メール)がドキュメントを処理します
プロセッサはエンティティ抽出器を使用して重要な情報を識別する
抽出されたデータは信頼スコアとともにコンテキストに追加されます
結果取得:
更新されたコンテキストはメモリに保存されます
UIは処理された文書情報を取得して表示します
ユーザーは抽出されたデータ、信頼スコア、処理履歴を表示できます。
監査とレビュー:
すべての処理手順はコンテキストの処理履歴に記録されます
UIは抽出されたデータの信頼スコアの視覚化を提供します
ユーザーは抽出された情報と一緒に文書のテキストを確認することができます
はじめる
前提条件
Python 3.8以上
Node.js 14+ と npm (フロントエンド用)
requirements.txt にリストされている依存関係
インストールとセットアップ
バックエンドのセットアップ
リポジトリをクローンする
git clone https://github.com/yourusername/mcp_document_processor.git cd mcp_document_processor仮想環境を作成してアクティブ化する
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateバックエンドの依存関係をインストールする
pip install -r requirements.txtドキュメント保存用のデータディレクトリを作成します(存在しない場合)
mkdir -p data
フロントエンドのセットアップ
フロントエンドディレクトリに移動する
cd frontendフロントエンドの依存関係をインストールする
npm install
アプリケーションの実行
バックエンドサーバーを起動する
プロジェクトのルート ディレクトリから (仮想環境が有効になっている):
python app.pyこれにより、 http://localhost:8000で FastAPI サーバーが起動します。
APIドキュメントはhttp://localhost:8000/docsからアクセスできます。
フロントエンド開発サーバーを起動する
新しいターミナルウィンドウ/タブを開く
フロントエンドディレクトリに移動します。
cd /path/to/mcp_document_processor/frontendReact 開発サーバーを起動します。
npm startこれにより、 http://localhost:3000でフロントエンドが起動します。
アプリケーションの使用
ブラウザを開き、 http://localhost:3000にアクセスします。
サイドバー ナビゲーションを使用して次の操作を実行します。
ダッシュボードを見る
新しい文書をアップロードする
ドキュメントの詳細を処理して表示する
ワークフローの例
ドキュメントをアップロード:
サイドバーの「ドキュメントをアップロード」をクリックします
ドキュメント(PDF、画像、またはテキストファイル)をドラッグアンドドロップします
「ドキュメントをアップロード」ボタンをクリックします
ドキュメントを処理する:
アップロードが成功したら、「ドキュメントを処理」をクリックします。
処理が完了するまでお待ちください
結果を表示:
抽出されたデータ、信頼スコア、処理履歴を表示する
ダッシュボードに移動して、処理済みのすべてのドキュメントを確認します。
APIの使用
API と直接やり取りすることもできます。
GET /api/documents: すべてのドキュメントを取得するPOST /api/documents/upload: 新しいドキュメントをアップロードするPOST /api/documents/{document_id}/process: ドキュメントを処理するGET /api/documents/{document_id}: ドキュメントの詳細を取得するDELETE /api/documents/{document_id}: ドキュメントを削除する
システムの拡張
新しいドキュメントプロセッサの追加
BaseProcessorを継承する新しいプロセッサ クラスを作成するcan_handleとprocessメソッドを実装するapi/routes.pyでルーターにプロセッサを追加します。
新しいモデルの追加
適切なプロトコルを実装する新しいモデルクラスを作成する
config/config.yamlに設定を追加するモデルを関連プロセッサと統合する