AI組織化による計算支援

オープンCAE勉強会
2026年1月31日
片山 達也
オープンCAE勉強会@関西
第106回 オープンCAE勉強会

🤖 ai-masa - 分散マルチエージェント LLM システム 進捗

🌟 プロジェクト概要

ai-masa は、複数のLLMエージェントが協調してタスクを遂行する、分散型のマルチエージェントシステムです。

通信基盤に Redis Pub/Sub を採用し、各エージェントは独立したプロセスとして動作します。

エージェント間の対話履歴や個々のエージェントの状態は Redis (RedisJSON) 上の MemoryManager によって一元管理され、永続化されます。

ユーザーからの指示は UserInputAgent を通じて入力され、目的に応じて設定された多様な思考エージェント(GeminiCliAgent, OpencodeAgent, RoleBasedAgentなど)が応答を担います。

LoggingAgent が全ての通信を記録し、後から対話内容を確認・分析することが可能です。

HP

第106回 オープンCAE勉強会

⚙️ システムアーキテクチャ

ai-masaは、Pub/Subモデルに基づいた柔軟なマルチエージェントアーキテクチャを採用しています。
中心的なメッセージブローカー(Redis)を介して、各エージェントが他のエージェントと非同期に通信します。

graph TD
    subgraph "User Interaction"
        UserInput[UserInputAgent]
    end

    subgraph "Core Infrastructure"
        Broker[(Redis Pub/Sub)]
        Memory["MemoryManager 
(RedisJSON)"] end subgraph "Agent Layer" Agent1["Thinking Agent A
e.g., GeminiCliAgent"] Agent2["Thinking Agent B
e.g., RoleBasedOpencodeAgent"] AgentN["... and so on"] end subgraph "System Agents" Logger[LoggingAgent] Manager[AgentManager] end UserInput -- "Publish" --> Broker Broker -- "Subscribe" --> Agent1 Broker -- "Subscribe" --> Agent2 Broker -- "Subscribe" --> AgentN Broker -- "Subscribe" --> Logger Broker -- "Subscribe" --> Manager Agent1 -- "Publish" --> Broker Agent2 -- "Publish" --> Broker Agent1 -- "Read/Write" --> Memory Agent2 -- "Read/Write" --> Memory UserInput -- "Read/Write" --> Memory
  • UserInputAgent: ユーザーからのテキスト入力を受け取り、指定されたターゲットエージェントにメッセージを送信します。
  • Thinking Agents: それぞれが特定の役割や能力を持つエージェント群です。LLM(Gemini, OpenAIなど)と対話し、思考や応答生成を行います。
  • LoggingAgent: システム内を流れる全てのメッセージを購読し、ファイルに記録します。
  • AgentManager: 各エージェントの稼働状況を監視します。
  • Redis Pub/Sub: エージェント間のメッセージングを担うブローカーです。
  • MemoryManager: RedisJSONを利用して、各対話の履歴(メモリ)やエージェントの状態を永続化・管理します。
第106回 オープンCAE勉強会

📦 セットアップ

1. 前提条件

2. 環境構築

  1. リポジトリをクローン
    git clone https://github.com/your-username/ai-masa.git
    cd ai-masa
    
第106回 オープンCAE勉強会

📦 セットアップ

  1. Redisサーバーの起動
    プロジェクトルートで以下のコマンドを実行し、RedisをDockerコンテナとして起動します。

    docker compose up -d
    
  2. Python依存関係のインストール
    仮想環境を作成し、必要なライブラリをインストールします。

    python -m venv .venv
    source .venv/bin/activate
    pip install -e .
    
第106回 オープンCAE勉強会

📦 セットアップ

3. ユーザー設定の作成

本プロジェクトでは、Gitで管理されるデフォルト設定 (.default ファイル) と、ユーザーが自由に編集できるローカル設定 (.yml ファイル) を分離しています。

初回起動前に、以下のコマンドを実行して、デフォルト設定をコピーして自分用の設定ファイルを作成してください。

cp config/agent_library.yml.default config/agent_library.yml
cp config/team_library.yml.default config/team_library.yml
cp config/orchestration.yml.default config/orchestration.yml
  • agent_library.yml: 使用するエージェントの定義リストです。
  • team_library.yml: エージェントを組み合わせてチームを定義します。
  • orchestration.yml: どのチームを、どのtmuxinatorテンプレートで起動するかを定義します。

これらの .yml ファイルは .gitignore によりGitの追跡対象外となっているため、自由に変更・追加して自分だけのチームや起動構成を作成できます。

第106回 オープンCAE勉強会

🚀 実行方法

エージェントチームの起動

orchestrate.shスクリプトは、tmuxinator を使って設定に基づいた tmux セッション内で全てのエージェントを自動的に開始します。
プロジェクトのルートディレクトリで、エイリアスを定義した後、以下のコマンドでチームを起動できます。

# 環境変数の読み込み
env .env
# '3pane' という名前のテンプレートで起動
./orchestrate.sh 3pane

実行後、新しい tmux セッションがアタッチされます。各ペインでエージェントのログを確認でき、UserInputAgent のペインからメッセージを送信できます。

第106回 オープンCAE勉強会

実行の様子

alt text

agent_window

第106回 オープンCAE勉強会

📄 ログ可視化ツール

ai-masa は、エージェント間の会話ログをLINEのような対話形式でHTMLファイルとして可視化するツールを提供します。これにより、エージェントの挙動や会話の流れを直感的に把握できます。

1. ツールの場所

ai_masa/tools/log_visualizer.py

2. 機能概要

指定された .jsonl 形式のログファイル(LoggingAgentが出力したもの)を読み込み、登場するエージェントを自動で特定します。各エージェントには、視覚的に区別しやすい背景色と、頭文字から生成されたSVGアイコンが割り当てられます。これらの情報に基づいて、HTML、CSS、SVGファイルを生成します。

第106回 オープンCAE勉強会

📄 ログ可視化ツール

3. 使い方

以下のコマンドを実行して、会話ログをHTMLファイルとして可視化できます。

python -m ai_masa.tools.log_visualizer \
    --log_file /path/to/your/log/file.jsonl \
    --output_dir /path/to/output/directory \
    --title "Your Conversation Title"

引数:

  • --log_file (必須): 可視化したい .jsonl 形式のログファイルへのパスを指定します。LoggingAgent が出力したログファイル(例: works/LoggingAgent/your_project_name/logs/<job_id>.jsonl)を指定してください。
  • --output_dir (必須): 生成された conversation.html ファイル、style.css、および各エージェントの *.svg アイコンファイルが出力されるディレクトリを指定します。指定されたディレクトリが存在しない場合は自動的に作成されます。
  • --title (任意): 生成されるHTMLページのタイトルとして表示される文字列を指定します。デフォルトは "Conversation Log" です。

実行例:

# 例: 特定のjob_idのログを可視化する場合
python -m ai_masa.tools.log_visualizer \
    --log_file works/LoggingAgent/ai_masa_openfoam/logs/5b8d8501-72af-4c35-9f1f-03063ba677bb.jsonl \
    --output_dir html_logs/openfoam_conversation \
    --title "OpenFOAM Simulation with Foamer and FoamManager"

# 出力されたHTMLファイルを開く
# ブラウザで html_logs/openfoam_conversation/conversation.html を開いてください。
第106回 オープンCAE勉強会

AIの議論がはじましました。

続きは、第105回 関西CAE懇話会で発表します。続きが気になる方は聞きに来てください
http://www.cae21.org/kansai_cae/konwakai/kansai_105/kansai105_annai.shtml

※httpでつながらいければ、すみません。

第106回 オープンCAE勉強会

Mermaidを読み込み