HUOXIU

練習は完璧をつくります: エージェント分野で「1年でレベルアップ」した経験を共有

編集者注:AIエージェントを構築する際、次のような問題に遭遇したことはありませんか?簡単なタスクでも常にミスを犯し、自分の技術力に疑問を抱くことがあります。顧客のニーズに直面した際に、AIエージェントが「愚か者」のように動作し、指示を正確に理解して実行できない。基盤モデルの更新に伴い、AIエージェントのパフォーマンスが向上するどころか低下し、途方に暮れてしまう。

これらの問題は、AIエージェントのパフォーマンスに影響を与えるだけでなく、プロジェクトの遅延、コスト超過、さらには顧客の信頼喪失につながる可能性があります。急速に進化する今日のAIテクノロジーの世界では、パフォーマンスの低いエージェントはすぐに市場から排除される可能性があります。

本日は、最前線のエージェント開発者からの貴重な洞察を提供する記事をご紹介します。著者は、過去1年間の経験に基づき、AIエージェントの推論能力の再評価、エージェント・コンピュータ・インターフェース(ACI)の最適化、基盤モデルの選択と適応、差別化されたインフラストラクチャの構築など、7つの教訓をまとめています。AIエージェントを現在構築中、または構築を計画している開発者や企業にとって、この記事は多くの実用的な提案と詳細な洞察を提供しており、貴重なリファレンスガイドとなるでしょう。

著者 | パトリック・ドハティ

編纂者:岳陽

01 「エージェント」とは何か?(定義)

この記事の主題を議論する前に、この記事で言及されている「エージェント」とは何かを明確に定義する必要があります。あるTwitterユーザー[1]の言葉を借りれば、

「エージェント」って一体何ですか?

簡潔な定義を与えるために最善を尽くしました。

この定義は、OpenAIがChatGPTで言及した「生成的事前学習モデル(GPT)」の概念、およびOpenAIのAPI [2]における「アシスタント」の概念にほぼ相当します。しかし、エージェントはこれらの機能に限定されるわけではありません。論理的推論を実行し、ツール呼び出しを実行できるモデルであれば、AnthropicのClaude** [3]、CohereのCommand R+ [4]など、多くのモデルがこのタスクを実行できます。

注記

ツール呼び出しは、get_weather_forecast_info(seattle) や wikipedia_lookup(dealey plaza) などの関数を呼び出すなど、モデルが実行する特定の操作を表現し、その操作の結果を取得する方法です。

エージェントの構築には、わずか数行のコードが必要です。このコードは、明確な目標を持ち、システムプロンプトに導かれる対話プロセス、モデルが実行したいツール呼び出しの処理、これらの操作をループ処理し、目標が達成されたら停止するといった処理が可能です。

このプロセスを説明するには、次の図が役立ちます。

「エージェント」を構築するための基本的な手順の概要

02 エージェントシステムプロンプトの例

AI エージェントに関して明確にする必要があるよくある誤解を次に示します。

  • スクリプト:私の理解では、エージェントは事前に記述された一連の指示やツール呼び出し手順を機械的に実行するわけではありません。AIエージェントは次にどのツールを使用するかを自律的に決定でき、それがその中核機能です。

  • 汎用人工知能(AGI) :AIエージェントはAGIとは異なります。AGIは特定の種類の作業を完了するためにエージェントに依存しません。AGI自体は、あらゆる入力、出力、ツールを統合した単一の存在だからです(個人的な意見ですが、現在の技術は真のAGIには程遠いです)。

  • ブラック ボックス: AI エージェントに特定のタスク手順が与えられた場合、AI エージェントは、依頼を受けた人間と同じようにタスクを実行する必要があります。

03 コンテキスト

AIエージェントプロジェクトの開発1年目には、エンジニアやUXデザイナーと連携し、製品全体のユーザーエクスペリエンスを何度も最適化する貴重な経験を積むことができました。私たちの目標は、お客様が当社の標準化されたデータ分析エージェントを活用し、それぞれの業務タスクやデータ構造に合わせたカスタムAIエージェントを開発できるプラットフォームを構築することです。SnowflakeやBigQueryなどのデータベースとの安全な統合を実現するために、セキュリティメカニズムを組み込みました。このプラットフォームは、データベースの内容を記述するメタデータ層でRAG(Retrieval Enhancement Generation)ツールを呼び出し、SQL、Python、データ可視化対応のデータ分析ツールを用いてデータを分析します。

