2503_AIagent_thum.gif

2025.03.11

読了時間:5分

AIエージェントを試してみる

A2B_102 (2).png

國田圭佑

どうも!sodaエンジニアの國田です。

突然ですが、エージェント型AIシステム(AIエージェント)というものをご存知でしょうか?

簡単に説明しますと、AIが自律的に判断して行動を行うプログラム、つまり「エージェント」と呼ばれるAIが、あらかじめ与えられたタスクや目的を達成してくれるシステムのことです。
単にタスクを順番に実行するだけでなく、周囲の状況や利用者の指示などをもとに自ら行動方針を決定し、最適解を探索するように設計されています。

たとえば、複数のAIモデルやプログラムを組み合わせて情報収集・分析・実行を繰り返すことで、単なるツールというよりも「自律的に振る舞う存在」に近い形で活用できるのが特徴です。

このAIエージェント、最近非常に盛んに研究されているのですが、実際にエンジニアとしてコーディングしてみると非常に複雑で、実証実験のためのコーディング(バックエンド・フロントエンド含む)はかなり複雑です。

というのは、そもそもAIエージェントには以下のような問題があります。

  1. AIモデルの統合
    エージェントが自律的に判断するためには、モデルの推論だけではなく、周辺の制御ロジックや状態管理システム、さらには異なる種類のAIモジュールを連携させる必要があります。これらをコードレベルで正確かつ効率的に結合する作業は、単独のモデル開発よりも格段に複雑になります。

  2. データの収集・処理パイプラインの構築
    実験レベルのプロジェクトでも、データの入出力を管理するためにバックエンド側のAPIやデータベースを整備しなければなりません。さらに、フロントエンドからのユーザー入力や外部APIから取得する情報など、多岐にわたるソースを適切に処理・変換し、AIが扱える形式にする必要があります。

  3. フロントエンドのUI/UX設計
    エージェントが行う推論や自律的なタスク実行の結果を、ユーザーが分かりやすく受け取れるようにするためには、UI/UX設計が重要です。特にデバッグや評価を行う段階では、フロントエンドに可視化機能や操作インターフェースを実装して、エージェントの動作を正しくモニタリングできる環境を用意する必要があります。

その他、リアルタイム制御やセキュリティ・拡張性の問題などもあるのですが、そういった諸々の問題を含め、AIエージェントの構築というのは、エンジニア的に非常に厄介なプロセスとも言えます。

ただ、一方で、最近の生成AI界隈は、オープンソースが非常に充実しており、上記の問題を軽減させることも可能になっています。
Microsoftが公開している「Multi-Agent-Custom-Automation-Engine-Solution-Accelerator」というリポジトリは、MVP(Minimum Viable Product)のベースとして、フロントエンドおよびバックエンドの仕組みがある程度揃っており、AIエージェントを最小単位で動かせるソースコードを提供してくれています。

今回は、このリポジトリを改造して、実際にAIエージェントを試してみたいと思います。

AIエージェントのざっくりイメージ

まずは一旦、「AIエージェント」についてざっくりとした理解を深めておきましょう。
以下の図をご覧ください。

2503_AIagent_3.gif

ユーザーは、タスクの指示を「グループマネージャー」と呼ばれるAIに送ります。グループマネージャーは、その指示を解析し、適切に分割・振り分けたうえで、複数のAIエージェントにタスクを割り当てます。各エージェントは、それぞれ異なる専門的な役割を持っており、例えば、エージェントAは情報収集、エージェントBは分析や計算、エージェントCはレスポンスの作成を担当します。これらのエージェントは連携しながら処理を進め、最終的な結果をユーザーに返します。また、各エージェントは、それぞれの役割に応じた機能(例えば、分析用の関数や情報収集の処理)を備えており、効率的にタスクを遂行します。

実際に弄ってみる

以上の内容を踏まえ、実際にリポジトリを触ってみたいと思います。
このリポジトリでは、あらかじめ複数のエージェントが構築されています。

