【ITニュース解説】I Used Autogen GraphFlow and Qwen3 Coder to Solve Math Problems — And It Worked
2025年09月10日に「Dev.to」が公開したITニュース「I Used Autogen GraphFlow and Qwen3 Coder to Solve Math Problems — And It Worked」について初心者にもわかりやすく解説しています。
ITニュース概要
Autogen GraphFlowとQwen3 Coderを組み合わせ、小中学校から大学レベルの数学問題を解くAIアプリを開発した。LLMがPythonコードを生成し、実行して回答を導く仕組みだ。複数のAIエージェントを連携させることで、複雑な問題も高精度で解決できる。
ITニュース解説
システムエンジニアを目指す皆さんにとって、最近話題の大規模言語モデル(LLM)は非常に興味深い技術だろう。しかし、LLMが何でもできる万能なツールだと思っていると、思わぬ落とし穴に遭遇することがある。特に、数学の問題を直接LLMに解かせようとすると、多くの場合、誤った答えを出したり、そもそも推論ができなかったりする。これはLLMの設計思想によるもので、LLMは基本的にテキストのパターンを学習して次の単語を予測する「トークン生成モデル」であり、厳密な数値計算や論理的な推論を直接得意とするわけではないからだ。彼らは、訓練データに含まれる数学の問題と答えのパターンを記憶しているだけで、実際に計算をしているわけではないのだ。
しかし、LLMの得意分野を活かせば、この問題を克服できる。LLMはプログラミングコード、特にPythonコードの生成においては非常に高い能力を発揮する。そこで、数学の問題を直接解かせる代わりに、問題を解くためのPythonコードをLLMに書かせ、そのコードを実行することで正しい答えを導き出す、というアプローチが考えられる。
今回紹介する事例では、このアイデアを具体化するために、Autogenの最新機能である「GraphFlow」と、コード生成に特化した「Qwen3 Coder」というLLMモデルを組み合わせたマルチエージェントアプリケーションが構築された。このシステムは、小学校レベルから大学レベルまでのあらゆる数学問題を正確に解くことに成功している。
このシステムの核心にあるのは、複数の「エージェント」が協力して一つの複雑なタスクをこなす「マルチエージェントシステム」という考え方だ。各エージェントはそれぞれ特定の、より簡単な「原子的な(Atomic)」タスクだけを担当する。例えば、あるエージェントはコードを書くことだけ、別のエージェントは書かれたコードを実行することだけ、というように役割を明確に分ける。これにより、各エージェントは自分の専門分野に集中でき、間違いが減り、LLMが的外れな回答(ハルシネーション)をするリスクも低くなる。また、各エージェントへの指示(プロンプト)も短くシンプルにできるため、開発効率も向上する。
このシステムでは、主に以下の三つのエージェントが連携して動作する。一つ目は、ユーザーからの問題を理解し、解決策を計画し、実行可能なPythonコードを生成する「コーダーエージェント」だ。このエージェントには、コード生成に特化したQwen3 Coderモデルが割り当てられている。二つ目は、コーダーエージェントが生成したPythonコードを実際に実行する「実行エージェント」だ。このエージェントは、コードを安全に実行するために「Docker Executor」という仕組みを利用する。Dockerは、アプリケーションを隔離された環境で実行するための技術であり、生成されたコードがシステムに悪影響を与えるのを防ぐ。Pythonの実行環境には、数学計算に必要なNumPyやSciPyといったライブラリがあらかじめインストールされており、様々な数学問題に対応できる。三つ目は、コーダーエージェントが書いたコードと実行エージェントが得た結果をチェックする「レビューアエージェント」だ。このエージェントには、思考やコードレビューに適したQwen3 30bモデルが使われる。
初期のプロトタイプでは、これらのエージェントを「RoundRobinGroupChat」というシンプルな仕組みで連携させていた。これは、エージェントが順番に発言し続けるチャットのような形式で、特定の条件(例えば「COOL」というメッセージが含まれたら停止する)が満たされるまでループする。簡単な問題であればこのプロトタイプでも動作したが、複雑な問題になると課題が見えてきた。
その課題とは、コーダーエージェントが「問題解決の計画を立てる」と「コードを書く」という二つの異なる役割を同時に担っていたため、難しい問題に対して適切な計画を立てられず、結果として誤ったコードを生成してしまうことだった。また、レビューアエージェントも「コードのチェック」と「最終的な回答の作成」という複数の役割を兼ねていたため、回答が不明瞭になることがあった。
この問題に対処するため、エージェントの役割をさらに細分化し、新たに二つのエージェントが追加された。一つは、問題解決のための具体的なステップを計画することだけに特化した「シンカーエージェント」だ。このエージェントはシステムの「脳」として機能し、複雑な問題を段階的なアプローチに分解する。これにより、コーダーエージェントはシンカーエージェントの計画に厳密に従ってコードを書くことに集中できる。もう一つは、最終的な回答を学生に分かりやすい自然言語で作成することに特化した「ライターエージェント」だ。このエージェントは、実行エージェントが生成した正しい結果とコーダーエージェントのコードロジックに基づき、人間が理解しやすい形で回答をまとめる。これにより、レビューアエージェントはコードの検証にのみ集中できるようになる。
このようにエージェントの役割を細分化することで、より複雑なワークフローが必要になった。そこで登場するのが「Autogen GraphFlow」だ。これは、エージェント間のタスクの流れを事前に設計できるフレームワークで、LangGraphやCrewAIといった他のワークフローフレームワークと異なり、LLMがどのエージェントを使うか自身で選ぶというよりは、開発者が意図した通りの処理の流れを定義できる点が企業アプリケーションに適している。GraphFlowの特筆すべき機能は二つある。一つは「メッセージフィルタリング」機能で、次のエージェントに渡すメッセージを必要な情報だけに絞り込むことで、無駄な情報を減らし、ハルシネーションの発生を抑制する。例えば、コード実行が失敗した場合のフィードバックはコーダーエージェントにのみ送られ、成功したコードと結果はライターエージェントに送られる、といった具合だ。もう一つは「エッジグルーピング」機能で、複数の異なる経路からのメッセージが特定のノード(エージェント)に到達した際に、そのノードがいつ実行されるかを柔軟に制御できる。これにより、複雑な条件分岐やループ処理を含むワークフローも構築可能となる。
この強化されたワークフローと役割分担によって、最終的に構築されたマルチエージェントシステムは、DeepSeek V3.1のような大規模なLLM単体よりも、数値計算問題において優れた精度を発揮することに成功した。これは、LLMの弱点を特定し、その得意なコード生成能力と、複数のエージェントを協調させることで克服できることを示している。システムエンジニアを目指す皆さんにとって、これはLLMを単なるチャットボットとしてではなく、より複雑な問題を解決するための強力なツールとして活用する上で、非常に示唆に富む事例と言えるだろう。