どのアプローチが実現可能で、どの視点が不十分かを判断するために、このプラットフォームは独自の評価だけでなく、お客様からの率直なフィードバックも活用しています。当社のユーザーは主にフォーチュン500企業の従業員で、社内データの詳細な分析に当社のAIエージェントを日々利用しています。

04 エージェントについて学んだこと

4.1 知識の量よりも推論能力が重要です。

この一文がここ一年間私の心の中で反響し続けています。

[Generative Pre-trained Transformer (GPT)] は、推論エンジンとしてではなく、データベースとして使用するには処理能力が高すぎると思います。

— レックス・フリッドマンのポッドキャストにおけるサム・アルトマンの洞察[5]

AIエージェントは、この視点に対する論理的な回答です。AIエージェントを構築する際には、以下のロジックを採用します。

AI エージェントが「知っている」ことにあまり重点を置くのではなく、むしろ「考える」能力に焦点を当ててください。

SQLクエリの記述を例に挙げてみましょう。SQLクエリは頻繁に実行に失敗します…そしてこれはよくあることです。私がデータサイエンティストだった頃、SQLクエリの実行に失敗した回数は、成功した回数をはるかに上回っていました。

複雑なSQLクエリを、初めて慣れていない実際のデータに対して実行したときに、うまく実行できたとしても、私たちは「わあ、完璧!うまくいった!」と自信を持って考えるのではなく、「ああ、何か問題があるかもしれない!」と驚き、疑念を抱くべきです。モデルが単純な問題をクエリに変換できるかどうかを評価するテキストからSQLへのベンチマーク[6]でさえ、その最高精度はわずか80%です。

したがって、モデルのSQL文作成能力がせいぜいB-しか達成できないと認識したとしても、その推論能力をどのように向上させることができるでしょうか?重要なのは、エージェントが最初の試行で正しく答えることを期待するのではなく、エージェントが「考える」のに十分なコンテキストを提供することです。AIエージェントが作成したクエリが失敗した場合、すべてのSQLエラー情報と可能な限り多くのコンテキスト情報をフィードバックする必要があります。これにより、AIエージェントはほとんどの場合に問題を自ら修正し、SQL文を正しく実行できるようになります。また、エージェントに多数のツール呼び出しを提供することで、人間と同様に、新しいクエリを作成する前に、データベースの情報スキーマとデータ特性(分布や欠損値のデータ)を調査・分析できるようにします。

4.2 パフォーマンスを向上させる最善の方法は、エージェント コンピュータ インターフェイス (ACI) を継続的に最適化することです。

「ACI」(プリンストン大学の研究[7]に由来)という用語は比較的新しいものですが、この1年間、その改良は私たちの日々の業務の中心的焦点となってきました。ACIとは、AIエージェントが使用するツール呼び出しの特定の構文とアーキテクチャを指し、AIエージェントによって生成される入力と、APIによってレスポンスとして返される出力が含まれます。これらは、エージェントが必要なデータを取得し、進捗を促進し、作業目標と整合を図るための唯一の方法です。

基盤となるモデル(gpt-4o、Claude Opusなど)はそれぞれ独自の特性を持っているため、あるモデルに最適なACIが、別のモデルには必ずしも適さない場合があります。つまり、優れたACIを構築するには「科学と芸術」の融合が必要であり、単にソースコードを書くというよりも、究極のユーザーエクスペリエンスを創造するようなものです。ACIは常に進化しており、小さな変更がドミノ倒しのように連鎖反応を引き起こす可能性があるからです。ACIの重要性はいくら強調してもし過ぎることはありません。私たちはAIエージェントを何百回も繰り返し開発してきましたが、名前、数量、抽象化レベル、入力形式、出力レスポンスのわずかな調整でさえ、AIエージェントのパフォーマンスに大きな変動を引き起こす可能性があります。

