はじめに
個人開発しているAI自動売買システム「Stock Predictor」のアーキテクチャを改良しました。
これまでは「日本株」「米国株」「仮想通貨」の3つのエージェントが直列(順番)に動いていましたが、これを完全並列化し、さらにログ表示を3画面分割にしてリアルタイム性を高めました。
改善ポイント1: エージェントの並列実行 (Multi-threading)
これまでは for ループで各エージェントを順番に処理していたため、例えば「米国株エージェント」がAPI通信で待たされると、「仮想通貨エージェント」の判断も遅れるという課題がありました。
今回、Pythonの threading モジュールを使用して、各エージェントを独立したスレッドで動作させるように変更しました。
# services/auto_trading_agent.py (抜粋)
def start(self):
# 各エージェントごとにスレッドを起動
for config in self.agents_config:
name = config['name']
thread = threading.Thread(target=self._run_agent_loop, args=(config,), daemon=True)
thread.start()
# 資産評価用のバックグラウンドスレッドも起動
self.portfolio_thread = threading.Thread(target=self._run_portfolio_monitor, daemon=True)
self.portfolio_thread.start()
これにより、仮想通貨のような動きの速い市場に対しても、他のエージェントの影響を受けずに即座に反応できるようになりました。
改善ポイント2: ログ表示のグリッド化
並列化に伴い、ログも混ざってしまうと見づらいため、フロントエンド(React)の表示を一新しました。
これまでの「タブ切り替え」方式をやめ、3つのエージェントのログを横並び(グリッド)で同時表示するようにしました。
変更後のUI
- 上段: システム全体の通知(System Notification)
-
下段: 3カラム構成で各エージェントのログを表示
- JP Agent (日本株)
- US Agent (米国株)
- Crypto Agent (仮想通貨)
/* frontend/src/AgentPanel.css */
.agents-logs-grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3等分 */
gap: 15px;
}
まとめ
今回のアップデートで、システムがより「マルチエージェント」らしくなりました。
画面上で3つのAIがそれぞれ独立して市場を監視し、判断を下している様子を眺めるのは、開発者として非常にワクワクします。
次は、各エージェント間の連携(例:米国株の暴落を検知したら、日本株エージェントも警戒モードに入るなど)を実装していきたいと考えています。