HUOXIU

次世代エージェント:動的コンテキストの計り知れない可能性を引き出す

編集者注:この記事では、動的なコンテキストを最適化することでAIエージェントの効率と精度を向上させる方法について詳しく説明します。まず、5つの一般的な技術戦略(メッセージのラベル付け、ニーズに応じた異なるコンテキストの設定、システムプロンプトの最適化、RAGシステムにおける冗長情報の合理化、その他コンテキスト処理のための高度な戦略)について概説します。

次に、著者は技術的な実装の詳細とそこから得られた教訓をいくつか共有します。これらの教訓は、実世界の運用環境におけるマルチエージェントチームとの長期にわたる共同作業から生まれたものですが、シングルエージェントシステムにも広く適用でき、示唆に富んでいます。

本稿では、AIエージェントは固定のプロンプト語を用いて自身を定義するだけでなく、独自の動的なコンテキスト設定も備えるべきであると強調しています。コンテキストの種類を明確に分類し、各AIエージェントごとに異なるコンテキスト設定をカスタマイズすることで、AIエージェントの応用可能性は大きく拡大します。本稿で解説した動的なコンテキスト設定は、AIエージェントのシステムアーキテクチャにおける氷山の一角に過ぎません。読者の皆様は、このトピックについてより深い議論にご参加ください。

著者* フランク・ヴィットカンプフ

編纂者:岳陽

AIエージェント間には大きな違いがしばしばある(画像出典:MidJourney)

01 はじめに

AIエージェントの行動は、主に2つの要素によって決定されます。 (1) 実行される基盤モデル(2) そのモデルに入力されるコンテキスト情報です。コンテキスト情報の入力方法は、エージェントのパフォーマンスに直接影響します。実際、同じモデルを使用していても、異なるコンテキスト入力によってエージェントの行動パターンが異なる場合があります。では、エージェントに必要な「コンテキスト情報」とは一体何でしょうか?詳細については、以下の「コンテキストの種類」の図を参照してください。

この記事では、AIエージェントの特定のニーズに基づいてコンテキスト情報を最適化し、効率性と精度を向上させる一連の高度なエージェント戦略について詳しく解説します。まず、5つの一般的な技術戦略を概説し、続いて実装の詳細を説明します。ここで得られた教訓は、実世界の運用環境におけるマルチエージェントチームとの長期的な協業経験から得られたものですが、これらの経験はシングルエージェントシステムにも広く適用でき、指針となる重要な意味を持ちます。

AIエージェントに関係するコンテキストカテゴリー(画像は原著者提供)

02 コンテキスト情報要件の理解

オンラインの例やチュートリアルの多くは、コンテキスト情報の扱いを簡略化している傾向があります(例:コンテキストの長さを固定値に設定するなど)。しかし、実際のAIアプリケーションでは、より繊細で洗練された手法が必要です。

それぞれのエージェントは、手元のタスクに応じて、コンテキスト情報に対するニーズが大きく異なります。最新の情報のみを必要とするエージェントもいれば、正確な応答を保証するために大量の履歴データに頼る必要があるエージェントもいます。こうした違いがあるため、各エージェントごとにパーソナライズされたコンテキスト管理戦略を開発する必要があります。

以下は、ユーザーと 2 つのエージェント (ソフトウェア開発用のエージェントとソフトウェア テスト用のエージェント) 間の通信シナリオです。

 1 ユーザー: 「アップロードしたファイルから私が書いたソート機能を改善してください」 2 System_prompt_for_coder: 「あなたはソフトウェア開発者です。ユーザーが
開発..."3 コーディングエージェント: "ファイル読み取り関数"4 関数応答: "コーディングスニペット: ```返されたコード```"5 コーダー用システムプロンプト: "あなたはソフトウェア開発者です。ユーザーが
開発..."6 コーディングエージェント: "あなたのコードに...と...を追加してコードを改善しました。
ここに新しい関数があります..."7 System_prompt_for_reviewer: "あなたはソフトウェアコードレビュー担当者です..."8 Code_reviewer_agent: "改善されたコードをレビューした後、
コードに追加したいことがあといくつかあります..."9 System_prompt_for_coder: "あなたはソフトウェア開発者です。ユーザーが
開発..."10 Coding_agent: "..." 

