はじめに
単一のエージェントではなぜ不十分で、なぜ複数エージェントのシステムを構築する必要があるのか。この問題はよく聞かれます。私はその理由として二つの要因を考えています。一つ目は、エージェントシステムというのは、実際にはLLMを用いたシステムだという点です。また、LLMはそれぞれ得意分野が異なります。例えば、Claudeはコーディングが得意で、Geminiは推論が得意です。使用している環境によっては、一つのモデルだけでは足りない場合があります。二つ目は、ユーザーのクエリが複雑な場合がある点です。こうしたクエリや質問を解決するには、複数のステップが必要になることがあり、各ステップで異なるLLMを使う場合があります。以上が、マルチエージェントシステムの必要となる理由です。
構築
私のシステムでは、レシピの生成やユーザーの複雑な問題への対応において、より良い生成結果を出すためにマルチエージェントを用いるよう設計しました。例えば、ユーザーが「糖尿病を患っていて気持ちも落ち込んでいる。今日は晩ご飯に何を食べたほうがいいか」と質問をした場合、どう回答すればよいでしょうか。この問題は実際には三つの側面があります。心理的情報、病気、そしてレシピ・栄養の側面です。この問題を解決するだけなら単一のエージェントでも対応できると思いますが、各側面をそれぞれのエージェントに担当させれば、回答の精度を上げられます。さらに、専門特化したLLMを使えば、例えば医療論文を学習済みのLLMを医師エージェントとして用いることで、一般的なLLMと比べて、より正確な生成結果を出せる可能性があります。このアイディアに基づいて、このマルチエージェントを設計しました。
以下の図を説明します。

私のシステムは複数のLLMを使います。推論(Reasoning)モデルと非推論(Reasoning)モデルを使い分けています。推論モデルの特徴は、生成時にまず内容トークンではなく推論トークンを生成し始め、推論プロセスの後に内容の生成を開始する点です。このモデルは非推論モデルと比べて、生成は遅い一方で品質が高い傾向があります。そこで私はこの特徴を活かし、この推論モデルにSupervisorとSummaryの二つの役割を持たせています。まず、ユーザーが複雑なクエリを入力すると、Supervisor(推論モデル)が問題を分析し、各エージェントが解決できる小さな問題に分割します。次に、そのサブ問題を専門エージェントへ送ります。専門エージェント(非推論モデル)がそれぞれ解決した生成結果を、最後に推論モデルがもう一度統合し、最終的な回答を生成します。専門エージェントは非推論モデルを使っています。この複数のエージェントを構築するために、LangGraphというフレームワークを使っています。このフレームワークの良い点は、各LLMの生成結果を可視化できる点です。そのため、バグを取り除く際、どの段階でどのLLMの生成に問題があるかをすぐに把握できます。
最後
エージェントシステムはLLMの能力と密接に関係しています。より性能の高いLLMを使えば、より良いエージェントを構築できます。現在はさまざまマルチモーダルエージェントがあり、例えば画像を認識でき、音声を理解てき、文章も理解できます。また、現時点で最も高度なエージェントの例としては、自動運転やロボットが挙げられると思います。