Queue設計とCoordinator基盤を作った話






分散AIエージェント環境構築ログ


前回は「分散AIエージェント環境を作りたい」という構想を書いた。

今回はその第一歩として、実際にコードを書いて動かすところまでやってみた。

今回作ったもの

ひとことで言うと、

「AIへの指示をキューに積んで、Workerが非同期で処理する基盤」

を作った。

単純にAIに話しかけて返答をもらうだけでなく、

  • タスクをRedisのQueueに投入
  • WorkerがQueueを監視して処理
  • 結果をPostgreSQLに保存
  • あとから結果を取得

という流れを実現する仕組みだ。

なぜQueueが必要か

LLMの推論は時間がかかる。

小さいモデルでも数秒、大きいモデルになると数十秒以上かかることがある。

普通のAPIのように「リクエストを投げて待つ」だけでは、

  • 複数のタスクを同時に処理できない
  • 重い処理をしている間は他のことができない
  • どのWorkerに処理させるか制御できない

という問題がある。

Queueを挟むことで、

「投げたら忘れる。Workerが勝手に処理してくれる」

形になる。

構成のイメージ

今回作った構成はこんな感じ。


ブラウザ / curl
    ↓
FastAPI Coordinator(AI-Core VM)
    ↓
Redis Queue
    ↓
Worker(ThinkCentre)← 次回ここを作る
    ↓
Ollama(LLM推論)
    ↓
PostgreSQL(結果保存)

AI-Core VMは「頭脳」として司令塔の役割を担う。

推論そのものはWorkerに任せる設計だ。

モデル比較基盤も作った

今回もう一つ作ったのが、複数モデルの結果を比較する仕組みだ。

同じプロンプトを複数のモデルに投げて、結果をPostgreSQLに保存する。


{
  "prompt": "Pythonでfizzbuzzを書いて",
  "models": ["qwen3:8b", "llama3.1:8b"],
  "note": "動作確認テスト"
}

こういうリクエストを投げると、モデルごとにタスクがQueueに積まれる。

Workerが順番に処理して、推論時間も含めて結果が保存される。

「どのモデルが速いか」「どのモデルの回答が良いか」

を後から比較できる環境が整った。

今回の動作確認結果

AI-Core VMでFastAPIを起動して、実際にエンドポイントを叩いてみた。

P50のOllamaに繋がって日本語で返答が返ってきたとき、

「ちゃんと動いている」

という実感があった。

地味な作業ではあるが、パイプラインの骨格ができた感じがする。

次回やること

今回作ったのはCoordinator側だけで、Worker側はまだ未着手だ。

次回はThinkCentreにOllamaを入れて、worker.pyを動かすところまでやりたい。

Workerが動けば、今Queueで待機中の比較タスクが実際に処理される。

地道だけど、少しずつ形になってきている。