上記のケースでは、コンテキストの構成が明らかに冗長かつ非効率的です。複数の対話には不要な情報(システムプロンプトなど)が重複しており、各エージェントは自身のスコープを超えたコンテキストコンテンツを受け取っています。したがって、コンテキスト管理を改善するためのいくつかの戦略を理解する必要があります。

03 戦略1: メッセージのラベル付け

メッセージのラベル付けは、タスク実行におけるAIエージェントの対話パフォーマンスを調整・向上させるための重要な手法です。各会話の情報にメタデータタグを付与することで、エージェントのタスクにとって最も重要な情報をインテリジェントに選択することができます。この戦略は、以下のいくつかの主要な手法に基づいています。

  • 関連性ラベル:各情報には、現在のやり取りや将来のコミュニケーションとの関連性を反映したラベルを付与する必要があります。これは、情報内容の詳細な分析と、エージェントの意思決定プロセスへの潜在的なメリットの評価を伴います。例えば、質問、意思決定ポイント、独自の洞察を含む情報は、関連性が高いとラベル付けする必要があります。
  • 永続的なラベル付け:情報の適時性と関連性に基づいて分類することは非常に重要です。基礎的な決定(行動計画や議論の基盤となる中核的な決定であり、後続のステップに大きな影響を与え、基本原則、目標、方向性を確立することが多い)やマイルストーンコミュニケーション(高速道路のマイルストーンのように、プロジェクトが重要な目標を達成したか、新しいフェーズに入ったことを示すもの)などの情報は長期的な価値を持ち、異なる会話を通して継続的に保持する必要があります。一方、一度限りの使用を目的としたシステムメッセージは、特定のコンテキストで短時間のみ必要とされます。即時の関連性がなくなったら、AIエージェントのメモリから削除する必要があります。
  • ソースと関連付けのラベル付け:このステップでは、各情報のソース(特定のエージェント、ユーザーインタラクションプロセス、機能実行フロー、その他の手続きプロセスなど)を明確にします。このラベル付けにより、明確で追跡しやすい履歴記録システムが確立され、エージェントはソースや現在のタスクとの関連性に基づいて必要な情報を迅速に見つけて参照できるようになります。

関連情報のメタデータにスマートラベルを適用することで、スマートな選択が可能になります。その後、いくつかの実用的な例を紹介します。

04 戦略2: AIエージェントのさまざまなニーズに合わせて異なるコンテキストを設定する

各エージェントは異なるタスクを担うため、状況に応じた要件も当然大きく異なります。少量の情報で実行できるエージェントもあれば、エラーのない動作を保証するために大量の状況情報を必要とするエージェントもあります。この戦略は、前述の情報識別戦略をさらに応用したものです。

重要なコンテキストの特定:エージェントにとって最も重要な情報を特定し、これらの要素の処理を最適化することでモデルの応答精度を向上させることに注力することが重要です。前述の通信シナリオの8行目を例に挙げると、コードレビューに使用されるエージェントは、作業を正確に完了するために必要なコンテキストはごくわずかです。実際、提供されるコンテキストが必要な範囲を超えると、処理結果が不十分になる可能性があります。

では、実際にはどのようなコンテキストが必要なのでしょうか。一見すると、コードレビューに使用されるエージェントは、システムプロンプトとその直前の最後のエージェントメッセージ(最新バージョンのコードを含む、6 行目)にのみ焦点を当てる必要があることがわかります。

つまり、各AIエージェントは、必要な会話履歴(コンテキスト)のみを選択するように設定する必要があります。例えば、コードレビューエージェントは最新の2つのメッセージのみを参照しますが、コードライティングエージェントはそれをサポートするためにより長いコンテキスト履歴を必要とします。

戦略3: システムプロンプトを最適化する

コマンド配置戦略:エージェントとシステムプロンプトについて議論すると、システムプロンプトの配置が重要であることは明らかです。システムプロンプトは、ダイアログシーケンスの最初に配置するべきでしょうか、それとも最後に配置するべきでしょうか?明確な答えはまだなく、実際の効果は具体的なアプリケーションシナリオによって異なります。情報処理とフィードバックを最も効果的に促進する配置設計を検討してください。

 1) ユーザー: 「木曜日にファウチ医師の診察を受け、…と診断されました。」
2) システム:「ユーザープロンプトからすべての医学的関連情報を抽出する」 

