アーキテクチャ
JUMONは、NATSをメッセージングのバックボーンとして使用したマイクロサービスアーキテクチャで構築されています。
システムコンポーネント
flowchart TD subgraph NATS["サーバー / NATSメッセージング"] end Client[クライアント] JUMON[JUMON.md] Module[module service] Chat[chat service] Tool[tool service] Script[script service] Event[event service] %% クライアント接続 Client -->|"実行"| JUMON Client -->|"接続"| NATS %% JUMON.mdからモジュールへ JUMON -->|"処理"| Module %% NATSを介したサービス接続 Module <-->|"via NATS"| NATS Chat <-->|"via NATS"| NATS Tool <-->|"via NATS"| NATS Script <-->|"via NATS"| NATS Event <-->|"via NATS"| NATS %% サービス間の直接接続 Module -->|"呼び出し"| Script Event -->|"トリガー"| Script Script -->|"利用"| Tool Script -->|"通信"| Chat classDef client fill:#607d8b,stroke:#455a64,color:white,stroke-width:2px,font-weight:bold classDef module fill:#34a853,stroke:#1e8e3e,color:white classDef chat fill:#ea4335,stroke:#c5221f,color:white classDef tool fill:#fbbc05,stroke:#f29900,color:white classDef script fill:#9c27b0,stroke:#7b1fa2,color:white classDef event fill:#4285f4,stroke:#174ea6,color:white classDef jumon fill:#ff9800,stroke:#e65100,color:white,stroke-width:2px classDef nats fill:#4285f4,stroke:#174ea6,color:white,stroke-width:2px,stroke-dasharray: 5 5 class Client client class Module module class Chat chat class Tool tool class Script script class Event event class JUMON jumon class NATS nats
クライアント-サーバーモデル
JUMONはクライアント-サーバーアーキテクチャを採用しています:
- JUMONクライアント:ユーザーが操作するコマンドラインインターフェース
- JUMONサーバー:モジュール、スクリプト、ツールの実行を管理するバックグラウンドサービス
クライアントとサーバーは、信頼性の高いリクエスト-レスポンスとパブリッシュ-サブスクライブパターンを提供する軽量なメッセージングシステムであるNATSを介して通信します。
サーバーに接続されていない場合、JUMONは依存関係なしで実行できるように、一時的なサーバーインスタンスを自動的に起動します。
NATSとは?
NATSは、モダンな分散アプリケーション向けに設計された、シンプルで安全、高性能なメッセージングシステムです。クラウド、オンプレミス、エッジ、モバイル環境間での通信を可能にします。NATSはJetStreamを通じてリアルタイムデータストリーミングと耐障害性のあるストレージをサポートし、複数のプログラミング言語で公式クライアントを提供しています。主要企業で本番環境に広く使用されており、100%オープンソースです。
NATSは単なるメッセージングを超えて、現代のアプリケーションに不可欠な包括的な機能群を提供します。同期通信のためのリクエスト-リプライパターン、設定とメタデータのための永続的なキーバリューストア、大きなバイナリデータを扱うためのオブジェクトストレージをサポートしています。このオールインワンアプローチにより、複数の異なるシステムを必要とせず、分散アプリケーションを構築するための統一されたプラットフォームを提供します。
コアサービス
JUMONは、システムの特定の側面を担当する複数のマイクロサービスで構成されています:
チャットサービス (
chat
):LLMプロバイダーとの通信を管理- 複数のプロバイダー(OpenAI、Anthropic、Google)をサポート
- ストリーミングレスポンスを処理
- ツールの呼び出しとレスポンスを管理
ツールサービス (
tool
):ツールの実行を管理- 異なるツールタイプ(WASM、NATS、スクリプト)をサポート
- ツールリソースを管理
- ツールの入力と出力を検証
スクリプトサービス (
script
):スクリプトの実行を管理- スクリプトの内容を解析
- スクリプトの実行フローを管理
- スクリプトの入力と出力を処理
モジュールサービス (
module
):モジュールを管理- ローカルファイルまたはGitリポジトリからモジュールを読み込み
- モジュールのインポートを管理
- モジュール内のスクリプト実行を調整
イベントサービス (
event
):イベントを管理- イベントのサブスクリプションを処理
- イベントを適切なハンドラーにルーティング
- イベントの永続性を管理