アーキテクチャ
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):イベントを管理- イベントのサブスクリプションを処理
- イベントを適切なハンドラーにルーティング
- イベントの永続性を管理