ACIがいかに重要で困難であるかを鮮明に示す具体的な例を以下に示します。gpt-4-turboのリリース直後、AIエージェントに対して多数のテストを実施したところ、厄介な問題が発見されました。AIエージェントがレスポンス情報(ツール呼び出しレスポンスを通じてエージェントに通知または渡そうとしていたデータ)を処理する際に、特定のデータを完全に無視していたのです。OpenAIの公式ドキュメントから直接抽出したマークダウン形式の情報を使用していましたが、同じデータセットのgpt-4-32kで完璧に動作しました。AIエージェントが「無視」されているデータ列を認識できるように、マークダウン構造にいくつかの調整を試みましたが、どのように変更してもエージェントは応答しませんでした…そこで、戦略を完全に変更し、情報形式をマークダウンからJSON(OpenAIモデルのみ)に変換することにしました。奇跡的に、すべて正常に戻りました。皮肉なことに、応答に JSON を使用すると構文文字の数が多いためにトークンの消費量が多くなりますが、このステップは必要なだけでなく、エージェントがモデルの応答を正しく解釈できるようにするためには極めて重要であることがわかりました。

ACI の最適化プロセスは重要ではないと思われるかもしれませんが、実際にはエージェントのユーザー エクスペリエンスを向上させる効果的な方法の 1 つです。

4.3 AI エージェントの機能は、使用するモデルによって制限されます。

基盤となるモデルはエージェントの脳のようなものです。モデルの決定が不十分であれば、どれほど魅力的に見えても、ユーザーを満足させることはできません。私たちは、gpt-3.5-turboとgpt-4-32kをベースモデルとしてテストした際に、このことを直接体験しました。GPTバージョン3.5を使用した場合、いくつかのテストケースでは次のような結果が示されました。

  1. ユーザーは、「スターバックスの店舗と郵便番号別の住宅価格の相関関係を分析し、両者の間に関係があるかどうかを調べる」などの具体的なタスク目標を提案しました。

  2. しかし、エージェントは、データベース システムで実際に存在するデータ テーブルを検索することなく、「HOME_PRICES」などのデータベース テーブル名を作成し、「ZIP_CODE」や「PRICE」などのデータ列を想定しました。

  3. エージェントは郵便番号別に平均住宅価格を計算する SQL クエリを記述しようとしましたが、クエリは失敗し、テーブルが存在しないというエラーがシステムから報告されました。

  4. この時点で、エージェントは突然「ああ、そうだ!実際のデータ テーブルを検索できるはずだ...」と気付き、利用可能な実際のデータ テーブルを見つけるために「郵便番号別の住宅価格」の検索を開始します。

  5. 次に、エージェントは、正しいデータ列を使用して、実際に見つかったデータ テーブルに基づいてクエリ ステートメントを修正し、最終的にデータを正常に取得しました。

  6. しかし、エージェントがスターバックスの店舗位置情報データを処理したとき、同じ間違いをもう一度繰り返しました...

同じ指針に基づいてGPT-4上でエージェントを実行すると、劇的に異なる結果が得られます。誤ったアクションを即座に実行して時間を無駄にするのではなく、整然としたツール呼び出しの実行スケジュールを慎重に計画し、それに厳密に従って実行します。より複雑なタスクを実行する場合、2つのモデル間のパフォーマンスの差がさらに大きくなることは容易に想像できます。GPT 3.5は高速ですが、製品ユーザーは明らかにGPT-4の優れた意思決定能力と分析能力を高く評価しています。

注記

これらのテストを通して、私たちは重要な洞察を得ました。エージェントが幻覚を示したり、実行に失敗したりした場合、その状況を非常に注意深く観察し、その原因を特定する必要があるということです。AIエージェントはしばしば一種の怠惰性を示します(おそらく、人間の怠惰性が基盤モデルの学習データに深く学習されていることに起因しているのでしょう)。そのため、不要と判断したツールは容易に呼び出されません。同様に、ツールを呼び出す場合でも、引数の指示を理解していない場合は、多くの場合、手抜きをしたり、必要なパラメータを無視したりします。これらの失敗モードには、豊富な情報が含まれています。AIエージェントは、ACI(エージェント呼び出しインターフェース)がどのように設計されることを期待しているかを実際に伝えています。可能であれば、最も直接的な解決策は、その希望に従い、エージェントのニーズに合わせてACIを調整することです。もちろん、システムプロンプトやツール呼び出し指示を変更することでエージェントの性質に対抗する必要がある場合も少なくありませんが、ACIを調整するだけで解決できる問題については、直接的な変更によって作業を大幅に簡素化できます。

