Aviation Accident Analysis MCP について
航空事故報告書を解析し、文書の内容を組み込んだプロンプトを生成する MCP サービスです。GraphRAG を用いてエンティティと因果関係も抽出し、「人・機械・環境・管理」の枠組みに沿ったナレッジグラフを構築します。
主な機能
- 01PDF、DOCX、TXT の解析と整形
- 02文書内容のプロンプトテンプレートへの挿入
- 03利用可能なプロンプトテンプレートの一覧表示
- 04エンティティと因果関係の抽出
- 05抽出結果の評価
活用シーン
- 01事故報告書を分析用に整える
- 02報告書から抽出用プロンプトを生成する
- 03航空事故の原因ナレッジグラフを構築する
MCP 対応
MCP クライアント向けに、文書解析、プロンプト生成、テンプレート一覧のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
航空事故要因抽出とナレッジグラフプロジェクト(Aviation Accident Analysis)
本プロジェクトは Microsoft GraphRAG フレームワークに基づき、航空事故報告書からエンティティと因果関係を自動抽出し、「人・機・環境・管理」フレームワークに準拠したナレッジグラフを構築することを目的としています。
プロジェクト構成
data/: 元データとランドマークデータ。input/: GraphRAG の入力ディレクトリ(クリーニング済みテキスト)。output/: GraphRAG の出力結果(Parquet、GraphML など)。prompts/: カスタム GraphRAG 抽出プロンプト。src/:ingest.py: PDF/DOCX の解析とテキストのクリーニング。evaluate.py: 抽出精度と F1 スコアの評価スクリプト。
run.sh: ワンクリック実行スクリプト。settings.yaml: GraphRAG の設定ファイル。
環境要件
- Python 3.10+
- uv(推奨)
環境設定に関する注意事項
- LLM の接続エラーが発生した場合は、
settings.yamlのapi_baseが正しく設定されているか確認してください。一部の Docker 環境や制限された環境では、localhostを127.0.0.1に変更することをおすすめします。 - 本プロジェクトでは、
prompts/extract_graph.txtの抽出例を最適化し、複雑なシナリオの例を導入することで、航空事故報告書におけるエンティティ抽出の性能を向上させています。
プロンプトの最適化と評価記録(2026-07-24)
最適化戦略
航空事故報告書の複雑さを考慮し、prompts/extract_graph.txt を複数回にわたって手動で反復最適化しました:
- エンティティの原子化:複雑な句(「燃料配管の破裂」など)をエンティティ「燃料配管」と関係「破裂を引き起こす」に分割するよう徹底し、ナレッジグラフの構造化を促進します。
- 厳格なノイズ除去:否定制約を設け、一般的な職位(単独の「機長」など)や指示代名詞(「当該部品」など)を除外して、適合率を高めます。
- 少数ショットによる強化:
few_shot_data.csvの高品質な航空事故要因連鎖の例を組み込み、モデルが長距離の因果関係を識別できるようにします。 - 因果連鎖の構築を徹底:[要因] -> [事象] -> [結果] の連鎖を必須とすることを明確にします。
評価結果(ファジーマッチ)
scripts/run_automated_evaluation.py を実行して自動評価を行い、data/ground_truth.json と比較した結果、以下の指標が得られました:
| 指標 | エンティティ | 関係 |
|---|---|---|
| 適合率(Precision) | 0.4348 | 0.0556 |
| 再現率(Recall) | 0.7143 | 0.0909 |
| F1 スコア(F1 Score) | 0.5405 | 0.0690 |
結論:エンティティ抽出の適合率と F1 スコアは、ベースライン版と比べて大幅に向上しました。関係抽出はローカルモデルの指示追従能力に制約されており、引き続き改善の余地があります。
MCP サービス(Model Context Protocol)
本プロジェクトでは MCP サービスを提供しており、MCP クライアント(Claude Desktop など)からドキュメント解析とプロンプト生成の機能を直接呼び出すことができます。
主な機能
- ドキュメント解析:PDF、DOCX、TXT 形式の自動解析とクリーニングに対応しています。
- プロンプトへの挿入:解析したドキュメントの内容を、指定したプロンプトテンプレートに自動で挿入します。
起動方法
uv run mcp_server.py
使用可能なツール
upload_and_generate_prompt:- パラメーター
file_path:ドキュメントのパス。 - パラメーター
template_name:prompts/ディレクトリ内のテンプレート名(デフォルトはextract_entities)。
- パラメーター
list_available_templates:使用可能なすべてのプロンプトテンプレートを一覧表示します。
🐳 ワンクリック起動(Docker)
Neo4j データベースと MCP サービスを含む分析環境全体をすばやく起動するには、Docker Compose を使用できます:
docker-compose up -d
起動後:
- Neo4j コンソール:http://localhost:7474(デフォルトのアカウント:
neo4j、パスワード:password) - MCP サービス:コンテナー内で実行され、コンテナー内の Neo4j に自動接続されます。
実行手順
- 事故報告書(PDF/DOCX/TXT)を
data/input_reportsに配置します。 - パイプラインを実行します:
bash run.sh
Ollama の使用(ローカル LLM)
settings.yaml の completion_models と embedding_models を変更します:
completion_models:
default_completion_model:
model_provider: openai
api_base: http://localhost:6006/v1
model: llama3 # 或其他模型
api_key: ollama # 占位符
注意:GraphRAG のローカルモデルへの対応は、モデルの指示追従能力によって異なります。
抽出スキーマ(人・機・環境・管理)
- エンティティタイプ:人(person)、機材(equipment)、環境(environment)、組織(organization)、手順(procedure)、事象(event)、天候(weather)、違反(violation)。
- 関係タイプ:引き起こす(leads to)、制約される(limited by)、違反する(violates)、実行されない(not executed)、所属する(belongs to)。
Neo4j へのナレッジグラフのインポート
- 本プロジェクトは、GraphRAG が抽出したエンティティと関係を Neo4j グラフデータベースにインポートできます。
src/export_to_neo4j.pyスクリプトを使用してインポートします。- Neo4j インスタンスを実行する Docker コンテナーが設定済みです。正常に接続できることを確認してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。