または

 1) システム:「ユーザープロンプトからすべての医学的関連情報を抽出する」2) ユーザー:「木曜日にファウチ医師の診察を受け、…と診断されました」 

より大規模で複雑な対話履歴でこれを実験してみると、同じプロンプトであっても配置によって結果が異なることがわかるでしょう。しかし、一つ確かなことは、システムプロンプトは特定の場所に意識的に配置すべきであり、その決定はエージェントの特性と実際のアプリケーションシナリオに基づいて行うべきだということです。

注:私の経験では、システムプロンプトをダイアログシーケンスの最後のメッセージにすべきかどうかは、使用する大規模言語モデル(LLM)に大きく依存します。一般的には、最後に配置するのが良い選択です(情報抽出タスクなど、例外もあります)。

永続性に関する考慮事項:システムプロンプトの配置に加えて、ほとんどの場合、システムプロンプトが「一時的」としてマークされていることを確認する必要があります。ここでの「一時的メッセージ」とは、その機能が完了すると、会話ログ(コンテキスト)に残らないことを意味します。

エージェント1を例に挙げると、エージェント1は最初に、問題を一時的に脇に置いてじっくり考えるように求めるプロンプトを受け取るかもしれません。次のインタラクションでは、エージェント1は前回の考察に基づいて問題を解決するように求められます。この場合、2回目のインタラクションにおける最初のプロンプト(考察)は冗長であるだけでなく、エージェントの作業を妨げ、解決策の質の低下につながる可能性があります。したがって、最初のシステムプロンプトを非永続的に設定し、後続のインタラクションでエージェントに繰り返し送信されないようにすれば、処理効果は向上します。具体的には、次の例では、2回目のLLMクエリ要求がエージェントに送信される際に、2行目の情報を除外することを意味します。

ユーザー1:
「宇宙の意味とは何か?」#2 システム:
「あなたは哲学者です。答える前に、一歩下がって
ユーザーの質問が何を意味しているかを考えてみましょう。#3 Agent_philo:
「この問いについて考えると、宇宙は
様々な哲学的レンズを通して - 実存主義的見解
個人的な意味を創造するためのキャンバスとして宇宙論
物理法則を理解するための遊び場として捉えている。
人間の知覚と科学的探究の相互作用
クエリを理解する上で中心的な役割を果たします。#4 システム:
「あなたは哲学者であり、
ユーザーが投げかける質問。その洞察力に富んだ考察を活用して
包括的な回答を作成する。"#5 Agent_philo:
「実存主義の観点から見ると、宇宙の意味は
個人的な旅であり、各個人が自分自身の
選択と人生経験を通して意味を得られる。対照的に、
宇宙論的な観点から言えば、それは探求と理解に関するものである
宇宙を支配する広大で複雑な法則。これらの視点は
私たちの宇宙の多面的な性質を理解するのを助け、
科学的探究を伴う実存的探求。」 

これにより、古くなったシステムプロンプトはすべて対話シーケンスから削除され、各システムプロンプトは最適な位置に配置されます。これにより、クリーンで整然とした対話ログ(コンテキストログ)が作成され、双方にとってより正確で予測可能なインタラクション環境が提供されます。

06 戦略4: RAGシステム内の冗長情報を合理化する

RAGシステムの最適化を通じてエージェントの効率を向上させる方法については、複数の記事で詳しく説明できますが、ここではいくつかのポイントを簡単に説明します。RAGの運用には大量のトークンが消費される可能性があるため、この問題を管理するための技術を習得することが特に重要です。この技術分野にまだ精通していない場合は、十分な時間をかけて徹底的に調査することを強くお勧めします。

RAG入門チュートリアルでは、ユーザーがアップロードするドキュメントは簡潔で分かりやすく、明瞭であることが前提とされていることが多いです。しかし、現実のアプリケーションでは、ほとんどのドキュメントは複雑な構造と多様なコンテンツで構成されています。私の経験では、多くのドキュメントに大量の重複情報が含まれています。例えば、同じPDF記事の序論、本文、結論で同じ内容が繰り返し記載されている場合があります。医療記録にはほぼ同じ医療情報が頻繁に含まれている場合があります。また、システムログには同じログエントリが繰り返し含まれている場合もあります。特に実稼働環境では、膨大なファイル検索が必要となるため、標準的なRAGワークフローによって返されるコンテンツは、非常に冗長で重複が多いことがよくあります。