今回は、以下の2つのシナリオで検証を行います。

① 新人プログラミングエンジニア向けの研修を実施する

② 私の筋トレプログラムおよび食事の提案をしてもらう

主に登場するエージェントは以下の通りです。

  • GroupChatManager:エージェント同士の連携を担当
  • Plannerエージェント:ユーザーの指示を分解し、いくつかのステップに分割してプランを考案
  • HRエージェント:人事関連を担当
  • TechSupportエージェント:インフラ(機器やネットワーク)関連を担当

今回は、上記に加えて、以下のオリジナルエージェントを2つ追加しました。

  • Workoutエージェント:筋トレに関する知識を持つエージェント
  • Nutritionエージェント:食事・栄養に関する知識を持つエージェント

基本的な流れとしては、ユーザーの指示を Plannerエージェント に投げ、Plannerエージェントが計画を立てます。
作成されたプランは複数のステップに分割され、それぞれのステップに対応するエージェントがタスクを遂行する、という構成です。

それでは、順番に見ていきましょう。
せっかくなので、バックエンド側だけでなく、フロントエンドも少し改修して遊んでみました。
元々はライトなイメージの白いUIでしたが、ダークテーマに変更し、さらにアプリのUIもいくつか私の好みに合わせて調整しました。(どこが私が変えた部分か、わかるでしょうか?)

では、実行結果を見ていきます。文章でつらつらと書いてもわかりにくいと思いますので、動画で提供させていただきます。
まずは、【① 新人のプログラミングエンジニア向けの研修を実施する】です。

動作の流れとしては、まずユーザーが命令を入力し、その内容をもとに Plannerエージェント が実際のプランを構築します。
このリポジトリでは、Plannerエージェントが考案したプランに対し、「許可」または「拒否」を選択できます。許可した場合、該当の処理が実行される仕組みです。
また、プランの実行に必要な情報が不足している場合は、ユーザーに確認を取るようになっています。

GroupChatManager の役割は、各エージェントに対してアクションの実行を依頼することです。

上記の動画を見ると、ユーザーが「新人エンジニア向けの研修を実施したい」と要求した際、
まず名前や研修日程などの必要な情報を確認し、その後、以下の処理が順次実行されていることが分かります。

  • HRエージェント によるセッションのスケジューリング
  • TechSupportエージェント によるアカウントの準備、機材の手配

このように、各エージェントが連携しながら研修の準備を進めていき、最終的なタスク予約まで全て完了してくれるという優れものです。

では、続けて、【② 私の筋トレプログラムおよび食事の提案をしてもらう】もやってみましょう。

今回も、Plannerエージェント がプランを立案し、必要な情報をまずユーザーに確認しています。

特に今回は、Workoutエージェント の参考情報として、あらかじめ私のトレーニング履歴を参照するように設定していました。そのため、名前を渡すだけで適切に情報を検索できていることが分かります。

また、トレーニングプランについても、全身を満遍なく鍛える内容が提示されていますね。
特に、BIG3(ベンチプレス・デッドリフト・スクワット) だけでは筋肥大しにくい 大円筋 をターゲットにした ラットプルダウン や、上腕二頭筋 を強化するための バーベルカール が組み込まれている点は大きなポイントです。

食事に関しても、ユーザーの好み(鶏むね肉)を反映したメニューが提案されていますね。
さらに、マクロ栄養素バランス(PFCバランス) を計算する関数も用意していましたが、AIが適切に判断し、必要なタイミングで呼び出していることが確認できました。

実は、筋トレメニューや食事についても ナレッジデータ として事前に組み込んでおり、AIはそこから知識を参照しています。
こうして、仕込んだ知識や関数が適切に動作しているのを見ると、本当に素晴らしいですね。

まとめ

いかがでしたか? 今回は、今話題のAIエージェントを実際に作成し、試してみました。
一言で指示すれば複雑なタスクを解釈して実行してくれるため、自由度が高く、非常に面白い技術だと感じました。

