HUOXIU

ユニバーサルAIエージェントの解読:インテリジェントシステムを構築するための7つのステップ

編集者注:多様なシナリオに柔軟に対応し、複雑なタスクを効率的に実行できる汎用インテリジェントエージェントシステムを構築するにはどうすればよいでしょうか?従来のハードコードされたプロセスでは、急速に変化するニーズに対応できなくなり、シンプルなプロンプトのWordテンプレートでは柔軟性に欠けるように見えます。

本稿では、汎用LLMエージェントをゼロから構築するための7つの重要なステップを詳細に解説し、モデルの選択と制御ロジックの設計からツールセットの構築、そしてその後のアクションの計画に至るまで、読者に包括的なパスを提供します。この方法論は、理論的な推論だけでなく、著者の実世界プロジェクトにおける貴重な経験を体現しています。モデルの機能、行動パターン、メモリ管理といった重要な側面を詳細に分析することで、本稿は読者に、汎用AIエージェントを構築するための現実的かつ実装可能な青写真を提示します。

著者 | マヤ・ムラド

編纂者:岳陽

LLM エージェントの概要(画像は原著者提供)

なぜ汎用エージェントを構築するのでしょうか?それは、ターゲットユースケースのプロトタイプを作成し、独自のカスタムエージェントアーキテクチャを設計するための基盤を構築できる優れたツールだからです。

詳しく説明する前に、LLMエージェントについて簡単に紹介しましょう。既にご存知の方は、このセクションを飛ばしていただいて構いません。

01 LLMエージェントとは何ですか?

LLM エージェントは、基礎となるモデルによって実行ロジックが制御されるプログラムです。

スタンドアロンLLMからエージェント機能を備えたシステムへ。(画像は原著者提供)

LLMエージェントは、単純な数回のプロンプトや事前定義されたワークフローとは異なり、ユーザークエリの実行に必要なステップを定義・調整できます。コード実行やWeb検索などのツールセットにアクセスできる場合、エージェントはどのツールをどのように使用するかを自律的に決定し、出力に基づいて反復的に最適化します。この柔軟性により、システムは最小限の設定要件で多様なシナリオに対応できます。

LLMエージェントのアーキテクチャ系統。(画像は原著者提供)

エージェントアーキテクチャは、固定されたワークフローの信頼性から自律エージェントの高い柔軟性まで、様々なバリエーションが存在する。例えば、検索強化生成(RAG)[1]のような定義済みワークフローは、自己反省ループを追加することで改善が可能であり、初期応答が不十分な場合にプログラムが改善できる。一方、ReAct[2]エージェントは、柔軟かつ構造化されたアプローチを実現するためのツールの一つとして、定義済みワークフローを装備することができる。最終的には、アーキテクチャの選択は、具体的なアプリケーションシナリオと、信頼性と柔軟性のバランスの必要性に基づいて決定されるべきである。

より包括的な理解のために、このビデオ[3]をご覧ください。

02 汎用 LLM エージェントをゼロから構築してみましょう。

ステップ1:適切なLLMを選択する

望ましいパフォーマンスを達成するには、適切なモデルを選択することが不可欠です。モ​​デルの選択にあたっては、ライセンス、コスト、言語サポートなど、いくつかの要素を考慮する必要があります。LLMエージェントの構築において最も重要なのは、プログラミング、ツールの呼び出し、論理的推論といったコアタスクにおけるモデルのパフォーマンスです。評価基準は以下のとおりです。

  • 大規模マルチタスク言語理解(MMLU)[4](推論能力評価用)
  • バークレー関数呼び出しランキング[5](ツールの選択と呼び出し能力を評価するため)
  • HumanEval[6]とBigCodeBench[7](プログラミング能力評価に使用)

さらに、モデルの処理ウィンドウのサイズも非常に重要です。エージェントのワークフローは大量のトークン(場合によっては10万を超える)を消費する可能性があるため、処理ウィンドウを大きくすることで処理効率が大幅に向上します。

現在注目すべきモデル(執筆時点)は次のとおりです。

  • フロンティアモデル:GPT4-o[8]、Claude 3.5[9]
  • オープンソースモデル:Llama 3.2[10]、Qwen 2.5[11]