重複の処理:RAGシステムコンテキストを最適化するための最初のステップは、取得した文書フラグメント内の完全重複とほぼ重複を識別して削除し、情報の冗長性を防ぐことです。完全重複は容易に識別できますが、ほぼ重複は意味的類似性分析やベクトル埋め込みの多様性(大きな差異を持つ文書フラグメントは、ベクトル間の距離が大きい)などの様々な手法で検出できます。この操作の実行方法は、具体的な適用シナリオに大きく依存します。[1]では、パープレキシティによる分類の例をいくつか示しています。

応答の多様性:RAGシステムの出力の多様性を確保する主な方法は、複数の文書のコンテンツを巧みに統合することです。シンプルかつ効率的な戦略の一つは、検索クエリにおいて、単に意味的類似度が最も高いN個の文書を選択するのではなく、GROUP BY文を使用することです。繰り返しますが、この戦略を採用するかどうかは、具体的なニーズとシナリオに大きく依存します。[2]では、パープレキシティによる分類の例も示されています。

動的検索: この記事は動的コンテキストの構築に焦点を当てているため、この考え方を RAG プロセスにどのように統合できるでしょうか。従来の RAG プロセスでは通常、最も関連性の高い 10 件のドキュメント スニペットなど、上位 N 件の結果のみを抽出します。ただし、これは人々が情報を検索する方法とは一致しません。情報を検索する場合、人々は通常、検索エンジンを使用して、満足のいく答えが見つかるまで継続的に探索します。必要なコンテンツは検索結果の最初のページにある場合もあれば、2 ページ目以降にある場合もあります。もちろん、これは個人の忍耐力と運に依存します;-) 。このプロセスを模倣して、より柔軟な情報抽出を可能にする RAG システムを設計することもできます。また、AI エージェントがより選択的な検索を実行できるようにし、最初のいくつかの結果のみを提示し、さらに情報が必要かどうかをエージェントに判断させることもできます。

推奨されるアプローチは、類似度のカットオフを1つ設定するのではなく、高、中、低の3つのしきい値を設定することです。例えば、検索結果に非常に類似したドキュメントが11件、中程度に類似したドキュメントが5件、やや類似したドキュメントが20件含まれるとします。エージェントが一度に表示できるドキュメントを5件に制限すれば、エージェント自身でさらにデータが必要かどうかを判断できます。エージェントには、非常に類似した11件のドキュメントのうち5件は既に表示済みであり、探索可能なドキュメントは25件以上あることを伝えることができます。プロンプトエンジニアリングを巧みに設計することで、エージェントはデータ検索時により合理的な行動パターンを示すようになります。

07 戦略5: コンテキストを扱うための高度な戦略

以下では、いくつかの戦略を簡単に紹介し、動的コンテキストについてさらに詳しく説明します。

インスタントメタデータ:戦略1で説明したように、メッセージにメタデータタグを追加すると、特定のエージェントに必要な履歴データを事前に選択できます。ほとんどの場合、単純な単語1つのテキストラベルで十分です。情報が特定の機能、特定のエージェント、または特定のユーザーからのものであることが分かれば、メッセージに単純なラベルを追加できます。しかし、AIモデルの応答が非常に大きく、さらなる最適化が必要な場合は、会話型メッセージにメタデータタグを追加するためのより高度な方法、つまり人工知能(AI)を活用する必要があります。

以下に例をいくつか挙げます。

過去の会話メッセージ(コンテキスト情報)にタグを付ける簡単な方法の一つは、別途低コストのAIモデルを呼び出して、会話メッセージのメッセージ識別子を生成することです。しかし、この方法ではAIモデルを毎回2回呼び出す必要があり、プロセス全体が複雑になります。

RAGは2段階の処理アプローチを採用しています。RAGワークフローを最適化するために、より安価(かつ高速)なLLMを用いてRAGシステムの出力をLLMに渡す前に圧縮することが考えられます。このアプローチの鍵となるのは、非常にシンプルで非破壊的なプロンプトを用いて、元のRAGシステムの出力をより理解しやすい形式に圧縮または簡素化することです。

