前回は「分散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で待機中の比較タスクが実際に処理される。
地道だけど、少しずつ形になってきている。