4.4 モデルを微調整してエージェントのパフォーマンスを改善しようとするのは無駄です。

モデルの微調整[8]は、特定のアプリケーションドメインでの例を提供することにより、モデルのパフォーマンスを最適化する方法です。現在の微調整方法は、特定のタスクを特定の方法で実行するようにモデルに教えることには優れていますが、モデルの推論能力を向上させるのには効果的ではありません。私の経験では、微調整されたモデルを使用してAIエージェントを駆動すると、実際には推論能力が低下する可能性があります。これは、AIエージェントが「チート」する傾向があるためです。つまり、微調整プロセス中に遭遇した例が常に最適な処理戦略とツール呼び出しシーケンスを表していると誤って信じ、問題について独自に推論するわけではないためです。

注記

微調整は、スイスアーミーポケットナイフの貴重なツールであり続けます。例えば、AIエージェントによる特定のツール呼び出しを処理するために特別に設計された、微調整されたモデルを使用するという効果的なアプローチがあります。特定のデータセットに対するSQLクエリの作成用に特別に微調整されたモデルがあると想像してみてください。AIエージェント(強力な未調整の推論モデル上で動作)は、実行したいSQLクエリをツール呼び出しで表現でき、この要求をSQLクエリ用に特別に微調整されたモデルに委任することで、独立した処理が可能になります。

4.5 製品開発プロセスでは、LangChain や LlamaIndex などの抽象化ツールの使用を慎重に検討する必要があります。

モデルへのすべての呼び出し、特に入出力の詳細を完全に制御できる必要があります。このコアとなる制御をサードパーティのライブラリに委ねてしまうと、新規ユーザーのオンボーディングプロセス、問題のデバッグ、ユーザー数の増加、AIエージェントのアクションのログ記録、ソフトウェアの新バージョンへのアップグレード、AIエージェントの行動の背後にある動機の理解など、AIエージェントと連携する必要がある際に、私たちは深く後悔し、不便を感じることになるでしょう。

注記

純粋な製品のプロトタイプ段階にあり、AIエージェントがタスクを完了できるかどうかを確認することが唯一の目的である場合は、お気に入りの抽象化ツールを選択して、すぐに実践を開始することもできます。[9]

4.6 AIエージェントは堀ではない

AIエージェントを活用して人間の知識ベースのタスクを自動化または拡張することは大きな可能性を秘めていますが、優れたAIエージェントを構築するだけでは十分ではありません。AIエージェントを市場に投入し、ユーザーにサービスを提供するには、真に効率的な運用を確保するために、AI以外の様々なインフラに多大な投資を行う必要があります。そして、まさにこの点こそが、差別化された競争優位性を生み出すことができるのです

  • セキュリティ:AIエージェントは、ユーザーに付与された権限の範囲内で厳密に動作し、ユーザーによる完全な制御下にある必要があります。実際には、OAuth統合、シングルサインオンプロバイダー、キャッシュされたリフレッシュトークンなど、一連のセキュリティ上のハードルを克服することを意味します。これらのセキュリティ面を適切に管理することで、間違いなく製品の品質向上につながります。

  • データコネクタ:AIエージェントが適切に機能するには、通常、ソースシステムからのリアルタイムデータが必要です。そのため、社内システムや外部のサードパーティプラットフォームなど、様々なAPIやその他の接続プロトコルとの統合が必要になります。これらの統合には、初期設定と導入だけでなく、長期的なメンテナンスと最適化も必要です。

  • ユーザーインターフェースユーザーがAIエージェントのワークフローを最初から最後まで追跡・監査できなければ、AIエージェントへの信頼を築くことは困難です。このニーズは、AIエージェントとの最初の数回のインタラクションでは特に強いものですが、時間の経過とともに減少します。理想的には、 AIエージェントからの各ツール呼び出しには、ユーザーがエージェントの意思決定プロセスや運用プロセスを観察し、さらには直接対話できる専用のインターフェースが付属している必要があります。これにより、AIエージェントの推論ロジック(例えば、セマンティック検索結果の各要素の詳細な内容を確認するなど)への信頼が向上します。

  • 長期記憶:AIエージェントは、デフォルトでは現在のワークフローの記憶に限定されており、トークンの最大数によって制約されています。ワークフロー全体、さらにはユーザースコープ全体にわたって長期記憶を実現するには、情報をメモリバンクに保存し、ツール呼び出しやプロンプトへの組み込みによって取得する必要があります。AIエージェントは、どの情報がメモリバンクに保存する価値があるかを判断するのが得意ではないため、多くの場合、人間の介入が必要になります。具体的なアプリケーションシナリオによっては、ChatGPTと同様に、AIエージェントが情報をメモリバンクに保存するタイミングを自律的に決定できるようにする必要があるかもしれません。

  • AIエージェント評価:AIエージェントを評価するためのフレームワークの構築は、困難で終わりのない作業のように思えるほどです。AIエージェントは意図的に非決定性を持つように設計されており、人間の指示に基づいてタスクを完了するための最適なツール呼び出しシーケンスを探します。これは、幼児が歩き方を学ぶ際に、一歩一歩考えていくプロセスに似ています。これらのタスクシーケンスの評価は、主に2つの側面に焦点を当てています。AIエージェントがタスクを完了する際の全体的な成功率と、各ツール呼び出しの精度(例:検索中の情報取得、コード実行の精度など)です。私は、ワークフロー全体のパフォーマンスを定量化する最も効果的かつ唯一の方法は、一連の目標/完了のペアを作成することだと考えました(ここで「目標」とは、ユーザーまたはシステムによって設定された目標またはタスクを指し、「完了」とは、その目標を達成するためのエージェントの具体的なアクションまたは出力を指します。例えば、「目標」は「最寄りのレストランを見つける」であり、「完了」はAIエージェントによって返される最寄りのレストランの名前と住所などです)。目標はエージェントに与えられた最初の指示であり、完了はその目標によって達成される最終的なツール呼び出しシーケンスを表します。AIエージェントのツール呼び出しにおける中間プロセスと思考プロセスを捉えることは、ツール呼び出しが失敗する理由やツール呼び出しシーケンスがどのように変化するかを理解するのに役立ちます。