一般的に、モデルが大きいほどパフォーマンスは向上します。ただし、ローカルで実行できる小規模なモデルも良い選択肢です。小規模なモデルは通常、よりシンプルなシナリオに適しており、1つか2つの基本的なツールとのみ連携する場合があります。

ステップ 2: インテリジェント エージェントの制御ロジック (通信構造とも呼ばれます) を定義します。

単一エージェントアーキテクチャの図。(画像は原著者作成)

シンプル大規模言語モデル (LLM) とエージェントの主な違いは、システム プロンプトにあります。

LLMの場合、システムプロンプト[12]とは、モデルがユーザーのクエリの処理を開始する前にモデルに提供される一連の指示と背景情報を指します。

システムプロンプトを使用して、大規模な言語モデルが示すエージェントの動作をエンコードできます。

以下に、特定のニーズに応じて調整できる一般的なエージェントの動作パターンをいくつか示します。

  • ツールの使用: エージェントは、問題を適切なツールに委任するか、独自の知識ベースに頼るかを決定します。
  • 自己反省:エージェントはユーザーに応答する前に、自身の回答をレビューして修正します。ほとんどのLLMシステムでは、この自己反省プロセスも組み込むことができます。
  • 推論してから行動する (ReAct) : エージェントは反復的な推論を通じて問題の解決策を決定し、アクションを実行し、結果を観察し、さらなるアクションが必要か、直接的な回答を提供する必要があるかを決定します。
  • 計画してから実行: エージェントは、タスクを複数のサブステップに分割して事前に計画を立て、これらのステップを 1 つずつ実行します。

一般的な単一エージェントを構築する場合、ReAct と Plan-then-Execute が通常、最適な出発点となります。

一般的なインテリジェントエージェントの行動パターンの概要。(画像は原著者作成)

これらの行動パターンを効果的に実装するには、手がかりとなる言葉を慎重に設計する必要があります。また、構造化生成技術[13]を採用する必要があるかもしれません。これは、LLMの出力を特定の形式またはアーキテクチャに適合するように調整することを意味します。これにより、エージェントの応答が、私たちが追求しているコミュニケーションスタイルと一致することが保証されます。

例えば、以下はBee Agent Framework [14]のReActスタイルのエージェントのシステムプロンプトのスニペットです。

ステップ3: インテリジェントエージェントのコア指示の設定

大規模言語モデル(LLM)は、すぐに使える一連の機能を備えていると思われがちです。これらの機能の中には優れたものもありますが、すべてが私たちの特定のニーズを満たすわけではありません。望ましいパフォーマンスを実現するには、システムプロンプトに含めるべき機能と含めるべきでない機能を明確にリストアップする必要があります。

これには次のような指示が含まれる場合があります。

  • インテリジェント エージェントの名前と責任: インテリジェント エージェントの名前と、エージェントが実行することが期待されるタスク。
  • 言語スタイルと簡潔さ: インテリジェント エージェントが通信時に維持すべき形式性またはカジュアルさのレベル、および伝達される情報の簡潔さ。
  • ツールを使用するタイミング: 外部ツールを使用するタイミングと、モデル独自の知識ベースに依存するタイミングを決定します。
  • エラー処理: ツールの使用中またはプロセスの実行中に問題が発生した場合にエージェントが実行する必要があるアクション。

例:以下はBee Agent Framework[14]の操作ガイドのセクションからの抜粋です。

ステップ4: コアツールセットの定義と最適化

ツールは、インテリジェントエージェントに超能力を与える魔法です。明確に定義された単一のツールセットで、幅広いアプリケーションを実現できます。重要なツールには、コード実行、Web検索、ドキュメント読み取り、データ解析などがあります。

各ツールについて、次の情報を定義し、システム プロンプトに組み込む必要があります。

  • ツール名: この機能に一意でわかりやすい名前を付けます。
  • ツールの説明:ツールの機能と使用タイミングを明確に説明します。これにより、エージェントは適切なツールをいつ選択すべきか判断しやすくなります。
  • ツール入力スキーマ:必須パラメータとオプションパラメータ、パラメータの型、およびすべての制約を定義するフレームワークです。エージェントはこのフレームワークを使用して、ユーザーのクエリに基づいて必要な入力を行います。
  • ユーザーや開発者にツールをどこでどのように使用すべきかを伝えるための指示やガイドラインを提供します。

