6. 主要な処理フローとデータ生成
前提知識レベル:
- シーケンス図の読解能力
- REST APIおよびWebSocketに関する知識
- LLMのFunction Calling(ツール呼び出し)に関する基本的な理解
6.1. 概要
このドキュメントでは、主要なユースケースにおけるコンポーネント間の動的なやり取りと、その過程で実行されるデータ生成のフローを定義します。
本システムのコア機能は、ユーザーの自然言語指示をLLMが解釈し、複数のツールを段階的に呼び出すことで、最終的なネットワークの可視化を実現する点にあります。
6.2. 新規会話開始(ネットワークアップロード)フロー
目的: ユーザーが新しい分析サイクルを開始するために、GraphMLファイルをアップロードして新規会話を作成する処理を定義します。
方針: アップロード処理の一環として、非同期または同期的にデフォルトのレイアウト(Spring Layout)を計算し、その結果を初期表示に利用します。
6.3. 対話によるネットワーク操作フロー
目的: ユーザーの曖昧な自然言語指示(例:「重要なノードを大きくして」)から、LLMが具体的な「計算」と「可視化」のツール呼び出しを推論し、実行する、本システムの最も中心的なフローです。
6.3.1. シーケンス図
このフローでは、計算結果をネットワークの属性として保存しておくことで、同じ計算を何度も繰り返す無駄を省く仕組みも示されています。
6.3.2. データフローと責務詳細 (LLM Function Calling)
ユーザーが「次数が多いノードを大きくして」のような曖昧な指示を出すと、システムは以下の手順でレンダリングデータを更新します。
1. LLMによる複数ステップのツールプランニング
BackendとLLMは、以下のような複数回のやり取りを通じて、段階的にタスクを実行します。
-
1回目のLLM呼び出し:
- Backend → LLM: ユーザー指示
「友達が多い人を大きく表示して」+ ツールリスト - LLM → Backend:
list_attributes()の呼び出しを要求
- Backend → LLM: ユーザー指示
-
2回目のLLM呼び出し:
- Backend → LLM:
list_attributesの実行結果['weight'] - LLM → Backend:
calculate_centrality(type: "degree")の呼び出しを要求 - Backend:
calculate_centralityの実行結果を受けて、自動的にapply_metric_to_visual(metric: "degree_centrality", visual: "node_size", mapping: {scale: 'linear', ...})を実行
- Backend → LLM:
2. Backendによるツール実行と永続化
Backendは、LLMの要求に従ってNetworkXMCPのAPIを呼び出し、結果を正規化されたテーブルに永続化します。
GET /tools/list_attributes:attributesテーブルから属性名の一覧を取得します。POST /tools/calculate_centrality: 計算結果をattributesおよびattribute_valuesテーブルに書き込みます。POST /tools/apply_metric_to_visual: マッピングルールをvisual_mapping_rulesテーブルに書き込みます。
3. Backendによる動的なレンダリングデータ生成
Frontendが /network/{network_id}/visdata を呼び出すと、Backendはリクエストの都度、以下の情報をDBから読み込み、最終的なレンダリングデータを動的に組み立てて返します。
networksテーブルから元のネットワーク構造attributesとattribute_valuesテーブルから全ての属性データ(座標を含む)visual_mapping_rulesテーブルから適用すべき視覚ルール
Backendは、これらの情報を統合し、各ノード・エッジのスタイルを決定して最終的なJSONを生成します。
6.4. ツール呼び出し失敗時のエラーハンドリングフロー
目的: システムが予期せぬ状況(例: 未実装の計算)に陥った場合でも、LLMが状況を理解し、ユーザーに代替案を提示することで、対話を継続できるようにします。