AIエージェントのボトルネックはモデルではなく、アーキテクチャだった。
3ヶ月前、クライアントのワークフローが停止した。
私は、ドキュメントの分類、タグ付け、要約を行うために、1つのエージェントを使用していた。1日50件程度のドキュメントであれば問題なく動作していたが、件数が500件に達したとき、状況が変わった。
エージェントは1バッチあたり40分かかった。スケーラビリティがなく、システムはクラッシュした。
私はより大きなモデルに切り替えるのではなく、エージェントを3つの専門的な役割に分割した。そして、これらの役割を並列で実行させた。
スループットは40分から4分へと劇的に改善した。モデルは同じまま、アーキテクチャを変えただけだ。
多くの開発者は、逐次的な(sequential)エージェントを構築するという間違いを犯す。1つのエージェントがすべてのタスクを順番にこなしていく方式だ。
もし500件のドキュメントがあり、1件につき3つのタスクがある場合、1,500回のLLMコールを一つずつ順番に行うことになる。たとえ1回のコールが2秒だとしても、50分間待つことになる。モデルのほとんどの時間は「待ち」に費やされてしまうのだ。
解決策は、並行して動作する専門特化したエージェントを使用することだ。
- より小さく、焦点を絞ったシステムプロンプトを使用する。
- 独立したタスクを同時に実行する。
- ディスパッチャー(dispatcher)を使用してタスクを管理する。
専門特化したエージェントは、高速かつ低コストだ。特定のタスクにおいては、厳密なプロンプトを用いた小型モデルの方が、大規模な汎用モデルよりも優れたパフォーマンスを発揮する。
ただし、すべてを並列化すればよいわけではない。以下の間違いは避けよう。
- 依存関係のあるタスクを並列化しないこと。タスクBがタスクAの出力を必要とする場合、それらは順番に実行しなければならない。
- 極めて小さなタスクを並列化しないこと。エージェントを管理するためのオーバーヘッドが、タスク自体の実行時間よりも長くなってしまう可能性がある。
- 検索(retrieval)速度を無視しないこと。データベースのルックアップが原因でシステムが遅くなっている場合、LLMコールを並列化しても解決にはならない。
スケーリングさせるには、以下のステップに従うこと。
- まずシステムをプロファイリングする。実際にどこで時間が失われているかを特定する。
- 特定の役割に対して専門特化したエージェントを使用する。
- コードを書く前に、依存関係グラフ(dependency graph)を書き出す。
AIエージェントの構築には、2つの異なる問題がある。1つは「エージェントが何をすることか」、もう1つは「エージェントをどのようにシステムに組み込むか」だ。
本番環境のシステムが成功するか失敗するかは、後者の問題にかかっている。
もし限界に突き当たったら、単に大きなモデルを買うのではなく、まずはシステムのマップを描いてみよう。アーキテクチャこそが真の問題であることに気づくはずだ。
Source: https://dev.to/mrclaw207/my-ai-agent-bottleneck-wasnt-the-model-it-was-the-architecture-2h9m
Optional learning community: https://t.me/GyaanSetuAi