しかし、実際に開発してみると課題も多いことが分かりました。まず、AIエージェント単体では汎用的なタスクをこなせません。ユーザーの指示を理解しても、実行するための具体的なツールがなければ機能しないからです。
そのため、実は、開発者側の苦労として、必要なツールを設計・実装する必要がありました。たとえば、筋トレのメニュー作成や栄養バランスの計算など、AIが適切に動作するために「どんな処理が必要か」を事前にプランニングし、コードを用意しなければならなかったという、なかなか笑えないバックグラウンドがあります。

さらに、ツールを増やせば増やすほどシステムが複雑化し、結果としてユーザーの意図を正しく汲み取ることが難しくなる という問題もあります。今回は流していますが、新人研修の項目では「マイクロソフト365アカウントの手配」や「ウェルカムメールの送信」など、新人の環境や組織による違いというのを100%反映できていません。ツールの選択肢が増えることでAIの対応範囲は広がりますが、その一方で、どのツールをどのタイミングで使うべきかをAIが誤るケースも増え、意図しない動作が発生しやすくなるとも言えます。

昨今、要件定義の重要性がニュースになったりもしますが、AIエージェントの開発においても、この要件定義というのは非常に重要なウェイトを占めている感じがしますね。

「AIが人間に取って代わる」といった話もありますが、現状ではむしろ逆で、AIを使うためのツールを開発し続ける必要がある限り、人間の関与は不可欠 です。というか、むしろAIが発展してからのほうが、AIエンジニアの仕事は爆発的に増え、エンジニアが対応すべき業務はむしろ増加の一途を辿っています。
例えば、

    • AIを活用した新しいシステムの設計・開発(企業がAIを導入する際のカスタマイズやAPI連携)
    • AIによる自動生成コードの検証・修正(AIが書いたコードの品質を担保するためのテストやデバッグ作業)
    • AIと従来のシステムの統合(既存システムにAIを組み込むためのコードリファクタリングやマイグレーション)
    • セキュリティやコンプライアンス対応(AIが生成したコードの脆弱性チェックやガイドライン適用)
    • AIが対応できない領域の手作業(複雑なビジネスロジックや特殊な要件への対応)

    また、AIを導入する企業が増えたことで、システムアーキテクチャの設計やインフラ管理など、AIを活かすためのエンジニアリング業務も拡大しています。(実は、私もそれに伴い、クラウドエンジニアの資格を取得したという背景があります。)

    AIの発展に伴い、エージェントが全て解決してくれると思いきや、何故だか仕事の増える自己矛盾・・・特にAIエンジニアは自分が作ったAIに苦しめらるということが発生しています。 
    ・・・と、なんだか愚痴っぽくなってしまいましたね!

    すみません!ジムでAIに考えてもらったメニューをこなしてスッキリしてきます!!
    ではまた!

    RELATED POST

    2502_VLM_thum.gif
    • Tech Blog
    • 技術説明

    2025.01.22

    【ボディビルの掛け声】筋肉系AIエンジニアが生成AIを最大限活用してみた。【Vision Language Model】

    筋肉大好き!AIエンジニアの國田です!!いきなりで大変恐縮ですが、皆さま、こちらをご覧ください。 これは、画像を認識する生成AI(Vision Language Model)を使い、画像に対応したボディビルの掛け声を生成できるようにチューニングを施したものです。 「ボディビルの掛け声って何?」という...

    ChatGPT_GIS02_thum.webp
    • Tech Blog
    • 技術説明

    2024.07.04

    ChatGPTでできる地理情報分析: エリア特性の深堀り

    こんにちは。sodaデータプランナーの吉田です。 前回はChatGPTでできる地理情報分析と題して、名古屋市の人口推移を地図上に可視化し、さらに人口増減率に焦点を当てたレポートを作成しました。 人口増加率の大きいトップ3の地区:東区、中区、緑区 人口減少率の大きいトップ3の地区:港区、南区、北区 こ...