例えば、より安価なモデルを用いて、特定の情報を抽出したり、冗長性を削減したり、現在のタスクに関連する文書部分のみを選択したりすることができます。そのためには、これらの安価なモデルの長所と短所を理解する必要があります。より強力なモデルと組み合わせることで、このアプローチは大幅なコスト(と時間)を削減できます。

08 実装

さて、上記は、すべてのAIエージェントがパフォーマンスを最適化するために、多くのカスタマイズされたコードを必要とすることを意味するのでしょうか?これらの概念を抽出し、広く適用するにはどうすればよいでしょうか?

エージェントアーキテクチャ設計:これらの問題に対する明確な解決策はいくつか存在しますが、長期的な計画と設計が必要です。複数のエージェントの動作を効果的にサポートするプラットフォームを構築するには、エージェントフレームワークが必要です。明確な設計原則を最初から確立しておけば、動的なコンテキスト情報を容易に活用でき、エージェントの速度、コスト、効率性を向上させることができます。

動的コンテキスト構成は、エージェント システム アーキテクチャの重要な部分です。

動的コンテキスト設定:この記事で説明したように、各エージェントには固有のコンテキスト要件があります。これらの要件を理解し管理することは、本質的に、エージェントがあらゆるコンテキストで示す多様なバリエーション(この記事冒頭の図を参照)に対応することを意味します。幸いなことに、これらのバリエーションはいくつかの基本的な次元に簡略化できます。以下の例は、この記事で説明したすべての概念を包括的に示しています。

ソフトウェア開発に使用されるエージェントを想像してみてください。まずプログラム開発戦略を計画し、その計画に従って実行します。エージェントのコンテキスト構成は次のようになります。

  • 最初のユーザーの質問を保存します。
  • 行動計画を記録する(計画を保持する)
  • 過去の会話履歴をクリアし、最新のコード リビジョンと会話チェーンの最後のメッセージのみを保持します。
  • アップロードされたコード ファイルを処理するために RAG メカニズムが導入されていますが、RAG システムの圧縮プロセスは実行されません。
  • システム プロンプトが常にダイアログ チェーンの最後のメッセージとなるように設定します。

この設定はエージェントのコンテキスト設定に保存されます。したがって、AIエージェントの定義は、単なる固定プロンプトの連続にとどまりません。AIエージェントには、専用の動的なコンテキスト設定も備わっています。

これらの動的なコンテキスト構成は非常に有意義であり、さまざまな AI エージェントに対して豊富な多様性を示し、高度にパーソナライズされたコードを、高度に抽象化され統一された方法で、効果的に管理できることがわかります。

09 まとめとレビュー

動的コンテキストを適切に管理すると、AI エージェントのパフォーマンスが向上するだけでなく、精度✅、応答速度✈️が大幅に向上し、エネルギー消費も削減できます⚡️...

エージェントは、固定されたプロンプト指示を用いて自身を定義するだけでなく、独自の動的コンテキスト設定も備えるべきである。簡潔なコンテキストタイプ区分を活用し、各エージェントごとに異なる動的コンテキスト設定をカスタマイズすることで、エージェントの応用可能性は大きく拡大するだろう。

ダイナミックコンテキスト設定は、Agentsのシステムアーキテクチャにおいて氷山の一角に過ぎません。さらに深く掘り下げたい場合は、オリジナルの著者にお気軽にお問い合わせください(または、この公式アカウントのディスカッショングループに参加して、他の読者と意見交換することもできます)。また、コメント欄にご質問やご意見をお寄せください。この記事が役に立ったと思われましたら、ぜひご友人と共有するか、フォローしてください。皆様の温かいご支援と励みになります。

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

フランク・ヴィットカンプフ

スタートアップオタク&テックエグゼクティブ

https://medium.com/@frankw_usa

終わり

参考文献

[1]https://www.perplexity.ai/search?q=RAG結果内の重複を削除する方法のベストプラクティス

[2]https://www.perplexity.ai/search?q=ベクターデータベースから上位N件の類似結果を選択するクエリを表示し、ファイルごとにグループ化することで、1つまたは2つのファイルではなく複数のファイルからスニペットの多様性を確保します。

この記事は、原著者の許可を得てBaihai IDPによって翻訳されました。翻訳の転載をご希望の場合は、お問い合わせください。

オリジナルリンク:

https://towardsdatascience.com/next-level-agents-unlocking-the-power-of-dynamic-context-68b8647eef89