LLM 搭載エージェント向けの 人気のオープンソース フレームワークの紹介

現在の生成AIのトレンドのひとつに、大規模言語モデル（LLM）を搭載したエージェントの開発があります。

「エージェント」とは、環境を認識し、行動を起こすことができる自動化されたシステムを意味します。

LLMの文脈では、[「AI Agents That Matter」](https://arxiv.org/abs/2407.01502)（重要なAIエージェント）と題された最近の学術論文で説明されており、AIエージェントという単語は主に以下の条件の最低1つが当てはまる場合に使用されます：

- 周囲の環境が複雑で、潜在的なタスクは無限にある
- 自然言語で指示を与えることができる
- 人間からの限定された監督、または監督なしで行動することができる
- システムが外部ツールを使用できる
- システムの制御フローが動的である

このブログの目的は、LLMを搭載したエージェントを実装するために使用される、最も人気のあるオープンソースのPythonフレームワークを紹介することです。

以下のフレームワークに焦点を当て、それらの類似点と相違点を説明します：

- [LangGraph](https://langchain-ai.github.io/langgraph/)：LangChainエコシステムの一般的な低レベルライブラリ
- [LlamaIndex](https://docs.llamaindex.ai/en/stable/)：検索補強LLMパイプラインの実装に特化したフレームワーク
- [AutoGen](https://microsoft.github.io/autogen/0.2/)：LLMアプリケーションを複数のエージェント間の会話としてモデル化するフレームワーク
- [CrewAI](https://www.crewai.com/): ユーザの使いやすさを重視したマルチエージェントフレームワーク

## すべてのフレームワークに共通する特徴

まず、これらのフレームワークは、定義済みの実行ロジックを実装する可能性を提供します。実行ロジックは、エージェントがタスクを完了するための、LLM完了クエリ、ツール呼び出し、ユーザインタラクションのシーケンスを定義します。[ReAct](https://arxiv.org/abs/2210.03629) はエージェントの実行ロジックの一般的な例です。上記のすべてのフレームワークは、開発者がカスタマイズした実行ロジックを作成することもできます。

もう一つの重要な特徴は、エージェントが環境と対話するために使用できるツールを定義できることです。エージェントの観点からは、ツールは単にプロンプトに記述され、特定の入力パラメータで呼び出され、テキスト出力を返す関数です。典型的なツールは、検索エンジン、ウェブブラウザ、コードインタプリタ、メッセージングサービスなどです。すべてのフレームワークで、開発者は既製のツールを使用し、カスタマイズしたツールを簡単に作成することができます。

また、少なくとも **human-in-the-loop**（人間がシステムの中に組み込まれている）機能も含まれています。エージェントは、特にタスクを実行するために比較的多くのステップを踏む必要がある場合、エラーを起こしやすいです。これは、エージェントが情報を返すだけでなく、副作用（例えば、顧客のアカウントに影響を与える管理タスク）を引き起こすツールを使用する場合、特に心配となります。このような状況では、要求されたタスクについて明確な質問をしたり、機密性の高いアクションを取る前に確認を求めたりするために、人間のユーザーを関与させることが重要とされています。

技術的な側面での特徴としては、すべてのフレームワークが、LLM APIから別のAPIに簡単に切り替えられる柔軟性をユーザーに残している点です。これらのフレームワークはOpenAI APIとの統合を提供しており、その延長として、開発者はますます一般的になっているOpenAI互換のAPIに接続することができます。さらに、カスタムLLMを定義するのは比較的簡単で、他にもいくつかのLLM統合が利用可能となっています。

最後に、4つのフレームワークの残念な共通点は、エージェント評価機能があったとしても、限られていることです。ユースケースによって、エージェントによって提供された最終的な答えだけを評価したい場合もあれば、中間ステップを含む軌跡全体を評価したい場合もあります（特に副作用のあるツールが使用されている場合）。4つのフレームワークは、開発者がエージェントの軌跡を完全に記録することを可能にしますが、これらの4つの潜在的なシナリオを包含する評価機能を含むものはありません。

## シングルエージェントかマルチエージェントか？
CrewAIとAutoGenはマルチエージェントであり、LlamaIndexはシングルエージェントに焦点を当てています。マルチエージェントシステムでは、複数の特化されたエージェントが共通の目的を達成するために協力します。システムの実行ロジックは、エージェント間の「会話」として構成されます。例えば、エージェントは次々と「発言」したり、「マネージャ」エージェントがエージェントに指示を出したりすることができます。

ユースケースに必要なすべての機能を単一のエージェントに持たせることが不可能、あるいは現実的でない場合、単一のエージェントを複数のエージェントに置き換えることは理にかなっています。例えば、ターゲットとなるすべての機能の指示と例を含むプロンプトは、LLMにとって非常に複雑であったり、単にコンテキストウィンドウには大きすぎるかもしれません。単一のエージェントを管理する方が概念的には単純ですが、複数のエージェントを組み合わせる方がよりモジュール化できます。独立した特化したエージェントを開発・テストし、それらを組み合わせることで、ユースケースの複雑さに合わせてより良くスケールさせることができます。

シングルエージェントフレームワークは、複数のエージェントをモデル化することも可能です。なぜなら、エージェントをツールとしてパッケージ化し、別のエージェントが利用できるようにすることができるからです。このように、シングルエージェントフレームワークとマルチエージェントフレームワークの違いは、その表現力よりも開発者の経験にあります。

## エージェントフレームワークの特徴
ここで、このブログポストで取り上げる各フレームワークの特徴に焦点を当てます。

### LangGraph

LangGraphは最近、人気のあるLangChainエコシステムでエージェントを実装する方法として好まれるようになりました。LangChainにはいくつかのエージェント関連機能が含まれていますが、その多くは非推奨であり、近い将来削除される予定です。LangGraphの特長は、任意のエージェント実行ロジックを簡単に実装できることです。この実行ロジックは、エージェントの状態が時間とともにどのように変化するかを指定するグラフとして宣言されます。例えば、以下のグラフは、ある機密性の高いツールについて、人間のユーザの検証を要求するツール拡張エージェントに対応します。

LangGraphの主な特徴は以下の通りです：
- 非常にきめ細かなエージェントの動作制御
- LangChainエコシステムとのシームレスな統合（特に、非常に多くの利用可能なビルトインツール）
- モニタリングやエラーリカバリーのために、エージェントの過去と現在の状態をキャプチャするチェックポイントの作成
- 個々のアクションの関連性を評価するためのエージェントの軌跡の評価（ただし、完全な軌跡のグランドトゥルースが利用可能な場合は対象外です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/3f1ac87c-4602-6118-1b05-0f535c5a9479.png)

### LlamaIndex

LlamaIndexは、外部データソースに依存するLLMアプリケーションの作成に特化したフレームワークです。LlamaIndexは、これらのデータソースをより良く活用するために、多くのオプションの中からエージェントを作成する可能性を提供します。なお、LlamaIndexチームは現在[llama-agents](https://www.llamaindex.ai/blog/introducing-llama-agents-a-powerful-framework-for-building-production-multi-agent-ai-systems)を開発中です。これは「生産的なマルチエージェントAIシステムを構築するための強力なフレームワーク」ですが、初期段階であるため、このブログ記事では取り上げません。

LlamaIndexの最も特徴的なエージェントの特徴は以下の通りです：

- 直接使用できるいくつかの設定済みエージェント（関数呼び出しエージェント、ReActエージェント、言語エージェント木探索やChain-of-Abstractionのようなより高度なエージェントアルゴリズム）
- 他のLlamaIndexコンポーネントとの互換性、特にLlamaIndexデータクエリーエンジンに基づいたツールの作成が可能です

### AutoGen

AutoGenはMicrosoftによって開発されたマルチエージェント・フレームワークです。その中心的な高レベル抽象化は会話であり、マルチエージェントシステムの実行ロジックに相当します。AutoGenの特筆すべき特徴は以下の通りです：

- 様々な複雑さのエージェントワークフローを作成する柔軟性を与える、幅広い会話パターン（例えば、複数のエージェントによるグループチャット、ネストされたチャット、話者選択など）
- 一人または複数の人間ユーザを関与させるためのいくつかのオプション
- エージェントに自動生成されたコードを実行させるために、いくつかのオプション（ローカルシェル、Dockerシェル、Jupyterカーネル）を提供する組み込みのコード実行コンポーネント

### CrewAI

CrewAIは開発者に優しいマルチエージェントフレームワークです。CrewAIは、マルチエージェントシステムを特殊化されたエージェントの「クルー」として表現し、タスク、プロセス、コラボレーション、管理、計画、委任など、人間のチームに適用可能な概念を抽象化しています。CrewAIは、特に以下の機能を提供します：

- シンプルかつ柔軟な方法でのエージェントとそのインタラクションの定義
- 4つのオプション（短期記憶、長期記憶、実体記憶、文脈記憶）によるエージェントの記憶管理
- LangChain LLM、LangChainツール、LlamaIndexツールとの互換性

## 結論
LLMを利用したエージェントの利用は、実際のユースケースでは新しいものですが、エージェントアプリケーションを実装するための選択肢は既にあります。このブログでは、異なる強みを持つ4つのエージェントフレームワークを紹介しました。

現段階での一般的な推奨は以下の通りです：

- 実行ロジックを非常に細かく定義する必要がある場合には、LangGraphを使う
- LlamaIndexは、特に開発スピードと保守性が柔軟性に勝る場合、データ補強型LLMアプリケーション（質問応答アプリケーション等）に使用する
- タスクが自然に区切られたサブタスクに分解される場合は、開発スピードと正確な制御の間の望ましいバランスに応じて、CrewAIまたはAutoGenを使用する

どのようなフレームワークが選択され、現在利用可能なLLMが与えられたとしても、エージェントはどのような場合でももろいままであり、注意深く設計、テスト、監視する必要があります。[Dataiku LLMスターターキット](https://gallery.dataiku.com/projects/EX_LLM_STARTER_KIT/)で説明されているように、Dataikuは様々な機能を通してエージェントアプリケーションの開発をサポートします：

- Dataikuからアクセス可能なすべてのLLMがLangGraph、LlamaIndex、CrewAIで使用できることを保証する[LangChainの統合](https://developer.dataiku.com/13/concepts-and-examples/llm-mesh.html#langchain-integration)
- [関数呼び出し](https://developer.dataiku.com/13/concepts-and-examples/llm-mesh.html#tool-calls)のサポート
- LLMの評価（アーリーアダプタープログラム）
- Python APIを通じてDataikuの様々なオブジェクトにプログラムでアクセスできるため、カスタムツールの作成が容易
- [Webユーザーインターフェース](https://doc.dataiku.com/dss/latest/webapps/introduction.html?_gl=1*dd15f2*_gcl_aw*R0NMLjE3MjM3OTIzNTAuQ2p3S0NBanc4ZnUxQmhCc0Vpd0F3RHJzaktnNnpWNWhjTXpId1NNZFpYNktvQzBxVjQzc3BvVm1PNUxFRmdsLXlLQ29CZTVfU21kbTBCb0MxczBRQXZEX0J3RQ..*_gcl_au*MTY3OTYyODEzOC4xNzI5MDQxNTY3*_ga*NTcxMzM5ODgyLjE3MTI3NTYzNzI.*_ga_B3YXRYMY48*MTcyOTA2MDczOC4zMC4xLjE3MjkwNjQyOTQuNjAuMC4w)の簡単な作成と操作
- MLFlowによる[実験の追跡](https://doc.dataiku.com/dss/latest/mlops/experiment-tracking/index.html?_gl=1*10dl5xx*_gcl_aw*R0NMLjE3MjM3OTIzNTAuQ2p3S0NBanc4ZnUxQmhCc0Vpd0F3RHJzaktnNnpWNWhjTXpId1NNZFpYNktvQzBxVjQzc3BvVm1PNUxFRmdsLXlLQ29CZTVfU21kbTBCb0MxczBRQXZEX0J3RQ..*_gcl_au*MTY3OTYyODEzOC4xNzI5MDQxNTY3*_ga*NTcxMzM5ODgyLjE3MTI3NTYzNzI.*_ga_B3YXRYMY48*MTcyOTA2MDczOC4zMC4xLjE3MjkwNjI3NzEuNjAuMC4w)


## 付録 フレームワークの概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/7d3e73e0-e30e-3b95-a6db-85ed35fc7f07.png)

## 生成AIのテクニカルコンテンツをもっと知りたいですか？

マルチモーダルRAGから量子化、微調整など、Dataikuの社内エキスパートから最新の情報を入手してください。

原文はこちら：[A Tour of Popular Open Source Frameworks for LLM-Powered Agents](https://blog.dataiku.com/open-source-frameworks-for-llm-powered-agents)