注記

このリストはスタートアップ企業への正式な要請書[10]と考えてください。リストに記載されている製品要件に基づいて開発された製品は、うまくいけば新たな業界標準や主要コンポーネントとなり、AIエージェントが「物事を次のレベルに引き上げる」のに役立つことが期待されます。

4.7 大規模モデルの進歩が止まると想定しないでください。

エージェントを構築する際には、基盤となるプライマリモデルへの過剰なバインディング関数を開発したいという誘惑に常に駆られ、その結果、エージェントの推論能力に対する期待を意図せず低下させてしまうことがあります。この誘惑には注意し、克服することが大切です。プライマリモデルの開発の勢いは止められません。現在の「高速軌道」に永遠にとどまることはないかもしれませんが、その開発速度は歴史上どの技術革命よりもはるかに速いでしょう。顧客は当然のことながら、お気に入りのプライマリモデルで実行できるAIエージェントを選ぶ傾向があります。ユーザーが最も期待しているのは、AIエージェントで最先端かつ強力なモデルをシームレスに体験できることです。例えば、GPT-4oがリリースされた後、私はOpenAI API[11]を使用してわずか15分で製品にGPT-4oを適応させました。異なるモデルプロバイダーに柔軟に適応できることは、間違いなく大きな競争優位性となります。

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

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


パトリック・ドハティ

Rasgoの共同創設者兼CTO。AIエージェント、最新のデータスタック、そしてたまにはオヤジジョークなどについて書いています。

終わり

記事内のリンク

[1]https://x.com/savvyRL/status/1795882798454288715

[2]https://platform.openai.com/docs/assistants/overview

[3]https://docs.anthropic.com/en/docs/tool-use-examples

[4]https://docs.cohere.com/docs/command-r-plus

[5]https://lexfridman.com/podcast/

[6]https://yale-lily.github.io/spider

[7]https://arxiv.org/abs/2405.15793

[8]https://platform.openai.com/docs/guides/fine-tuning/fine-tuningを使用するタイミング

[9]https://www.youtube.com/watch?v=O_HyZ5aW76c

[10]https://www.ycombinator.com/rfs

[11]https://www.loom.com/share/f781e299110e40238d575fa1a5815f12?sid=73bb6158-216d-4de6-b570-881e6a99ebd2

オリジナルリンク:

https://medium.com/@cpdough/building-ai-agents-lessons-learned-over-the-past-year-41dc4725d8e5