例えば、以下はLangchainコミュニティ[15]から取得したArxivツール実装のスニペットであり、ArxivAPIWrapper[16]のサポートが必要です。

特定のシナリオでは、望ましいパフォーマンスを実現するために、ツールを最適化する必要があります。これには、サジェストエンジニアリングのためのツール名や説明の微調整、一般的な問題に対処するための高度な設定、ツールの出力のフィルタリングと選択などが含まれる場合があります。

ステップ5: メモリ管理戦略を確立する

大規模言語モデル(LLM)は、コンテキストウィンドウのサイズ、つまり一度に「記憶」できるトークンの数によって制限されます。マルチターンの対話では、過去のやり取り、ツールが出力する長いテキスト、あるいはエージェントが依存する追加のコンテキスト情報によって、メモリが急速に満杯になる可能性があります。そのため、効果的なメモリ管理戦略の開発が不可欠です。

ここでの「メモリ」とは、エージェントが過去のインタラクション情報を保存、取得、活用する能力を指します。この機能により、エージェントは対話のコンテキストを継続的に追跡し、過去の会話に基づいて応答を最適化できるため、よりパーソナライズされたユーザーエクスペリエンスを提供できます。

一般的なメモリ管理戦略は次のとおりです。

  • スライディング メモリ: 最新の k ラウンドのダイアログのメモリのみを保持し、それ以前のダイアログは破棄されます。
  • トークン メモリ: 最新の n 個のトークンのみが記録され、残りは忘れられます。
  • 要約メモリ: 対話の各ラウンドの後に、LLM を使用して対話の内容を要約し、元の情報を破棄します。

さらに、LLMを活用することで重要な瞬間を特定し、長期記憶に保存することができます。これにより、エージェントは重要なユーザー情報を「記憶」することができ、ユーザーエクスペリエンスをよりパーソナライズすることができます。

ここまでに説明した5つのステップは、インテリジェントエージェントを作成するための基盤となります。では、この段階でLLMを使用してユーザークエリを処理するとどうなるでしょうか?

答えは「未処理のテキスト出力が得られる」です。(画像は著者提供)

例は次のようになります。

この時点で、エージェントは生のテキスト出力を生成します。では、エージェントが後続の操作を実行できるようにするにはどうすればよいでしょうか?そのためには、解析とオーケストレーションのメカニズムを導入する必要があります。

ステップ 6: エージェントの生の出力を分析します。

パーサーの役割は、生データをアプリケーションが認識して使用できるデータ形式 (特定の属性を持つオブジェクトなど) に変換することです。

私たちが構築しているエージェントでは、パーサーがステップ2で設定した通信構造を認識し、JSON形式などの構造化されたデータ出力に変換できる必要があります。これにより、アプリケーションはエージェントの後続のアクションをより容易に処理・実行できるようになります。

注: OpenAIなどの一部のモデルベンダーは、デフォルトで直接解析可能な出力を提供しています。他のモデル、特にオープンソースのモデルでは、追加の解析設定が必要になる場合があります。

ステップ7: エージェントのその後のアクションを計画する

最後のステップは、オーケストレーションロジックを確立することです。このロジックは、LLM出力生成後の処理フローを決定します。システムは出力に基づいて、次のいずれかの操作を実行します。

  1. 実行ツールの呼び出し、または
  2. 応答の提供– これはユーザーのクエリに対する直接的な回答である場合もあれば、より多くの情報を得るために尋ねられるフォローアップの質問である場合もあります。

拡張されたシングルエージェントアーキテクチャ図。(画像は原著者提供)

ツール呼び出しがトリガーされると、ツールの出力がLLM(作業メモリの一部として)に送り返されます。LLMは、この新しいデータをどのように利用するか、つまりツール呼び出しを続行するか、それともユーザーに回答を直接返すかを決定します。

このオーケストレーション ロジックをコードで実装する例を次に示します。

ミッション完了!競合分析、詳細な調査、複雑なワークフローの自動化など、さまざまなシナリオに対応できるインテリジェントエージェントシステムが完成しました。

03 マルチエージェントシステムはどのような状況で役立ちますか?

現在のLLMは優れた性能を備えているものの、膨大な情報量の処理には苦労しています[17]。コンテキストが多すぎたり、使用するツールが多すぎたりすると、モデルが過負荷になり、性能が低下する可能性があります。複数の目的のために設計されたシングルエージェントシステムは、特にトークン消費量が多いことが知られているため、最終的にはこの限界に達します。

特定のユースケースでは、マルチエージェントシステムの導入がより適している場合があります。タスクを複数のエージェントに分散させることで、単一のLLMエージェントへのコンテキスト負荷を効果的に回避し、全体的な実行効率を向上させることができます。

それでも、汎用的なシングルエージェントシステムは、プロトタイピングの優れた出発点であり続けます。ユースケースを迅速に検証し、システムの不具合発生時期を特定するのに役立ちます。このプロセスでは、以下のことが可能になります。

  • エージェント モデルを使用して実際に最適化できるタスク ステージを特定します。
  • 独立したプロセスとして分離し、より大きなワークフローの一部にすることができると判断できます。
  • 単一のエージェントから始めることで、他のエージェントから貴重な経験と洞察を得ることができ、より複雑なシステムを構築するときに戦略を調整および最適化できるようになります。

04 始めるにはどうすればいいですか?

エージェントの構築を始めてみませんか? フレームワークを使用すると、エージェントの構成を迅速にテストして反復処理することができます。

  • Llama 3のようなオープンソースモデルを使用する場合は、Bee Agent Framework[18][19]が提供する初期テンプレートを試してみるとよいでしょう。
  • OpenAIのような最先端のモデルを使用する予定の場合は、LangGraph[20]が提供するチュートリアル[21]を試してみると役立つかもしれません。

読んでくれてありがとう!

このブログを楽しんで、新しいことを学んでいただければ幸いです。

著者について

マヤ・ムラド

学際的な技術者で、現在LLMエージェントをいじっています。AI、イノベーション・エコシステム、そしてクリエイティブ・コーディングの実験について書いています。

終わり

今週のインタラクティブコンテンツ🍻

汎用エージェントの構築において、どのような経験を積んできましたか?ぜひコメント欄であなたの知見を共有してください!

🔗記事内のリンク🔗

[1]https://research.ibm.com/blog/retrieval-augmented-generation-RAG

[2]https://www.promptingguide.ai/techniques/react

[3]https://www.youtube.com/watch?v=F8NKVhkZZWI&t=1s

[4]https://paperswithcode.com/sota/multi-task-language-understanding-on-mmlu

[5]https://gorilla.cs.berkeley.edu/leaderboard.html

[6]https://evalplus.github.io/leaderboard.html

[7]https://huggingface.co/spaces/bigcode/bigcode-models-leaderboard

[8]https://platform.openai.com/docs/models#gpt-4o

[9]https://www.anthropic.com/news/claude-3-5-sonnet

[10]https://huggingface.co/collections/meta-llama/llama-32-66f448ffc8c32f949b04c8cf

[11]https://huggingface.co/collections/Qwen/qwen25-66e81a666513e518adb90d9e

[12]https://promptengineering.org/system-prompts-in-large-language-models/

[13]https://python.langchain.com/v0.1/docs/modules/model_io/chat/structured_output/

[14]https://github.com/i-am-bee/bee-agent-framework/blob/main/src/agents/bee/prompts.ts

[15]https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/tools/arxiv/tool.py

[16]https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/utilities/arxiv.py

[17]https://arxiv.org/html/2410.18745v1

[18]https://github.com/i-am-bee/bee-agent-framework

[19]https://github.com/i-am-bee/bee-agent-framework-starter

[20]https://langchain-ai.github.io/langgraph/

[21]https://langchain-ai.github.io/langgraph/how-tos/react-agent-from-scratch/

オリジナルリンク:

https://towardsdatascience.com/build-a-general-purpose-ai-agent-c40be49e7400